From 967d4bfe40a214b01b5099b5e256bb7ed66d04a0 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Mon, 11 Nov 2019 10:40:12 +0200 Subject: [PATCH] Refactors the parsing of the template document used on DMP and Dataset docx and pdf export. --- .../main/java/eu/eudat/controllers/DMPs.java | 11 +++++++---- .../controllers/DatasetWizardController.java | 10 ++++++---- .../managers/DataManagementPlanManager.java | 15 +++++++-------- .../eudat/logic/managers/DatasetManager.java | 7 +++---- .../eudat/logic/managers/DocumentManager.java | 13 +++++++------ .../config/configloaders/ConfigLoader.java | 2 ++ .../configloaders/DevelConfigLoader.java | 19 +++++++++++++++++++ .../configloaders/ProductionConfigLoader.java | 19 +++++++++++++++++++ .../resources/application-devel.properties | 2 +- 9 files changed, 71 insertions(+), 27 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java index aa607ad26..5208e5d43 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java @@ -13,6 +13,7 @@ import eu.eudat.exceptions.datamanagementplan.DMPNewVersionException; import eu.eudat.exceptions.datamanagementplan.DMPWithDatasetsDeleteException; import eu.eudat.logic.managers.DataManagementPlanManager; import eu.eudat.logic.managers.DatasetManager; +import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.security.claims.ClaimedAuthorities; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; @@ -59,15 +60,17 @@ public class DMPs extends BaseController { private Environment environment; private DataManagementPlanManager dataManagementPlanManager; private DatasetManager datasetManager; + private ConfigLoader configLoader; @Autowired public DMPs(ApiContext apiContext, DynamicGrantConfiguration dynamicGrantConfiguration, Environment environment, - DataManagementPlanManager dataManagementPlanManager, DatasetManager datasetManager) { + DataManagementPlanManager dataManagementPlanManager, DatasetManager datasetManager, ConfigLoader configLoader) { super(apiContext); this.dynamicGrantConfiguration = dynamicGrantConfiguration; this.environment = environment; this.dataManagementPlanManager = dataManagementPlanManager; this.datasetManager = datasetManager; + this.configLoader = configLoader; } /*@Transactional @@ -90,7 +93,7 @@ public class DMPs extends BaseController { ResponseEntity getSingle(@PathVariable String id, @RequestHeader("Content-Type") String contentType, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws IllegalAccessException, InstantiationException, IOException { if (contentType.equals("application/xml") || contentType.equals("application/msword")) { - return this.dataManagementPlanManager.getDocument(id, contentType, principal); + return this.dataManagementPlanManager.getDocument(id, contentType, principal, this.configLoader); } else { eu.eudat.models.data.dmp.DataManagementPlan dataManagementPlan = this.dataManagementPlanManager.getSingle(id, principal, this.dynamicGrantConfiguration); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlan)); @@ -188,7 +191,7 @@ public class DMPs extends BaseController { public @ResponseBody ResponseEntity getPDFDocument(@PathVariable String id, @RequestHeader("Content-Type") String contentType, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws IllegalAccessException, IOException, InstantiationException, InterruptedException { - File file = this.dataManagementPlanManager.getWordDocument(id, principal); + File file = this.dataManagementPlanManager.getWordDocument(id, principal, configLoader); String name = file.getName().substring(0, file.getName().length() - 5); File pdffile = datasetManager.convertToPDF(file, environment, name); InputStream resource = new FileInputStream(pdffile); @@ -263,7 +266,7 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/createZenodoDoi/{id}"}) public ResponseEntity> createZenodoDoi(@PathVariable String id, Principal principal) { try { - String zenodoDOI = this.dataManagementPlanManager.createZenodoDoi(UUID.fromString(id), principal); + String zenodoDOI = this.dataManagementPlanManager.createZenodoDoi(UUID.fromString(id), principal, configLoader); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully created DOI for Data Datamanagement Plan in question.").payload(zenodoDOI)); } catch (Exception e) { e.printStackTrace(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetWizardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetWizardController.java index 3ccecc533..f25beabdd 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetWizardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetWizardController.java @@ -1,6 +1,5 @@ package eu.eudat.controllers; -import eu.eudat.data.dao.entities.DatasetDao; import eu.eudat.data.entities.Dataset; import eu.eudat.data.query.items.item.dataset.DatasetWizardAutocompleteRequest; import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileWizardAutocompleteRequest; @@ -8,6 +7,7 @@ import eu.eudat.exceptions.datasetwizard.DatasetWizardCannotUnlockException; import eu.eudat.logic.managers.DatasetManager; import eu.eudat.logic.managers.DatasetWizardManager; import eu.eudat.logic.managers.UserManager; +import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.security.claims.ClaimedAuthorities; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.forms.VisibilityRuleService; @@ -48,13 +48,15 @@ public class DatasetWizardController extends BaseController { private Environment environment; private DatasetManager datasetManager; private UserManager userManager; + private ConfigLoader configLoader; @Autowired - public DatasetWizardController(ApiContext apiContext, Environment environment, DatasetManager datasetManager, UserManager userManager) { + public DatasetWizardController(ApiContext apiContext, Environment environment, DatasetManager datasetManager, UserManager userManager, ConfigLoader configLoader) { super(apiContext); this.environment = environment; this.datasetManager = datasetManager; this.userManager = userManager; + this.configLoader = configLoader; } @RequestMapping(method = RequestMethod.POST, value = {"/userDmps"}, produces = "application/json") @@ -80,7 +82,7 @@ public class DatasetWizardController extends BaseController { return this.datasetManager.getDocument(id, visibilityRuleService, contentType); } else if (contentType.equals("application/msword")) { - File file = datasetManager.getWordDocument(this.environment, id, this.getApiContext().getUtilitiesService().getVisibilityRuleService()); + File file = datasetManager.getWordDocument(this.configLoader, id, this.getApiContext().getUtilitiesService().getVisibilityRuleService()); InputStream resource = new FileInputStream(file); HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentLength(file.length()); @@ -133,7 +135,7 @@ public class DatasetWizardController extends BaseController { @RequestMapping(method = RequestMethod.GET, value = {"/getPDF/{id}"}) public @ResponseBody ResponseEntity getPDFDocument(@PathVariable String id) throws IllegalAccessException, IOException, InstantiationException, InterruptedException { - File file = datasetManager.getWordDocument(this.environment, id, this.getApiContext().getUtilitiesService().getVisibilityRuleService()); + File file = datasetManager.getWordDocument(this.configLoader, id, this.getApiContext().getUtilitiesService().getVisibilityRuleService()); String fileName = file.getName(); if (fileName.endsWith(".docx")){ fileName = fileName.substring(0, fileName.length() - 5); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 79f568611..8dde96a2d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -16,6 +16,7 @@ import eu.eudat.exceptions.datamanagementplan.DMPNewVersionException; import eu.eudat.exceptions.datamanagementplan.DMPWithDatasetsDeleteException; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.logic.builders.entity.UserInfoBuilder; +import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.services.operations.DatabaseRepository; @@ -175,13 +176,11 @@ public class DataManagementPlanManager { return; } - public File getWordDocument(String id, Principal principal) throws IOException { + public File getWordDocument(String id, Principal principal, ConfigLoader configLoader) throws IOException { WordBuilder wordBuilder = new WordBuilder(); VisibilityRuleService visibilityRuleService = this.utilitiesService.getVisibilityRuleService(); DatasetWizardModel dataset = new DatasetWizardModel(); - String fileUrl = environment.getProperty("configuration.h2020template"); - InputStream is = new URL(Paths.get(fileUrl).toUri().toURL().toString()).openStream(); - XWPFDocument document = new XWPFDocument(is); + XWPFDocument document = configLoader.getDocument(); eu.eudat.data.entities.DMP dmpEntity = databaseRepository.getDmpDao().find(UUID.fromString(id)); if (!dmpEntity.isPublic() && dmpEntity.getUsers().stream().filter(userInfo -> userInfo.getUser().getId() == principal.getId()).collect(Collectors.toList()).size() == 0) @@ -975,14 +974,14 @@ public class DataManagementPlanManager { return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK); } - public ResponseEntity getDocument(String id, String contentType, Principal principal) throws InstantiationException, IllegalAccessException, IOException { + public ResponseEntity getDocument(String id, String contentType, Principal principal, ConfigLoader configLoader) throws InstantiationException, IllegalAccessException, IOException { File file; switch (contentType) { case "application/xml": file = getXmlDocument(id, principal).getFile(); break; case "application/msword": - file = getWordDocument(id, principal); + file = getWordDocument(id, principal, configLoader); break; default: file = getXmlDocument(id, principal).getFile(); @@ -1150,7 +1149,7 @@ public class DataManagementPlanManager { return (dmp.getUsers().stream().filter(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser().getId()).equals(principal.getId()); } - public String createZenodoDoi(UUID id, Principal principal) throws Exception { + public String createZenodoDoi(UUID id, Principal principal, ConfigLoader configLoader) throws Exception { DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(id); if (!isUserOwnerOfDmp(dmp, principal)) throw new Exception("User is not authorized to invoke this action"); @@ -1184,7 +1183,7 @@ public class DataManagementPlanManager { fileHeaders.setContentType(MediaType.MULTIPART_FORM_DATA); LinkedMultiValueMap addFileMap = new LinkedMultiValueMap<>(); - File file = getWordDocument(id.toString(), principal); + File file = getWordDocument(id.toString(), principal, configLoader); addFileMap.add("filename", file.getName()); FileSystemResource fileSystemResource = new FileSystemResource(file); addFileMap.add("file", fileSystemResource); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 420303cb2..653f3bc0d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -12,6 +12,7 @@ import eu.eudat.elastic.criteria.DatasetCriteria; import eu.eudat.elastic.repository.DatasetRepository; import eu.eudat.logic.builders.BuilderFactory; import eu.eudat.logic.builders.entity.UserInfoBuilder; +import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.services.operations.DatabaseRepository; @@ -246,12 +247,10 @@ public class DatasetManager { return pagedDatasetProfile; } - public File getWordDocument(Environment environment, String id, VisibilityRuleService visibilityRuleService) throws InstantiationException, IllegalAccessException, IOException { + public File getWordDocument(ConfigLoader configLoader, String id, VisibilityRuleService visibilityRuleService) throws IOException { WordBuilder wordBuilder = new WordBuilder(); DatasetWizardModel dataset = new DatasetWizardModel(); - String fileUrl = environment.getProperty("configuration.h2020template"); - InputStream is = new URL(Paths.get(fileUrl).toUri().toURL().toString()).openStream(); - XWPFDocument document = new XWPFDocument(is); + XWPFDocument document = configLoader.getDocument(); eu.eudat.data.entities.Dataset datasetEntity = databaseRepository.getDatasetDao().find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class)); wordBuilder.addParagraphContent(datasetEntity.getLabel(), document, ParagraphStyle.HEADER1, BigInteger.ZERO); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DocumentManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DocumentManager.java index db7fcf3a9..1f7cfbee1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DocumentManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DocumentManager.java @@ -1,6 +1,7 @@ package eu.eudat.logic.managers; import eu.eudat.data.dao.entities.DatasetDao; +import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; @@ -12,7 +13,6 @@ import eu.eudat.models.data.user.composite.PagedDatasetProfile; import org.apache.commons.io.IOUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.json.JSONObject; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.core.io.FileSystemResource; import org.springframework.http.*; @@ -39,17 +39,18 @@ public class DocumentManager { private ApiContext context; private DatasetManager datasetManager; - public DocumentManager(ApiContext context, DatasetManager datasetManager) { + private ConfigLoader configLoader; + + public DocumentManager(ApiContext context, DatasetManager datasetManager, ConfigLoader configLoader) { this.context = context; this.datasetManager = datasetManager; + this.configLoader = configLoader; } - public File getWordDocument(Environment environment, DatasetDao datatasetRepository, String id, VisibilityRuleService visibilityRuleService) throws InstantiationException, IllegalAccessException, IOException { + public File getWordDocument(ConfigLoader configLoader, DatasetDao datatasetRepository, String id, VisibilityRuleService visibilityRuleService) throws InstantiationException, IllegalAccessException, IOException { WordBuilder wordBuilder = new WordBuilder(); DatasetWizardModel dataset = new DatasetWizardModel(); - String fileUrl = environment.getProperty("configuration.h2020template"); - InputStream is = new URL(Paths.get(fileUrl).toUri().toURL().toString()).openStream(); - XWPFDocument document = new XWPFDocument(is); + XWPFDocument document = configLoader.getDocument(); eu.eudat.data.entities.Dataset datasetEntity = datatasetRepository.find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class)); Map properties = new HashMap<>(); if (datasetEntity.getProperties() != null) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java index 33e1bcd2a..3b3365c2b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java @@ -1,10 +1,12 @@ package eu.eudat.logic.proxy.config.configloaders; import eu.eudat.logic.proxy.config.ExternalUrls; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import java.util.List; public interface ConfigLoader { ExternalUrls getExternalUrls(); List getRdaProperties(); + XWPFDocument getDocument(); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DevelConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DevelConfigLoader.java index 3f7243ecc..f973eee99 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DevelConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DevelConfigLoader.java @@ -1,6 +1,7 @@ package eu.eudat.logic.proxy.config.configloaders; import eu.eudat.logic.proxy.config.ExternalUrls; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.core.env.Environment; @@ -22,6 +23,7 @@ public class DevelConfigLoader implements ConfigLoader { private ExternalUrls externalUrls; private List rdaProperties; + private XWPFDocument document; @Autowired private Environment environment; @@ -72,6 +74,18 @@ public class DevelConfigLoader implements ConfigLoader { rdaProperties = rdaList; } + private void setDocument() { + String filePath = environment.getProperty("configuration.h2020template"); + String current = null; + try { + current = new java.io.File(".").getCanonicalPath(); + InputStream is = new URL("file:///" + current + filePath).openStream(); + this.document = new XWPFDocument(is); + } catch (IOException e) { + e.printStackTrace(); + } + } + public ExternalUrls getExternalUrls() { this.setExternalUrls(); return externalUrls; @@ -81,4 +95,9 @@ public class DevelConfigLoader implements ConfigLoader { this.setRdaProperties(); return rdaProperties; } + + public XWPFDocument getDocument() { + this.setDocument(); + return document; + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ProductionConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ProductionConfigLoader.java index c515bbe9d..24a1053f6 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ProductionConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ProductionConfigLoader.java @@ -1,6 +1,7 @@ package eu.eudat.logic.proxy.config.configloaders; import eu.eudat.logic.proxy.config.ExternalUrls; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.core.env.Environment; @@ -23,6 +24,7 @@ public class ProductionConfigLoader implements ConfigLoader { private ExternalUrls externalUrls; private List rdaProperties; + private XWPFDocument document; @Autowired private Environment environment; @@ -71,6 +73,18 @@ public class ProductionConfigLoader implements ConfigLoader { rdaProperties = rdaList; } + private void setDocument() { + String filePath = environment.getProperty("configuration.h2020template"); + String current = null; + try { + current = new java.io.File(".").getCanonicalPath(); + InputStream is = new URL(Paths.get(filePath).toUri().toURL().toString()).openStream(); + this.document = new XWPFDocument(is); + } catch (IOException e) { + e.printStackTrace(); + } + } + public ExternalUrls getExternalUrls() { this.setExternalUrls(); return externalUrls; @@ -80,4 +94,9 @@ public class ProductionConfigLoader implements ConfigLoader { this.setRdaProperties(); return rdaProperties; } + + public XWPFDocument getDocument() { + this.setDocument(); + return document; + } } \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/application-devel.properties b/dmp-backend/web/src/main/resources/application-devel.properties index 0021679b6..cad13daff 100644 --- a/dmp-backend/web/src/main/resources/application-devel.properties +++ b/dmp-backend/web/src/main/resources/application-devel.properties @@ -18,7 +18,7 @@ pdf.converter.url=http://localhost:88/ configuration.externalUrls=/web/src/main/resources/ExternalUrls.xml configuration.rda=/web/src/main/resources/RDACommonStandards.txt configuration.loginProviders=C:/Users/gkolokythas/Documents/openDmp/dmp-backend/web/src/main/resources/LoginProviders.xml -configuration.h2020template=C:/Users/gkolokythas/Documents/openDmp/dmp-backend/web/src/main/resources/documents/h2020.docx +configuration.h2020template=/web/src/main/resources/documents/h2020.docx #############TWITTER LOGIN CONFIGURATIONS#########