From 819076c659006b5009d3af6cfefa154209c51220 Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Date: Mon, 9 Jun 2025 20:14:19 +0530 Subject: [PATCH] img --- .../Controller/HtmlGeneratorController.java | 5 +- .../Controller/PhotoSearchController.java | 24 +++++++ .../OpenAi/Models/UnsplashPhotoResponse.java | 44 ++++++++++++ .../realnet/OpenAi/Services/HtmlBuilder5.java | 71 +++++++++++++++---- .../OpenAi/Services/UnsplashService.java | 40 +++++++++++ .../dlf/Services/Design_lbraryService.java | 5 -- .../java/com/realnet/utils/PortConstant.java | 3 + 7 files changed, 171 insertions(+), 21 deletions(-) create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/PhotoSearchController.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Models/UnsplashPhotoResponse.java create mode 100644 visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/UnsplashService.java 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 index 4e4848f..f383b1f 100644 --- 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 @@ -30,6 +30,9 @@ public class HtmlGeneratorController { @Autowired private HtmlGenerTorService htmlGenerTorService; + @Autowired + private HtmlBuilder5 htmlBuilder5; + @Autowired private Design_lbraryService designLibraryService; @@ -79,7 +82,7 @@ public class HtmlGeneratorController { for (Map.Entry entry : jsonInput.entrySet()) { Map root = (Map) entry.getValue(); root.put("element", entry.getKey()); // use key as tag like "section" - html.append(HtmlBuilder5.buildHtml(root)); + html.append(htmlBuilder5.buildHtml(root, jsonInput)); } return ResponseEntity.ok(new EntityResponse(html.toString())); diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/PhotoSearchController.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/PhotoSearchController.java new file mode 100644 index 0000000..90a33db --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Controller/PhotoSearchController.java @@ -0,0 +1,24 @@ +package com.realnet.OpenAi.Controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +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.UnsplashService; + +@RestController +@RequestMapping("/api/photos") +public class PhotoSearchController { + + @Autowired + private UnsplashService unsplashService; + + @GetMapping("/search") + public List searchPhotos(@RequestParam String keyword) { + return unsplashService.getImageUrls(keyword); + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Models/UnsplashPhotoResponse.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Models/UnsplashPhotoResponse.java new file mode 100644 index 0000000..0338021 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Models/UnsplashPhotoResponse.java @@ -0,0 +1,44 @@ +package com.realnet.OpenAi.Models; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class UnsplashPhotoResponse { + private List results; + + public List getResults() { + return results; + } + + public void setResults(List results) { + this.results = results; + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Result { + private Urls urls; + + public Urls getUrls() { + return urls; + } + + public void setUrls(Urls urls) { + this.urls = urls; + } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Urls { + private String regular; + + public String getRegular() { + return regular; + } + + public void setRegular(String regular) { + this.regular = regular; + } + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder5.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder5.java index 47bd384..f64733a 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder5.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/HtmlBuilder5.java @@ -1,11 +1,23 @@ package com.realnet.OpenAi.Services; +import java.util.HashMap; import java.util.List; import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import com.realnet.utils.PortConstant; + +@Service public class HtmlBuilder5 { - public static String buildHtml(Object nodeObj) { + @Autowired + private UnsplashService unsplashService; + + public String buildHtml(Object nodeObj, Map jsonInput) { if (!(nodeObj instanceof Map)) return ""; Map node = (Map) nodeObj; @@ -18,7 +30,7 @@ public class HtmlBuilder5 { Object value = entry.getValue(); if (value instanceof Map) { ((Map) value).put("element", tag); - return buildHtml(value); + return buildHtml(value, jsonInput); } } @@ -30,7 +42,7 @@ public class HtmlBuilder5 { // ✅ CUSTOM: Render using keywords and Unsplash image if ("img".equals(tag) && node.containsKey("keywords")) { String keywords = getString(node, "keywords", ""); - String imageUrl = getImageFromKeyword(keywords); + String imageUrl = getImageFromKeyword(keywords, jsonInput); html.append(" if element not defined html.append("

").append(titleObj.toString()).append("

"); @@ -102,7 +114,7 @@ public class HtmlBuilder5 { if (node.containsKey("description")) { Object descObj = node.get("description"); if (descObj instanceof Map) { - html.append(buildHtml(descObj)); + html.append(buildHtml(descObj, jsonInput)); } else { html.append("

").append(descObj.toString()).append("

"); } @@ -113,11 +125,11 @@ public class HtmlBuilder5 { if (children instanceof List) { for (Object child : (List) children) { if (child instanceof Map) { - html.append(buildHtml((Map) child)); + html.append(buildHtml((Map) child, jsonInput)); } } } else if (children instanceof Map) { - html.append(buildHtml((Map) children)); + html.append(buildHtml((Map) children, jsonInput)); } // Handle content (like in 'section' root) @@ -125,11 +137,11 @@ public class HtmlBuilder5 { if (content instanceof List) { for (Object child : (List) content) { if (child instanceof Map) { - html.append(buildHtml((Map) child)); + html.append(buildHtml((Map) child, jsonInput)); } } } else if (content instanceof Map) { - html.append(buildHtml((Map) content)); + html.append(buildHtml((Map) content, jsonInput)); } // Close tag @@ -232,16 +244,45 @@ public class HtmlBuilder5 { return html.toString(); } - private static String getImageFromKeyword(String keywords) { - // Convert space-separated keywords to Unsplash format + private String getImageFromKeyword(String keywords, Map jsonInput) { String query = keywords.trim().replace(" ", ","); - // Return Unsplash proxy image URL (free to use) -// "https://images.unsplash.com/photo-1506744038136-46273834b3fb?auto=format&fit=crop&w=800&q=80" -// return "https://source.unsplash.com/800x400/?" + query; + // 1. Get list of image URLs from Unsplash + List imageUrls = unsplashService.getImageUrls(keywords); - return "https://images.unsplash.com/" + query + "?auto=format&fit=crop&w=800&q=80"; + // 2. Prepare prompt for Gemini + StringBuilder promptBuilder = new StringBuilder(); + promptBuilder.append( + "Given the following JSON section and keyword, pick the most relevant image from this list.\n\n"); + promptBuilder.append("Keyword: ").append(keywords).append("\n"); + promptBuilder.append("JSON:\n").append(jsonInput.toString()).append("\n\n"); + promptBuilder.append("Image URLs:\n"); + for (int i = 0; i < imageUrls.size(); i++) { + promptBuilder.append((i + 1)).append(". ").append(imageUrls.get(i)).append("\n"); + } + + promptBuilder.append("\nReturn only the single most relevant image URL."); + + // 3. Create body for Gemini call + Map geminiBody = new HashMap<>(); + geminiBody.put("query", promptBuilder.toString()); + + // 4. Send POST to Gemini API + RestTemplate restTemplate = new RestTemplate(); + String geminiUrl = PortConstant.OLLAMA_BACK_DOMAIN + "/api/gemini"; + +// try { +// ResponseEntity response = restTemplate.postForEntity(geminiUrl, geminiBody, String.class); +// if (response.getStatusCode().is2xxSuccessful()) { +// return response.getBody(); // Assuming Gemini returns plain URL string +// } +// } catch (Exception e) { +// e.printStackTrace(); // or log +// } + + // 5. Fallback: use first Unsplash image + return imageUrls.isEmpty() ? null : imageUrls.get(0); } } diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/UnsplashService.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/UnsplashService.java new file mode 100644 index 0000000..1d49816 --- /dev/null +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/OpenAi/Services/UnsplashService.java @@ -0,0 +1,40 @@ +package com.realnet.OpenAi.Services; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import com.realnet.OpenAi.Models.UnsplashPhotoResponse; + +@Service +public class UnsplashService { + + @Value("${unsplash.api.url}") + private String apiUrl; + + @Value("${unsplash.access.key}") + private String accessKey; + + public List getImageUrls(String keyword) { + RestTemplate restTemplate = new RestTemplate(); + String uri = UriComponentsBuilder.fromHttpUrl(apiUrl).queryParam("query", keyword) + .queryParam("client_id", accessKey).queryParam("per_page", 10).toUriString(); + + UnsplashPhotoResponse response = restTemplate.getForObject(uri, UnsplashPhotoResponse.class); + + List imageUrls = new ArrayList<>(); + if (response != null && response.getResults() != null) { + for (UnsplashPhotoResponse.Result r : response.getResults()) { + if (r.getUrls() != null && r.getUrls().getRegular() != null) { + imageUrls.add(r.getUrls().getRegular()); + } + } + } + + return imageUrls; + } +} diff --git a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/dlf/Services/Design_lbraryService.java b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/dlf/Services/Design_lbraryService.java index 85bc3eb..7f9d243 100644 --- a/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/dlf/Services/Design_lbraryService.java +++ b/visaproject-back-b/authsec_springboot/backend/src/main/java/com/realnet/dlf/Services/Design_lbraryService.java @@ -19,8 +19,6 @@ import org.springframework.stereotype.Service; import com.realnet.OpenAi.Services.HtmlBuilder3; import com.realnet.dlf.Entity.Design_lbrary; import com.realnet.dlf.Repository.Design_lbraryRepository; -import com.realnet.realm.Entity.Realm; -import com.realnet.realm.Services.RealmService; import com.realnet.users.entity1.AppUser; import com.realnet.users.service1.AppUserServiceImpl; @@ -33,8 +31,6 @@ public class Design_lbraryService { private Design_lbraryRepository designLibraryRepository; @Autowired private AppUserServiceImpl userService; - @Autowired - private RealmService realmService; public Design_lbrary Savedata(Design_lbrary data) { @@ -51,7 +47,6 @@ public class Design_lbraryService { } public List getdetails() { - List realm = realmService.findByUserId(getUser().getUserId()); List all = designLibraryRepository.findAll(getUser().getUserId()); return all; 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 index fdf0b1a..76db300 100644 --- 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 @@ -39,6 +39,7 @@ public class PortConstant { public static String SITE_BUILDER; public static String LOCAL_HOST; public static String SUREOPS_NEW_DOMAIN; + public static String OLLAMA_BACK_DOMAIN; public static String PROTOCOL; @@ -84,6 +85,8 @@ public class PortConstant { SITE_BUILDER = getUrlFromApi(backendPortalDomain, "SITE_BUILDER"); SUREOPS_NEW_DOMAIN = getUrlFromApi(backendPortalDomain, "SUREOPS_NEW_DOMAIN"); + OLLAMA_BACK_DOMAIN = getUrlFromApi(backendPortalDomain, "OLLAMA_BACK_DOMAIN"); + DOMAIN = getUrlFromApi(backendPortalDomain, "DOMAIN"); } else {