some minor changes

parent 184f79bf
...@@ -35,6 +35,17 @@ public class AdminResourceController { ...@@ -35,6 +35,17 @@ public class AdminResourceController {
if (resource.isPresent()){ if (resource.isPresent()){
Resource r = resource.get(); Resource r = resource.get();
r.setApproved(true); r.setApproved(true);
r.setHide(false);
resourceRepository.save(r);
}
}
@GetMapping("/archive/{id}")
public void archiveResource(@PathVariable("id") String idResource){
Optional<Resource> resource = resourceRepository.findById(idResource);
if (resource.isPresent()){
Resource r = resource.get();
r.setApproved(false);
r.setHide(true);
resourceRepository.save(r); resourceRepository.save(r);
} }
} }
......
...@@ -5,18 +5,14 @@ import com.mongodb.client.gridfs.GridFSFindIterable; ...@@ -5,18 +5,14 @@ import com.mongodb.client.gridfs.GridFSFindIterable;
import com.mongodb.client.gridfs.model.GridFSFile; import com.mongodb.client.gridfs.model.GridFSFile;
import ipm.ipmworks.model.*; import ipm.ipmworks.model.*;
import ipm.ipmworks.repository.*; import ipm.ipmworks.repository.*;
import ipm.ipmworks.service.EmailService;
import ipm.ipmworks.service.FileService; import ipm.ipmworks.service.FileService;
import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRAbstractBeanDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.fill.JRSwapFileVirtualizer;
import net.sf.jasperreports.engine.util.JRSwapFile;
import net.sf.jasperreports.export.SimpleExporterInput; import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput; import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimplePdfReportConfiguration; import net.sf.jasperreports.export.SimplePdfReportConfiguration;
import net.sf.jasperreports.export.SimpleXlsReportConfiguration;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -73,7 +69,8 @@ public class ResourceController { ...@@ -73,7 +69,8 @@ public class ResourceController {
@Autowired @Autowired
FileService fileService; FileService fileService;
@Autowired
EmailService emailService;
@Autowired @Autowired
@Qualifier("ipmDecisionRest") @Qualifier("ipmDecisionRest")
...@@ -105,6 +102,7 @@ public class ResourceController { ...@@ -105,6 +102,7 @@ public class ResourceController {
@RequestMapping(value="/saveResource", method= RequestMethod.POST) @RequestMapping(value="/saveResource", method= RequestMethod.POST)
public Resource saveResource(@RequestBody Resource r){ public Resource saveResource(@RequestBody Resource r){
r.setHide(false);
Resource res = rr.save(r); Resource res = rr.save(r);
return res; return res;
} }
...@@ -130,7 +128,10 @@ public class ResourceController { ...@@ -130,7 +128,10 @@ public class ResourceController {
if(title != null && !title.isEmpty()) { if(title != null && !title.isEmpty()) {
Resource r = new Resource(); Resource r = new Resource();
r.setExternal(true); r.setExternal(true);
r.getLinks().add("https://orgprints.org/"); Link link = new Link();
link.setName("orgprint");
link.setUrl("https://orgprints.org/");
r.getLinks().add(link);
r.setCanEdit(false); r.setCanEdit(false);
r.setProject("Organic Eprints"); r.setProject("Organic Eprints");
if (title != null) { if (title != null) {
...@@ -162,7 +163,10 @@ public class ResourceController { ...@@ -162,7 +163,10 @@ public class ResourceController {
if ((List<String>) map.get("documents") != null) { if ((List<String>) map.get("documents") != null) {
List<LinkedHashMap> documents = (List<LinkedHashMap>) map.get("documents"); List<LinkedHashMap> documents = (List<LinkedHashMap>) map.get("documents");
for (LinkedHashMap doc : documents) { for (LinkedHashMap doc : documents) {
r.getLinks().add((String) doc.get("uri")); Link link1 = new Link();
link1.setName((String) doc.get("uri"));
link1.setUrl((String) doc.get("uri"));
r.getLinks().add(link1);
} }
} }
...@@ -177,10 +181,14 @@ public class ResourceController { ...@@ -177,10 +181,14 @@ public class ResourceController {
return null; return null;
} }
} }
private Resource createResourceFromIPMDecisions(LinkedHashMap map){ private Resource createResourceFromIPMDecisions(LinkedHashMap map, List<String> acceptLanguage){
Resource r = new Resource(); Resource r = new Resource();
r.setExternal(true); r.setExternal(true);
r.getLinks().add("https://platform.ipmdecisions.net/"); Link link = new Link();
link.setName("https://platform.ipmdecisions.net/");
link.setUrl("https://platform.ipmdecisions.net/");
r.getLinks().add(link);
r.setCanEdit(false); r.setCanEdit(false);
if((String) map.get("resourceName")!=null){ if((String) map.get("resourceName")!=null){
r.setResourceName((String) map.get("resourceName")); r.setResourceName((String) map.get("resourceName"));
...@@ -228,6 +236,12 @@ public class ResourceController { ...@@ -228,6 +236,12 @@ public class ResourceController {
} }
if((List<String>) map.get("languages")!=null){ if((List<String>) map.get("languages")!=null){
List<String> languages =(List<String>) map.get("languages"); List<String> languages =(List<String>) map.get("languages");
if (acceptLanguage != null) {
if (Collections.disjoint(languages, acceptLanguage)) {
return null;
}
}
if (languages.size() > 1){ if (languages.size() > 1){
Language temp = new Language(String.join(", ",languages)); Language temp = new Language(String.join(", ",languages));
r.setLanguage(temp); r.setLanguage(temp);
...@@ -280,7 +294,7 @@ public class ResourceController { ...@@ -280,7 +294,7 @@ public class ResourceController {
ResponseEntity<LinkedHashMap> map = ipmDecisionRest.exchange("/search/"+idRes, HttpMethod.GET, entity,LinkedHashMap.class); ResponseEntity<LinkedHashMap> map = ipmDecisionRest.exchange("/search/"+idRes, HttpMethod.GET, entity,LinkedHashMap.class);
return createResourceFromIPMDecisions(map.getBody()); return createResourceFromIPMDecisions(map.getBody(),null);
} }
}else{ }else{
List <Map> files = getResourceFiles(idResource); List <Map> files = getResourceFiles(idResource);
...@@ -350,12 +364,10 @@ public class ResourceController { ...@@ -350,12 +364,10 @@ public class ResourceController {
imageName="smartprotect"; imageName="smartprotect";
}else if (resource.getProject()!=null && resource.getProject().equals("Endure")){ }else if (resource.getProject()!=null && resource.getProject().equals("Endure")){
imageName="endure"; imageName="endure";
}else if (resource.getSectors() != null && resource.getSectors().size() >2) { }else if (resource.getSectors() != null && resource.getSectors().size() >1) {
imageName = "multi"; imageName = "multi";
}else if (resource.getSectors() != null && resource.getSectors().size() ==1) { }else if (resource.getSectors() != null && resource.getSectors().size() ==1) {
imageName = resource.getSectors().get(0).getSectorIcon(); imageName = resource.getSectors().get(0).getSectorIcon();
}else if (resource.getSectors() != null && resource.getSectors().size() ==2) {
imageName = resource.getSectors().get(0).getSectorIcon()+"_"+resource.getSectors().get(1).getSectorIcon();
} }
else{ else{
imageName = "multi"; imageName = "multi";
...@@ -385,106 +397,6 @@ public class ResourceController { ...@@ -385,106 +397,6 @@ public class ResourceController {
} }
} }
/* @GetMapping("/image/{idResource}")
@ResponseBody
public ResponseEntity<InputStreamResource> getImage(@PathVariable("idResource") String idResource) {
Optional<Resource> res = rr.findById(idResource);
String regionImage = "images/regions/Default.png";
String sectorImage = "images/sectors/multi.jpg";
String languageImage = "images/languages/english.png";
Resource resource=null;
if (res.isPresent()) {
resource = res.get();
}else if (idResource.startsWith("adas")) { //ovo je resurs iz IPM Decision
String idRes = idResource.replaceFirst("_",";");
LinkedHashMap map = ipmDecisionRest.getForObject("/search/"+idRes, LinkedHashMap.class);
resource = createResourceFromIPMDecisions(map);
}else { //eprint baza
if (idResource.length() > 7){
String idRes = idResource.substring(7);
List<LinkedHashMap> map = organicKnowledgeRest.getForObject(searchByTitle + idRes , List.class);
if (map != null && !map.isEmpty()) {
resource = createResourceFromOrganicKnowledge(map.get(0));
}
}
}
List<Sector> sectors = resource.getSectors();
List<Region> regions = resource.getRegions();
Language language = resource.getLanguage();
String icon1 = null, icon2 = null, icon3 = null, icon4 = null, icon5 = null;
if (sectors != null && sectors.size()==1) {
sectorImage = "images/sectors/" + sectors.get(0).getSectorIcon();
}else if (sectors != null && sectors.size()>1){
sectorImage = "images/sectors/multi/" + sectors.get(0).getSectorIcon();
if(sectors.size()>=1){
icon1 = "images/icons/"+sectors.get(0).getSectorIcon();
}
if(sectors.size()>=2){
icon2 = "images/icons/"+sectors.get(1).getSectorIcon();
}
if(sectors.size()>=3){
icon3 = "images/icons/"+sectors.get(2).getSectorIcon();
}
if(sectors.size()>=4){
icon4 = "images/icons/"+sectors.get(3).getSectorIcon();
}
if(sectors.size()>=5){
icon5 = "images/icons/"+sectors.get(4).getSectorIcon();
}
}
if (language != null) {
languageImage = "images/languages/" + language.getName().toLowerCase()+".png";
}
if (regions != null && !regions.isEmpty()){
Region r = regionRepository.findByName(regions.get(0).getName());
if (r == null){
regionImage = "images/regions/Default.png";
}else{
regionImage = "images/regions/"+regions.get(0).getName().replaceFirst(" ","_")+".png";
}
}
try {
GridFsResource gridFSFileImage = fileService.getResourceImage(idResource,"image");
GridFsResource gridFSFileLogo = fileService.getResourceImage(idResource,"logo");
InputStream logo = null;
if (gridFSFileLogo != null){
logo = gridFSFileLogo.getInputStream();
}else{
if (resource.getProject().equals("Smart Protect")) {
logo = fileService.getResourceImage("smartprotect", "logo").getInputStream();
}else if (resource.getProject().equals("Organic Eprints")) {
logo = fileService.getResourceImage("organiceprint", "logo").getInputStream();
}else if (resource.getProject().equals("IPM Decisions")) {
logo = fileService.getResourceImage("6239f180051d511bc931ea30", "logo").getInputStream();
}
}
Image generatedImg = null;
if (gridFSFileImage != null) {
generatedImg = generateImage(sectorImage,gridFSFileImage.getInputStream(), regionImage, logo, languageImage,icon1,icon2,icon3,icon4,icon5);
} else {
generatedImg = generateImage(sectorImage, null, regionImage, logo, languageImage,icon1,icon2,icon3,icon4,icon5);
}
InputStream is = createInputStream(generatedImg);
if(is !=null){
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType(MediaType.IMAGE_JPEG_VALUE))
.contentType(MediaType.parseMediaType(MediaType.IMAGE_PNG_VALUE))
.body(new InputStreamResource(is));
}else{
return ResponseEntity.internalServerError().build();
}
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.internalServerError().build();
}
}*/
private InputStream createInputStream(Image generatedImg){ private InputStream createInputStream(Image generatedImg){
try { try {
ByteArrayOutputStream compressed = new ByteArrayOutputStream(); ByteArrayOutputStream compressed = new ByteArrayOutputStream();
...@@ -646,7 +558,7 @@ public class ResourceController { ...@@ -646,7 +558,7 @@ public class ResourceController {
List<ResourceType> resourceTypes = searchModel.getResourceType(); List<ResourceType> resourceTypes = searchModel.getResourceType();
List<Crop> crops = searchModel.getCrop(); List<Crop> crops = searchModel.getCrop();
List<Pest> pests = searchModel.getPest(); List<Pest> pests = searchModel.getPest();
// List<Language> languages = searchModel.getLanguage(); List<Language> languages = searchModel.getLanguage();
List<Region> regions = searchModel.getRegion(); List<Region> regions = searchModel.getRegion();
Project project = searchModel.getProject(); Project project = searchModel.getProject();
String title = searchModel.getTitle(); String title = searchModel.getTitle();
...@@ -701,6 +613,7 @@ public class ResourceController { ...@@ -701,6 +613,7 @@ public class ResourceController {
private List<Resource> searchIPMDecision(SearchModel searchModel) throws Exception{ private List<Resource> searchIPMDecision(SearchModel searchModel) throws Exception{
List<Resource> resourceList = new ArrayList<>(); List<Resource> resourceList = new ArrayList<>();
String acceptLanguage = null; String acceptLanguage = null;
List<String> acceptedLang = null;
IpmDecisionModel model = new IpmDecisionModel(); IpmDecisionModel model = new IpmDecisionModel();
if(searchModel.getPest()!= null && !searchModel.getPest().isEmpty()){ if(searchModel.getPest()!= null && !searchModel.getPest().isEmpty()){
for(Pest p: searchModel.getPest()) { for(Pest p: searchModel.getPest()) {
...@@ -719,6 +632,7 @@ public class ResourceController { ...@@ -719,6 +632,7 @@ public class ResourceController {
languages.add(l.getCode()); languages.add(l.getCode());
} }
acceptLanguage = String.join(",",languages); acceptLanguage = String.join(",",languages);
acceptedLang = searchModel.getLanguage().stream().map(l -> l.getName()).collect(Collectors.toList());
} }
if(searchModel.getRegion()!=null && !searchModel.getRegion().isEmpty()){ if(searchModel.getRegion()!=null && !searchModel.getRegion().isEmpty()){
for(Region r: searchModel.getRegion()){ for(Region r: searchModel.getRegion()){
...@@ -732,10 +646,12 @@ public class ResourceController { ...@@ -732,10 +646,12 @@ public class ResourceController {
HttpEntity entity = new HttpEntity(model, headers); HttpEntity entity = new HttpEntity(model, headers);
ResponseEntity<List> result = ipmDecisionRest.postForEntity("/search", entity, List.class); ResponseEntity<List> result = ipmDecisionRest.postForEntity("/search", entity, List.class);
for (LinkedHashMap map : (List<LinkedHashMap>) result.getBody()) { for (LinkedHashMap map : (List<LinkedHashMap>) result.getBody()) {
Resource r = createResourceFromIPMDecisions(map); Resource r = createResourceFromIPMDecisions(map,acceptedLang);
if (r !=null) {
resourceList.add(r); resourceList.add(r);
} }
}else{ }
}/*else{
ResourceType type = resourceTypeRepository.findByName("IPM Decisions Model"); ResourceType type = resourceTypeRepository.findByName("IPM Decisions Model");
if ((searchModel.getProject()!=null && searchModel.getProject().getName().equals("IPM Decisions")) || (searchModel.getResourceType() !=null && searchModel.isIPMDecision() )) { if ((searchModel.getProject()!=null && searchModel.getProject().getName().equals("IPM Decisions")) || (searchModel.getResourceType() !=null && searchModel.isIPMDecision() )) {
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
...@@ -747,7 +663,7 @@ public class ResourceController { ...@@ -747,7 +663,7 @@ public class ResourceController {
resourceList.add(r); resourceList.add(r);
} }
} }
} }*/
return resourceList; return resourceList;
} }
...@@ -877,6 +793,8 @@ public class ResourceController { ...@@ -877,6 +793,8 @@ public class ResourceController {
if(!andCriteria.isEmpty()){ if(!andCriteria.isEmpty()){
Criteria c = new Criteria().where("approved").is(true); Criteria c = new Criteria().where("approved").is(true);
andCriteria.add(c); andCriteria.add(c);
Criteria c1 = new Criteria().where("hide").is(false);
andCriteria.add(c1);
current = current.andOperator(andCriteria); current = current.andOperator(andCriteria);
query.addCriteria(current); query.addCriteria(current);
List<Resource> ipmWorksResult = mongoTemplate.find(query, Resource.class); List<Resource> ipmWorksResult = mongoTemplate.find(query, Resource.class);
...@@ -927,4 +845,28 @@ public class ResourceController { ...@@ -927,4 +845,28 @@ public class ResourceController {
e.printStackTrace(); e.printStackTrace();
} }
} }
@PostMapping("comment/{idResource}")
public void commentResource(@RequestBody Comment comment,@PathVariable("idResource") String idResource ){
StringBuilder body = new StringBuilder();
String resourceLink = "https://ipmworks.net/toolbox/en/#/resource/"+idResource;
body.append("You have a new comment regarding resource " + resourceLink);
body.append("\n");
body.append("\n");
body.append("-----------------------");
body.append("\n");
body.append(comment.getText());
body.append("\n");
body.append("-----------------------");
body.append("\n");
if (!comment.getCommenterEmail().isEmpty()) {
body.append("You can reply on this comment using email left by commenter: " + comment.getCommenterEmail());
}
body.append("\n");
body.append("\n");
body.append("Best regards\n");
body.append("IPMWorks toolbox team");
emailService.sendEmail("IPMWORKS-WP4@inrae.fr","New resource comment",body.toString());
}
} }
package ipm.ipmworks.model;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Comment {
private String text;
private String commenterEmail;
}
package ipm.ipmworks.model; package ipm.ipmworks.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -29,7 +38,8 @@ public class Resource { ...@@ -29,7 +38,8 @@ public class Resource {
private String contactPhone; private String contactPhone;
private String contactAddress; private String contactAddress;
private List<String> links = new ArrayList<String>(); private List<Link> links = new ArrayList<Link>();
private String youtube;
private List<Map> files = new ArrayList(); private List<Map> files = new ArrayList();
private String project; private String project;
private String projectWeb; private String projectWeb;
...@@ -42,9 +52,9 @@ public class Resource { ...@@ -42,9 +52,9 @@ public class Resource {
private User approvedBy; private User approvedBy;
private List<Pest> pests = new ArrayList<Pest>(); private List<Pest> pests = new ArrayList<Pest>();
private List<Crop> crops = new ArrayList<Crop>(); private List<Crop> crops = new ArrayList<Crop>();
private List<User> likes = new ArrayList<User>(); private LocalDateTime creationDate;
private Date creationDate;
private boolean approved; private boolean approved;
private boolean canEdit; private boolean canEdit;
private boolean external; private boolean external;
private boolean hide;
} }
package ipm.ipmworks.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
public class EmailService {
@Autowired
private JavaMailSender javaMailSender;
public void sendEmail(String receiver, String subject, String body) {
SimpleMailMessage msg = new SimpleMailMessage();
msg.setTo(receiver);
msg.setSubject(subject);
msg.setText(body);
javaMailSender.send(msg);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment