From 0801abe596c0c01f19f0645b77cb32d653f372c3 Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Date: Sat, 19 Apr 2025 19:39:01 +0530 Subject: [PATCH] sitebuilder --- .../Service/SurevaultService.java | 6 +- .../Dashboard1/Entity/Dashbord1_Line.java | 8 - .../Controller/HtmlGeneratorController.java | 57 + .../OpenAi/Controller/SureOpsController.java | 101 + .../realnet/OpenAi/Models/HtmlRequest.java | 11 + .../Renders/FeatureSectionRenderer.java | 28 + .../OpenAi/Renders/FooterRenderer.java | 42 + .../OpenAi/Renders/HeaderRenderer.java | 14 + .../realnet/OpenAi/Renders/HtmlRenderer.java | 23 + .../OpenAi/Renders/NavbarRenderer.java | 47 + .../OpenAi/Renders/SectionRenderFactory.java | 26 + .../OpenAi/Renders/TestimonialRenderer.java | 32 + .../realnet/OpenAi/Services/HtmlBuilder.java | 123 ++ .../realnet/OpenAi/Services/HtmlBuilder2.java | 345 +++ .../realnet/OpenAi/Services/HtmlBuilder3.java | 1928 +++++++++++++++++ .../OpenAi/Services/HtmlGenerTorService.java | 126 ++ .../realnet/OpenAi/Services/ScriptSrvice.java | 560 +++++ .../OpenAi/Services/Script_Making.java | 170 ++ .../java/com/realnet/config/EmailService.java | 4 +- .../session/controller/SessionController.java | 8 +- .../users/controller/UserController.java | 4 +- .../users/controller1/AppUserController.java | 6 +- .../users/service1/AppUserServiceImpl.java | 3 +- .../java/com/realnet/utils/PortConstant.java | 100 + .../java/com/realnet/utils/Port_Constant.java | 15 - .../Controllers/SiteBuilderController.java | 91 + .../realnet/vpspack/Entity/SiteBuilder.java | 35 + .../Repository/SiteBuilderRepository.java | 21 + .../vpspack/Services/SiteBuilderService.java | 86 + .../src/main/resources/application.properties | 5 +- 30 files changed, 3986 insertions(+), 39 deletions(-) create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/HtmlGeneratorController.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/SureOpsController.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Models/HtmlRequest.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/FeatureSectionRenderer.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/FooterRenderer.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/HeaderRenderer.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/HtmlRenderer.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/NavbarRenderer.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/SectionRenderFactory.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/TestimonialRenderer.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder2.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder3.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlGenerTorService.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/ScriptSrvice.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/Script_Making.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/utils/PortConstant.java delete mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/utils/Port_Constant.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Controllers/SiteBuilderController.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Entity/SiteBuilder.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Repository/SiteBuilderRepository.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Services/SiteBuilderService.java diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/CredentialDatabase/Service/SurevaultService.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/CredentialDatabase/Service/SurevaultService.java index dcbc550..1a58b82 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/CredentialDatabase/Service/SurevaultService.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/CredentialDatabase/Service/SurevaultService.java @@ -14,7 +14,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.realnet.utils.Port_Constant; +import com.realnet.utils.PortConstant; @Service public class SurevaultService { @@ -71,8 +71,8 @@ public class SurevaultService { public String callconnector(String name) throws JsonProcessingException { RestTemplate restTemplate = new RestTemplate(); - String url = Port_Constant.SURE_VAULT_DOMAIN + "/token/Sure_Connectbyname/" + name; - System.out.println(Port_Constant.SURE_VAULT_DOMAIN); + String url = PortConstant.SURE_VAULT_DOMAIN + "/token/Sure_Connectbyname/" + name; + System.out.println(PortConstant.SURE_VAULT_DOMAIN); ResponseEntity u = restTemplate.getForEntity(url, Object.class); Object object = u.getBody(); diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/Dashboard1/Entity/Dashbord1_Line.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/Dashboard1/Entity/Dashbord1_Line.java index bf2c9be..eb736c0 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/Dashboard1/Entity/Dashbord1_Line.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/Dashboard1/Entity/Dashbord1_Line.java @@ -1,22 +1,14 @@ package com.realnet.Dashboard1.Entity; -import java.util.ArrayList; -import java.util.List; - import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; -import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; import javax.persistence.Table; import com.fasterxml.jackson.annotation.JsonBackReference; -import com.fasterxml.jackson.annotation.JsonManagedReference; import lombok.Data; import lombok.ToString; diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/HtmlGeneratorController.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/HtmlGeneratorController.java new file mode 100644 index 0000000..42487d9 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/HtmlGeneratorController.java @@ -0,0 +1,57 @@ +package com.realnet.OpenAi.Controller; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.realnet.OpenAi.Services.HtmlBuilder3; +import com.realnet.OpenAi.Services.HtmlGenerTorService; +import com.realnet.fnd.response.EntityResponse; + +@RestController +@RequestMapping("/api/html") +public class HtmlGeneratorController { + + @Autowired + private HtmlGenerTorService htmlGenerTorService; + + @PostMapping + public String generateHtmlFromJson(@RequestBody String jsonBody) { + String json = htmlGenerTorService.generateHtmlFromJson(jsonBody); + return json; + } +// +// @PostMapping("/generate") +// public ResponseEntity> generateHtml(@RequestBody HtmlRequest request) { +// String sectionType = request.getSectionType(); +// Map structure = request.getJsonStructure(); +// +// String html = HtmlRenderer.render(sectionType, structure); +// +// Map result = new HashMap<>(); +// result.put("html", html); +// return ResponseEntity.ok(result); +// } + + @PostMapping("/generate") + public ResponseEntity generateHtml(@RequestBody Map request) { + try { + Object jsonStructure = request.get("jsonStructure"); + + if (jsonStructure == null) { + return ResponseEntity.badRequest().body("Missing 'jsonStructure' in request."); + } + + String html = HtmlBuilder3.buildHtml(jsonStructure); + return ResponseEntity.ok(new EntityResponse(html)); + } catch (Exception e) { + e.printStackTrace(); + return ResponseEntity.status(500).body("⚠️ Failed to generate HTML due to server error."); + } + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/SureOpsController.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/SureOpsController.java new file mode 100644 index 0000000..216c775 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/SureOpsController.java @@ -0,0 +1,101 @@ +package com.realnet.OpenAi.Controller; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.realnet.OpenAi.Services.Script_Making; +import com.realnet.fnd.response.EntityResponse; + +@RestController +@RequestMapping("/sureops") +public class SureOpsController { + + @Autowired + private Script_Making script_serviceMaking; + + @Value("${projectPath}") + private String projectPath; + + public ResponseEntity PullScript(@PathVariable Integer projId, @PathVariable String workflow_id) + throws IOException, InterruptedException { + +// String workflow_id = "56"; // pull script + int status_code = 500; + + String responsebody = null; + + long Deployment_profile = 2l; + // NOW MAKE SHELLSCRIPT THAT CLONE FROM REPOSITORY + ResponseEntity get = script_serviceMaking.CreateFiles(projId, workflow_id, Deployment_profile); + + status_code = get.getStatusCodeValue(); + + if (status_code <= 209) { + + if (get.getBody() != null) { + + responsebody = get.getBody().toString().replace("{", "").replace("}", ""); + + } + + return new ResponseEntity<>(new EntityResponse(responsebody), HttpStatus.OK); + + } else { + + if (get.getBody() != null) { + + responsebody = get.getBody().toString().replace("{", "").replace("}", ""); + + } + + return new ResponseEntity<>(new EntityResponse(responsebody), HttpStatus.BAD_REQUEST); + } + + } + + @PostMapping("/createFile") + public void createHtmlFiles(@RequestParam Integer projId, @RequestBody Map pageHtmlMap) + throws IOException { + + for (Map.Entry entry : pageHtmlMap.entrySet()) { + String pageName = entry.getKey().trim().replaceAll("\\s+", "_"); // remove spaces from name + String htmlContent = entry.getValue(); + + String folderPath = projectPath + "/cns-portal/code-extractor/builders/" + projId; + File file = new File(folderPath + "/" + pageName + ".html"); + + // Ensure directory exists + File parentDir = file.getParentFile(); + if (!parentDir.exists()) { + parentDir.mkdirs(); + } + + // Create new file + if (!file.exists()) { + file.createNewFile(); + } + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) { + writer.write(htmlContent); + } + + System.out.println("✅ File created: " + file.getAbsolutePath()); + } + } + + +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Models/HtmlRequest.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Models/HtmlRequest.java new file mode 100644 index 0000000..8660d5f --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Models/HtmlRequest.java @@ -0,0 +1,11 @@ +package com.realnet.OpenAi.Models; + +import java.util.Map; + +import lombok.Data; + +@Data +public class HtmlRequest { + private String sectionType; + private Map jsonStructure; +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/FeatureSectionRenderer.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/FeatureSectionRenderer.java new file mode 100644 index 0000000..d6443b6 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/FeatureSectionRenderer.java @@ -0,0 +1,28 @@ +package com.realnet.OpenAi.Renders; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +public class FeatureSectionRenderer { + + @SuppressWarnings("unchecked") + public static String render(Map json) { + StringBuilder sb = new StringBuilder(); + sb.append("
"); + + sb.append("Feature Image"); + + sb.append("
    "); + + Object rawList = json.get("features"); + if (rawList instanceof List) { + List features = (List) rawList; + for (Object f : features) { + sb.append("
  • ").append(f.toString()).append("
  • "); + } + } + + sb.append(""); + return sb.toString(); + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/FooterRenderer.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/FooterRenderer.java new file mode 100644 index 0000000..ba207b3 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/FooterRenderer.java @@ -0,0 +1,42 @@ +package com.realnet.OpenAi.Renders; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class FooterRenderer { + + @SuppressWarnings("unchecked") + public static String render(Map json) { + List links = (List) json.get("footerLinks"); + List legalLinks = (List) json.get("legalLinks"); + + StringBuilder sb = new StringBuilder(); + sb.append("
    "); + + sb.append(""); + + sb.append(""); + sb.append("
    "); + + return sb.toString(); + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/HeaderRenderer.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/HeaderRenderer.java new file mode 100644 index 0000000..6453a17 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/HeaderRenderer.java @@ -0,0 +1,14 @@ +package com.realnet.OpenAi.Renders; + +import java.util.Map; + +public class HeaderRenderer { + public static String render(Map json) { + String heading = String.valueOf(json.getOrDefault("title", "")); + String subheading = String.valueOf(json.getOrDefault("subtitle", "")); + + return "
    " + "

    " + heading + "

    " + "

    " + subheading + "

    " + + "
    " + "" + "" + "
    " + + "
    "; + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/HtmlRenderer.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/HtmlRenderer.java new file mode 100644 index 0000000..1cde6f4 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/HtmlRenderer.java @@ -0,0 +1,23 @@ +package com.realnet.OpenAi.Renders; + +import java.util.Map; + +public class HtmlRenderer { + + private static final String COMMON_CSS = "\n"; + + public static String render(String sectionType, Map json) { + // 🔁 Delegate to SectionRenderFactory + String sectionHtml = SectionRenderFactory.renderSection(sectionType, json); + + // ✅ Inject centralized CSS +// return COMMON_CSS + sectionHtml; + return sectionHtml; + + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/NavbarRenderer.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/NavbarRenderer.java new file mode 100644 index 0000000..7b1b919 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/NavbarRenderer.java @@ -0,0 +1,47 @@ +package com.realnet.OpenAi.Renders; + +import java.util.List; +import java.util.Map; + +public class NavbarRenderer { + + @SuppressWarnings("unchecked") + public static String render(Map json) { + StringBuilder sb = new StringBuilder(); + sb.append(""); + return sb.toString(); + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/SectionRenderFactory.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/SectionRenderFactory.java new file mode 100644 index 0000000..8a499c0 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/SectionRenderFactory.java @@ -0,0 +1,26 @@ +package com.realnet.OpenAi.Renders; + +import java.util.Map; + +public class SectionRenderFactory { + + public static String renderSection(String type, Map json) { + if (type == null || json == null) + return "
    "; + + switch (type.toLowerCase()) { + case "navbar": + return NavbarRenderer.render(json); + case "header": + return HeaderRenderer.render(json); + case "featuresection": + return FeatureSectionRenderer.render(json); + case "testimonial": + return TestimonialRenderer.render(json); + case "footer": + return FooterRenderer.render(json); + default: + return "
    "; + } + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/TestimonialRenderer.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/TestimonialRenderer.java new file mode 100644 index 0000000..d710427 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Renders/TestimonialRenderer.java @@ -0,0 +1,32 @@ +package com.realnet.OpenAi.Renders; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +public class TestimonialRenderer { + + @SuppressWarnings("unchecked") + public static String render(Map json) { + List> testimonials = (List>) json.get("cards"); + + StringBuilder sb = new StringBuilder(); + sb.append("
    "); + sb.append("

    Customer Testimonials

    "); + sb.append("

    What our clients are saying...

    "); + sb.append("
    "); + + if (testimonials != null) { + for (Map t : testimonials) { + sb.append("
    ") + .append("
    ") + .append("
    ").append(t.getOrDefault("quote", "")).append("
    ") + .append("

    ").append(t.getOrDefault("name", "")).append("
    ") + .append(t.getOrDefault("role", "")).append("

    ") + .append("
    "); + } + } + + sb.append("
    "); + return sb.toString(); + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder.java new file mode 100644 index 0000000..7b8cbb4 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder.java @@ -0,0 +1,123 @@ +package com.realnet.OpenAi.Services; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class HtmlBuilder { + +// public static String buildHtml(Object node) { +// if (node instanceof Map) { +// return renderFromMap((Map) node); +// } else if (node instanceof List) { +// return renderFromList((List) node); +// } else { +// return String.valueOf(node); +// } +// } +// +// private static String renderFromMap(Map node) { +// StringBuilder html = new StringBuilder(); +// +// String tag = (String) node.getOrDefault("tag", "div"); +// String content = (String) node.getOrDefault("content", ""); +// String className = (String) node.getOrDefault("class", ""); +// String id = (String) node.getOrDefault("id", ""); +// Object children = node.get("children"); +// +// html.append("<").append(tag); +// if (!className.isEmpty()) +// html.append(" class=\"").append(className).append("\""); +// if (!id.isEmpty()) +// html.append(" id=\"").append(id).append("\""); +// html.append(">"); +// +// if (!content.isEmpty()) +// html.append(content); +// +// if (children != null) { +// html.append(buildHtml(children)); +// } +// +// html.append(""); +// return html.toString(); +// } +// +// private static String renderFromList(List list) { +// return list.stream().map(HtmlBuilder::buildHtml).collect(Collectors.joining()); +// } +// + + +// part 2 + + + + + public static String buildHtml(Object node) { + if (node instanceof Map) { + return renderFromMap((Map) node); + } else if (node instanceof List) { + return renderFromList((List) node); + } else if (node != null) { + return String.valueOf(node); + } else { + return ""; + } + } + + private static String renderFromMap(Map node) { + StringBuilder html = new StringBuilder(); + +// String tag = getString(node, "tag", "div"); + String tag = getString(node, "tag", getString(node, "type", "div")); + + String className = getString(node, "class", ""); + String id = getString(node, "id", ""); + String content = getString(node, "content", ""); + + // Start opening tag + html.append("<").append(tag); + + // Attributes + if (!className.isEmpty()) html.append(" class=\"").append(className).append("\""); + if (!id.isEmpty()) html.append(" id=\"").append(id).append("\""); + + // Add any custom attributes + for (Map.Entry entry : node.entrySet()) { + String key = entry.getKey(); + if (!key.equals("tag") && !key.equals("class") && !key.equals("id") && + !key.equals("content") && !key.equals("children")) { + html.append(" ").append(key).append("=\"").append(entry.getValue()).append("\""); + } + } + + html.append(">"); + + // Add content + if (!content.isEmpty()) { + html.append(content); + } + + // Children (recursive) + if (node.containsKey("children")) { + Object children = node.get("children"); + html.append(buildHtml(children)); + } + + // Closing tag + html.append(""); + + return html.toString(); + } + + private static String renderFromList(List list) { + return list.stream().map(HtmlBuilder::buildHtml).collect(Collectors.joining()); + } + + private static String getString(Map map, String key, String defaultValue) { + Object val = map.get(key); + return (val instanceof String) ? (String) val : defaultValue; + } + } + diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder2.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder2.java new file mode 100644 index 0000000..96cc4b8 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder2.java @@ -0,0 +1,345 @@ +package com.realnet.OpenAi.Services; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +public class HtmlBuilder2 { + + // Plugin registry for special sections + private static final Map> SPECIAL_RENDERERS = new HashMap<>(); + + static { + // Menu renderer + SPECIAL_RENDERERS.put("menu", new Function() { + public String apply(Object obj) { + return renderMenu(obj); + } + }); + + // Actions renderer + SPECIAL_RENDERERS.put("actions", new Function() { + public String apply(Object obj) { + return renderActions(obj); + } + }); + + // Logo renderer + SPECIAL_RENDERERS.put("logo", new Function() { + public String apply(Object obj) { + return "
    " + obj + "
    "; + } + }); + + SPECIAL_RENDERERS.put("Header Section", new Function() { + public String apply(Object obj) { + return renderHeaderSection(obj); + } + }); + + SPECIAL_RENDERERS.put("Blog Template", new Function() { + public String apply(Object obj) { + return renderBlogTemplate((Map) obj); + } + }); + + // More renderers can be added here dynamically + } + + public static String buildHtml(Object node) { + if (node instanceof Map) { + return renderFromMap((Map) node); + } else if (node instanceof List) { + return renderFromList((List) node); + } else if (node != null) { + return String.valueOf(node); + } else { + return ""; + } + } + + private static String renderFromMap(Map node) { + StringBuilder html = new StringBuilder(); + + String type = getString(node, "type", "div"); + String tag = resolveTag(getString(node, "tag", ""), type); + + if (tag.isEmpty()) { + tag = TYPE_TAG_MAP.getOrDefault(type.toLowerCase(), type); + } + + html.append("<").append(tag); + + String className = getString(node, "class", ""); + String id = getString(node, "id", ""); + + if (!className.isEmpty()) + html.append(" class=\"").append(className).append("\""); + if (!id.isEmpty()) + html.append(" id=\"").append(id).append("\""); + + // Flat string attributes + for (Map.Entry entry : node.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + if (!Arrays.asList("tag", "type", "class", "id", "content", "children").contains(key) + && !(value instanceof Map || value instanceof List)) { + html.append(" ").append(key).append("=\"").append(value).append("\""); + } + } + + html.append(">"); + + // Standard content + if (node.containsKey("content")) { + html.append(node.get("content")); + } + + // Plugin-based section renderers + for (Map.Entry> plugin : SPECIAL_RENDERERS.entrySet()) { + if (node.containsKey(plugin.getKey())) { + html.append(plugin.getValue().apply(node.get(plugin.getKey()))); + } + } + + // Children + if (node.containsKey("children")) { + html.append(buildHtml(node.get("children"))); + } + + html.append(""); + return html.toString(); + } + + private static String renderFromList(List list) { + StringBuilder html = new StringBuilder(); + for (Object obj : list) { + html.append(buildHtml(obj)); + } + return html.toString(); + } + + private static final Map TYPE_TAG_MAP = new HashMap<>(); + static { + TYPE_TAG_MAP.put("navbar", "nav"); + TYPE_TAG_MAP.put("footer", "footer"); + TYPE_TAG_MAP.put("article", "article"); + // add more if needed + } + + private static String getString(Map map, String key, String defaultValue) { + Object val = map.get(key); + return (val instanceof String) ? (String) val : defaultValue; + } + + private static String resolveTag(String tag, String type) { + if (tag != null && !tag.isEmpty()) + return tag; + if ("navbar".equalsIgnoreCase(type)) + return "nav"; + return type != null ? type : "div"; + } + + // -------- Renderers for plugins -------- + + private static String renderMenu(Object obj) { + StringBuilder html = new StringBuilder("
      "); + + List menu = (List) obj; + for (Object item : menu) { + if (item instanceof String) { + html.append("
    • ").append(item).append("
    • "); + } else if (item instanceof Map) { + Map dropdownItem = (Map) item; + html.append("
    • "); + html.append("").append(dropdownItem.get("title")).append(""); + + if (dropdownItem.containsKey("dropdown")) { + html.append(renderDropdown(dropdownItem.get("dropdown"))); + } + + html.append("
    • "); + } + } + + html.append(""); + return html.toString(); + } + + private static String renderDropdown(Object obj) { + StringBuilder html = new StringBuilder("
      "); + + Map dropdown = (Map) obj; + List> columns = (List>) dropdown.get("columns"); + + for (Map column : columns) { + html.append("
      "); + html.append("

      ").append(column.get("title")).append("

      "); + html.append("
        "); + + if (column.containsKey("items")) { + List> items = (List>) column.get("items"); + for (Map item : items) { + html.append("
      • "); + html.append("").append(item.get("icon")).append(""); + html.append("
        ").append("").append(item.get("title")).append("") + .append("

        ").append(item.get("description")).append("

        ").append("
        "); + html.append("
      • "); + } + } else if (column.containsKey("blogs")) { + List> blogs = (List>) column.get("blogs"); + for (Map blog : blogs) { + html.append("
      • ").append(blog.get("title")).append(""); + html.append("

        ").append(blog.get("description")).append("

        "); + html.append("").append(blog.get("cta")).append("
      • "); + } + if (column.containsKey("footerLink")) { + html.append(""); + } + } + + html.append("
      "); + } + + html.append("
      "); + return html.toString(); + } + + private static String renderActions(Object obj) { + StringBuilder html = new StringBuilder("
      "); + + List> actions = (List>) obj; + for (Map action : actions) { + String label = getString(action, "label", "Button"); + String variant = getString(action, "variant", ""); + String btnClass = "join-btn"; + if (!variant.isEmpty()) + btnClass += " " + variant; + + html.append(""); + } + + html.append("
      "); + return html.toString(); + } + + private static String renderHeaderSection(Object obj) { + Map data = (Map) obj; + + StringBuilder html = new StringBuilder(); + String sectionClass = getString(data, "class", ""); + html.append(""); + + String heading = getString(data, "heading", ""); + if (!heading.isEmpty()) { + html.append("

      ").append(heading).append("

      "); + } + + String subheading = getString(data, "subheading", ""); + if (!subheading.isEmpty()) { + html.append("

      ").append(subheading).append("

      "); + } + + if (data.containsKey("buttons")) { + Map buttons = (Map) data.get("buttons"); + String btnClass = getString(buttons, "class", ""); + List items = (List) buttons.get("items"); + + html.append(""); + for (String label : items) { + html.append(""); + } + html.append(""); + } + + html.append(""); + return html.toString(); + } + + private static String renderBlogTemplate(Map node) { + StringBuilder html = new StringBuilder(); + html.append("
      "); + + // Header + if (node.containsKey("header")) { + Map header = (Map) node.get("header"); + html.append("
      ") + .append("

      ") + .append(getString(header, "icon", "💡")) + .append(" ") + .append(getString(header, "title", "Blog Title")) + .append("

      "); + } + + // Navigation + if (node.containsKey("navigation")) { + List navItems = (List) node.get("navigation"); + html.append(""); + } + + // Layout Columns + if (node.containsKey("layout")) { + Map layout = (Map) node.get("layout"); + List> columns = (List>) layout.get("columns"); + + html.append("
      "); + + for (Map col : columns) { + String type = getString(col, "type", ""); + + if ("main".equalsIgnoreCase(type)) { + html.append("
      "); + List> blocks = (List>) col.get("contentBlocks"); + for (Map block : blocks) { + html.append("
      ") + .append("

      ").append(getString(block, "heading", "")).append("

      ") + .append("

      ").append(getString(block, "text", "")).append("

      ") + .append("
      "); + } + html.append("
      "); + } + + if ("sidebar".equalsIgnoreCase(type)) { + html.append(""); + } + } + + html.append("
      "); + } + + html.append("
      "); + return html.toString(); + } + private static String getWidgetIcon(String widget) { + widget = widget.toLowerCase(); + if (widget.contains("search")) return "🔍"; + if (widget.contains("recent")) return "📝"; + if (widget.contains("newsletter")) return "📬"; + return "📦"; + } + + + + // ------------- END -------------------- +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder3.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder3.java new file mode 100644 index 0000000..971049d --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder3.java @@ -0,0 +1,1928 @@ +package com.realnet.OpenAi.Services; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +public class HtmlBuilder3 { + + public static String buildHtml(Object node) { + if (node instanceof Map) { + Map map = (Map) node; + + // Handle raw section container + if (!map.containsKey("type") && !map.containsKey("tag")) { + StringBuilder html = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + String sectionName = entry.getKey(); + Object sectionContent = entry.getValue(); + + + if ("Blog".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderBlogCardSection((Map) sectionContent)); + continue; + } + + + if ("blogPage".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderBlogPage((Map) sectionContent)); + continue; + } + + if ("blogPreviewSection".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderBlogPreviewSection((Map) sectionContent)); + continue; + } + if ("blogHomePage".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderBlogHomePage((Map) sectionContent)); + continue; + } + + if ("blogListSection".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderBlogListSection((Map) sectionContent)); + continue; + } + + if ("ContactSection".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderContactSection((Map) sectionContent)); + continue; + } + + if ("Navbar".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderNavbarBlock((Map) sectionContent)); + continue; + } + if ("Footer".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + Map footerMap = (Map) sectionContent; + + // Smart switch based on keys like 'columns', 'topBar', 'bottom' + if (footerMap.containsKey("columns") || footerMap.containsKey("topBar") + || footerMap.containsKey("bottom")) { + html.append(renderMdBootstrapFooter(footerMap)); + } else if (footerMap.containsKey("linkColumns") || footerMap.containsKey("socialIcons")) { + html.append(renderCompactFooter(footerMap)); + } else { + html.append(renderFooterBlock(footerMap)); + } + continue; + } + if ("how-to-blog-post".equalsIgnoreCase(getString(map, "type", ""))) { + html.append(renderHowToBlogPost(map)); + return html.toString(); + } + + if ("blogThumbnailGrid".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderBlogThumbnailGrid((Map) sectionContent)); + continue; + } + if ("blogSection".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderBlogSection((Map) sectionContent)); + continue; + } + if ("articlePage".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderArticlePage((Map) sectionContent)); + continue; + } + if ("templateLibrary".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderTemplateLibrary((Map) sectionContent)); + continue; + } + if ("blogHeader".equalsIgnoreCase(sectionName) && sectionContent instanceof Map) { + html.append(renderBlogHeader((Map) sectionContent)); + continue; + } + + + + // Wrap each section in a
      tag with class derived from key + html.append("
      "); + + html.append(buildHtml(sectionContent)); + + html.append("
      "); + } + return html.toString(); + } + // Check if a universal TYPE_RENDERER exists for this block + String type = getString(map, "type", ""); + if (TYPE_RENDERERS.containsKey(type.toLowerCase())) { + return TYPE_RENDERERS.get(type.toLowerCase()).apply(map); + } + // Normal map block + return renderFromMap(map); + } else if (node instanceof List) { + return renderFromList((List) node); + } else if (node != null) { + return node.toString(); + } else { + return ""; + } + } + + private static final Map TYPE_TAG_MAP = new HashMap<>(); + static { + TYPE_TAG_MAP.put("navbar", "nav"); + TYPE_TAG_MAP.put("footer", "footer"); + TYPE_TAG_MAP.put("article", "article"); + TYPE_TAG_MAP.put("header", "header"); + TYPE_TAG_MAP.put("logo", "div"); + TYPE_TAG_MAP.put("nav", "nav"); + TYPE_TAG_MAP.put("link", "a"); + TYPE_TAG_MAP.put("button", "button"); + TYPE_TAG_MAP.put("span", "span"); + TYPE_TAG_MAP.put("img", "img"); // already supported as self-closing + TYPE_TAG_MAP.put("social-icons", "div"); + TYPE_TAG_MAP.put("icon", "div"); + TYPE_TAG_MAP.put("text", "span"); // or "p" depending on your choice + + // add more if needed + } + private static final Map, String>> TYPE_RENDERERS = new HashMap<>(); + + static { + // Blog Related + TYPE_RENDERERS.put("blog-list", HtmlBuilder3::renderBlogList); + TYPE_RENDERERS.put("blog-featured", HtmlBuilder3::renderBlogFeatured); + TYPE_RENDERERS.put("blog-author-bio", HtmlBuilder3::renderBlogAuthorBio); + TYPE_RENDERERS.put("newsletter-signup", HtmlBuilder3::renderNewsletterSignup); + TYPE_RENDERERS.put("blog-categories", HtmlBuilder3::renderBlogCategories); + + // Media + TYPE_RENDERERS.put("video-section", HtmlBuilder3::renderVideoSection); + TYPE_RENDERERS.put("image-gallery", HtmlBuilder3::renderImageGallery); + TYPE_RENDERERS.put("testimonial-carousel", HtmlBuilder3::renderTestimonialCarousel); + TYPE_RENDERERS.put("brand-logos", HtmlBuilder3::renderBrandLogos); + + // Features + TYPE_RENDERERS.put("feature-grid", HtmlBuilder3::renderFeatureGrid); + TYPE_RENDERERS.put("feature-carousel", HtmlBuilder3::renderFeatureCarousel); + TYPE_RENDERERS.put("feature-with-image", HtmlBuilder3::renderFeatureWithImage); + TYPE_RENDERERS.put("feature-numbered-steps", HtmlBuilder3::renderFeatureNumberedSteps); + + // Interactive + TYPE_RENDERERS.put("faq-accordion", HtmlBuilder3::renderFaqAccordion); + TYPE_RENDERERS.put("tabbed-section", HtmlBuilder3::renderTabbedSection); + TYPE_RENDERERS.put("counter-stats", HtmlBuilder3::renderCounterStats); + TYPE_RENDERERS.put("progress-bars", HtmlBuilder3::renderProgressBars); + + // Marketing + TYPE_RENDERERS.put("call-to-action", HtmlBuilder3::renderCallToAction); + TYPE_RENDERERS.put("download-app", HtmlBuilder3::renderDownloadApp); + TYPE_RENDERERS.put("lead-magnet", HtmlBuilder3::renderLeadMagnet); + TYPE_RENDERERS.put("promo-banner", HtmlBuilder3::renderPromoBanner); + + // Team + TYPE_RENDERERS.put("team-grid", HtmlBuilder3::renderTeamGrid); + TYPE_RENDERERS.put("team-profile-list", HtmlBuilder3::renderTeamProfileList); + TYPE_RENDERERS.put("company-timeline", HtmlBuilder3::renderCompanyTimeline); + TYPE_RENDERERS.put("values-section", HtmlBuilder3::renderValuesSection); + + // Pricing + TYPE_RENDERERS.put("pricing-cards", HtmlBuilder3::renderPricingCards); + TYPE_RENDERERS.put("pricing-comparison", HtmlBuilder3::renderPricingComparison); + + // Contact + TYPE_RENDERERS.put("contact-form", HtmlBuilder3::renderContactForm); + TYPE_RENDERERS.put("contact-map", HtmlBuilder3::renderContactMap); + TYPE_RENDERERS.put("contact-grid", HtmlBuilder3::renderContactGrid); + + // Footer + TYPE_RENDERERS.put("footer-minimal", HtmlBuilder3::renderFooterMinimal); + TYPE_RENDERERS.put("footer-centered", HtmlBuilder3::renderFooterCentered); + TYPE_RENDERERS.put("footer-columns", HtmlBuilder3::renderFooterColumns); + + // Utility Elements + TYPE_RENDERERS.put("icon-button", HtmlBuilder3::renderIconButton); + TYPE_RENDERERS.put("label", HtmlBuilder3::renderLabel); + TYPE_RENDERERS.put("badge", HtmlBuilder3::renderBadge); + TYPE_RENDERERS.put("rating-stars", HtmlBuilder3::renderRatingStars); + TYPE_RENDERERS.put("classic-list-post", HtmlBuilder3::renderClassicListPost); + TYPE_RENDERERS.put("list-post", HtmlBuilder3::renderListPost); + TYPE_RENDERERS.put("perfect-blog-post", HtmlBuilder3::renderPerfectBlogPost); + TYPE_RENDERERS.put("blog-thumbnail-grid", HtmlBuilder3::renderBlogThumbnailGrid); + + + } + + // ---------------- Placeholder Functions ---------------- + private static String renderBlogList(Map node) { + return "
      Blog List Placeholder
      "; + } + + private static String renderBlogFeatured(Map node) { + return ""; + } + + private static String renderBlogAuthorBio(Map node) { + return "
      Author Bio
      "; + } + + private static String renderNewsletterSignup(Map node) { + return ""; + } + + private static String renderBlogCategories(Map node) { + return "
      Categories
      "; + } + + private static String renderVideoSection(Map node) { + return "
      Video Section
      "; + } + + private static String renderImageGallery(Map node) { + return ""; + } + + private static String renderTestimonialCarousel(Map node) { + return ""; + } + + private static String renderBrandLogos(Map node) { + return "
      Brand Logos
      "; + } + + private static String renderFeatureGrid(Map node) { + return "
      Features
      "; + } + + private static String renderFeatureCarousel(Map node) { + return ""; + } + + private static String renderFeatureWithImage(Map node) { + return "
      Feature Image
      "; + } + + private static String renderFeatureNumberedSteps(Map node) { + return "
      1. Step 1
      "; + } + + private static String renderFaqAccordion(Map node) { + return "
      FAQs
      "; + } + + private static String renderTabbedSection(Map node) { + return "
      Tabbed Section
      "; + } + + private static String renderCounterStats(Map node) { + return "
      Stats
      "; + } + + private static String renderProgressBars(Map node) { + return "
      Progress Bars
      "; + } + + private static String renderCallToAction(Map node) { + return "
      Call to Action
      "; + } + + private static String renderDownloadApp(Map node) { + return "
      App Download
      "; + } + + private static String renderLeadMagnet(Map node) { + return "
      Lead Magnet
      "; + } + + private static String renderPromoBanner(Map node) { + return "
      Promo
      "; + } + + private static String renderTeamGrid(Map node) { + return "
      Team Members
      "; + } + + private static String renderTeamProfileList(Map node) { + return "
      • Team Member
      "; + } + + private static String renderCompanyTimeline(Map node) { + return "
      Timeline
      "; + } + + private static String renderValuesSection(Map node) { + return "
      Company Values
      "; + } + + private static String renderPricingCards(Map node) { + return "
      Pricing
      "; + } + + private static String renderPricingComparison(Map node) { + return "
      Plan
      "; + } + + private static String renderContactForm(Map node) { + return "
      "; + } + + private static String renderContactMap(Map node) { + return "
      Map
      "; + } + + private static String renderContactGrid(Map node) { + return "
      Grid
      "; + } + + private static String renderFooterMinimal(Map node) { + return "
      Minimal Footer
      "; + } + + private static String renderFooterCentered(Map node) { + return "
      Centered Footer
      "; + } + + private static String renderFooterColumns(Map node) { + return "
      Footer Columns
      "; + } + + private static String renderIconButton(Map node) { + return ""; + } + + private static String renderLabel(Map node) { + return "Label"; + } + + private static String renderBadge(Map node) { + return "Badge"; + } + + private static String renderRatingStars(Map node) { + return "
      ★★★★★
      "; + } + + private static String renderClassicListPost(Map data) { + StringBuilder html = new StringBuilder(); + + html.append("
      "); + + // Title + html.append("

      ").append(getString(data, "title", "List Post Title")).append("

      "); + + // Hook/Intro + html.append("

      ") + .append(getString(data, "hook", "")).append("

      "); + + // List Content + if (data.containsKey("content")) { + List> items = (List>) data.get("content"); + html.append("
      "); + for (Map item : items) { + html.append("
      "); + html.append("

      ").append(getString(item, "subheading", "")).append("

      "); + html.append("

      ").append(getString(item, "description", "")).append("

      "); + + if (item.containsKey("actionSteps")) { + List steps = (List) item.get("actionSteps"); + html.append("
        "); + for (String step : steps) { + html.append("
      • ").append(step).append("
      • "); + } + html.append("
      "); + } + + html.append("
      "); + } + html.append("
      "); + } + + // Conclusion + if (data.containsKey("conclusion")) { + html.append("
      ") + .append(data.get("conclusion")).append("
      "); + } + + // Call to action + if (data.containsKey("callToAction")) { + html.append("
      ") + .append(data.get("callToAction")).append("
      "); + } + + html.append("
      "); + return html.toString(); + } + + private static String renderListPost(Map data) { + StringBuilder html = new StringBuilder(); + + html.append("
      "); + + // Title + html.append("

      ").append(getString(data, "title", "List Post Title")).append("

      "); + + // Intro + if (data.containsKey("intro")) { + Map intro = (Map) data.get("intro"); + html.append("
      "); + html.append("

      ") + .append(getString(intro, "hook", "")).append("

      "); + html.append("

      ").append(getString(intro, "summary", "")).append("

      "); + html.append("

      ").append(getString(intro, "benefitStatement", "")).append("

      "); + html.append("
      "); + } + + // List Items + if (data.containsKey("listItems")) { + List> items = (List>) data.get("listItems"); + html.append("
        "); + for (Map item : items) { + html.append("
      1. ").append("") + .append(getString(item, "title", "")).append("").append("

        ") + .append(getString(item, "description", "")).append("

        ").append("
      2. "); + } + html.append("
      "); + } + + // Conclusion + if (data.containsKey("conclusion")) { + Map conclusion = (Map) data.get("conclusion"); + html.append("
      "); + html.append("

      ").append(getString(conclusion, "summary", "")).append("

      "); + html.append("

      ").append(getString(conclusion, "callToAction", "")) + .append("

      "); + html.append("
      "); + } + + html.append("
      "); + return html.toString(); + } + + private static String renderPerfectBlogPost(Map data) { + StringBuilder html = new StringBuilder(); + + html.append("
      "); + + // Title + html.append("

      ").append(getString(data, "title", "Perfect Blog Post")).append("

      "); + + // Sections + if (data.containsKey("sections")) { + List> sections = (List>) data.get("sections"); + html.append("
      "); + for (Map section : sections) { + html.append("
      "); + html.append("

      ").append(getString(section, "label", "Section")) + .append("

      "); + html.append("

      ").append(getString(section, "description", "")).append("

      "); + html.append("
      "); + } + html.append("
      "); + } + + // Footer CTA + if (data.containsKey("footer")) { + html.append("
      ") + .append(getString(data, "footer", "")).append("
      "); + } + + html.append("
      "); + return html.toString(); + } + + private static String renderFromMap(Map node) { + StringBuilder html = new StringBuilder(); + + // Get tag from 'tag' or fallback to 'type' + String type = getString(node, "type", "div"); + String rawTag = getString(node, "tag", ""); + String tag = !rawTag.isEmpty() ? rawTag : TYPE_TAG_MAP.getOrDefault(type.toLowerCase(), type); + + html.append("<").append(tag); + + // Add class and id if present + String className = getString(node, "class", getString(node, "ref", "")); + String id = getString(node, "id", ""); + + if (!className.isEmpty()) + html.append(" class=\"").append(className).append("\""); + if (!id.isEmpty()) + html.append(" id=\"").append(id).append("\""); + + // Add other attributes (like src, alt for img) + for (Map.Entry entry : node.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + if (!Arrays.asList("type", "tag", "class", "id", "content", "children", "menu", "actions", "buttons") + .contains(key) && !(value instanceof Map || value instanceof List)) { + html.append(" ").append(key).append("=\"").append(value).append("\""); + } + } + + // Self-closing tag support (like img) + // Self-closing tag like + if ("img".equalsIgnoreCase(tag)) { + html.append(" src=\"").append(getString(node, "src", "")).append("\""); + html.append(" alt=\"").append(getString(node, "alt", "")).append("\""); + html.append(" />"); + return html.toString(); + } + + // Content rendering + if (node.containsKey("content")) { + html.append(node.get("content")); + } + + html.append(">"); + + // Render inline content if present + + // Special short-circuit rendering for link and button + if ("link".equalsIgnoreCase(type)) { + html.append("").append(node.get("content")).append(""); + return html.toString(); + } + + if ("text".equalsIgnoreCase(type)) { + html.append(getString(node, "content", "")); + return html.toString(); + } + + if ("logo".equalsIgnoreCase(type)) { + html.append("
      ").append(getString(node, "content", "Logo")) + .append("
      "); + return html.toString(); + } + + if ("icon".equalsIgnoreCase(type)) { + String label = getString(node, "content", ""); + String emoji = getIconEmoji(label); + html.append("
      ").append(emoji).append(" ").append(label).append("
      "); + return html.toString(); + } + + if ("a".equalsIgnoreCase(type)) { + String href = getString(node, "href", "#"); + html.append("").append(getString(node, "content", "")).append(""); + return html.toString(); + } + + if ("button".equalsIgnoreCase(type)) { + html.append(""); + return html.toString(); + } + + if (node.containsKey("content")) { + html.append(node.get("content")); + } + + // Handle structured known patterns + if (node.containsKey("logo")) { + html.append("
      ").append(node.get("logo")).append("
      "); + } + + if (node.containsKey("heading")) { + html.append("

      ").append(node.get("heading")).append("

      "); + } + + if (node.containsKey("subheading")) { + html.append("

      ").append(node.get("subheading")).append("

      "); + } + + if (node.containsKey("text")) { + html.append("

      ").append(node.get("text")).append("

      "); + } + + if (node.containsKey("menu")) { + html.append(renderMenu(node.get("menu"))); + } + + if (node.containsKey("actions")) { + html.append(renderActions(node.get("actions"))); + } + + if (node.containsKey("buttons")) { + html.append(renderButtons(node.get("buttons"))); + } + + if (node.containsKey("columns")) { + html.append(renderColumns(node.get("columns"))); + } + + if (node.containsKey("children")) { + html.append(buildHtml(node.get("children"))); + } + + html.append(""); + return html.toString(); + } + + private static String renderFromList(List list) { + StringBuilder html = new StringBuilder(); + for (Object item : list) { + html.append(buildHtml(item)); + } + return html.toString(); + } + + private static String renderButtons(Object obj) { + StringBuilder html = new StringBuilder(); + + if (obj instanceof Map) { + Map btnMap = (Map) obj; + List items = (List) btnMap.get("items"); + String btnClass = getString(btnMap, "class", "btn-group"); + + html.append("
      "); + for (String label : items) { + html.append(""); + } + html.append("
      "); + } + + return html.toString(); + } + + private static String renderColumns(Object obj) { + StringBuilder html = new StringBuilder(); + html.append("
      "); + + List> columns = (List>) obj; + for (Map col : columns) { + String type = getString(col, "type", ""); + if ("main".equalsIgnoreCase(type)) { + html.append("
      "); + if (col.containsKey("contentBlocks")) { + List> blocks = (List>) col.get("contentBlocks"); + for (Map block : blocks) { + html.append("
      ").append("

      ") + .append(getString(block, "heading", "")).append("

      ").append("

      ") + .append(getString(block, "text", "")).append("

      ").append("
      "); + } + } + html.append("
      "); + } else if ("sidebar".equalsIgnoreCase(type)) { + html.append(""); + } + } + + html.append("
      "); + return html.toString(); + } + + private static String renderMenu(Object obj) { + StringBuilder html = new StringBuilder("
        "); + + List menu = (List) obj; + for (Object item : menu) { + if (item instanceof String) { + html.append("
      • ").append(item).append("
      • "); + } else if (item instanceof Map) { + Map dropdownItem = (Map) item; + html.append("
      • "); + html.append("").append(dropdownItem.get("title")).append(""); + + if (dropdownItem.containsKey("dropdown")) { + html.append(renderDropdown(dropdownItem.get("dropdown"))); + } + html.append("
      • "); + } + } + + html.append(""); + return html.toString(); + } + + private static String renderDropdown(Object obj) { + StringBuilder html = new StringBuilder("
        "); + + Map dropdown = (Map) obj; + List> columns = (List>) dropdown.get("columns"); + + for (Map column : columns) { + html.append("
        "); + html.append("

        ").append(column.get("title")).append("

        "); + html.append("
          "); + + if (column.containsKey("items")) { + List> items = (List>) column.get("items"); + for (Map item : items) { + html.append("
        • ").append(item.get("icon")).append("").append("") + .append(item.get("title")).append("").append("

          ").append(item.get("description")) + .append("

          ").append("
        • "); + } + } else if (column.containsKey("blogs")) { + List> blogs = (List>) column.get("blogs"); + for (Map blog : blogs) { + html.append("
        • ").append(blog.get("title")).append("").append("

          ") + .append(blog.get("description")).append("

          ").append("") + .append(blog.get("cta")).append("
        • "); + } + if (column.containsKey("footerLink")) { + html.append(""); + } + } + + html.append("
        "); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderActions(Object obj) { + StringBuilder html = new StringBuilder("
        "); + + List> actions = (List>) obj; + for (Map action : actions) { + String label = getString(action, "label", "Button"); + String variant = getString(action, "variant", ""); + String btnClass = "join-btn"; + if (!variant.isEmpty()) { + btnClass += " " + variant; + } + html.append(""); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderNavbarBlock(Map nav) { + StringBuilder html = new StringBuilder(); + + // Inline styles + StringBuilder style = new StringBuilder(); + if (nav.containsKey("style")) { + Map styleMap = (Map) nav.get("style"); + for (Map.Entry s : styleMap.entrySet()) { + appendStyle(style, s.getKey(), s.getValue()); + } + } + + html.append(""); + return html.toString(); + } + + private static String renderFooterBlock(Map footer) { + StringBuilder html = new StringBuilder(); + + // Inline styles + StringBuilder style = new StringBuilder(); + appendStyle(style, "background", footer.get("background")); + appendStyle(style, "padding", footer.get("padding")); + appendStyle(style, "font-family", footer.get("fontFamily")); + + html.append("
        "); + + // Logo + if (footer.containsKey("Logo")) { + Map logo = (Map) footer.get("Logo"); + html.append("
        ") + .append(getString(logo, "text", "Logo")).append("
        "); + } + + // Address + if (footer.containsKey("Address")) { + html.append("

        ").append(getString(footer, "Address", "")).append("

        "); + } + + // Contact + if (footer.containsKey("Contact")) { + Map contact = (Map) footer.get("Contact"); + html.append("

        Phone: ").append(getString(contact, "phone", "")).append("

        "); + html.append("

        Email: ") + .append(getString(contact, "email", "")).append("

        "); + } + + // Social Links + if (footer.containsKey("SocialLinks")) { + List> social = (List>) footer.get("SocialLinks"); + html.append("
        "); + for (Map s : social) { + String platform = getString(s, "platform", ""); + String emoji = getIconEmoji(platform); + html.append("") + .append(emoji).append(""); + } + html.append("
        "); + } + + // Links + if (footer.containsKey("Links")) { + Map>> links = (Map>>) footer.get("Links"); + html.append("
        "); + for (Map.Entry>> col : links.entrySet()) { + html.append(""); + } + html.append("
        "); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderMdBootstrapFooter(Map footer) { + StringBuilder html = new StringBuilder(); + String theme = getString(footer, "theme", "light"); + + html.append("
        "); + + // Top Bar + if (footer.containsKey("topBar")) { + Map topBar = (Map) footer.get("topBar"); + html.append("
        "); + + html.append("

        ").append(getString(topBar, "text", "")).append("

        "); + + if (topBar.containsKey("socialLinks")) { + List> socials = (List>) topBar.get("socialLinks"); + for (Map s : socials) { + String icon = getIconEmoji(getString(s, "platform", "")); + html.append("").append(icon).append(""); + } + } + html.append("
        "); + } + + // Columns + if (footer.containsKey("columns")) { + List> columns = (List>) footer.get("columns"); + html.append("
        "); + for (Map col : columns) { + html.append("
        "); + html.append("

        ").append(getString(col, "title", "")).append("

        "); + + if (col.containsKey("content")) { + html.append("

        ").append(getString(col, "content", "")).append("

        "); + } + + if (col.containsKey("links")) { + List> links = (List>) col.get("links"); + for (Map link : links) { + html.append("

        ") + .append(getString(link, "label", "")).append("

        "); + } + } + + if (col.containsKey("info")) { + Map info = (Map) col.get("info"); + html.append("

        ").append(getString(info, "address", "")).append("

        "); + html.append("

        ") + .append(getString(info, "email", "")).append("

        "); + html.append("

        ").append(getString(info, "phone", "")).append("

        "); + html.append("

        ").append(getString(info, "fax", "")).append("

        "); + } + + html.append("
        "); + } + html.append("
        "); + } + + // Bottom Bar + if (footer.containsKey("bottom")) { + Map bottom = (Map) footer.get("bottom"); + html.append("
        ").append("

        ").append(getString(bottom, "text", "")) + .append("

        ").append("
        "); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderCompactFooter(Map footer) { + StringBuilder html = new StringBuilder(); + + String bg = getString(footer, "backgroundColor", "#222"); + String color = getString(footer, "textColor", "white"); + + html.append("
        "); + + // Logo and Slogan + if (footer.containsKey("logo")) { + Map logo = (Map) footer.get("logo"); + html.append("
        ").append("

        ").append(getString(logo, "text", "LOGO")) + .append("

        ").append("

        ").append(getString(logo, "slogan", "")).append("

        ") + .append("
        "); + } + + // Link Columns + if (footer.containsKey("linkColumns")) { + List> columns = (List>) footer.get("linkColumns"); + html.append("
        "); + for (Map col : columns) { + html.append(""); + } + html.append("
        "); + } + + // Social Icons + if (footer.containsKey("socialIcons")) { + List> icons = (List>) footer.get("socialIcons"); + html.append("
        "); + for (Map icon : icons) { + String label = getString(icon, "icon", ""); + String emoji = getIconEmoji(label); + html.append("").append(emoji).append(""); + } + html.append("
        "); + } + + // Copyright + if (footer.containsKey("copyright")) { + html.append("

        ").append(getString(footer, "copyright", "")) + .append("

        "); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderContactSection(Map section) { + StringBuilder html = new StringBuilder(); + + String bg = getString(section, "background", "#fff"); + String color = getString(section, "textColor", "#000"); + String font = getString(section, "fontFamily", "sans-serif"); + + html.append("
        "); + + html.append("
        "); + + // LEFT COLUMN + if (section.containsKey("left")) { + Map left = (Map) section.get("left"); + html.append("
        "); + + if (left.containsKey("heading")) { + html.append("

        ").append(getString(left, "heading", "")).append("

        "); + } + if (left.containsKey("description")) { + html.append("

        ").append(getString(left, "description", "")).append("

        "); + } + + if (left.containsKey("ctaButton")) { + Map btn = (Map) left.get("ctaButton"); + Map style = (Map) btn.get("style"); + html.append("") + .append(getString(btn, "label", "Click")).append(""); + } + + html.append("
        "); + } + + // RIGHT COLUMN + if (section.containsKey("right")) { + Map right = (Map) section.get("right"); + html.append("
        "); + + if (right.containsKey("contactDetails")) { + Map details = (Map) right.get("contactDetails"); + + if (details.containsKey("email")) { + Map email = (Map) details.get("email"); + html.append("

        ").append(getString(email, "label", "Email")).append(": ") + .append("") + .append(getString(email, "value", "")).append("

        "); + } + if (details.containsKey("phone")) { + Map phone = (Map) details.get("phone"); + html.append("

        ").append(getString(phone, "label", "Phone")).append(": ") + .append("") + .append(getString(phone, "value", "")).append("

        "); + } + if (details.containsKey("address")) { + Map addr = (Map) details.get("address"); + html.append("

        ").append(getString(addr, "label", "Address")).append(":
        "); + List lines = (List) addr.get("lines"); + for (String line : lines) { + html.append(line).append("
        "); + } + html.append("

        "); + } + } + + if (right.containsKey("socialLinks")) { + List> socials = (List>) right.get("socialLinks"); + html.append("
        "); + for (Map s : socials) { + String icon = getString(s, "icon", ""); + String emoji = getIconEmoji(icon); + html.append("").append(emoji).append(""); + } + html.append("
        "); + } + + html.append("
        "); + } + + html.append("
        "); + html.append("
        "); + + return html.toString(); + } + + private static String renderHowToBlogPost(Map blog) { + StringBuilder html = new StringBuilder(); + html.append("
        "); + + html.append("

        ").append(getString(blog, "title", "How to Do Something")).append("

        "); + html.append("

        ") + .append(getString(blog, "hook", "")).append("

        "); + + // Content Section + if (blog.containsKey("content")) { + Map content = (Map) blog.get("content"); + html.append("
        "); + for (Map.Entry entry : content.entrySet()) { + html.append("
        ").append("

        ").append(formatKey(entry.getKey())).append("

        ") + .append("

        ").append(entry.getValue()).append("

        ").append("
        "); + } + html.append("
        "); + } + + // Conclusion Section + if (blog.containsKey("conclusion")) { + Map conclusion = (Map) blog.get("conclusion"); + html.append("
        "); + + if (conclusion.containsKey("recap")) { + html.append("

        Summary: ").append(conclusion.get("recap")).append("

        "); + } + if (conclusion.containsKey("cta")) { + html.append("

        ").append(conclusion.get("cta")).append("

        "); + } + + html.append("
        "); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderBlogListSection(Map section) { + StringBuilder html = new StringBuilder(); + + html.append("
        "); + + // Title and Subtitle + html.append("
        "); + html.append("

        ").append(getString(section, "title", "Blog List")).append("

        "); + html.append("

        ").append(getString(section, "subtitle", "")).append("

        "); + html.append("
        "); + + // Blogs + if (section.containsKey("blogs")) { + List> blogs = (List>) section.get("blogs"); + + html.append("
        "); + + for (Map blog : blogs) { + html.append("
        "); + + String img = getString(blog, "image", ""); + if (!img.isEmpty()) { + html.append("\"blog"); + } + + html.append("

        ").append(getString(blog, "category", "")) + .append("

        "); + html.append("

        ").append(getString(blog, "title", "")).append("

        "); + html.append("

        ").append(getString(blog, "description", "")).append("

        "); + html.append("

        By ") + .append(getString(blog, "author", "")).append(" • ") + .append(getString(blog, "date", "")).append(" • ").append(getString(blog, "readTime", "")) + .append("

        "); + + html.append("
        "); + } + + html.append("
        "); + } + + // CTA Button + if (section.containsKey("cta")) { + Map cta = (Map) section.get("cta"); + html.append(""); + } + + html.append("
        "); + + return html.toString(); + } + + private static String renderBlogPreviewSection(Map section) { + StringBuilder html = new StringBuilder(); + + html.append("
        "); + + // Section Label + String sectionLabel = getString(section, "sectionLabel", ""); + if (!sectionLabel.isEmpty()) { + html.append("

        ").append(sectionLabel) + .append("

        "); + } + + // Heading + html.append("

        ").append(getString(section, "heading", "Our Blogs")).append("

        "); + html.append("

        ").append(getString(section, "subtext", "")).append("

        "); + + // Blog Grid + if (section.containsKey("blogs")) { + List> blogs = (List>) section.get("blogs"); + + html.append( + "
        "); + + for (Map blog : blogs) { + html.append("
        "); + + String image = getString(blog, "image", ""); + if (!image.isEmpty()) { + html.append("\"blog\""); + } + + html.append("

        ").append(getString(blog, "category", "")) + .append(" • ").append(getString(blog, "readTime", "")).append("

        "); + + html.append("

        ").append(getString(blog, "title", "")).append("

        "); + html.append("

        ").append(getString(blog, "excerpt", "")).append("

        "); + + html.append("Read more"); + + html.append("
        "); + } + + html.append("
        "); + } + + // View All CTA + if (section.containsKey("viewAll")) { + Map viewAll = (Map) section.get("viewAll"); + html.append(""); + } + + html.append("
        "); + + return html.toString(); + } + + private static String renderBlogHomePage(Map data) { + StringBuilder html = new StringBuilder(); + html.append("
        "); + + // Logo + String logo = getString(data, "logo", "Logo"); + html.append("

        ").append(logo).append("

        "); + + // Nav Menu + if (data.containsKey("navMenu")) { + List navItems = (List) data.get("navMenu"); + html.append( + ""); + } + + // Top Bar Icons + if (data.containsKey("topBarIcons")) { + List icons = (List) data.get("topBarIcons"); + html.append("
        "); + for (String icon : icons) { + String emoji = getIconEmoji(icon); + html.append("").append(emoji).append(""); + } + html.append("
        "); + } + + // Hero Section + if (data.containsKey("heroSection")) { + Map hero = (Map) data.get("heroSection"); + html.append("
        "); + html.append("

        ") + .append(getString(hero, "label", "")).append("

        "); + html.append("

        ").append(getString(hero, "title", "")).append("

        "); + html.append("

        ").append(getString(hero, "excerpt", "")).append("

        "); + html.append("

        By ").append(getString(hero, "author", "")) + .append(" • ").append(getString(hero, "date", "")).append("

        "); + html.append("
        "); + } + + // Editor Pick + if (data.containsKey("editorPick")) { + List> picks = (List>) data.get("editorPick"); + html.append("

        Editor's Pick

        "); + for (Map post : picks) { + html.append("
        "); + html.append("\"thumb\""); + html.append("

        ").append(getString(post, "title", "")).append("

        "); + html.append("
        "); + } + html.append("
        "); + } + + // Trending Section + if (data.containsKey("trending")) { + List> trending = (List>) data.get("trending"); + html.append("

        Trending

        "); + for (Map t : trending) { + html.append( + "
        "); + html.append("\"trend\""); + html.append("").append(getString(t, "rank", "1")).append("."); + html.append("").append(getString(t, "title", "")).append(""); + html.append("
        "); + } + html.append("
        "); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderBlogPage(Map data) { + StringBuilder html = new StringBuilder(); + html.append("
        "); + + // Header + if (data.containsKey("header")) { + Map header = (Map) data.get("header"); + html.append("
        "); + + // Logo + html.append("

        ").append(getString(header, "logo", "Logo")).append("

        "); + + // Menu + if (header.containsKey("menu")) { + List menu = (List) header.get("menu"); + html.append(""); + } + + // Icons + html.append("
        "); + + if (header.containsKey("socialIcons")) { + List icons = (List) header.get("socialIcons"); + for (String icon : icons) { + html.append("").append(getIconEmoji(icon)).append(""); + } + } + if (header.containsKey("actions")) { + List actions = (List) header.get("actions"); + for (String action : actions) { + html.append("").append(getIconEmoji(action)).append(""); + } + } + + html.append("
        "); + html.append("
        "); + } + + // Hero Section + if (data.containsKey("heroSection")) { + Map hero = (Map) data.get("heroSection"); + html.append("
        "); + + // Main Post + if (hero.containsKey("mainPost")) { + Map main = (Map) hero.get("mainPost"); + html.append("
        "); + html.append(""); + html.append("

        ").append(getString(main, "category", "")).append("

        "); + html.append("

        ").append(getString(main, "title", "")).append("

        "); + html.append("

        By ").append(getString(main, "author", "")).append("

        "); + html.append("
        "); + } + + // Featured Side Posts + if (hero.containsKey("featuredPosts")) { + List> side = (List>) hero.get("featuredPosts"); + html.append("
        "); + for (Map post : side) { + html.append("
        "); + html.append(""); + html.append("

        ").append(getString(post, "title", "")).append("

        "); + html.append("
        "); + } + html.append("
        "); + } + + html.append("
        "); + } + + // Post Grid + if (data.containsKey("postGrid")) { + List> posts = (List>) data.get("postGrid"); + html.append("
        "); + for (Map post : posts) { + html.append("
        "); + html.append(""); + html.append("

        ").append(getString(post, "title", "")).append("

        "); + html.append("
        "); + } + html.append("
        "); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderBlogCardSection(Map blog) { + StringBuilder html = new StringBuilder(); + + html.append("
        "); + + // Heading + if (blog.containsKey("heading")) { + Map heading = (Map) blog.get("heading"); + html.append("
        "); + html.append("

        ").append(getString(heading, "title", "My Blog")).append("

        "); + html.append("

        ") + .append(getString(heading, "description", "")).append("

        "); + html.append("
        "); + } + + // Posts + if (blog.containsKey("posts")) { + List> posts = (List>) blog.get("posts"); + + html.append("
        "); + for (Map post : posts) { + html.append("
        "); + + html.append(""); + + html.append("
        "); + html.append("

        ") + .append(getString(post, "date", "")).append(" | ").append(getString(post, "category", "")).append("

        "); + html.append("

        ").append(getString(post, "title", "")).append("

        "); + html.append("

        ").append(getString(post, "description", "")).append("

        "); + html.append("") + .append(getString(post, "cta", "Read More")).append(""); + html.append("
        "); + + html.append("
        "); + } + html.append("
        "); + } + + html.append("
        "); + return html.toString(); + } + + + + private static String renderBlogThumbnailGrid(Map data) { + StringBuilder html = new StringBuilder(); + + String title = getString(data, "title", "Blog Grid"); + int columns = (int) data.getOrDefault("columns", 3); + List> cards = (List>) data.getOrDefault("cards", new ArrayList<>()); + + html.append("
        "); + + // Section title + html.append("

        ").append(title).append("

        "); + + // Grid + html.append("
        "); + + for (Map card : cards) { + String image = getString(card, "image", ""); + String category = getString(card, "category", ""); + String cardTitle = getString(card, "title", ""); + String link = getString(card, "link", "#"); + + html.append("
        "); + + html.append(""); + html.append("\"").append(cardTitle).append("\""); + html.append(""); + + html.append("
        "); + html.append("

        ").append(category).append("

        "); + html.append("

        ") + .append("") + .append(cardTitle).append("

        "); + html.append("
        "); + + html.append("
        "); + } + + html.append("
        "); + html.append("
        "); + + return html.toString(); + } + + private static String renderBlogSection(Map section) { + StringBuilder html = new StringBuilder(); + html.append("
        "); + + // Optional heading + if (section.containsKey("sectionLabel") || section.containsKey("title") || section.containsKey("heading")) { + html.append("
        "); + + if (section.containsKey("sectionLabel")) { + html.append("

        ").append(section.get("sectionLabel")).append("

        "); + } + if (section.containsKey("breadcrumb")) { + html.append("

        ").append(section.get("breadcrumb")).append("

        "); + } + + if (section.containsKey("heading")) { + Object headingObj = section.get("heading"); + if (headingObj instanceof Map) { + Map heading = (Map) headingObj; + html.append("

        ").append(heading.getOrDefault("title", "")) + .append(" ") + .append(heading.getOrDefault("highlighted", "")).append("

        "); + html.append("

        ").append(heading.getOrDefault("description", "")).append("

        "); + } else { + html.append("

        ").append(section.get("heading")).append("

        "); + } + } else if (section.containsKey("title")) { + html.append("

        ").append(section.get("title")).append("

        "); + } + + if (section.containsKey("subtext")) { + html.append("

        ").append(section.get("subtext")).append("

        "); + } + html.append("
        "); + } + + // Blogs/Articles list + List> posts = null; + if (section.containsKey("blogs")) { + posts = (List>) section.get("blogs"); + } else if (section.containsKey("articles")) { + posts = (List>) section.get("articles"); + } else if (section.containsKey("posts")) { + posts = (List>) section.get("posts"); + } + + if (posts != null && !posts.isEmpty()) { + html.append("
        "); + + for (Map post : posts) { + String title = getString(post, "title", "Untitled"); + String image = getString(post, "image", ""); + String link = getString(post, "link", "#"); + String category = getString(post, "category", ""); + String date = getString(post, "date", ""); + String readTime = getString(post, "readTime", ""); + String description = getString(post, "description", getString(post, "excerpt", "")); + + html.append("
        "); + if (!image.isEmpty()) { + html.append(""); + } + html.append("
        "); + if (!category.isEmpty()) html.append("

        ").append(category).append("

        "); + html.append("

        ").append(title).append("

        "); + if (!description.isEmpty()) html.append("

        ").append(description).append("

        "); + if (!date.isEmpty() || !readTime.isEmpty()) { + html.append("

        ") + .append(date).append(" ").append(readTime).append("

        "); + } + if (post.containsKey("cta")) { + html.append("") + .append(post.get("cta")).append(""); + } + if (post.containsKey("readMoreLink")) { + html.append("Read more"); + } + html.append("
        "); + } + html.append("
        "); + } + + // Optional CTA/View All + if (section.containsKey("viewAll") || section.containsKey("cta")) { + Map viewAll = (Map) section.getOrDefault("viewAll", section.get("cta")); + String text = getString(viewAll, "text", "View All"); + String link = getString(viewAll, "link", "#"); + html.append(""); + } + + html.append("
        "); + return html.toString(); + } + private static String renderArticlePage(Map articlePage) { + StringBuilder html = new StringBuilder(); + + html.append("
        "); + + // Title & Subtitle + html.append("
        "); + html.append("

        ").append(getString(articlePage, "title", "Untitled")).append("

        "); + html.append("

        ").append(getString(articlePage, "subtitle", "")).append("

        "); + html.append("
        "); + + // Cover Image + String coverImage = getString(articlePage, "coverImage", ""); + if (!coverImage.isEmpty()) { + html.append("\"cover\""); + } + + // Author + Metadata + if (articlePage.containsKey("author")) { + Map author = (Map) articlePage.get("author"); + html.append("
        "); + html.append(""); + html.append("
        "); + html.append("").append(getString(author, "name", "")).append("
        "); + html.append("").append(getString(author, "role", "")).append(""); + html.append("
        "); + html.append("
        "); + } + + // Publish Date + html.append("

        Published on ") + .append(getString(articlePage, "publishedDate", "")).append("

        "); + + // Main Content + if (articlePage.containsKey("content")) { + List> content = (List>) articlePage.get("content"); + + for (Map block : content) { + String type = getString(block, "type", ""); + switch (type) { + case "paragraph": + html.append("

        ") + .append(getString(block, "text", "")).append("

        "); + break; + case "image": + html.append("
        "); + html.append(""); + String caption = getString(block, "caption", ""); + if (!caption.isEmpty()) { + html.append("
        ") + .append(caption).append("
        "); + } + html.append("
        "); + break; + case "heading": + html.append("

        ") + .append(getString(block, "text", "")).append("

        "); + break; + } + } + } + + // Sidebar + if (articlePage.containsKey("sidebar")) { + Map sidebar = (Map) articlePage.get("sidebar"); + html.append(""); + } + + html.append("
        "); + return html.toString(); + } + + private static String renderTemplateLibrary(Map lib) { + StringBuilder html = new StringBuilder(); + + html.append("
        "); + + // Title and subtitle + html.append("
        "); + html.append("

        ").append(getString(lib, "title", "")).append("

        "); + html.append("

        ").append(getString(lib, "subtitle", "")).append("

        "); + html.append("
        "); + + // Search input + html.append("
        "); + html.append(""); + html.append("
        "); + + // Categories + if (lib.containsKey("categories")) { + List categories = (List) lib.get("categories"); + html.append("
        "); + for (String cat : categories) { + html.append(""); + } + html.append("
        "); + } + + // Templates + if (lib.containsKey("templates")) { + List> templates = (List>) lib.get("templates"); + + html.append("
        "); + for (Map template : templates) { + html.append("
        "); + + html.append("\"icon\""); + html.append("

        ").append(getString(template, "title", "")).append("

        "); + html.append("

        ").append(getString(template, "description", "")).append("

        "); + html.append("").append(getString(template, "category", "")).append(""); + + html.append("
        "); + } + html.append("
        "); + } + + html.append("
        "); + return html.toString(); + } + private static String renderBlogHeader(Map header) { + StringBuilder html = new StringBuilder(); + + Map style = (Map) header.getOrDefault("style", new HashMap<>()); + String font = getString(style, "font", "sans-serif"); + String primaryColor = getString(style, "primaryColor", "#000"); + String accentColor = getString(style, "accentColor", "#ccc"); + String alignment = getString(style, "alignment", "left"); + + // Background images + Map background = (Map) header.getOrDefault("background", new HashMap<>()); + String topBg = getString(background, "top", ""); + String bottomBg = getString(background, "bottom", ""); + + html.append("
        "); + + if (!topBg.isEmpty()) { + html.append(""); + } + + if (header.containsKey("date")) { + html.append("

        ") + .append(header.get("date")).append("

        "); + } + + if (header.containsKey("title")) { + html.append("

        ").append(header.get("title")).append("

        "); + } + + if (header.containsKey("subtitle")) { + html.append("

        ") + .append(header.get("subtitle")).append("

        "); + } + + if (!bottomBg.isEmpty()) { + html.append(""); + } + + html.append("
        "); + return html.toString(); + } + + + + + private static String formatKey(String key) { + key = key.replaceAll("([a-z])([A-Z])", "$1 $2"); // camelCase to space + key = key.substring(0, 1).toUpperCase() + key.substring(1); // capitalize first + return key.replace("-", " "); + } + + private static String getIconEmoji(String label) { + label = label.toLowerCase(); + if (label.contains("facebook")) + return "📘"; + if (label.contains("instagram")) + return "📷"; + if (label.equals("x")) + return "𝕏"; + if (label.contains("search")) + return "🔍"; + if (label.contains("profile")) + return "👤"; + if (label.contains("twitter")) return "🐦"; + + if (label.contains("linkedin")) + return "🔗"; + if (label.contains("youtube")) + return "▶️"; + return "📦"; + } + + private static void appendStyle(StringBuilder style, String key, Object value) { + if (value != null) { + style.append(key).append(":").append(value).append("; "); + } + } + + private static String getWidgetIcon(String widget) { + widget = widget.toLowerCase(); + if (widget.contains("search")) + return "🔍"; + if (widget.contains("recent")) + return "📝"; + if (widget.contains("newsletter")) + return "📬"; + return "📦"; + } + + private static String getString(Map map, String key, String defaultValue) { + Object val = map.get(key); + return val instanceof String ? (String) val : defaultValue; + } + +// private static String renderFromMap1(Map node) { +// StringBuilder html = new StringBuilder(); +// +// // Choose tag +// String type = getString(node, "type", "div"); +// String tag = getString(node, "tag", type); +// +// html.append("<").append(tag); +// +// // Attributes +// if (node.containsKey("class")) { +// html.append(" class=\"").append(node.get("class")).append("\""); +// } +// if (node.containsKey("id")) { +// html.append(" id=\"").append(node.get("id")).append("\""); +// } +// +// +// +// html.append(">"); +// +// +// // Menu +// if (node.containsKey("menu")) { +// html.append(renderMenu(node.get("menu"))); +// } +// +// // Actions +// if (node.containsKey("actions")) { +// html.append(renderActions(node.get("actions"))); +// } +// +// // Logo +// if (node.containsKey("logo")) { +// html.append("
        " + node.get("logo") + "
        "); +// } +// if (node.containsKey("content")) { +// html.append(node.get("content")); +// } +// +// if ("img".equalsIgnoreCase(tag)) { +// html.append(" src=\"").append(getString(node, "src", "")).append("\""); +// html.append(" alt=\"").append(getString(node, "alt", "")).append("\""); +// html.append(" />"); +// return html.toString(); // Skip children + closing tag for +// } +// // Loop through keys and handle dynamically +// for (Map.Entry entry : node.entrySet()) { +// String key = entry.getKey(); +// Object val = entry.getValue(); +// +// if (val instanceof Map || val instanceof List) { +// // Special known keys +// if ("buttons".equalsIgnoreCase(key)) { +// html.append(renderButtons(val)); +// } else if ("columns".equalsIgnoreCase(key)) { +// html.append(renderColumns(val)); +// } else if ("children".equalsIgnoreCase(key)) { +// html.append(buildHtml(val)); +// } else { +// html.append(buildHtml(val)); +// } +// } else { +// // Plain content keys +// if ("heading".equalsIgnoreCase(key)) { +// html.append("

        ").append(val).append("

        "); +// } else if ("subheading".equalsIgnoreCase(key) || "text".equalsIgnoreCase(key)) { +// html.append("

        ").append(val).append("

        "); +// } else if ("title".equalsIgnoreCase(key)) { +// html.append("

        ").append(val).append("

        "); +// } else if ("icon".equalsIgnoreCase(key)) { +// html.append("").append(val).append(""); +// } +// } +// } +// +// html.append(""); +// return html.toString(); +// } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlGenerTorService.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlGenerTorService.java new file mode 100644 index 0000000..ff0ec16 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlGenerTorService.java @@ -0,0 +1,126 @@ +package com.realnet.OpenAi.Services; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.springframework.stereotype.Service; + +import com.realnet.OpenAi.Renders.NavbarRenderer; + +@Service +public class HtmlGenerTorService { + + public String generateHtmlFromJson(String jsonBody) { + JSONObject contentJson = new JSONObject(jsonBody); + StringBuilder htmlBuilder = new StringBuilder(); + generateHtml(contentJson, htmlBuilder); + return htmlBuilder.toString(); + } + + // Java 8 style static CSS map + private static final Map> CSS = new HashMap<>(); + + static { + CSS.put("header-1", createStyle(new String[][] { { "display", "flex" }, { "justifyContent", "space-between" }, + { "alignItems", "center" }, { "padding", "20px 40px" } })); + CSS.put("logo-1", createStyle(new String[][] { { "fontFamily", "cursive" }, { "fontSize", "20px" } })); + CSS.put("nav-1", createStyle(new String[][] { { "display", "flex" }, { "gap", "20px" } })); + CSS.put("button-join", createStyle(new String[][] { { "background", "black" }, { "color", "white" }, + { "padding", "8px 16px" }, { "border", "none" }, { "borderRadius", "4px" } })); + CSS.put("hero-1", createStyle(new String[][] { { "textAlign", "center" }, { "padding", "60px 20px" } })); + CSS.put("hero-heading", createStyle(new String[][] { { "fontSize", "36px" }, { "fontWeight", "bold" } })); + CSS.put("hero-paragraph", createStyle(new String[][] { { "margin", "20px auto" }, { "maxWidth", "600px" } })); + CSS.put("hero-buttons", createStyle(new String[][] { { "marginTop", "20px" } })); + CSS.put("button-signup", createStyle(new String[][] { { "padding", "10px 20px" }, { "background", "black" }, + { "color", "white" }, { "marginRight", "10px" }, { "border", "none" } })); + CSS.put("button-learn", createStyle(new String[][] { { "padding", "10px 20px" }, { "background", "white" }, + { "border", "1px solid #ccc" } })); + CSS.put("image-grid-1", + createStyle(new String[][] { { "display", "grid" }, + { "gridTemplateColumns", "repeat(auto-fill, minmax(200px, 1fr))" }, { "gap", "20px" }, + { "padding", "40px" } })); + CSS.put("tile", createStyle(new String[][] { { "background", "#eee" }, { "height", "150px" }, + { "display", "flex" }, { "alignItems", "center" }, { "justifyContent", "center" } })); + } + + private static Map createStyle(String[][] pairs) { + Map map = new HashMap<>(); + for (String[] pair : pairs) { + map.put(pair[0], pair[1]); + } + return map; + } + + private void generateHtml(JSONObject node, StringBuilder html) { + String type = node.optString("type"); + String ref = node.optString("ref"); + String tag = mapTypeToTag(type); + + if (tag != null) { + html.append("<").append(tag); + + if (!ref.isEmpty() && CSS.containsKey(ref)) { + html.append(" style=\\").append(convertStyle(CSS.get(ref))).append("\\\""); + } + + html.append(">"); + } + + if (node.has("content")) { + html.append(node.getString("content")); + } + + if (node.has("children")) { + JSONArray children = node.getJSONArray("children"); + for (int i = 0; i < children.length(); i++) { + generateHtml(children.getJSONObject(i), html); + } + } + + if (tag != null) { + html.append(""); + } + } + + private String mapTypeToTag(String type) { + if ("page".equals(type)) + return null; + if ("header".equals(type)) + return "header"; + if ("logo".equals(type) || "paragraph".equals(type)) + return "div"; + if ("nav".equals(type)) + return "nav"; + if ("link".equals(type)) + return "a"; + if ("button".equals(type)) + return "button"; + if ("button-group".equals(type)) + return "div"; + if ("hero-section".equals(type)) + return "section"; + if ("heading".equals(type)) + return "h1"; + if ("image-grid".equals(type)) + return "section"; + if ("image-tile".equals(type)) + return "div"; + return "div"; + } + + private String convertStyle(Map styleMap) { + StringBuilder css = new StringBuilder(); + for (Map.Entry entry : styleMap.entrySet()) { + css.append(camelToKebab(entry.getKey())).append(": ").append(entry.getValue()).append("; "); + } + return css.toString().trim(); + } + + private String camelToKebab(String str) { + return str.replaceAll("([a-z])([A-Z]+)", "$1-$2").toLowerCase(); + } + +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/ScriptSrvice.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/ScriptSrvice.java new file mode 100644 index 0000000..5e99b11 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/ScriptSrvice.java @@ -0,0 +1,560 @@ +package com.realnet.OpenAi.Services; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.realnet.utils.PortConstant; + +@Service +public class ScriptSrvice { + + @Value("${projectPath}") + private String projectPath; + + public void Createonefile(Integer prj_id, List lineList, String workflow_model, Long Deployment_profile) + throws IOException { + +// Parsing Json data + + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(workflow_model); + JsonArray Array = element.getAsJsonArray(); + + for (JsonElement ar : Array) { + + JsonObject obj = ar.getAsJsonObject(); + + JsonElement workflowvalue = obj.get("workflow"); + String value = workflowvalue.getAsString(); + + String tableid_url = PortConstant.BACKEND_PORTAL_DOMAIN + + "/token/fnd1/callingsureops/workflowlinebytable_id/" + value; + Object body2 = GET(tableid_url).getBody(); + String workflow = callforline(body2); + CreateFiles(prj_id, lineList, workflow, Deployment_profile); + +// } + +// } + } + + } + +// Creating files like yaml, shell SCript ,docker File + + public ResponseEntity CreateFiles(Integer prj_id, List lineList, String workflow_model, + Long Deployment_profile) throws IOException { + +// Appending data to Sting builder object + + HashMap json = new HashMap<>(); + + String PRJ_NAME = lineList.get(0); + String gitea_url = lineList.get(1); + +// Parsing Json data + + List keys = new ArrayList<>(); + + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(workflow_model); + JsonArray Array = element.getAsJsonArray(); + + int i = 1; + for (JsonElement ar : Array) { + JsonObject obj = ar.getAsJsonObject(); + Set> entries = obj.entrySet(); + for (Map.Entry entry : entries) { +// String key = entry.getKey(); + String value = entry.getValue().getAsString(); + keys.add(value); + + if (value.equalsIgnoreCase("Shell Script")) { + System.out.println("script data"); + script(prj_id, workflow_model, PRJ_NAME, gitea_url, Deployment_profile); + i++; + } + + } + } + if (i == 1) { + Createonefile(prj_id, lineList, workflow_model, Deployment_profile); + + } + + return new ResponseEntity>(json, HttpStatus.CREATED); + } + +// CREATE SCRIPT FILE + + public void script(Integer prj_id, String workflow_model, String prj, String gitea_url, Long deployment_line_id) + throws IOException { + +// String file_text2 = "script_test" + addString + ".sh"; + +// ArrayList list = calldeploymentprofile(Deployment_profile); + ArrayList list = new ArrayList<>(); + String pROTOCOL = PortConstant.PROTOCOL; + + ArrayList getdatafromgiturl = getdatafromgiturl(gitea_url); + + ArrayList namelist = new ArrayList<>(); + ArrayList filepath_list = new ArrayList<>(); + String sureops_dir = projectPath + File.separator + "cns-portal/code-extractor/builders" + File.separator + + prj_id + File.separator + "index"; + + StringBuilder scriptdata = new StringBuilder(); +// StringBuilder scriptvalue = new StringBuilder(); + + List keys = new ArrayList<>(); + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(workflow_model); + JsonArray Array = element.getAsJsonArray(); + + for (JsonElement ar : Array) { + JsonObject obj = ar.getAsJsonObject(); + Set> entries = obj.entrySet(); + for (Map.Entry entry : entries) { + String key = entry.getKey(); + String value = entry.getValue().getAsString(); + keys.add(value); + + if (key.equalsIgnoreCase("a_uri")) { + String full_url = value + "/" + prj_id + "/" + deployment_line_id + "/" + prj + "/" + "build_app"; + ArrayList jsonlist = call_url_byjson(full_url); + + String git_user = jsonlist.get(0).toString().replace("\"", ""); + list.add(git_user); + + String git_password = jsonlist.get(1).toString().replace("\"", ""); + list.add(git_password); + + String git_email = jsonlist.get(2).toString().replace("\"", ""); + list.add(git_email); + + String dokr_username = jsonlist.get(3).toString().replace("\"", ""); + list.add(dokr_username); + + String dokr_url = jsonlist.get(4).toString().replace("\"", ""); + list.add(dokr_url); + + String dokr_pass = jsonlist.get(5).toString().replace("\"", ""); + list.add(dokr_pass); + + String PRJ_NAME = jsonlist.get(6).toString().replace("\"", ""); + list.add(PRJ_NAME); + + String MSG = jsonlist.get(7).toString().replace("\"", ""); + list.add(MSG); + + String DOMAIN = jsonlist.get(8).toString().replace("\"", ""); + list.add(DOMAIN); + + String REPO_NAME = jsonlist.get(9).toString().replace("\"", ""); + list.add(REPO_NAME); + + String REPO_NAME_TO = jsonlist.get(10).toString().replace("\"", ""); + list.add(REPO_NAME_TO); + + } + + if (key.equals("destination")) { + filepath_list.add(value); + } + if (key.equals("name")) { + namelist.add(value); + } + + } + } + + for (JsonElement ar : Array) { + JsonObject obj = ar.getAsJsonObject(); + + Set> entries = obj.entrySet(); + for (Map.Entry entry : entries) { + String key = entry.getKey(); + + String value = entry.getValue().getAsString(); + if (key.equalsIgnoreCase("script")) { + + if (list.isEmpty()) { + scriptdata.append(value); + System.out.println(scriptdata); + } else { + + String replace = value.replace("", list.get(9).toString().replace("\"", "")); + String replace2 = replace.replace("", prj); + + String replace3 = replace2.replace("", list.get(0).toString().replace("\"", "")); + + String replace4 = replace3.replace("", list.get(1).toString().replace("\"", "")); + + String replace5 = replace4.replace("", list.get(2).toString().replace("\"", "")); + + String replace6 = replace5.replace("", list.get(8).toString().replace("\"", "")); + + String replace7 = replace6.replace("", list.get(3).toString().replace("\"", "")); + + String replace8 = replace7.replace("", list.get(5).toString().replace("\"", "")); + + String replace9 = replace8.replace("", list.get(4).toString().replace("\"", "")); + + String replace10 = replace9.replace("", sureops_dir); + + String replace11 = replace10.replace("", pROTOCOL); + +// .replace("", ); + + String finalreplace_value = replace11.replace("", + "\"" + list.get(7).toString().replace("\"", "") + "\""); + + // for testing + scriptdata.append(finalreplace_value); + System.out.println("scriptdata make"); + } + + } + } + } + + String file_text = null; + + if (!namelist.isEmpty()) { + file_text = namelist.get(0).toString().replace("\"", "") + ".sh"; + + } else { + file_text = "copy_exec" + ".sh"; + } + +// Creating Folder + + String Path1 = null; + String ref_path = null; + + // when destination is not empty + if (!filepath_list.isEmpty()) { + String sureopspath_name = filepath_list.get(0).toString().replace("\"", ""); + + ref_path = File.separator + sureopspath_name; + + Path1 = projectPath + File.separator + "cns-portal/code-extractor/builders"; + + File builderMainDir1 = new File(Path1); + if (!builderMainDir1.exists()) { + boolean mkdir = builderMainDir1.mkdir(); + System.out.println("builder folder " + mkdir); + } + + Path1 = Path1 + File.separator + prj_id; + + System.out.println(Path1); + + File staticMainDir1 = new File(Path1); + if (!staticMainDir1.exists()) { + boolean mkdir = staticMainDir1.mkdir(); + System.out.println(mkdir); + } + + Path1 = Path1 + ref_path; + System.out.println(Path1); + + File Dir1 = new File(Path1); + if (!Dir1.exists()) { + boolean mkdir = Dir1.mkdir(); + if (!mkdir) { + System.out.println("folder not created"); + + } + } + + // when destination is empty + } else { + + Path1 = projectPath + File.separator + "cns-portal/code-extractor/builders"; + + File builderMainDir1 = new File(Path1); + if (!builderMainDir1.exists()) { + boolean mkdir = builderMainDir1.mkdir(); + System.out.println("builder folder " + mkdir); + } + + Path1 = Path1 + File.separator + prj_id; + + File staticMainDir1 = new File(Path1); + if (!staticMainDir1.exists()) { + boolean mkdir = staticMainDir1.mkdir(); + System.out.println(mkdir); + } + + ref_path = File.separator + "index"; + + Path1 = Path1 + ref_path; + System.out.println(Path1); + + File Dir2 = new File(Path1); + if (!Dir2.exists()) { + boolean mkdir = Dir2.mkdir(); + if (!mkdir) { + System.out.println("folder not created"); + + } + } + + } + + // creating files +// String dir2 = projectPath + "/yaml_files" + addString + "/" + file_text; + String dir2 = Path1 + File.separator + file_text; + + File file = new File(dir2); + + if (!file.exists()) { + file.createNewFile(); + + Files.setPosixFilePermissions(file.toPath(), PosixFilePermissions.fromString("rwxrwxrwx")); + + file.setExecutable(true); + file.setReadable(true); + file.setWritable(true); + } + System.out.println("file created successfully"); + System.out.println("file path : " + dir2); + + FileWriter fw = new FileWriter(file.getAbsoluteFile()); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(scriptdata.toString()); + bw.close(); + + String filepath = Path1; + String filename = file_text; + + // INSERT DATA IN JOB PRO FOR RUN SCRIPT +// insertin_jobpro(prj_id, filename, filepath); + +// } + } + + // CALL PROJECT PORTAL + public List callforproject(Object object) throws JsonProcessingException { + + List list = new ArrayList<>(); + ObjectMapper mapper = new ObjectMapper(); + String str = mapper.writeValueAsString(object); +// System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object));// print + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(str); + + JsonObject obj = element.getAsJsonObject(); + + String prj_name = obj.get("projectName").getAsString(); + list.add(prj_name); + + String gitea_url = obj.get("gitea_url").getAsString(); + list.add(gitea_url); + + return list; + } + + public String callforline(Object object) throws JsonProcessingException { + + ObjectMapper mapper = new ObjectMapper(); + String str = mapper.writeValueAsString(object); +// System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object));// print + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(str); + + JsonObject obj = element.getAsJsonObject(); + JsonElement workflowid = obj.get("model"); + System.out.println(workflowid); + return workflowid.getAsString(); + } + + public String callfortable(Object object) throws JsonProcessingException { + + ObjectMapper mapper = new ObjectMapper(); + String str = mapper.writeValueAsString(object); +// System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object));// print + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(str); + + JsonObject obj = element.getAsJsonObject(); + JsonElement workflowid = obj.get("id"); + System.out.println(workflowid); + return workflowid.getAsString(); + } + + public ResponseEntity GET(String get) { + RestTemplate restTemplate = new RestTemplate(); + + ResponseEntity u = restTemplate.getForEntity(get, Object.class); + + return u; + + } + + private HttpHeaders getHeaders() { + HttpHeaders headers = new HttpHeaders(); + headers.set("Content-Type", MediaType.APPLICATION_JSON_VALUE); + headers.set("Accept", MediaType.APPLICATION_JSON_VALUE); + return headers; + } + + public ArrayList calldeploymentprofile(Long Deployment_profile) throws JsonProcessingException { + ArrayList list = new ArrayList<>(); + + String tableid_url = PortConstant.BACKEND_PORTAL_DOMAIN + "/token/fnd1/callingsureops/deplomentprofile_line/" + + Deployment_profile; + Object body2 = GET(tableid_url).getBody(); + + ObjectMapper mapper = new ObjectMapper(); + String str = mapper.writeValueAsString(body2); +// System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(body2));// print + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(str); + + JsonObject obj = element.getAsJsonObject(); + + JsonElement git_user = obj.get("git_user"); + list.add(git_user); + + JsonElement git_password = obj.get("git_password"); + list.add(git_password); + + JsonElement git_email = obj.get("git_email"); + list.add(git_email); + + System.out.println(list); + return list; + } + + public ArrayList call_url_byjson(String full_url) throws JsonProcessingException { + ArrayList list = new ArrayList<>(); + + Object body2 = GET(full_url).getBody(); + + ObjectMapper mapper = new ObjectMapper(); + String str = mapper.writeValueAsString(body2); +// System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(body2));// print + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(str); + + JsonObject obj = element.getAsJsonObject(); + + JsonElement git_user = obj.get("GITEA_USER"); + list.add(git_user); + + JsonElement git_password = obj.get("GITEA_PASS"); + list.add(git_password); + + JsonElement git_email = obj.get("GITEA_EMAIL"); + list.add(git_email); + + JsonElement dokr_username = obj.get("DOCKER_USER"); + list.add(dokr_username); + + JsonElement dokr_url = obj.get("DOCKER_URL"); + list.add(dokr_url); + + JsonElement dokr_pass = obj.get("DOCKER_PASS"); + list.add(dokr_pass); + + JsonElement PRJ_NAME = obj.get("PRJ_NAME"); + list.add(PRJ_NAME); + + JsonElement MSG = obj.get("MSG"); + list.add(MSG); + + JsonElement DOMAIN = obj.get("DOMAIN"); + list.add(DOMAIN); + + JsonElement REPO_NAME = obj.get("REPO_NAME"); + list.add(REPO_NAME); + + JsonElement REPO_NAME_TO = obj.get("REPO_NAME_TO"); + list.add(REPO_NAME_TO); + + System.out.println(list); + return list; + } + + public ArrayList getdatafromgiturl(String str) throws JsonProcessingException { + + ArrayList list = new ArrayList<>(); + + int indexOf = str.indexOf("://"); + +// int indexOf2 = str.indexOf("/a"); + + int ordinalIndexOf = StringUtils.ordinalIndexOf(str, "/", 3); + String domain = str.substring(indexOf + 3, ordinalIndexOf); + +// String domain = str.substring(indexOf + 3, indexOf2); + + System.out.println("\n" + domain); + list.add(domain); + + int namelast = str.lastIndexOf("/"); + int namelast2 = str.lastIndexOf("."); + String name = str.substring(namelast + 1, namelast2); + System.out.println(name); + list.add(name); + + return list; + } + + public ResponseEntity geterror() { + return new ResponseEntity<>("file not created", HttpStatus.BAD_REQUEST); + } + + public void insertin_jobpro(Integer prj_id, String filename, String filepath) throws JsonProcessingException { + + Map jobdata = new HashMap(); +// jobdata.put("parameters", builder.toString()); + jobdata.put("url", + PortConstant.SUREOPS_DOMAIN + "/sureops/runScript?filepath=" + filepath + "&filename=" + filename); + jobdata.put("method", "GET"); + jobdata.put("connection_name", "jobprtal"); + jobdata.put("createdBy", "2022"); + jobdata.put("updatedBy", "2022"); + jobdata.put("job_type", "CreatesureprjPrj"); + jobdata.put("ref", prj_id.toString()); + System.out.println(jobdata); + + RestTemplate restTemplate = new RestTemplate(); + String jobprourl = PortConstant.JOBPRO_DOMAIN + "/jobpro/pipiline"; + HttpHeaders headers = getHeaders(); + HttpEntity request = new HttpEntity(jobdata, headers); + ResponseEntity res1 = restTemplate.postForEntity(jobprourl, request, Object.class); + if (res1.getStatusCodeValue() == 200) { + System.out.println("script runner data inserted in job pro"); + } +// System.out.println(res1.getBody()); + } + +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/Script_Making.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/Script_Making.java new file mode 100644 index 0000000..730b145 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/Script_Making.java @@ -0,0 +1,170 @@ +package com.realnet.OpenAi.Services; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.realnet.fnd.response.EntityResponse; +import com.realnet.utils.PortConstant; + +@Service +public class Script_Making { + + @Value("${projectPath}") + private String projectPath; + + @Autowired + private ScriptSrvice sureservice; + +// Creating files like yaml, shell SCript ,docker File + + public ResponseEntity CreateFiles(Integer prj_id,String workflow_id,long Deployment_profile) + throws IOException { + +// String table_name = tble.replaceAll(" ", "_").toLowerCase(); + + + String prj_url = PortConstant.BACKEND_PORTAL_DOMAIN + + "/token/fnd1/callingsureops/getproject/" + prj_id; + + // get project + ResponseEntity prj = GET(prj_url); + Object prj_body = prj.getBody(); + List lineList = callforproject(prj_body); + + + + // get workflowline + String line_url = PortConstant.BACKEND_PORTAL_DOMAIN + + "/token/fnd1/callingsureops/workflowline/" + workflow_id; + ResponseEntity get = GET(line_url); + Object body = get.getBody(); + String workflow_model = callforline(body); + + String PRJ_NAME = lineList.get(0); + String gitea_url = lineList.get(1); + + +// Parsing Json data + + JsonParser parser1 = new JsonParser(); + JsonElement element1 = parser1.parse(workflow_model); + JsonArray Array1 = element1.getAsJsonArray(); + + int i = 1; + for (JsonElement ar1 : Array1) { + JsonObject obj1 = ar1.getAsJsonObject(); +// System.out.println(obj1); + Set> entries = obj1.entrySet(); + for (Map.Entry entry : entries) { + String key = entry.getKey(); + String value1 = entry.getValue().getAsString(); + + if (value1.equalsIgnoreCase("Shell Script")) { + System.out.println("script data"); + sureservice.script(prj_id, workflow_model, PRJ_NAME, gitea_url, + Deployment_profile); + i++; + } + } + } + if (i == 1) { + + sureservice.Createonefile(prj_id, lineList, workflow_model, Deployment_profile); + } + + + + + + return new ResponseEntity<>(new EntityResponse("script file created"), HttpStatus.CREATED); + + } + + + + public List callforproject(Object object) throws JsonProcessingException { + + List list = new ArrayList<>(); + ObjectMapper mapper = new ObjectMapper(); + String str = mapper.writeValueAsString(object); +// System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object));// print + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(str); + + JsonObject obj = element.getAsJsonObject(); + + String prj_name = obj.get("projectName").getAsString(); + list.add(prj_name); + + String gitea_url = obj.get("gitea_url").getAsString(); + list.add(gitea_url); + + String prj_id = obj.get("id").getAsString(); + list.add(prj_id); + + return list; + } + + public String callforline(Object object) throws JsonProcessingException { + + ObjectMapper mapper = new ObjectMapper(); + String str = mapper.writeValueAsString(object); +// System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object));// print + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(str); + + JsonObject obj = element.getAsJsonObject(); + JsonElement workflowid = obj.get("model"); +// System.out.println(workflowid); + return workflowid.getAsString(); + } + + public String callfortable(Object object) throws JsonProcessingException { + + ObjectMapper mapper = new ObjectMapper(); + String str = mapper.writeValueAsString(object); +// System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object));// print + JsonParser parser = new JsonParser(); + JsonElement element = parser.parse(str); + + JsonObject obj = element.getAsJsonObject(); + JsonElement workflowid = obj.get("id"); +// System.out.println(workflowid); + return workflowid.getAsString(); + } + + public ResponseEntity GET(String get) { + RestTemplate restTemplate = new RestTemplate(); + + ResponseEntity u = restTemplate.getForEntity(get, Object.class); + + return u; + + } + + private HttpHeaders getHeaders() { + HttpHeaders headers = new HttpHeaders(); + headers.set("Content-Type", MediaType.APPLICATION_JSON_VALUE); + headers.set("Accept", MediaType.APPLICATION_JSON_VALUE); + return headers; + } + +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/config/EmailService.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/config/EmailService.java index fc351d0..634d220 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/config/EmailService.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/config/EmailService.java @@ -19,7 +19,7 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; -import com.realnet.utils.Port_Constant; +import com.realnet.utils.PortConstant; import lombok.extern.slf4j.Slf4j; @@ -116,7 +116,7 @@ public class EmailService { HttpEntity> requestEntity = new HttpEntity<>(queryParams, headers); - String apiUrl2 = Port_Constant.SURE_SETU_DOMAIN + String apiUrl2 = PortConstant.SURE_SETU_DOMAIN + "/token/Surecommunication/communication/jobtable/Com_jobTable"; // Replace with the // actual API URL diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/session/controller/SessionController.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/session/controller/SessionController.java index f532521..c7cb956 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/session/controller/SessionController.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/session/controller/SessionController.java @@ -371,9 +371,9 @@ public class SessionController { public ResponseEntity resendotp(@RequestParam String email) { AppUser user = userService.findUserByEmail(email); - if (user == null) { - return ResponseEntity.badRequest().body(new MessageResponse(email + " not exist")); - } else { +// if (user == null) { +// return ResponseEntity.badRequest().body(new MessageResponse(email + " not exist")); +// } else { // Random random = new Random(); SecureRandom random = new SecureRandom(); @@ -383,7 +383,7 @@ public class SessionController { String url = String.valueOf(otp); emailService.sendEmail(email, subject, url); return new ResponseEntity<>(new EntityResponse("resend Otp send successfully"), HttpStatus.OK); - } +// } } diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/controller/UserController.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/controller/UserController.java index 2a01ae8..354374e 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/controller/UserController.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/controller/UserController.java @@ -37,7 +37,7 @@ import com.realnet.users.repository1.AppUserRepository; import com.realnet.users.repository1.passwordTokenRepository; import com.realnet.users.response.MessageResponse; import com.realnet.users.service1.AppUserServiceImpl; -import com.realnet.utils.Port_Constant; +import com.realnet.utils.PortConstant; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -210,7 +210,7 @@ public class UserController { String em = user.getEmail(); String subject = "Pass reset"; - String url = "http://" + Port_Constant.LOCAL_HOST + ":" + Port_Constant.FRONTEND_PORT_9191 + String url = "http://" + PortConstant.LOCAL_HOST + ":" + PortConstant.FRONTEND_PORT_9191 + "/#/forgotresetpassword/" + token; // String url = "http://surecns.ml:30165/#/forgotresetpassword/" + token; // String url = "http://localhost:9191/api" + "/resources/savePassword/" + token; diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/controller1/AppUserController.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/controller1/AppUserController.java index f000b43..e75a9f6 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/controller1/AppUserController.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/controller1/AppUserController.java @@ -44,7 +44,7 @@ import com.realnet.users.repository1.AppUserRepository; import com.realnet.users.repository1.AppUserRoleRepository; import com.realnet.users.response.MessageResponse; import com.realnet.users.service1.AppUserServiceImpl; -import com.realnet.utils.Port_Constant; +import com.realnet.utils.PortConstant; import io.swagger.annotations.ApiOperation; @@ -203,7 +203,7 @@ public class AppUserController { String subject = "add user"; - String url = Port_Constant.FRONTEND_PORTAL_DOMAIN + "/#/adduser/" + token; + String url = PortConstant.FRONTEND_PORTAL_DOMAIN + "/#/adduser/" + token; // String url = "http://localhost:4200/#/adduser/" +token; // String url = "http://surecns.ml:30165/#/adduser/" +token; // String url = "http://" + Port_Constant.LOCAL_HOST + ":" + Port_Constant.BACKEND_PORT_9191 + "/api" @@ -281,7 +281,7 @@ public class AppUserController { userService.addguestviaadmin(appUser, token, email, account_id); // String subject = "add guest"; - String url = Port_Constant.FRONTEND_PORTAL_DOMAIN + "/#/addguest/" + token; + String url = PortConstant.FRONTEND_PORTAL_DOMAIN + "/#/addguest/" + token; // String url = "http://localhost:4200/#/addguest/" +token; // String url = "http://surecns.ml:30165/#/addguest/" +token; diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/service1/AppUserServiceImpl.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/service1/AppUserServiceImpl.java index 1bfdb2c..e739cfc 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/service1/AppUserServiceImpl.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/users/service1/AppUserServiceImpl.java @@ -628,7 +628,8 @@ public class AppUserServiceImpl implements UserDetailsService, AppUserService { AppUser user = findUserByEmail(email); user.setRandom_no(String.valueOf(otp)); - + user.setUsername(email); + user.setEmail(email); appUserRepository.save(user); } diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/utils/PortConstant.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/utils/PortConstant.java new file mode 100644 index 0000000..70e8af0 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/utils/PortConstant.java @@ -0,0 +1,100 @@ +package com.realnet.utils; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.client.RestTemplate; + +public class PortConstant { + + public final static String LOCAL_HOST = "43.205.154.152"; + public final static String FRONTEND_PORT_9191 = "30165"; + + public final static String GITEA_IP_ADDRESS = "try.gitea"; + public final static String GITEA_PORT = "io"; + public final static String SUREVAULT_DEPLOYMENT_TYPE = "32"; + + public static String BACKEND_PORTAL_DOMAIN; + public static String FRONTEND_PORTAL_DOMAIN; + public static String SUREOPS_DOMAIN; + public static String JOBPRO_DOMAIN; + public static String APP_BUILD_DOMAIN; + public static String SURE_SERVE_DOMAIN; + public static String SURE_SETU_DOMAIN; + public static String FARM_SCRIPT_RUNNER_DOMAIN; + public static String DEPLOYMENT_TYPE; + public static String FARM_IP_ADDRESS_online; + public static String CONTROL_CENTRE_PORT; + public static String CONTROL_CENTRE_MASTER_PORT; + public static String CONTROL_CENTRE_MASTER_IP; + public static String LOCALHOST; + public static String SUREOPS_LOCALHOST; + public static String APPBUILD_LOCALHOST; + public static String SURE_VAULT_DOMAIN; + public static String GITEA_DOMAIN; + public static String GITEA_USERNAME; + public static String PROTOCOL; + +// SETTER + private final RestTemplate restTemplate = new RestTemplate(); + + // Type ('dev', 'prod') + private final String type = "dev"; + + @Value("${BACKEND_PORTAL_DOMAIN}") + private String backendPortalDomain; + + // @PostConstruct is used to make API calls and initialize the constants for the + // entire application during startup. + @PostConstruct + public void initializeConstantsFromApi() { + + + + if (backendPortalDomain != null) { + BACKEND_PORTAL_DOMAIN = backendPortalDomain; + System.out.println("Fetched BACKEND_PORTAL_DOMAIN from properties file: " + backendPortalDomain); + + FRONTEND_PORTAL_DOMAIN = getUrlFromApi(backendPortalDomain, "Frontend_portal_domain"); + System.out.println("FRONTEND_PORTAL_DOMAIN: " + FRONTEND_PORTAL_DOMAIN); + SUREOPS_DOMAIN = getUrlFromApi(backendPortalDomain, "SUREOPS_DOMAIN"); + JOBPRO_DOMAIN = getUrlFromApi(backendPortalDomain, "JOBPRO_DOMAIN"); + APP_BUILD_DOMAIN = getUrlFromApi(backendPortalDomain, "APP_BUILD_DOMAIN"); + SURE_SERVE_DOMAIN = getUrlFromApi(backendPortalDomain, "SURE_SERVE_DOMAIN"); + SURE_SETU_DOMAIN = getUrlFromApi(backendPortalDomain, "SURE_SETU_DOMAIN"); + FARM_SCRIPT_RUNNER_DOMAIN = getUrlFromApi(backendPortalDomain, "FARM_SCRIPT_RUNNER_DOMAIN"); + DEPLOYMENT_TYPE = getUrlFromApi(backendPortalDomain, "DEPLOYMENT_TYPE"); + FARM_IP_ADDRESS_online = getUrlFromApi(backendPortalDomain, "FARM_IP_ADDRESS_online"); + CONTROL_CENTRE_PORT = getUrlFromApi(backendPortalDomain, "CONTROL_CENTRE_PORT"); + CONTROL_CENTRE_MASTER_PORT = getUrlFromApi(backendPortalDomain, "CONTROL_CENTRE_MASTER_PORT"); + CONTROL_CENTRE_MASTER_IP = getUrlFromApi(backendPortalDomain, "CONTROL_CENTRE_MASTER_IP"); + LOCALHOST = getUrlFromApi(backendPortalDomain, "Localhost"); + SUREOPS_LOCALHOST = getUrlFromApi(backendPortalDomain, "SUREOPS_LOCALHOST"); + APPBUILD_LOCALHOST = getUrlFromApi(backendPortalDomain, "APPBUILD_LOCALHOST"); + SURE_VAULT_DOMAIN = getUrlFromApi(backendPortalDomain, "SURE_VAULT_DOMAIN"); + GITEA_DOMAIN = getUrlFromApi(backendPortalDomain, "GITEA_DOMAIN"); + GITEA_USERNAME = getUrlFromApi(backendPortalDomain, "GITEA_USERNAME"); + PROTOCOL = getUrlFromApi(backendPortalDomain, "PROTOCOL"); + + } else { + System.out.println("Error: BACKEND_PORTAL_DOMAIN could not be fetched."); + } + } + + private String getUrlFromApi(String backendPortalDomain, String serviceName) { + try { + // Use the provided backendPortalDomain to construct the full URL + String baseUrl = backendPortalDomain + "/token/HealthCheckup/DeploymentUrl/Deployment_url/"; + String url = baseUrl + type + "/" + serviceName; + + String Object = restTemplate.getForObject(url, String.class); // Fetch URL from API + + System.out.println(serviceName + " : " + Object); + return Object; + } catch (Exception e) { + System.out.println("Error fetching URL for " + serviceName + ": " + e.getMessage()); + return null; + } + } + +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/utils/Port_Constant.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/utils/Port_Constant.java deleted file mode 100644 index 65e6b6f..0000000 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/utils/Port_Constant.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.realnet.utils; - -public class Port_Constant { - - public final static String LOCAL_HOST = "43.205.154.152"; - public final static String FRONTEND_PORT_9191 = "30165"; - public static String SURE_SETU_DOMAIN = "http://34.198.218.30:30173"; - - public final static String GITEA_IP_ADDRESS = "try.gitea"; - public final static String GITEA_PORT = "io"; - public final static String SURE_VAULT_DOMAIN = "http://54.92.243.148:30150"; - public final static String SUREVAULT_DEPLOYMENT_TYPE = "32"; - public static String FRONTEND_PORTAL_DOMAIN; - -} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Controllers/SiteBuilderController.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Controllers/SiteBuilderController.java new file mode 100644 index 0000000..c3f132b --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Controllers/SiteBuilderController.java @@ -0,0 +1,91 @@ +package com.realnet.vpspack.Controllers; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.realnet.fnd.response.EntityResponse; +import com.realnet.vpspack.Entity.SiteBuilder; +import com.realnet.vpspack.Services.SiteBuilderService; + +@RequestMapping(value = "/SiteTree") +@CrossOrigin("*") +@RestController +public class SiteBuilderController { + @Autowired + private SiteBuilderService Service; + + @Value("${projectPath}") + private String projectPath; + + @PostMapping("/SiteTree") + public SiteBuilder Savedata(@RequestBody SiteBuilder data) { + SiteBuilder save = Service.Savedata(data); + + System.out.println("data saved..." + save); + + return save; + } + + @PutMapping("/SiteTree/{id}") + public SiteBuilder update(@RequestBody SiteBuilder data, @PathVariable Integer id) { + SiteBuilder update = Service.update(data, id); + System.out.println("data update..." + update); + return update; + } + +// get all with pagination + @GetMapping("/SiteTree/getall/page") + public Page getall(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size) { + Pageable paging = PageRequest.of(page, size); + Page get = Service.getAllWithPagination(paging); + + return get; + + } + + @GetMapping("/SiteTree") + public List getdetails() { + List get = Service.getdetails(); + return get; + } +// get all without authentication + + @GetMapping("/token/SiteTree") + public List getallwioutsec() { + List get = Service.getdetails(); + return get; + } + + @GetMapping("/SiteTree/{id}") + public SiteBuilder getdetailsbyId(@PathVariable Integer id) { + SiteBuilder get = Service.getdetailsbyId(id); + return get; + } + + @DeleteMapping("/SiteTree/{id}") + public ResponseEntity delete_by_id(@PathVariable Integer id) { + Service.delete_by_id(id); + return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK); + + } + + +} \ No newline at end of file diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Entity/SiteBuilder.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Entity/SiteBuilder.java new file mode 100644 index 0000000..766f004 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Entity/SiteBuilder.java @@ -0,0 +1,35 @@ +package com.realnet.vpspack.Entity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +import com.realnet.WhoColumn.Entity.Extension; + +import lombok.Data; + +@Entity +@Data +public class SiteBuilder extends Extension { + /** + * + */ + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + private String name; + + @Column(length = 2000) + private String description; + + private boolean active; + + @Column(length = 10000) + private String model; + +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Repository/SiteBuilderRepository.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Repository/SiteBuilderRepository.java new file mode 100644 index 0000000..c1941e2 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Repository/SiteBuilderRepository.java @@ -0,0 +1,21 @@ +package com.realnet.vpspack.Repository; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import com.realnet.vpspack.Entity.SiteBuilder; + +@Repository +public interface SiteBuilderRepository extends JpaRepository { + + @Query(value = "select * from site_builder where created_by=?1", nativeQuery = true) + List findAll(Long creayedBy); + + @Query(value = "select * from site_builder where created_by=?1", nativeQuery = true) + Page findAll(Pageable page, Long creayedBy); +} \ No newline at end of file diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Services/SiteBuilderService.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Services/SiteBuilderService.java new file mode 100644 index 0000000..1401589 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/vpspack/Services/SiteBuilderService.java @@ -0,0 +1,86 @@ +package com.realnet.vpspack.Services; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import com.realnet.realm.Entity.Realm; +import com.realnet.realm.Services.RealmService; +import com.realnet.users.entity1.AppUser; +import com.realnet.users.service1.AppUserServiceImpl; +import com.realnet.vpspack.Entity.SiteBuilder; +import com.realnet.vpspack.Repository.SiteBuilderRepository; + +@Service +public class SiteBuilderService { + @Autowired + private SiteBuilderRepository Repository; + @Autowired + private AppUserServiceImpl userService; + @Autowired + private RealmService realmService; + + public SiteBuilder Savedata(SiteBuilder data) { + + data.setUpdatedBy(getUser().getUserId()); + data.setCreatedBy(getUser().getUserId()); + data.setAccountId(getUser().getAccount().getAccount_id()); + SiteBuilder save = Repository.save(data); + return save; + } + +// get all with pagination + public Page getAllWithPagination(Pageable page) { + return Repository.findAll(page, getUser().getUserId()); + } + + public List getdetails() { + List realm = realmService.findByUserId(getUser().getUserId()); + List all = Repository.findAll(getUser().getUserId()); + + return all; + } + + public SiteBuilder getdetailsbyId(Integer id) { + return Repository.findById(id).get(); + } + + public void delete_by_id(Integer id) { + Repository.deleteById(id); + } + + public SiteBuilder update(SiteBuilder data, Integer id) { + SiteBuilder old = Repository.findById(id).get(); + + if (data.getName() != null) { + old.setName(data.getName()); + } + + if (data.getDescription() != null) { + old.setDescription(data.getDescription()); + } + + if (data.getModel() != null) { + old.setModel(data.getModel()); + } + + // isActive is boolean, use Boolean wrapper to check null safety + if (data.isActive() != old.isActive()) { + old.setActive(data.isActive()); + } + + old.setUpdatedBy(getUser().getUserId()); + + final SiteBuilder test = Repository.save(old); + return test; + } + + public AppUser getUser() { + AppUser user = userService.getLoggedInUser(); + return user; + + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/resources/application.properties b/visaproject-back-b/authsec_springboot/backend/src/main/resources/application.properties index 00cb85b..18ed6d0 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/resources/application.properties +++ b/visaproject-back-b/authsec_springboot/backend/src/main/resources/application.properties @@ -95,4 +95,7 @@ app.oauth2.authorizedRedirectUris=http://localhost:8081/oauth2/redirect,myandroi projectPath=@project.basedir@ -angularProjectPath=@project.basedir@/webui \ No newline at end of file +angularProjectPath=@project.basedir@/webui + + +BACKEND_PORTAL_DOMAIN=http://157.66.191.31:30166