diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index 65d13d770..af3b7f88c 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -189,15 +189,45 @@ org.apache.poi poi-ooxml - 3.17 + 3.15 org.apache.poi poi - 3.17 + 3.15 + + + org.apache.xmlgraphics + fop + 2.2 + + + + fr.opensagres.xdocreport + org.apache.poi.xwpf.converter.pdf + 1.0.6 + + + + fr.opensagres.xdocreport + org.apache.poi.xwpf.converter.core + 1.0.6 + + + + fr.opensagres.xdocreport + fr.opensagres.xdocreport.itext.extension + 2.0.1 + + + + commons-io + commons-io + 2.1 + diff --git a/dmp-backend/src/main/java/eu/eudat/configurations/DevelDatabaseConfiguration.java b/dmp-backend/src/main/java/eu/eudat/configurations/DevelDatabaseConfiguration.java index 9b2731c9a..da7679e1b 100644 --- a/dmp-backend/src/main/java/eu/eudat/configurations/DevelDatabaseConfiguration.java +++ b/dmp-backend/src/main/java/eu/eudat/configurations/DevelDatabaseConfiguration.java @@ -67,7 +67,7 @@ public class DevelDatabaseConfiguration { private Properties additionalProperties() { Properties properties = new Properties(); properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL92Dialect"); - properties.setProperty("hibernate.show_sql", "true"); + properties.setProperty("hibernate.show_sql", "false"); properties.setProperty("hibernate.temp.use_jdbc_metadata_defaults", "false"); return properties; } diff --git a/dmp-backend/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java b/dmp-backend/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java index 3965c777e..db8889831 100644 --- a/dmp-backend/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java +++ b/dmp-backend/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java @@ -1,11 +1,16 @@ package eu.eudat.configurations; +import eu.eudat.controllers.interceptors.RequestInterceptor; import eu.eudat.handlers.PrincipalArgumentResolver; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.ApiContext; +import eu.eudat.services.operations.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; +import eu.eudat.types.WarningLevel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.List; @@ -14,12 +19,25 @@ import java.util.List; @Configuration public class WebMVCConfiguration extends WebMvcConfigurerAdapter { + private ApiContext apiContext; + + private AuthenticationService authenticationService; + @Autowired - AuthenticationService authenticationService; + public WebMVCConfiguration(ApiContext apiContext, AuthenticationService authenticationService) { + this.apiContext = apiContext; + this.authenticationService = authenticationService; + } + @Autowired @Override public void addArgumentResolvers(List argumentResolvers) { - argumentResolvers.add(new PrincipalArgumentResolver(this.authenticationService)); + argumentResolvers.add(new PrincipalArgumentResolver(authenticationService)); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new RequestInterceptor(this.apiContext.getHelpersService().getLoggerService())); } } diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Admin.java b/dmp-backend/src/main/java/eu/eudat/controllers/Admin.java index e5d87c94d..51ab1c27b 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Admin.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Admin.java @@ -33,7 +33,7 @@ public class Admin extends BaseController { public ResponseEntity addDmp(@Valid @RequestBody DatasetProfile profile, @ClaimedAuthorities(claims = {ADMIN}) Principal principal) { try { eu.eudat.entities.DatasetProfile modelDefinition = AdminManager.generateViewStyleDefinition(profile, getApiContext()); - this.getApiContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition); + this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition); return ResponseEntity.status(HttpStatus.OK).body(modelDefinition.getId()); } catch (Exception ex) { ex.printStackTrace(); @@ -47,9 +47,9 @@ public class Admin extends BaseController { try { eu.eudat.entities.DatasetProfile modelDefinition = AdminManager.generateViewStyleDefinition(profile, getApiContext()); - eu.eudat.entities.DatasetProfile datasetprofile = this.getApiContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); + eu.eudat.entities.DatasetProfile datasetprofile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); datasetprofile.setDefinition(modelDefinition.getDefinition()); - this.getApiContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(datasetprofile); + this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(datasetprofile); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE)); } catch (Exception ex) { @@ -61,7 +61,7 @@ public class Admin extends BaseController { @RequestMapping(method = RequestMethod.GET, value = {"/admin/get/{id}"}, produces = "application/json") public ResponseEntity> get(@PathVariable String id, @ClaimedAuthorities(claims = {ADMIN}) Principal principal) { try { - eu.eudat.entities.DatasetProfile profile = this.getApiContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); + eu.eudat.entities.DatasetProfile profile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); eu.eudat.models.admin.composite.DatasetProfile datasetprofile = AdminManager.generateDatasetProfileModel(profile); datasetprofile.setLabel(profile.getLabel()); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(datasetprofile)); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/BaseController.java b/dmp-backend/src/main/java/eu/eudat/controllers/BaseController.java index b0c963bc5..2db152ab8 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/BaseController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/BaseController.java @@ -24,13 +24,13 @@ public abstract class BaseController { @InitBinder() protected void initBinder(WebDataBinder binder) { if (binder.getTarget() != null && DataManagementPlanTableRequestValidator.supportsType((binder.getTarget().getClass()))) - binder.addValidators(this.apiContext.getApplicationContext().getBean("dataManagementPlanTableRequestValidator", DataManagementPlanTableRequestValidator.class)); + binder.addValidators(this.apiContext.getOperationsContext().getApplicationContext().getBean("dataManagementPlanTableRequestValidator", DataManagementPlanTableRequestValidator.class)); if (binder.getTarget() != null && ProjectTableRequestValidator.supportsType((binder.getTarget().getClass()))) - binder.addValidators(this.apiContext.getApplicationContext().getBean("projectTableRequestValidator", ProjectTableRequestValidator.class)); + binder.addValidators(this.apiContext.getOperationsContext().getApplicationContext().getBean("projectTableRequestValidator", ProjectTableRequestValidator.class)); if (binder.getTarget() != null && DatasetProfileValidator.supportsType((binder.getTarget().getClass()))) - binder.addValidators(this.apiContext.getApplicationContext().getBean("datasetProfileValidator", DatasetProfileValidator.class)); + binder.addValidators(this.apiContext.getOperationsContext().getApplicationContext().getBean("datasetProfileValidator", DatasetProfileValidator.class)); if (binder.getTarget() != null && ProjectModelValidator.supportsType((binder.getTarget().getClass()))) - binder.addValidators(this.apiContext.getApplicationContext().getBean("projectModelValidator", ProjectModelValidator.class)); + binder.addValidators(this.apiContext.getOperationsContext().getApplicationContext().getBean("projectModelValidator", ProjectModelValidator.class)); } } diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java index 23722989c..8986f7fcf 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java @@ -40,7 +40,6 @@ public class DMPs extends BaseController { try { DataTableData dataTable = new DataManagementPlanManager().getPaged(this.getApiContext(), dataManagementPlanTableRequest, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(dataTable)); - } catch (Exception ex) { ex.printStackTrace(); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem>().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage())); @@ -51,7 +50,7 @@ public class DMPs extends BaseController { public @ResponseBody ResponseEntity> getSingle(@PathVariable String id, Principal principal) { try { - eu.eudat.models.dmp.DataManagementPlan dataManagementPlan = new DataManagementPlanManager().getSingle(this.getApiContext().getDatabaseRepository().getDmpDao(), id, principal); + eu.eudat.models.dmp.DataManagementPlan dataManagementPlan = new DataManagementPlanManager().getSingle(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), id, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlan)); } catch (Exception ex) { @@ -101,9 +100,8 @@ public class DMPs extends BaseController { public @ResponseBody ResponseEntity>> getWithCriteria(@RequestBody DataManagementPlanCriteriaRequest dataManagementPlanCriteria, Principal principal) { try { - List dataTable = new DataManagementPlanManager().getWithCriteria(this.getApiContext().getDatabaseRepository().getDmpDao(), dataManagementPlanCriteria); + List dataTable = new DataManagementPlanManager().getWithCriteria(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), dataManagementPlanCriteria); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(dataTable)); - } catch (Exception ex) { ex.printStackTrace(); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem>().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage())); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DashBoardController.java b/dmp-backend/src/main/java/eu/eudat/controllers/DashBoardController.java index caeb33cfb..4c85de848 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DashBoardController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DashBoardController.java @@ -27,8 +27,8 @@ public class DashBoardController extends BaseController { @RequestMapping(method = RequestMethod.GET, value = {"/dashboard/getStatistics"}, produces = "application/json") public ResponseEntity> getStatistics() { try { - DashBoardStatistics statistics = new DashBoardManager().getStatistics(this.getApiContext().getDatabaseRepository().getDatasetDao(), this.getApiContext().getDatabaseRepository().getDmpDao() - , this.getApiContext().getDatabaseRepository().getProjectDao()); + DashBoardStatistics statistics = new DashBoardManager().getStatistics(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao() + , this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao()); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(statistics)); } catch (Exception ex) { ex.printStackTrace(); @@ -39,8 +39,8 @@ public class DashBoardController extends BaseController { @RequestMapping(method = RequestMethod.GET, value = {"/dashboard/me/getStatistics"}, produces = "application/json") public ResponseEntity> getStatistics(Principal principal) { try { - DashBoardStatistics statistics = new DashBoardManager().getMeStatistics(this.getApiContext().getDatabaseRepository().getDatasetDao(), this.getApiContext().getDatabaseRepository().getDmpDao() - , this.getApiContext().getDatabaseRepository().getProjectDao(), principal); + DashBoardStatistics statistics = new DashBoardManager().getMeStatistics(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao() + , this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao(), principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(statistics)); } catch (Exception ex) { ex.printStackTrace(); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DataRepositories.java b/dmp-backend/src/main/java/eu/eudat/controllers/DataRepositories.java index 4dd26d6e4..58d764ae2 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DataRepositories.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DataRepositories.java @@ -28,7 +28,7 @@ public class DataRepositories extends BaseController { public @ResponseBody ResponseEntity>>> listExternalDataRepositories(@RequestParam(value = "query", required = false) String query) { try { - List> remoteRepos = this.getApiContext().getRemoteFetcher().getRepositories(query); + List> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getRepositories(query); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>>().status(ApiMessageCode.NO_MESSAGE).payload(remoteRepos)); } catch (NoURLFound ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem>>().status(ApiMessageCode.ERROR_MESSAGE).message(ex.getMessage()).payload(null)); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetProfileController.java b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetProfileController.java index f70a760df..0a98747fc 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetProfileController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetProfileController.java @@ -34,7 +34,7 @@ public class DatasetProfileController extends BaseController { @RequestMapping(method = RequestMethod.GET, value = {"/datasetwizard/get/{id}"}, produces = "application/json") public ResponseEntity> getSingle(@PathVariable String id) { try { - eu.eudat.entities.DatasetProfile profile = this.getApiContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); + eu.eudat.entities.DatasetProfile profile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); eu.eudat.models.user.composite.DatasetProfile datasetprofile = UserManager.generateDatasetProfileModel(profile); PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile(); pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile); @@ -49,13 +49,13 @@ public class DatasetProfileController extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/datasetprofile/save/{id}"}, consumes = "application/json", produces = "application/json") public ResponseEntity updateDataset(@PathVariable String id, @RequestBody PropertiesModel properties) { try { - eu.eudat.entities.Dataset dataset = this.getApiContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(id)); + eu.eudat.entities.Dataset dataset = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(id)); Map values = new HashMap(); properties.toMap(values); JSONObject jobject = new JSONObject(values); dataset.setProperties(jobject.toString()); dataset.setStatus((short) properties.getStatus()); - this.getApiContext().getDatabaseRepository().getDatasetDao().createOrUpdate(dataset); //TODO + this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(dataset); //TODO return ResponseEntity.status(HttpStatus.OK).body(properties); } catch (Exception ex) { ex.printStackTrace(); @@ -66,7 +66,7 @@ public class DatasetProfileController extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/search/autocomplete"}, consumes = "application/json", produces = "application/json") public ResponseEntity getDataForAutocomplete(@RequestBody AutoCompleteLookupItem lookupItem) { try { - eu.eudat.entities.Dataset dataset = this.getApiContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(lookupItem.getProfileID())); + eu.eudat.entities.Dataset dataset = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(lookupItem.getProfileID())); eu.eudat.entities.xmlmodels.datasetprofiledefinition.Field modelfield = new eu.eudat.entities.xmlmodels.datasetprofiledefinition.Field(); AutoCompleteData data = new AutoCompleteData().fromData(modelfield.getData()); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetProfiles.java b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetProfiles.java index 12a604293..896e03eca 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetProfiles.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetProfiles.java @@ -31,7 +31,7 @@ public class DatasetProfiles extends BaseController { public @ResponseBody ResponseEntity>> get(@RequestBody DatasetProfileAutocompleteRequest datasetProfileAutocompleteRequest) { try { - List datasetProfileAutocompleteItems = DatasetProfileManager.getWithCriteria(this.getApiContext().getDatabaseRepository().getDatasetProfileDao(), datasetProfileAutocompleteRequest); + List datasetProfileAutocompleteItems = DatasetProfileManager.getWithCriteria(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao(), datasetProfileAutocompleteRequest); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileAutocompleteItems)); } catch (Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem>().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE)); @@ -53,7 +53,7 @@ public class DatasetProfiles extends BaseController { public @ResponseBody ResponseEntity>> getAll() { try { - List datasetProfileTableData = DatasetProfileManager.getAll(this.getApiContext().getDatabaseRepository().getDatasetProfileDao()); + List datasetProfileTableData = DatasetProfileManager.getAll(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao()); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); } catch (Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem>().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE)); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java index 989406bbf..bc0eea369 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java @@ -12,17 +12,20 @@ import eu.eudat.models.helpers.responses.ResponseItem; import eu.eudat.models.security.Principal; import eu.eudat.services.ApiContext; import eu.eudat.types.ApiMessageCode; +import org.apache.poi.util.IOUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.InputStreamResource; +import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.activation.MimetypesFileTypeMap; import javax.transaction.Transactional; import java.io.File; import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; import java.util.List; @@ -32,16 +35,19 @@ import java.util.List; @RequestMapping(value = {"api/datasetwizard"}) public class DatasetWizardController extends BaseController { + private Environment environment; + @Autowired - public DatasetWizardController(ApiContext apiContext) { + public DatasetWizardController(ApiContext apiContext, Environment environment) { super(apiContext); + this.environment = environment; } @RequestMapping(method = RequestMethod.POST, value = {"/userDmps"}, produces = "application/json") public @ResponseBody ResponseEntity>> getUserDmps(@RequestBody DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, Principal principal) { try { - List dataManagementPlans = DatasetWizardManager.getUserDmps(this.getApiContext().getDatabaseRepository().getDmpDao(), datasetWizardAutocompleteRequest, principal); + List dataManagementPlans = DatasetWizardManager.getUserDmps(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), datasetWizardAutocompleteRequest, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlans)); } catch (Exception ex) { @@ -54,7 +60,7 @@ public class DatasetWizardController extends BaseController { public @ResponseBody ResponseEntity>> getAvailableProfiles(@RequestBody DatasetProfileWizardAutocompleteRequest datasetProfileWizardAutocompleteRequest, Principal principal) { try { - List dataManagementPlans = DatasetWizardManager.getAvailableProfiles(this.getApiContext().getDatabaseRepository().getDmpDao(), datasetProfileWizardAutocompleteRequest); + List dataManagementPlans = DatasetWizardManager.getAvailableProfiles(this.getApiContext().getOperationsContext().getDatabaseRepository().getDmpDao(), datasetProfileWizardAutocompleteRequest); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlans)); } catch (Exception ex) { @@ -67,7 +73,7 @@ public class DatasetWizardController extends BaseController { public @ResponseBody ResponseEntity> getSingle(@PathVariable String id, Principal principal) { try { - DatasetWizardModel dataset = new DatasetManager().getSingle(this.getApiContext().getDatabaseRepository().getDatasetDao(), id); + DatasetWizardModel dataset = new DatasetManager().getSingle(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), id); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(dataset)); } catch (Exception ex) { ex.printStackTrace(); @@ -88,21 +94,29 @@ public class DatasetWizardController extends BaseController { } } - @RequestMapping(method = RequestMethod.GET, value = {"/getWordDocument/{id}"}, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) + @RequestMapping(method = RequestMethod.GET, value = {"/getWordDocument/{id}"}) public @ResponseBody - ResponseEntity getWordDocument(@PathVariable String id) { + ResponseEntity getWordDocument(@PathVariable String id) throws IllegalAccessException, IOException, InstantiationException { try { - File file = new DatasetManager().getWordDocument(this.getApiContext().getDatabaseRepository().getDatasetDao(), id); - InputStreamResource resource = new InputStreamResource(new FileInputStream(file)); + File file = new DatasetManager().getWordDocument(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), id, this.getApiContext().getUtilitiesService().getVisibilityRuleService()); + File pdffile = new DatasetManager().convertToPDF(file, environment, file.getName()); + InputStream resource = new FileInputStream(pdffile); + System.out.println("Mime Type of " + file.getName() + " is " + + new MimetypesFileTypeMap().getContentType(file)); + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.setContentLength(pdffile.length()); + responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM); + responseHeaders.set("Content-Disposition", "attachment;filename=" + pdffile.getName()); + responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition"); + responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type"); - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, - "attachment;filename=" + file.getName()) - .contentType(MediaType.APPLICATION_PDF).contentLength(file.length()) - .body(resource); - } catch (Exception ex) { - ex.printStackTrace(); - return new ResponseEntity(HttpStatus.BAD_REQUEST); + byte[] content = IOUtils.toByteArray(resource); + return new ResponseEntity<>(content, + responseHeaders, + HttpStatus.OK); + } catch (Exception e) { + e.printStackTrace(); + return ResponseEntity.badRequest().body(null); } } } diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java b/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java index 44ce6a18a..afec09f46 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java @@ -47,8 +47,8 @@ public class Datasets extends BaseController { public @ResponseBody ResponseEntity> makePublic(@PathVariable UUID id, Principal principal, Locale locale) { try { - DatasetManager.makePublic(this.getApiContext().getDatabaseRepository().getDatasetDao(), id); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message(this.getApiContext().getMessageSource().getMessage("dataset.public", new Object[]{}, locale))); + DatasetManager.makePublic(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), id); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message(this.getApiContext().getHelpersService().getMessageSource().getMessage("dataset.public", new Object[]{}, locale))); } catch (Exception ex) { ex.printStackTrace(); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/ExternalDatasets.java b/dmp-backend/src/main/java/eu/eudat/controllers/ExternalDatasets.java index a8fc8afff..fcdd2b934 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/ExternalDatasets.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/ExternalDatasets.java @@ -44,7 +44,7 @@ public class ExternalDatasets extends BaseController { public @ResponseBody ResponseEntity>> getWithExternal(@RequestParam(value = "query", required = false) String query, Principal principal) { try { - List dataTable = new ExternalDatasetManager().getWithExternal(this.getApiContext(), query, this.getApiContext().getRemoteFetcher()); + List dataTable = new ExternalDatasetManager().getWithExternal(this.getApiContext(), query, this.getApiContext().getOperationsContext().getRemoteFetcher()); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(dataTable).status(ApiMessageCode.NO_MESSAGE)); } catch (Exception ex) { ex.printStackTrace(); @@ -56,7 +56,7 @@ public class ExternalDatasets extends BaseController { public @ResponseBody ResponseItem getWithExternal(@PathVariable UUID id, Principal principal) { try { - ExternalDatasetListingModel externalDatasetModel = new ExternalDatasetManager().getSingle(this.getApiContext().getDatabaseRepository().getExternalDatasetDao(), id); + ExternalDatasetListingModel externalDatasetModel = new ExternalDatasetManager().getSingle(this.getApiContext().getOperationsContext().getDatabaseRepository().getExternalDatasetDao(), id); return new ResponseItem().payload(externalDatasetModel).status(ApiMessageCode.NO_MESSAGE); } catch (Exception ex) { ex.printStackTrace(); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Login.java b/dmp-backend/src/main/java/eu/eudat/controllers/Login.java index e40c65a11..9f0f20579 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Login.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Login.java @@ -11,7 +11,7 @@ import eu.eudat.security.validators.b2access.B2AccessTokenValidator; import eu.eudat.security.validators.b2access.helpers.B2AccessRequest; import eu.eudat.security.validators.b2access.helpers.B2AccessResponseToken; import eu.eudat.security.validators.twitter.TwitterTokenValidator; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; import eu.eudat.types.ApiMessageCode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -29,16 +29,16 @@ public class Login { private CustomAuthenticationProvider customAuthenticationProvider; - private AuthenticationService authenticationService; + private AuthenticationServiceImpl authenticationServiceImpl; private TwitterTokenValidator twitterTokenValidator; private B2AccessTokenValidator b2AccessTokenValidator; @Autowired - public Login(CustomAuthenticationProvider customAuthenticationProvider, AuthenticationService authenticationService, TwitterTokenValidator twitterTokenValidator, B2AccessTokenValidator b2AccessTokenValidator) { + public Login(CustomAuthenticationProvider customAuthenticationProvider, AuthenticationServiceImpl authenticationServiceImpl, TwitterTokenValidator twitterTokenValidator, B2AccessTokenValidator b2AccessTokenValidator) { this.customAuthenticationProvider = customAuthenticationProvider; - this.authenticationService = authenticationService; + this.authenticationServiceImpl = authenticationServiceImpl; this.twitterTokenValidator = twitterTokenValidator; this.b2AccessTokenValidator = b2AccessTokenValidator; } @@ -62,7 +62,7 @@ public class Login { public @ResponseBody ResponseEntity> nativelogin(@RequestBody Credentials credentials) { try { - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(UserManager.authenticate(this.authenticationService, credentials)).status(ApiMessageCode.SUCCESS_MESSAGE)); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(UserManager.authenticate(this.authenticationServiceImpl, credentials)).status(ApiMessageCode.SUCCESS_MESSAGE)); } catch (UnauthorisedException ex) { throw ex; } catch (Exception ex) { @@ -97,7 +97,7 @@ public class Login { public @ResponseBody ResponseEntity> authMe(Principal principal) { try { - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(this.authenticationService.Touch(principal.getToken())).status(ApiMessageCode.NO_MESSAGE)); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(this.authenticationServiceImpl.Touch(principal.getToken())).status(ApiMessageCode.NO_MESSAGE)); } catch (Exception ex) { ex.printStackTrace(); @@ -110,7 +110,7 @@ public class Login { public @ResponseBody ResponseEntity> logout(Principal principal) { try { - this.authenticationService.Logout(principal.getToken()); + this.authenticationServiceImpl.Logout(principal.getToken()); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE)); } catch (Exception ex) { diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Organisations.java b/dmp-backend/src/main/java/eu/eudat/controllers/Organisations.java index 270ba3aa7..0edc32915 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Organisations.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Organisations.java @@ -29,7 +29,7 @@ public class Organisations extends BaseController { public @ResponseBody ResponseEntity> listExternalOrganisations(@RequestParam(value = "query", required = false) String query) { try { - List> remoteRepos = this.getApiContext().getRemoteFetcher().getOrganisations(query); + List> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getOrganisations(query); OrganisationsExternalSourcesModel projectsExternalSourcesModel = new OrganisationsExternalSourcesModel().fromExternalItem(remoteRepos); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(projectsExternalSourcesModel).status(ApiMessageCode.SUCCESS_MESSAGE)); } catch (NoURLFound ex) { diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java b/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java index b332d9e28..e1d378ebd 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java @@ -38,7 +38,7 @@ public class Projects extends BaseController { public @ResponseBody ResponseEntity>> getPaged(@Valid @RequestBody ProjectTableRequest projectTableRequest, Principal principal) { try { - DataTableData dataTable = new ProjectManager().getPaged(this.getApiContext().getDatabaseRepository().getProjectDao(), projectTableRequest); + DataTableData dataTable = new ProjectManager().getPaged(this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao(), projectTableRequest); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(dataTable).status(ApiMessageCode.NO_MESSAGE)); } catch (Exception ex) { @@ -51,7 +51,7 @@ public class Projects extends BaseController { public @ResponseBody ResponseEntity> getSingle(@PathVariable String id, Principal principal) { try { - eu.eudat.models.project.Project project = new ProjectManager().getSingle(this.getApiContext().getDatabaseRepository().getProjectDao(), id); + eu.eudat.models.project.Project project = new ProjectManager().getSingle(this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao(), id); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(project).status(ApiMessageCode.NO_MESSAGE)); } catch (Exception ex) { ex.printStackTrace(); @@ -65,7 +65,7 @@ public class Projects extends BaseController { public @ResponseBody ResponseEntity> addProject(@Valid @RequestBody eu.eudat.models.project.Project project, Principal principal) { try { - ProjectManager.createOrUpdate(this.getApiContext().getDatabaseRepository().getProjectDao(), this.getApiContext().getDatabaseRepository().getUserInfoDao(), project, principal); + ProjectManager.createOrUpdate(this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao(), this.getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao(), project, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Created")); } catch (Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage())); @@ -78,7 +78,7 @@ public class Projects extends BaseController { public @ResponseBody ResponseEntity> inactivate(@PathVariable String id, Principal principal) { try { - Project project = new ProjectManager().inactivate(this.getApiContext().getDatabaseRepository().getProjectDao(), id); + Project project = new ProjectManager().inactivate(this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao(), id); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE)); } catch (Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage())); @@ -90,7 +90,7 @@ public class Projects extends BaseController { public @ResponseBody ResponseEntity>> getWithExternal(@RequestBody ProjectCriteriaRequest projectCriteria, Principal principal) { try { - List dataTable = new ProjectManager().getCriteriaWithExternal(this.getApiContext(), projectCriteria, this.getApiContext().getRemoteFetcher()); + List dataTable = new ProjectManager().getCriteriaWithExternal(this.getApiContext(), projectCriteria, this.getApiContext().getOperationsContext().getRemoteFetcher()); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(dataTable).status(ApiMessageCode.NO_MESSAGE)); } catch (Exception ex) { ex.printStackTrace(); @@ -102,7 +102,7 @@ public class Projects extends BaseController { public @ResponseBody ResponseEntity>> get(@RequestBody ProjectCriteriaRequest projectCriteria, Principal principal) { try { - List dataTable = new ProjectManager().getCriteria(this.getApiContext().getDatabaseRepository().getProjectDao(), projectCriteria, this.getApiContext().getRemoteFetcher()); + List dataTable = new ProjectManager().getCriteria(this.getApiContext().getOperationsContext().getDatabaseRepository().getProjectDao(), projectCriteria, this.getApiContext().getOperationsContext().getRemoteFetcher()); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(dataTable).status(ApiMessageCode.NO_MESSAGE)); } catch (Exception ex) { ex.printStackTrace(); @@ -114,7 +114,7 @@ public class Projects extends BaseController { public @ResponseBody ResponseEntity> listExternalProjects(@RequestParam(value = "query", required = false) String query, Principal principal) { try { - List> remoteRepos = this.getApiContext().getRemoteFetcher().getProjects(query); + List> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getProjects(query); ProjectsExternalSourcesModel projectsExternalSourcesModel = new ProjectsExternalSourcesModel().fromExternalItem(remoteRepos); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(projectsExternalSourcesModel).status(ApiMessageCode.SUCCESS_MESSAGE)); } catch (NoURLFound ex) { diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Registries.java b/dmp-backend/src/main/java/eu/eudat/controllers/Registries.java index 3e9afc633..a8d09a76b 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Registries.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Registries.java @@ -29,7 +29,7 @@ public class Registries extends BaseController { public @ResponseBody ResponseEntity> listExternalRegistries(@RequestParam(value = "query", required = false) String query) { try { - List> remoteRepos = this.getApiContext().getRemoteFetcher().getRegistries(query); + List> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getRegistries(query); RegistriesExternalSourcesModel registriesExternalSourcesModel = new RegistriesExternalSourcesModel().fromExternalItem(remoteRepos); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(registriesExternalSourcesModel).status(ApiMessageCode.NO_MESSAGE)); } catch (NoURLFound ex) { diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Researchers.java b/dmp-backend/src/main/java/eu/eudat/controllers/Researchers.java index 4ec4a60e6..6fbdb7587 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Researchers.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Researchers.java @@ -35,7 +35,7 @@ public class Researchers extends BaseController { public @ResponseBody ResponseEntity> listExternalResearchers(@RequestParam(value = "query", required = false) String query) { try { - List> remoteRepos = this.getApiContext().getRemoteFetcher().getResearchers(query); + List> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getResearchers(query); ResearchersExternalSourcesModel researchersExternalSourcesModel = new ResearchersExternalSourcesModel().fromExternalItem(remoteRepos); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(researchersExternalSourcesModel).status(ApiMessageCode.NO_MESSAGE)); } catch (NoURLFound ex) { diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Services.java b/dmp-backend/src/main/java/eu/eudat/controllers/Services.java index 340ec18ba..6eb9488f7 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Services.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Services.java @@ -29,7 +29,7 @@ public class Services extends BaseController { public @ResponseBody ResponseEntity> listExternalServices(@RequestParam(value = "query", required = false) String query) { try { - List> remoteRepos = this.getApiContext().getRemoteFetcher().getServices(query); + List> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getServices(query); ServiceExternalSourcesModel serviceExternalSourcesModel = new ServiceExternalSourcesModel().fromExternalItem(remoteRepos); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(serviceExternalSourcesModel).status(ApiMessageCode.NO_MESSAGE)); } catch (NoURLFound ex) { diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/controllerhandler/GeneralErrorHandler.java b/dmp-backend/src/main/java/eu/eudat/controllers/controllerhandler/GeneralErrorHandler.java new file mode 100644 index 000000000..0ed03a2d4 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/controllers/controllerhandler/GeneralErrorHandler.java @@ -0,0 +1,38 @@ +package eu.eudat.controllers.controllerhandler; + +import eu.eudat.models.helpers.responses.ResponseItem; +import eu.eudat.services.ApiContext; +import eu.eudat.types.ApiMessageCode; +import eu.eudat.types.WarningLevel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created by ikalyvas on 3/1/2018. + */ +@ControllerAdvice +public class GeneralErrorHandler extends ResponseEntityExceptionHandler { + + private ApiContext apiContext; + + @Autowired + public GeneralErrorHandler(ApiContext apiContext) { + this.apiContext = apiContext; + } + + @ExceptionHandler(Exception.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ResponseBody + public ResponseItem processValidationError(HttpServletRequest req, Exception ex) { + apiContext.getHelpersService().getLoggerService().log(ex.getMessage(), WarningLevel.ERROR); + return new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(ex.getMessage()); + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/interceptors/RequestInterceptor.java b/dmp-backend/src/main/java/eu/eudat/controllers/interceptors/RequestInterceptor.java new file mode 100644 index 000000000..015377d74 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/controllers/interceptors/RequestInterceptor.java @@ -0,0 +1,33 @@ +package eu.eudat.controllers.interceptors; + +import eu.eudat.services.helpers.LoggerService; +import eu.eudat.types.WarningLevel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Date; + +/** + * Created by ikalyvas on 3/1/2018. + */ +@Component +public class RequestInterceptor extends HandlerInterceptorAdapter { + + private LoggerService loggerService; + + @Autowired + public RequestInterceptor(LoggerService loggerService) { + this.loggerService = loggerService; + } + + @Override + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + String reqUri = request.getRequestURI(); + this.loggerService.log("Call to " + reqUri + " method: " + request.getMethod() + " at: " + new Date(), WarningLevel.INFO); + return super.preHandle(request, response, handler); + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/documents/word/WordBuilder.java b/dmp-backend/src/main/java/eu/eudat/documents/word/WordBuilder.java index ee390b215..8ba6b29c8 100644 --- a/dmp-backend/src/main/java/eu/eudat/documents/word/WordBuilder.java +++ b/dmp-backend/src/main/java/eu/eudat/documents/word/WordBuilder.java @@ -7,7 +7,8 @@ import eu.eudat.models.user.components.datasetprofile.FieldSet; import eu.eudat.models.user.components.datasetprofile.Section; import eu.eudat.models.user.composite.DatasetProfilePage; import eu.eudat.models.user.composite.PagedDatasetProfile; -import eu.eudat.utilities.interfaces.Applier; +import eu.eudat.services.forms.VisibilityRuleService; +import eu.eudat.utilities.interfaces.ApplierWithValue; import org.apache.poi.xwpf.usermodel.*; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; @@ -15,6 +16,7 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.math.BigInteger; @@ -27,7 +29,7 @@ import java.util.Map; */ public class WordBuilder { - private Map> options = new HashMap<>(); + private Map> options = new HashMap<>(); private CTAbstractNum cTAbstractNum; private BigInteger numId; @@ -87,63 +89,69 @@ public class WordBuilder { }); } - public File build(PagedDatasetProfile pagedDatasetProfile) throws IOException { - XWPFDocument document = new XWPFDocument(); - + public File build(PagedDatasetProfile pagedDatasetProfile, String label, VisibilityRuleService visibilityRuleService) throws IOException { + XWPFDocument document = new XWPFDocument(new FileInputStream((WordBuilder.class.getClassLoader().getResource("documents/h2020.docx")).getFile())); this.buildOptions(); - createPages(pagedDatasetProfile.getPages(), document, true); + createPages(pagedDatasetProfile.getPages(), document, true, visibilityRuleService); XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum); XWPFNumbering numbering = document.createNumbering(); BigInteger abstractNumID = numbering.addAbstractNum(abstractNum); this.numId = numbering.addNum(abstractNumID); - createPages(pagedDatasetProfile.getPages(), document, false); - File exportFile = new File("welcome.docx"); + createPages(pagedDatasetProfile.getPages(), document, false, visibilityRuleService); + File exportFile = new File(label); FileOutputStream out = new FileOutputStream(exportFile); document.write(out); out.close(); return exportFile; } - public void createPages(List datasetProfilePages, XWPFDocument mainDocumentPart, Boolean createListing) { + public void createPages(List datasetProfilePages, XWPFDocument mainDocumentPart, Boolean createListing, VisibilityRuleService visibilityRuleService) { //if (createListing) this.addListing(mainDocumentPart, 0, false, true); datasetProfilePages.forEach(item -> { - createSections(item.getSections(), mainDocumentPart, ParagraphStyle.TITLE, 0, createListing); + createSections(item.getSections(), mainDocumentPart, ParagraphStyle.TITLE, 0, createListing, visibilityRuleService); }); } - public void createSections(List
sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing) { + public void createSections(List
sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { if (createListing) this.addListing(mainDocumentPart, indent, false, true); BigInteger listing = numId; sections.forEach(section -> { - if (!createListing) { - XWPFParagraph paragraph = addParagraphContent(section.getTitle(), mainDocumentPart, style, listing); - CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); - number.setVal(BigInteger.valueOf(indent)); + if (visibilityRuleService.isElementVisible(section.getId())) { + if (!createListing) { + XWPFParagraph paragraph = addParagraphContent(section.getTitle(), mainDocumentPart, style, listing); + CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); + number.setVal(BigInteger.valueOf(indent)); + } + createSections(section.getSections(), mainDocumentPart, ParagraphStyle.HEADER2, 1, createListing, visibilityRuleService); + createCompositeFields(section.getCompositeFields(), mainDocumentPart, 2, createListing, visibilityRuleService); } - createSections(section.getSections(), mainDocumentPart, ParagraphStyle.HEADER2, 1, createListing); - createCompositeFields(section.getCompositeFields(), mainDocumentPart, 2, createListing); }); } - public void createCompositeFields(List
compositeFields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing) { + public void createCompositeFields(List
compositeFields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { if (createListing) this.addListing(mainDocumentPart, indent, true, true); compositeFields.forEach(compositeField -> { - if (compositeField.getTitle() != null && !compositeField.getTitle().isEmpty() && !createListing) { - XWPFParagraph paragraph = addParagraphContent(compositeField.getTitle(), mainDocumentPart, ParagraphStyle.HEADER3, numId); - CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); - number.setVal(BigInteger.valueOf(indent)); + if (visibilityRuleService.isElementVisible(compositeField.getId())) { + + if (compositeField.getTitle() != null && !compositeField.getTitle().isEmpty() && !createListing) { + XWPFParagraph paragraph = addParagraphContent(compositeField.getTitle(), mainDocumentPart, ParagraphStyle.HEADER3, numId); + CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); + number.setVal(BigInteger.valueOf(indent)); + } + createFields(compositeField.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService); } - createFields(compositeField.getFields(), mainDocumentPart, 3, createListing); }); } - public void createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing) { + public void createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { if (createListing) this.addListing(mainDocumentPart, indent, false, false); fields.forEach(field -> { - if (!createListing) { - XWPFParagraph paragraph = addParagraphContent(field.getValue(), mainDocumentPart, ParagraphStyle.TEXT, numId); - CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); - number.setVal(BigInteger.valueOf(indent)); + if (visibilityRuleService.isElementVisible(field.getId())) { + if (!createListing) { + XWPFParagraph paragraph = addParagraphContent(field.getValue() == null ? "" : field.getValue(), mainDocumentPart, ParagraphStyle.TEXT, numId); + CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); + number.setVal(BigInteger.valueOf(indent)); + } } }); } @@ -173,13 +181,18 @@ public class WordBuilder { cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL); cTLvl.addNewLvlText().setVal("Q " + textLevel); cTLvl.addNewStart().setVal(BigInteger.valueOf(1)); + cTLvl.setIlvl(BigInteger.valueOf(indent)); } else if (!question && hasIndication) { cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL); cTLvl.addNewLvlText().setVal(textLevel); cTLvl.addNewStart().setVal(BigInteger.valueOf(1)); + cTLvl.setIlvl(BigInteger.valueOf(indent)); } if (!question && !hasIndication) { cTLvl.addNewNumFmt().setVal(STNumberFormat.NONE); + cTLvl.addNewLvlText().setVal(""); + cTLvl.addNewStart().setVal(BigInteger.valueOf(1)); + cTLvl.setIlvl(BigInteger.valueOf(indent)); } /*if (this.numId == null) { diff --git a/dmp-backend/src/main/java/eu/eudat/handlers/PrincipalArgumentResolver.java b/dmp-backend/src/main/java/eu/eudat/handlers/PrincipalArgumentResolver.java index ffa0065f9..7930fd947 100644 --- a/dmp-backend/src/main/java/eu/eudat/handlers/PrincipalArgumentResolver.java +++ b/dmp-backend/src/main/java/eu/eudat/handlers/PrincipalArgumentResolver.java @@ -3,7 +3,8 @@ package eu.eudat.handlers; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.models.security.Principal; import eu.eudat.security.claims.ClaimedAuthorities; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.operations.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; import eu.eudat.types.Authorities; import org.springframework.core.MethodParameter; import org.springframework.web.bind.support.WebDataBinderFactory; diff --git a/dmp-backend/src/main/java/eu/eudat/managers/AdminManager.java b/dmp-backend/src/main/java/eu/eudat/managers/AdminManager.java index 6f586388c..e86de30d6 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/AdminManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/AdminManager.java @@ -22,7 +22,7 @@ public class AdminManager { viewStyleDoc.appendChild(elementViewStyle); String xml = XmlBuilder.generateXml(viewStyleDoc); - eu.eudat.entities.DatasetProfile datasetProfile = apiContext.getBuilderFactory().getBuilder(DatasetProfileBuilder.class).definition(xml).label(profile.getLabel()) + eu.eudat.entities.DatasetProfile datasetProfile = apiContext.getOperationsContext().getBuilderFactory().getBuilder(DatasetProfileBuilder.class).definition(xml).label(profile.getLabel()) .status((short) 1).created(new Date()) .build(); diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java index 9e9d45c05..7e171bee9 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java @@ -33,8 +33,8 @@ public class DataManagementPlanManager { public DataTableData getPaged(ApiContext apiContext, DataManagementPlanTableRequest dataManagementPlanTableRequest, Principal principal) throws Exception { UserInfo userInfo = new UserInfo(); userInfo.setId(principal.getId()); - QueryableList items = apiContext.getDatabaseRepository().getDmpDao().getWithCriteria(dataManagementPlanTableRequest.getCriteria()); - QueryableList authItems = apiContext.getDatabaseRepository().getDmpDao().getAuthenticated(items, userInfo); + QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(dataManagementPlanTableRequest.getCriteria()); + QueryableList authItems = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(items, userInfo); QueryableList pagedItems = PaginationManager.applyPaging(authItems, dataManagementPlanTableRequest); DataTableData dataTable = new DataTableData(); @@ -68,12 +68,12 @@ public class DataManagementPlanManager { public static void createOrUpdate(ApiContext apiContext, DataManagementPlan dataManagementPlan, Principal principal) throws Exception { DMP newDmp = dataManagementPlan.toDataModel(); - createOrganisationsIfTheyDontExist(newDmp, apiContext.getDatabaseRepository().getOrganisationDao()); - createResearchersIfTheyDontExist(newDmp, apiContext.getDatabaseRepository().getResearcherDao()); - UserInfo user = apiContext.getDatabaseRepository().getUserInfoDao().find(principal.getId()); - createProjectIfItDoesntExist(newDmp, apiContext.getDatabaseRepository().getProjectDao(), user); + createOrganisationsIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getOrganisationDao()); + createResearchersIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao()); + UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); + createProjectIfItDoesntExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getProjectDao(), user); newDmp.setCreator(user); - newDmp = apiContext.getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); + newDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); if (dataManagementPlan.getAssociatedUsers().stream().filter(item -> item.getId() == principal.getId()).collect(Collectors.toList()).size() == 0) assignUser(newDmp, user, apiContext); } @@ -83,44 +83,44 @@ public class DataManagementPlanManager { userDMP.setDmp(dmp); userDMP.setUser(userInfo); userDMP.setRole(UserDMP.UserDMPRoles.OWNER.getValue()); - apiContext.getDatabaseRepository().getUserDmpDao().createOrUpdate(userDMP); + apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(userDMP); } public static void newVersion(ApiContext apiContext, UUID uuid, DataManagementPlanNewVersionModel dataManagementPlan, Principal principal) throws Exception { - DMP oldDmp = apiContext.getDatabaseRepository().getDmpDao().find(uuid); + DMP oldDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(uuid); DMP newDmp = dataManagementPlan.toDataModel(); - createOrganisationsIfTheyDontExist(newDmp, apiContext.getDatabaseRepository().getOrganisationDao()); - createResearchersIfTheyDontExist(newDmp, apiContext.getDatabaseRepository().getResearcherDao()); - UserInfo user = apiContext.getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); - createProjectIfItDoesntExist(newDmp, apiContext.getDatabaseRepository().getProjectDao(), user); + createOrganisationsIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getOrganisationDao()); + createResearchersIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao()); + UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + createProjectIfItDoesntExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getProjectDao(), user); newDmp.setCreator(user); newDmp.setGroupId(oldDmp.getGroupId()); newDmp.setVersion(oldDmp.getVersion() + 1); newDmp.setId(null); - newDmp = apiContext.getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); - copyDatasets(newDmp, apiContext.getDatabaseRepository().getDatasetDao()); + newDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); + copyDatasets(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao()); } public static void clone(ApiContext apiContext, UUID uuid, DataManagementPlanNewVersionModel dataManagementPlan, Principal principal) throws Exception { DMP newDmp = dataManagementPlan.toDataModel(); - createOrganisationsIfTheyDontExist(newDmp, apiContext.getDatabaseRepository().getOrganisationDao()); - createResearchersIfTheyDontExist(newDmp, apiContext.getDatabaseRepository().getResearcherDao()); - UserInfo user = apiContext.getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); - createProjectIfItDoesntExist(newDmp, apiContext.getDatabaseRepository().getProjectDao(), user); + createOrganisationsIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getOrganisationDao()); + createResearchersIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao()); + UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + createProjectIfItDoesntExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getProjectDao(), user); newDmp.setCreator(user); newDmp.setGroupId(UUID.randomUUID()); newDmp.setVersion(0); newDmp.setId(null); - newDmp = apiContext.getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); - copyDatasets(newDmp, apiContext.getDatabaseRepository().getDatasetDao()); + newDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); + copyDatasets(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao()); } public static void delete(ApiContext apiContext, UUID uuid) throws DMPWithDatasetsException { - DMP oldDmp = apiContext.getDatabaseRepository().getDmpDao().find(uuid); + DMP oldDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(uuid); if (oldDmp.getDataset().size() > 0) throw new DMPWithDatasetsException("You cannot Remove Datamanagement Plan with Datasets"); oldDmp.setStatus(DMP.DMPStatus.DELETED.getValue()); - apiContext.getDatabaseRepository().getDmpDao().createOrUpdate(oldDmp); + apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(oldDmp); } private static void createResearchersIfTheyDontExist(DMP newDmp, ResearcherDao researcherRepository) { diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java index e5c6e4e05..7806465fe 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java @@ -17,24 +17,32 @@ import eu.eudat.models.security.Principal; import eu.eudat.models.user.composite.PagedDatasetProfile; import eu.eudat.queryable.QueryableList; import eu.eudat.services.ApiContext; +import eu.eudat.services.forms.VisibilityRuleService; +import org.apache.commons.io.IOUtils; import org.json.JSONObject; +import org.springframework.core.env.Environment; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.*; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.web.client.RestTemplate; -import javax.xml.bind.JAXBException; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; public class DatasetManager { public DataTableData getPaged(ApiContext apiContext, DatasetTableRequest datasetTableRequest, Principal principal) throws Exception { - UserInfo userInfo = apiContext.getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); - QueryableList items = apiContext.getDatabaseRepository().getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()); - QueryableList authItems = apiContext.getDatabaseRepository().getDatasetDao().getAuthenticated(items, userInfo); + UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()); + QueryableList authItems = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getAuthenticated(items, userInfo); QueryableList pagedItems = PaginationManager.applyPaging(authItems, datasetTableRequest); DataTableData dataTable = new DataTableData(); @@ -72,24 +80,94 @@ public class DatasetManager { return pagedDatasetProfile; } - public File getWordDocument(DatasetDao datatasetRepository, String id) throws InstantiationException, IllegalAccessException, IOException { + public File getWordDocument(DatasetDao datatasetRepository, String id, VisibilityRuleService visibilityRuleService) throws InstantiationException, IllegalAccessException, IOException { WordBuilder wordBuilder = new WordBuilder(); DatasetWizardModel dataset = new DatasetWizardModel(); eu.eudat.entities.Dataset datasetEntity = datatasetRepository.find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class)); - PagedDatasetProfile pagedDatasetProfile = getPagedProfile(dataset,datasetEntity); - return wordBuilder.build(pagedDatasetProfile); + Map properties = new HashMap<>(); + if (datasetEntity.getProperties() != null) { + JSONObject jobject = new JSONObject(datasetEntity.getProperties()); + properties = (Map) jobject.toMap(); + } + PagedDatasetProfile pagedDatasetProfile = getPagedProfile(dataset, datasetEntity); + visibilityRuleService.setProperties(properties); + visibilityRuleService.buildVisibilityContext(pagedDatasetProfile.getRules()); + File file = wordBuilder.build(pagedDatasetProfile, datasetEntity.getLabel(),visibilityRuleService); + return file; + } + + public File convertToPDF(File file, Environment environment, String label) throws IOException, InterruptedException { + LinkedMultiValueMap map = new LinkedMultiValueMap<>(); + map.add("file", new FileSystemResource(file)); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + + HttpEntity> requestEntity = new HttpEntity>( + map, headers); + Map queueResult = new RestTemplate().postForObject( + environment.getProperty("pdf.converter.url") + + "api/v1/", requestEntity, Map.class); + + Map mediaResult = new RestTemplate().getForObject(environment.getProperty("pdf.converter.url") + + "/api/v1/" + queueResult.get("id"), Map.class); + System.out.println("Status: " + mediaResult.get("status")); + while (!mediaResult.get("status").equals("finished")) { + Thread.sleep(500); + mediaResult = new RestTemplate().getForObject(environment.getProperty("pdf.converter.url") + + "api/v1/" + queueResult.get("id"), Map.class); + System.out.println("Polling"); + } + RestTemplate restTemplate = new RestTemplate(); + restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter()); + HttpHeaders headers2 = new HttpHeaders(); + headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM)); + HttpEntity entity = new HttpEntity(headers2); + + ResponseEntity response = restTemplate.exchange(environment.getProperty("pdf.converter.url") + + mediaResult.get("result_url"), HttpMethod.GET, entity, byte[].class, "1"); + + UUID uuid = UUID.randomUUID(); + File zip = new File(uuid + ".zip"); + if (response.getStatusCode().equals(HttpStatus.OK)) { + FileOutputStream output = new FileOutputStream(zip); + IOUtils.write(response.getBody(), output); + } + return extractFromZip(zip, label + ".pdf"); + } + + private File extractFromZip(File file, String filename) throws IOException { + byte[] buffer = new byte[1024]; + File newFile = new File(filename); + ZipInputStream zis = new ZipInputStream(new FileInputStream(file)); + ZipEntry zipEntry = zis.getNextEntry(); + while (zipEntry != null) { + String zippedFileName = zipEntry.getName(); + if (zippedFileName.equals("pdf")) { + + FileOutputStream fos = new FileOutputStream(newFile); + int len; + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len); + } + fos.close(); + zipEntry = zis.getNextEntry(); + } + } + zis.closeEntry(); + zis.close(); + return newFile; } public static eu.eudat.entities.Dataset createOrUpdate(ApiContext apiContext, DatasetWizardModel profile, Principal principal) throws Exception { eu.eudat.entities.Dataset dataset = profile.toDataModel(); propertiesModelToString(profile, dataset); - UserInfo userInfo = apiContext.getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); dataset.setCreator(userInfo); - createRegistriesIfTheyDontExist(apiContext.getDatabaseRepository().getRegistryDao(), dataset); - createDataRepositoriesIfTheyDontExist(apiContext.getDatabaseRepository().getDataRepositoryDao(), dataset); - createServicesIfTheyDontExist(apiContext.getDatabaseRepository().getServiceDao(), dataset); - createExternalDatasetsIfTheyDontExist(apiContext.getDatabaseRepository().getExternalDatasetDao(), dataset); - return apiContext.getDatabaseRepository().getDatasetDao().createOrUpdate(dataset); + createRegistriesIfTheyDontExist(apiContext.getOperationsContext().getDatabaseRepository().getRegistryDao(), dataset); + createDataRepositoriesIfTheyDontExist(apiContext.getOperationsContext().getDatabaseRepository().getDataRepositoryDao(), dataset); + createServicesIfTheyDontExist(apiContext.getOperationsContext().getDatabaseRepository().getServiceDao(), dataset); + createExternalDatasetsIfTheyDontExist(apiContext.getOperationsContext().getDatabaseRepository().getExternalDatasetDao(), dataset); + return apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(dataset); } private static void propertiesModelToString(DatasetWizardModel datasetWizardModel, eu.eudat.entities.Dataset dataset) { diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DatasetProfileManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DatasetProfileManager.java index 5580dc8fb..1c88791d5 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DatasetProfileManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DatasetProfileManager.java @@ -24,10 +24,10 @@ public class DatasetProfileManager { } public static DataTableData getPaged(ApiContext apiContext, DatasetProfileTableRequestItem datasetProfileTableRequestItem) throws Exception { - QueryableList items = apiContext.getDatabaseRepository().getDatasetProfileDao().getWithCriteria(datasetProfileTableRequestItem.getCriteria()); + QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().getWithCriteria(datasetProfileTableRequestItem.getCriteria()); QueryableList pagedItems = PaginationManager.applyPaging(items, datasetProfileTableRequestItem); List datasetProfiles = pagedItems.select(item -> new DatasetProfileListingModel().fromDataModel(item)); - return apiContext.getBuilderFactory().getBuilder(DataTableDataBuilder.class).data(datasetProfiles).totalCount(items.count()).build(); + return apiContext.getOperationsContext().getBuilderFactory().getBuilder(DataTableDataBuilder.class).data(datasetProfiles).totalCount(items.count()).build(); } public static List getAll(DatasetProfileDao datasetProfileRepository) throws IllegalAccessException, InstantiationException { diff --git a/dmp-backend/src/main/java/eu/eudat/managers/ExternalDatasetManager.java b/dmp-backend/src/main/java/eu/eudat/managers/ExternalDatasetManager.java index c146680af..456ce7eca 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/ExternalDatasetManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/ExternalDatasetManager.java @@ -22,15 +22,15 @@ import java.util.stream.Collectors; public class ExternalDatasetManager { public DataTableData getPaged(ApiContext apiContext, ExternalDatasetTableRequest externalDatasetTableRequest) throws Exception { - QueryableList items = apiContext.getDatabaseRepository().getExternalDatasetDao().getWithCriteria(externalDatasetTableRequest.getCriteria()); + QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getExternalDatasetDao().getWithCriteria(externalDatasetTableRequest.getCriteria()); QueryableList pagedItems = PaginationManager.applyPaging(items, externalDatasetTableRequest); List externalDatasetListingmodels = pagedItems.select(item -> new ExternalDatasetListingModel().fromDataModel(item)); - return apiContext.getBuilderFactory().getBuilder(DataTableDataBuilder.class).data(externalDatasetListingmodels).totalCount(items.count()).build(); + return apiContext.getOperationsContext().getBuilderFactory().getBuilder(DataTableDataBuilder.class).data(externalDatasetListingmodels).totalCount(items.count()).build(); } public List getWithExternal(ApiContext apiContext, String query, RemoteFetcher remoteFetcher) throws HugeResultSet, NoURLFound, InstantiationException, IllegalAccessException { - ExternalDatasetCriteria criteria = apiContext.getBuilderFactory().getBuilder(ExternalDatasetCriteriaBuilder.class).like(query).build(); - QueryableList items = apiContext.getDatabaseRepository().getExternalDatasetDao().getWithCriteria(criteria); + ExternalDatasetCriteria criteria = apiContext.getOperationsContext().getBuilderFactory().getBuilder(ExternalDatasetCriteriaBuilder.class).like(query).build(); + QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getExternalDatasetDao().getWithCriteria(criteria); List externalDatasets = items.select(item -> new ExternalDatasetListingModel().fromDataModel(item)); return externalDatasets; } diff --git a/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java b/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java index 351da67ba..dc34815dc 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java @@ -22,27 +22,27 @@ public class InvitationsManager { principalUser.setId(principal.getId()); List alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList()); List alreadySignedInUsersEntities = alreadySignedInUsers.stream().map(item -> item.toDataModel()).collect(Collectors.toList()); - DMP dataManagementPlan = apiContext.getDatabaseRepository().getDmpDao().find(invitation.getDataManagementPlan()); - apiContext.getInvitationService().createInvitations(apiContext.getDatabaseRepository().getInvitationDao(), apiContext.getMailService(), invitation.getUsers().stream().map(item -> item.toDataModel()).collect(Collectors.toList()), dataManagementPlan, principalUser); - apiContext.getInvitationService().assignToDmp(apiContext.getDatabaseRepository().getDmpDao(), alreadySignedInUsersEntities, dataManagementPlan); + DMP dataManagementPlan = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(invitation.getDataManagementPlan()); + apiContext.getUtilitiesService().getInvitationService().createInvitations(apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao(), apiContext.getUtilitiesService().getMailService(), invitation.getUsers().stream().map(item -> item.toDataModel()).collect(Collectors.toList()), dataManagementPlan, principalUser); + apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), alreadySignedInUsersEntities, dataManagementPlan); } public static List getUsers(ApiContext apiContext, UserInfoRequestItem userInfoRequestItem) throws InstantiationException, IllegalAccessException { - QueryableList users = apiContext.getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoRequestItem.getCriteria()); + QueryableList users = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoRequestItem.getCriteria()); List userModels = users.select(item -> new UserInfoInvitationModel().fromDataModel(item)); return userModels; } public static UUID assignUserAcceptedInvitation(ApiContext apiContext, UUID invitationID, Principal principal) throws UnauthorisedException { - eu.eudat.entities.Invitation invitation = apiContext.getDatabaseRepository().getInvitationDao().find(invitationID); + eu.eudat.entities.Invitation invitation = apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().find(invitationID); if (invitation == null) throw new UnauthorisedException("There is no Data Management Plan assigned to this Link"); if (invitation.getAcceptedInvitation()) throw new UnauthorisedException("This Url Has Expired"); - UserInfo invitedUser = apiContext.getDatabaseRepository().getUserInfoDao().find(principal.getId()); + UserInfo invitedUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); DMP datamanagementPlan = invitation.getDmp(); - apiContext.getInvitationService().assignToDmp(apiContext.getDatabaseRepository().getDmpDao(), invitedUser, datamanagementPlan); + apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), invitedUser, datamanagementPlan); invitation.setAcceptedInvitation(true); - apiContext.getDatabaseRepository().getInvitationDao().createOrUpdate(invitation); + apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().createOrUpdate(invitation); return datamanagementPlan.getId(); } } diff --git a/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java b/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java index ef2b3d508..6cc06005c 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java @@ -56,12 +56,12 @@ public class ProjectManager { } public List getCriteriaWithExternal(ApiContext apiContext, ProjectCriteriaRequest projectCriteria, RemoteFetcher remoteFetcher) throws IllegalAccessException, InstantiationException, HugeResultSet, NoURLFound { - QueryableList items = apiContext.getDatabaseRepository().getProjectDao().getWithCriteria(projectCriteria.getCriteria()); + QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getProjectDao().getWithCriteria(projectCriteria.getCriteria()); List projects = items.select(item -> new Project().fromDataModel(item)); List> remoteRepos = remoteFetcher.getProjects(projectCriteria.getCriteria().getLike()); ProjectsExternalSourcesModel projectsExternalSourcesModel = new ProjectsExternalSourcesModel().fromExternalItem(remoteRepos); for (ExternalSourcesItemModel externalListingItem : projectsExternalSourcesModel) { - eu.eudat.models.project.Project project = apiContext.getBuilderFactory().getBuilder(ProjectBuilder.class) + eu.eudat.models.project.Project project = apiContext.getOperationsContext().getBuilderFactory().getBuilder(ProjectBuilder.class) .reference(externalListingItem.getRemoteId()).label(externalListingItem.getName()) .description(externalListingItem.getDescription()).uri(externalListingItem.getUri()) .abbreviation(externalListingItem.getAbbreviation()).status(eu.eudat.entities.Project.Status.fromInteger(0)) diff --git a/dmp-backend/src/main/java/eu/eudat/managers/ResearcherManager.java b/dmp-backend/src/main/java/eu/eudat/managers/ResearcherManager.java index 9d47d482a..c36bdd342 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/ResearcherManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/ResearcherManager.java @@ -10,6 +10,6 @@ public class ResearcherManager { public static Researcher create(ApiContext apiContext, eu.eudat.models.researcher.Researcher researcher) throws Exception { Researcher researcherEntity = researcher.toDataModel(); - return apiContext.getDatabaseRepository().getResearcherDao().createOrUpdate(researcherEntity); + return apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao().createOrUpdate(researcherEntity); } } diff --git a/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java b/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java index c4eb0aaab..1aada771f 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java @@ -11,13 +11,12 @@ import eu.eudat.models.userinfo.UserInfoTableRequestItem; import eu.eudat.models.userinfo.UserListingModel; import eu.eudat.queryable.QueryableList; import eu.eudat.services.ApiContext; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; import eu.eudat.utilities.builders.XmlBuilder; import org.w3c.dom.Document; import org.w3c.dom.Element; import java.util.List; -import java.util.stream.Collectors; public class UserManager { public static eu.eudat.models.user.composite.DatasetProfile generateDatasetProfileModel(eu.eudat.entities.DatasetProfile profile) { @@ -32,24 +31,24 @@ public class UserManager { } public static DataTableData getPaged(ApiContext apiContext, UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { - QueryableList users = apiContext.getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoTableRequestItem.getCriteria()); + QueryableList users = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoTableRequestItem.getCriteria()); QueryableList pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem); List modelUsers = pagedUsers.select(item -> new UserListingModel().fromDataModel(item)); - return apiContext.getBuilderFactory().getBuilder(DataTableDataBuilder.class).totalCount(users.count()).data(modelUsers).build(); + return apiContext.getOperationsContext().getBuilderFactory().getBuilder(DataTableDataBuilder.class).totalCount(users.count()).data(modelUsers).build(); } public static void editRoles(ApiContext apiContext, UserListingModel user) { - eu.eudat.entities.UserInfo userInfo = apiContext.getDatabaseRepository().getUserInfoDao().find(user.getId()); - userInfo.getUserRoles().stream().forEach(item -> apiContext.getDatabaseRepository().getUserRoleDao().delete(item)); + eu.eudat.entities.UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(user.getId()); + userInfo.getUserRoles().stream().forEach(item -> apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().delete(item)); for (Integer role : user.getAppRoles()) { - UserRole userRole = apiContext.getBuilderFactory().getBuilder(UserRoleBuilder.class).role(role).userInfo(userInfo).build(); - apiContext.getDatabaseRepository().getUserRoleDao().createOrUpdate(userRole); + UserRole userRole = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserRoleBuilder.class).role(role).userInfo(userInfo).build(); + apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(userRole); } } - public static Principal authenticate(AuthenticationService authenticationService, Credentials credentials) { - Principal principal = authenticationService.Touch(credentials); + public static Principal authenticate(AuthenticationServiceImpl authenticationServiceImpl, Credentials credentials) { + Principal principal = authenticationServiceImpl.Touch(credentials); if (principal == null) throw new UnauthorisedException("Could not Sign In User"); return principal; } diff --git a/dmp-backend/src/main/java/eu/eudat/models/helpers/responses/ResponseItem.java b/dmp-backend/src/main/java/eu/eudat/models/helpers/responses/ResponseItem.java index becebd696..334cf9b73 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/helpers/responses/ResponseItem.java +++ b/dmp-backend/src/main/java/eu/eudat/models/helpers/responses/ResponseItem.java @@ -1,10 +1,12 @@ package eu.eudat.models.helpers.responses; import eu.eudat.types.ApiMessageCode; +import eu.eudat.types.ApiResponseType; public class ResponseItem { private Integer statusCode; + private Integer responseType = ApiResponseType.JSON_RESPONSE.getValue(); private String message; private T payload; @@ -32,6 +34,14 @@ public class ResponseItem { this.payload = payload; } + public Integer getResponseType() { + return responseType; + } + + public void setResponseType(Integer responseType) { + this.responseType = responseType; + } + public ResponseItem status(ApiMessageCode statusCode) { this.statusCode = statusCode.getValue(); return this; @@ -47,4 +57,9 @@ public class ResponseItem { return this; } + public ResponseItem responseType(ApiResponseType apiResponseType) { + this.responseType = apiResponseType.getValue(); + return this; + } + } diff --git a/dmp-backend/src/main/java/eu/eudat/security/validators/b2access/B2AccessTokenValidator.java b/dmp-backend/src/main/java/eu/eudat/security/validators/b2access/B2AccessTokenValidator.java index 04660739b..d432b483a 100644 --- a/dmp-backend/src/main/java/eu/eudat/security/validators/b2access/B2AccessTokenValidator.java +++ b/dmp-backend/src/main/java/eu/eudat/security/validators/b2access/B2AccessTokenValidator.java @@ -9,7 +9,7 @@ import eu.eudat.security.customproviders.B2AccessUser; import eu.eudat.security.validators.TokenValidator; import eu.eudat.security.validators.b2access.helpers.B2AccessRequest; import eu.eudat.security.validators.b2access.helpers.B2AccessResponseToken; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @@ -24,12 +24,12 @@ import java.security.GeneralSecurityException; public class B2AccessTokenValidator implements TokenValidator { private B2AccessCustomProvider b2AccessCustomProvider; - private AuthenticationService authenticationService; + private AuthenticationServiceImpl authenticationServiceImpl; private Environment environment; @Autowired - public B2AccessTokenValidator(AuthenticationService authenticationService, Environment environment, B2AccessCustomProvider b2AccessCustomProvider) { - this.authenticationService = authenticationService; + public B2AccessTokenValidator(AuthenticationServiceImpl authenticationServiceImpl, Environment environment, B2AccessCustomProvider b2AccessCustomProvider) { + this.authenticationServiceImpl = authenticationServiceImpl; this.environment = environment; this.b2AccessCustomProvider = b2AccessCustomProvider; } @@ -43,7 +43,7 @@ public class B2AccessTokenValidator implements TokenValidator { user.setName(b2AccessUser.getName()); user.setProvider(credentials.getProvider()); user.setSecret(credentials.getTicket()); - return this.authenticationService.Touch(user); + return this.authenticationServiceImpl.Touch(user); } public B2AccessResponseToken getAccessToken(B2AccessRequest b2AccessRequest) { diff --git a/dmp-backend/src/main/java/eu/eudat/security/validators/facebook/FacebookTokenValidator.java b/dmp-backend/src/main/java/eu/eudat/security/validators/facebook/FacebookTokenValidator.java index 50679406f..383ac9898 100644 --- a/dmp-backend/src/main/java/eu/eudat/security/validators/facebook/FacebookTokenValidator.java +++ b/dmp-backend/src/main/java/eu/eudat/security/validators/facebook/FacebookTokenValidator.java @@ -8,7 +8,7 @@ import eu.eudat.models.security.Principal; import eu.eudat.security.validators.TokenValidator; import eu.eudat.security.validators.TokenValidatorFactoryImpl; import eu.eudat.services.ApiContext; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.social.facebook.api.User; @@ -26,14 +26,14 @@ public class FacebookTokenValidator implements TokenValidator { private Environment environment; private ApiContext apiContext; - private AuthenticationService authenticationService; + private AuthenticationServiceImpl authenticationServiceImpl; private FacebookServiceProvider facebookServiceProvider; @Autowired - public FacebookTokenValidator(Environment environment, ApiContext apiContext, AuthenticationService authenticationService) { + public FacebookTokenValidator(Environment environment, ApiContext apiContext, AuthenticationServiceImpl authenticationServiceImpl) { this.environment = environment; this.apiContext = apiContext; - this.authenticationService = authenticationService; + this.authenticationServiceImpl = authenticationServiceImpl; this.facebookServiceProvider = new FacebookServiceProvider(this.environment.getProperty("facebook.login.clientId"), this.environment.getProperty("facebook.login.clientSecret"), this.environment.getProperty("facebook.login.namespace")); } @@ -49,7 +49,7 @@ public class FacebookTokenValidator implements TokenValidator { user.setName(profile.getName()); user.setProvider(TokenValidatorFactoryImpl.LoginProvider.FACEBOOK); user.setSecret(credentials.getTicket()); - return this.authenticationService.Touch(user); + return this.authenticationServiceImpl.Touch(user); } diff --git a/dmp-backend/src/main/java/eu/eudat/security/validators/google/GoogleTokenValidator.java b/dmp-backend/src/main/java/eu/eudat/security/validators/google/GoogleTokenValidator.java index 66c62f99c..86b8f0373 100644 --- a/dmp-backend/src/main/java/eu/eudat/security/validators/google/GoogleTokenValidator.java +++ b/dmp-backend/src/main/java/eu/eudat/security/validators/google/GoogleTokenValidator.java @@ -12,7 +12,7 @@ import eu.eudat.models.loginprovider.LoginProviderUser; import eu.eudat.security.validators.TokenValidator; import eu.eudat.security.validators.TokenValidatorFactoryImpl; import eu.eudat.services.ApiContext; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @@ -26,15 +26,15 @@ public class GoogleTokenValidator implements TokenValidator { private static final HttpTransport transport = new NetHttpTransport(); private ApiContext apiContext; - private AuthenticationService authenticationService; + private AuthenticationServiceImpl authenticationServiceImpl; private GoogleIdTokenVerifier verifier; private Environment environment; @Autowired - public GoogleTokenValidator(ApiContext apiContext, Environment environment, AuthenticationService authenticationService) { + public GoogleTokenValidator(ApiContext apiContext, Environment environment, AuthenticationServiceImpl authenticationServiceImpl) { this.apiContext = apiContext; this.environment = environment; - this.authenticationService = authenticationService; + this.authenticationServiceImpl = authenticationServiceImpl; verifier = new GoogleIdTokenVerifier.Builder(transport, JacksonFactory.getDefaultInstance()) .setAudience(Collections.singletonList(this.environment.getProperty("google.login.clientId"))) .build(); @@ -56,7 +56,7 @@ public class GoogleTokenValidator implements TokenValidator { user.setName((String) payload.get("name")); user.setEmail(payload.getEmail()); user.setIsVerified(payload.getEmailVerified()); - return this.authenticationService.Touch(user); + return this.authenticationServiceImpl.Touch(user); } } diff --git a/dmp-backend/src/main/java/eu/eudat/security/validators/linkedin/LinkedInTokenValidator.java b/dmp-backend/src/main/java/eu/eudat/security/validators/linkedin/LinkedInTokenValidator.java index 7dbd38c76..e56429db0 100644 --- a/dmp-backend/src/main/java/eu/eudat/security/validators/linkedin/LinkedInTokenValidator.java +++ b/dmp-backend/src/main/java/eu/eudat/security/validators/linkedin/LinkedInTokenValidator.java @@ -8,7 +8,7 @@ import eu.eudat.models.security.Principal; import eu.eudat.security.validators.TokenValidator; import eu.eudat.security.validators.TokenValidatorFactoryImpl; import eu.eudat.services.ApiContext; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.social.linkedin.api.LinkedIn; @@ -26,14 +26,14 @@ public class LinkedInTokenValidator implements TokenValidator { private Environment environment; private ApiContext apiContext; - private AuthenticationService authenticationService; + private AuthenticationServiceImpl authenticationServiceImpl; private LinkedInServiceProvider linkedInServiceProvider; @Autowired - public LinkedInTokenValidator(Environment environment, ApiContext apiContext, AuthenticationService authenticationService) { + public LinkedInTokenValidator(Environment environment, ApiContext apiContext, AuthenticationServiceImpl authenticationServiceImpl) { this.environment = environment; this.apiContext = apiContext; - this.authenticationService = authenticationService; + this.authenticationServiceImpl = authenticationServiceImpl; this.linkedInServiceProvider = new LinkedInServiceProvider(this.environment.getProperty("linkedin.login.clientId"), this.environment.getProperty("linkedin.login.clientSecret")); } @@ -52,6 +52,6 @@ public class LinkedInTokenValidator implements TokenValidator { user.setName(linkedInProfile.getFirstName() + " " + linkedInProfile.getLastName()); user.setProvider(TokenValidatorFactoryImpl.LoginProvider.LINKEDIN); user.setSecret(accessGrant.getAccessToken()); - return this.authenticationService.Touch(user); + return this.authenticationServiceImpl.Touch(user); } } diff --git a/dmp-backend/src/main/java/eu/eudat/security/validators/twitter/TwitterTokenValidator.java b/dmp-backend/src/main/java/eu/eudat/security/validators/twitter/TwitterTokenValidator.java index c643aa205..f68e2677d 100644 --- a/dmp-backend/src/main/java/eu/eudat/security/validators/twitter/TwitterTokenValidator.java +++ b/dmp-backend/src/main/java/eu/eudat/security/validators/twitter/TwitterTokenValidator.java @@ -8,7 +8,7 @@ import eu.eudat.models.security.Principal; import eu.eudat.security.validators.TokenValidator; import eu.eudat.security.validators.TokenValidatorFactoryImpl; import eu.eudat.services.ApiContext; -import eu.eudat.services.AuthenticationService; +import eu.eudat.services.operations.AuthenticationServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.social.oauth1.AuthorizedRequestToken; @@ -28,14 +28,14 @@ public class TwitterTokenValidator implements TokenValidator { private Environment environment; private ApiContext apiContext; - private AuthenticationService authenticationService; + private AuthenticationServiceImpl authenticationServiceImpl; private TwitterServiceProvider twitterServiceProvider; @Autowired - public TwitterTokenValidator(Environment environment, ApiContext apiContext, AuthenticationService authenticationService) { + public TwitterTokenValidator(Environment environment, ApiContext apiContext, AuthenticationServiceImpl authenticationServiceImpl) { this.environment = environment; this.apiContext = apiContext; - this.authenticationService = authenticationService; + this.authenticationServiceImpl = authenticationServiceImpl; this.twitterServiceProvider = new TwitterServiceProvider(this.environment.getProperty("twitter.login.clientId"), this.environment.getProperty("twitter.login.clientSecret")); } @@ -58,7 +58,7 @@ public class TwitterTokenValidator implements TokenValidator { user.setName(profile.getName()); user.setProvider(TokenValidatorFactoryImpl.LoginProvider.TWITTER); user.setSecret(finalOauthToken.getValue()); - return this.authenticationService.Touch(user); + return this.authenticationServiceImpl.Touch(user); } public OAuthToken getRequestToken() { diff --git a/dmp-backend/src/main/java/eu/eudat/services/ApiContext.java b/dmp-backend/src/main/java/eu/eudat/services/ApiContext.java index 7014ce6d7..9d0a8e946 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/ApiContext.java +++ b/dmp-backend/src/main/java/eu/eudat/services/ApiContext.java @@ -1,23 +1,14 @@ package eu.eudat.services; -import eu.eudat.builders.BuilderFactory; -import eu.eudat.proxy.fetching.RemoteFetcher; -import org.springframework.context.ApplicationContext; -import org.springframework.context.MessageSource; - +import eu.eudat.services.helpers.HelpersService; +import eu.eudat.services.operations.OperationsContext; +import eu.eudat.services.utilities.UtilitiesService; public interface ApiContext { - DatabaseRepository getDatabaseRepository(); - - ApplicationContext getApplicationContext(); - - InvitationService getInvitationService(); - - RemoteFetcher getRemoteFetcher(); - MailService getMailService(); + HelpersService getHelpersService(); - MessageSource getMessageSource(); + OperationsContext getOperationsContext(); - BuilderFactory getBuilderFactory(); + UtilitiesService getUtilitiesService(); } diff --git a/dmp-backend/src/main/java/eu/eudat/services/ApiContextImpl.java b/dmp-backend/src/main/java/eu/eudat/services/ApiContextImpl.java index f94ecbab3..9429bf0c7 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/ApiContextImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/ApiContextImpl.java @@ -1,91 +1,36 @@ package eu.eudat.services; -import eu.eudat.builders.BuilderFactory; -import eu.eudat.proxy.fetching.RemoteFetcher; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.context.MessageSource; +import eu.eudat.services.helpers.HelpersService; +import eu.eudat.services.operations.OperationsContext; +import eu.eudat.services.utilities.UtilitiesService; import org.springframework.stereotype.Service; @Service("apiContext") public class ApiContextImpl implements ApiContext { - private DatabaseRepository databaseRepository; - private ApplicationContext applicationContext; - private RemoteFetcher remoteFetcher; - private InvitationService invitationService; - private MailService mailService; - private MessageSource messageSource; - private BuilderFactory builderFactory; + private OperationsContext operationsContext; + private HelpersService helpersService; + private UtilitiesService utilitiesService; - @Autowired - public void setDatabaseRepository(DatabaseRepository databaseRepository) { - this.databaseRepository = databaseRepository; + public ApiContextImpl(OperationsContext operationsContext, HelpersService helpersService, UtilitiesService utilitiesService) { + this.operationsContext = operationsContext; + this.helpersService = helpersService; + this.utilitiesService = utilitiesService; } @Override - public DatabaseRepository getDatabaseRepository() { - return databaseRepository; + public OperationsContext getOperationsContext() { + return operationsContext; } @Override - public ApplicationContext getApplicationContext() { - return applicationContext; - } - - @Autowired - public void setApplicationContext(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - - @Override - public RemoteFetcher getRemoteFetcher() { - return remoteFetcher; - } - - @Autowired - public void setRemoteFetcher(RemoteFetcher remoteFetcher) { - this.remoteFetcher = remoteFetcher; - } - - @Override - public InvitationService getInvitationService() { - return invitationService; - } - - @Autowired - public void setInvitationService(InvitationService invitationService) { - this.invitationService = invitationService; + public HelpersService getHelpersService() { + return helpersService; } @Override - public MailService getMailService() { - return mailService; - } - - @Autowired - public void setMailService(MailService mailService) { - this.mailService = mailService; - } - - @Override - public MessageSource getMessageSource() { - return messageSource; - } - - @Autowired - public void setMessageSource(MessageSource messageSource) { - this.messageSource = messageSource; - } - - @Override - public BuilderFactory getBuilderFactory() { - return builderFactory; - } - - @Autowired - public void setBuilderFactory(BuilderFactory builderFactory) { - this.builderFactory = builderFactory; + public UtilitiesService getUtilitiesService() { + return utilitiesService; } } diff --git a/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityContext.java b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityContext.java new file mode 100644 index 000000000..a47246d6a --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityContext.java @@ -0,0 +1,45 @@ +package eu.eudat.services.forms; + +import eu.eudat.models.user.components.commons.Rule; + +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; + +/** + * Created by ikalyvas on 3/5/2018. + */ +public class VisibilityContext { + private List visibilityRules = new LinkedList<>(); + + public List getVisibilityRules() { + return visibilityRules; + } + + public VisibilityRule get(String id) { + Optional rule = visibilityRules.stream().filter(item -> item.getVisibilityRuleTargetId().equals(id)).findFirst(); + if (rule.isPresent()) return rule.get(); + return null; + } + + public void buildVisibilityContext(List sources) { + sources.forEach(this::addToVisibilityRulesContext); + } + + private void addToVisibilityRulesContext(Rule item) { + VisibilityRuleSource source = new VisibilityRuleSource(); + source.setVisibilityRuleSourceId(item.getSourceField()); + source.setVisibilityRuleSourceValue(item.getRequiredValue()); + + Optional visibilityRuleOptional = visibilityRules.stream().filter(rule -> rule.getVisibilityRuleTargetId().equals(item.getTargetField())).findFirst(); + if (visibilityRuleOptional.isPresent()) visibilityRuleOptional.get().getVisibilityRuleSources().add(source); + else { + List sources = new LinkedList<>(); + sources.add(source); + VisibilityRule visibilityRule = new VisibilityRule(); + visibilityRule.setVisibilityRuleTargetId(item.getTargetField()); + visibilityRule.setVisibilityRuleSources(sources); + this.visibilityRules.add(visibilityRule); + } + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRule.java b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRule.java new file mode 100644 index 000000000..3069e21b2 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRule.java @@ -0,0 +1,27 @@ +package eu.eudat.services.forms; + +import java.util.List; + +/** + * Created by ikalyvas on 3/5/2018. + */ +public class VisibilityRule { + private String visibilityRuleTargetId; + private List visibilityRuleSources; + + public String getVisibilityRuleTargetId() { + return visibilityRuleTargetId; + } + + public void setVisibilityRuleTargetId(String visibilityRuleTargetId) { + this.visibilityRuleTargetId = visibilityRuleTargetId; + } + + public List getVisibilityRuleSources() { + return visibilityRuleSources; + } + + public void setVisibilityRuleSources(List visibilityRuleSources) { + this.visibilityRuleSources = visibilityRuleSources; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleService.java b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleService.java new file mode 100644 index 000000000..3318a3131 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleService.java @@ -0,0 +1,17 @@ +package eu.eudat.services.forms; + +import eu.eudat.models.user.components.commons.Rule; + +import java.util.List; +import java.util.Map; + +/** + * Created by ikalyvas on 3/5/2018. + */ +public interface VisibilityRuleService { + Boolean isElementVisible(String id); + + void buildVisibilityContext(List sources); + + void setProperties(Map properties); +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleServiceImpl.java new file mode 100644 index 000000000..e821616b9 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleServiceImpl.java @@ -0,0 +1,46 @@ +package eu.eudat.services.forms; + +import eu.eudat.models.user.components.commons.Rule; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by ikalyvas on 3/5/2018. + */ +@Service("visibilityRuleService") +public class VisibilityRuleServiceImpl implements VisibilityRuleService { + private Map elementVisibility = new HashMap<>(); + private VisibilityContext visibilityContext; + private Map properties; + + public Boolean isElementVisible(String id) { + if (!this.elementVisibility.containsKey(id) || this.elementVisibility.get(id)) return true; + return false; + } + + public void setProperties(Map properties) { + this.properties = properties; + } + + public void buildVisibilityContext(List sources) { + this.visibilityContext = new VisibilityContext(); + this.visibilityContext.buildVisibilityContext(sources); + this.visibilityContext.getVisibilityRules().forEach(item-> this.evaluateVisibility(item)); + } + + private void evaluateVisibility(VisibilityRule rule) { + List sources = rule.getVisibilityRuleSources(); + for(int i = 0; i < sources.size(); i++){ + if (!properties.containsKey(sources.get(i).getVisibilityRuleSourceId()) || !properties.get(sources.get(i).getVisibilityRuleSourceId()).equals(sources.get(i).getVisibilityRuleSourceValue())) { + this.elementVisibility.put(rule.getVisibilityRuleTargetId(), false); + return; + }else{ + this.elementVisibility.put(rule.getVisibilityRuleTargetId(), true); + } + } + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleSource.java b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleSource.java new file mode 100644 index 000000000..e349b6961 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/forms/VisibilityRuleSource.java @@ -0,0 +1,25 @@ +package eu.eudat.services.forms; + +/** + * Created by ikalyvas on 3/5/2018. + */ +public class VisibilityRuleSource { + private String visibilityRuleSourceId; + private String visibilityRuleSourceValue; + + public String getVisibilityRuleSourceId() { + return visibilityRuleSourceId; + } + + public void setVisibilityRuleSourceId(String visibilityRuleSourceId) { + this.visibilityRuleSourceId = visibilityRuleSourceId; + } + + public String getVisibilityRuleSourceValue() { + return visibilityRuleSourceValue; + } + + public void setVisibilityRuleSourceValue(String visibilityRuleSourceValue) { + this.visibilityRuleSourceValue = visibilityRuleSourceValue; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/helpers/HelpersService.java b/dmp-backend/src/main/java/eu/eudat/services/helpers/HelpersService.java new file mode 100644 index 000000000..d53877eb2 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/helpers/HelpersService.java @@ -0,0 +1,13 @@ +package eu.eudat.services.helpers; + +import org.springframework.context.MessageSource; + +/** + * Created by ikalyvas on 3/1/2018. + */ +public interface HelpersService { + + MessageSource getMessageSource(); + + LoggerService getLoggerService(); +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/helpers/HelpersServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/helpers/HelpersServiceImpl.java new file mode 100644 index 000000000..b46ca350f --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/helpers/HelpersServiceImpl.java @@ -0,0 +1,31 @@ +package eu.eudat.services.helpers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Service; + +/** + * Created by ikalyvas on 3/1/2018. + */ +@Service("helpersService") +public class HelpersServiceImpl implements HelpersService { + + private MessageSource messageSource; + private LoggerService loggerService; + + @Autowired + public HelpersServiceImpl(MessageSource messageSource, LoggerService loggerService) { + this.messageSource = messageSource; + this.loggerService = loggerService; + } + + @Override + public MessageSource getMessageSource() { + return messageSource; + } + + @Override + public LoggerService getLoggerService() { + return loggerService; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/helpers/LoggerService.java b/dmp-backend/src/main/java/eu/eudat/services/helpers/LoggerService.java new file mode 100644 index 000000000..7f757d5ef --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/helpers/LoggerService.java @@ -0,0 +1,12 @@ +package eu.eudat.services.helpers; + +import eu.eudat.types.WarningLevel; + +/** + * Created by ikalyvas on 3/1/2018. + */ +public interface LoggerService { + void log(String message); + + void log(String message, WarningLevel level); +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/helpers/LoggerServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/helpers/LoggerServiceImpl.java new file mode 100644 index 000000000..c4ab0881e --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/helpers/LoggerServiceImpl.java @@ -0,0 +1,39 @@ +package eu.eudat.services.helpers; + +import eu.eudat.types.WarningLevel; +import eu.eudat.utilities.interfaces.Applier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by ikalyvas on 3/1/2018. + */ +@Service("loggerService") +public class LoggerServiceImpl implements LoggerService { + private static final Logger logger = LoggerFactory.getLogger(LoggerServiceImpl.class); + private WarningLevel level; + private Map> options = new HashMap<>(); + + public void setLevel(WarningLevel level) { + this.level = level; + } + + public LoggerServiceImpl() { + this.options.put(WarningLevel.DEBUG, (logger, message) -> logger.debug(message)); + this.options.put(WarningLevel.INFO, (logger, message) -> logger.info(message)); + this.options.put(WarningLevel.WARN, (logger, message) -> logger.warn(message)); + this.options.put(WarningLevel.ERROR, (logger, message) -> logger.error(message)); + } + + public void log(String message) { + this.options.get(this.level).apply(logger, message); + } + + public void log(String message, WarningLevel level) { + this.options.get(level).apply(logger, message); + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/operations/AuthenticationService.java b/dmp-backend/src/main/java/eu/eudat/services/operations/AuthenticationService.java new file mode 100644 index 000000000..7a025b22a --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/operations/AuthenticationService.java @@ -0,0 +1,23 @@ +package eu.eudat.services.operations; + +import eu.eudat.entities.Credential; +import eu.eudat.entities.UserToken; +import eu.eudat.models.login.Credentials; +import eu.eudat.models.loginprovider.LoginProviderUser; +import eu.eudat.models.security.Principal; + +import java.util.UUID; + +/** + * Created by ikalyvas on 3/1/2018. + */ +public interface AuthenticationService { + + Principal Touch(LoginProviderUser profile); + + Principal Touch(Credentials credentials); + + void Logout(UUID token); + + Principal Touch(UUID token); +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java b/dmp-backend/src/main/java/eu/eudat/services/operations/AuthenticationServiceImpl.java similarity index 63% rename from dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java rename to dmp-backend/src/main/java/eu/eudat/services/operations/AuthenticationServiceImpl.java index 06f8598ea..72dbea317 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java +++ b/dmp-backend/src/main/java/eu/eudat/services/operations/AuthenticationServiceImpl.java @@ -1,4 +1,4 @@ -package eu.eudat.services; +package eu.eudat.services.operations; import eu.eudat.builders.entity.CredentialBuilder; import eu.eudat.builders.entity.UserInfoBuilder; @@ -13,6 +13,7 @@ import eu.eudat.models.login.Credentials; import eu.eudat.models.loginprovider.LoginProviderUser; import eu.eudat.models.security.Principal; import eu.eudat.security.validators.TokenValidatorFactoryImpl; +import eu.eudat.services.ApiContext; import eu.eudat.types.Authorities; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; @@ -22,41 +23,41 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; -@Service("authenticationService ") -public class AuthenticationService { +@Service("authenticationService") +public class AuthenticationServiceImpl implements AuthenticationService { private ApiContext apiContext; private Environment environment; @Autowired - public AuthenticationService(ApiContext apiContext, Environment environment) { + public AuthenticationServiceImpl(ApiContext apiContext, Environment environment) { this.environment = environment; this.apiContext = apiContext; } public Principal Touch(UUID token) { - UserToken tokenEntry = this.apiContext.getDatabaseRepository().getUserTokenDao().find(token); + UserToken tokenEntry = this.apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().find(token); if (tokenEntry == null || tokenEntry.getExpiresAt().before(new Date())) return null; return this.Touch(tokenEntry); } public void Logout(UUID token) { - UserToken tokenEntry = this.apiContext.getDatabaseRepository().getUserTokenDao().find(token); - this.apiContext.getDatabaseRepository().getUserTokenDao().delete(tokenEntry); + UserToken tokenEntry = this.apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().find(token); + this.apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().delete(tokenEntry); } private Principal Touch(UserToken token) { if (token == null || token.getExpiresAt().before(new Date())) return null; - UserInfo user = this.apiContext.getDatabaseRepository().getUserInfoDao().find(token.getUser().getId()); + UserInfo user = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(token.getUser().getId()); if (user == null) return null; - Principal principal = this.apiContext.getBuilderFactory().getBuilder(PrincipalBuilder.class) + Principal principal = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(PrincipalBuilder.class) .id(user.getId()).token(token.getToken()) .expiresAt(token.getExpiresAt()).name(user.getName()) .build(); - List userRoles = apiContext.getDatabaseRepository().getUserRoleDao().getUserRoles(user); + List userRoles = apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().getUserRoles(user); for (UserRole item : userRoles) { if (principal.getAuthz() == null) principal.setAuthorities(new HashSet<>()); principal.getAuthz().add(Authorities.fromInteger(item.getRole())); @@ -65,7 +66,7 @@ public class AuthenticationService { } public Principal Touch(Credentials credentials) { - Credential credential = this.apiContext.getDatabaseRepository().getCredentialDao().getLoggedInCredentials(credentials); + Credential credential = this.apiContext.getOperationsContext().getDatabaseRepository().getCredentialDao().getLoggedInCredentials(credentials); if (credential == null && credentials.getUsername().equals(environment.getProperty("autouser.root.username"))) { try { @@ -77,12 +78,12 @@ public class AuthenticationService { } if (credential == null) return null; - UserToken userToken = this.apiContext.getBuilderFactory().getBuilder(UserTokenBuilder.class) + UserToken userToken = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserTokenBuilder.class) .issuedAt(new Date()).user(credential.getUserInfo()) .token(UUID.randomUUID()).expiresAt(addADay(new Date())) .build(); - userToken = apiContext.getDatabaseRepository().getUserTokenDao().createOrUpdate(userToken); + userToken = apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().createOrUpdate(userToken); return this.Touch(userToken); @@ -92,38 +93,38 @@ public class AuthenticationService { UserInfoCriteria criteria = new UserInfoCriteria(); criteria.setEmail(profile.getEmail()); - UserInfo userInfo = apiContext.getDatabaseRepository().getUserInfoDao().asQueryable().withHint("userInfo").where((builder, root) -> builder.equal(root.get("email"), profile.getEmail())).getSingleOrDefault(); + UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().withHint("userInfo").where((builder, root) -> builder.equal(root.get("email"), profile.getEmail())).getSingleOrDefault(); - if(userInfo == null){ - Optional optionalCredential = Optional.ofNullable(apiContext.getDatabaseRepository().getCredentialDao() + if (userInfo == null) { + Optional optionalCredential = Optional.ofNullable(apiContext.getOperationsContext().getDatabaseRepository().getCredentialDao() .asQueryable().withHint("credentialUserInfo") .where((builder, root) -> builder.and(builder.equal(root.get("provider"), profile.getProvider().getValue()), builder.equal(root.get("externalId"), profile.getId()))) .getSingleOrDefault()); userInfo = optionalCredential.map(Credential::getUserInfo).orElse(null); } - final Credential credential = this.apiContext.getBuilderFactory().getBuilder(CredentialBuilder.class) + final Credential credential = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(CredentialBuilder.class) .id(UUID.randomUUID()).creationTime(new Date()).status(1) .lastUpdateTime(new Date()).provider((int) profile.getProvider().getValue()) .secret(profile.getSecret()).externalId(profile.getId()) .build(); if (userInfo == null) { - userInfo = this.apiContext.getBuilderFactory().getBuilder(UserInfoBuilder.class) + userInfo = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class) .name(profile.getName()).verified_email(profile.getIsVerified()) .email(profile.getEmail()).created(new Date()).lastloggedin(new Date()) .authorization_level((short) 1).usertype((short) 1) .build(); - userInfo = apiContext.getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); + userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); credential.setPublicValue(userInfo.getName()); credential.setUserInfo(userInfo); - apiContext.getDatabaseRepository().getCredentialDao().createOrUpdate(credential); + apiContext.getOperationsContext().getDatabaseRepository().getCredentialDao().createOrUpdate(credential); UserRole role = new UserRole(); role.setRole(Authorities.USER.getValue()); role.setUserInfo(userInfo); - apiContext.getDatabaseRepository().getUserRoleDao().createOrUpdate(role); + apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(role); } else { userInfo.setLastloggedin(new Date()); @@ -135,18 +136,18 @@ public class AuthenticationService { credential.setUserInfo(userInfo); credential.setId(UUID.randomUUID()); credential.setPublicValue(userInfo.getName()); - apiContext.getDatabaseRepository().getCredentialDao().createOrUpdate(credential); + apiContext.getOperationsContext().getDatabaseRepository().getCredentialDao().createOrUpdate(credential); userInfo.getCredentials().add(credential); } - userInfo = apiContext.getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); + userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); } - UserToken userToken = this.apiContext.getBuilderFactory().getBuilder(UserTokenBuilder.class) + UserToken userToken = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserTokenBuilder.class) .token(UUID.randomUUID()).user(userInfo) .expiresAt(addADay(new Date())).issuedAt(new Date()) .build(); - apiContext.getDatabaseRepository().getUserTokenDao().createOrUpdate(userToken); + apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().createOrUpdate(userToken); return Touch(userToken.getToken()); } @@ -165,24 +166,24 @@ public class AuthenticationService { if (!environment.getProperty("autouser.root.username").equals(username) || !environment.getProperty("autouser.root.password").equals(password)) return null; - UserInfo userInfo = this.apiContext.getBuilderFactory().getBuilder(UserInfoBuilder.class) + UserInfo userInfo = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class) .name(username).email(environment.getProperty("autouser.root.email")).created(new Date()) .lastloggedin(new Date()).authorization_level((short) 1).usertype((short) 1) .build(); - userInfo = this.apiContext.getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); + userInfo = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); UserRole role = new UserRole(); role.setRole(Authorities.ADMIN.getValue()); role.setUserInfo(userInfo); - this.apiContext.getDatabaseRepository().getUserRoleDao().createOrUpdate(role); + this.apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(role); - Credential credential = this.apiContext.getBuilderFactory().getBuilder(CredentialBuilder.class) + Credential credential = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(CredentialBuilder.class) .userInfo(userInfo).publicValue(username).secret(password) .provider((int) TokenValidatorFactoryImpl.LoginProvider.NATIVELOGIN.getValue()) .creationTime(new Date()).lastUpdateTime(new Date()).status(0) .build(); - return this.apiContext.getDatabaseRepository().getCredentialDao().createOrUpdate(credential); + return this.apiContext.getOperationsContext().getDatabaseRepository().getCredentialDao().createOrUpdate(credential); } } diff --git a/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepository.java b/dmp-backend/src/main/java/eu/eudat/services/operations/DatabaseRepository.java similarity index 95% rename from dmp-backend/src/main/java/eu/eudat/services/DatabaseRepository.java rename to dmp-backend/src/main/java/eu/eudat/services/operations/DatabaseRepository.java index 4842fb03f..1be099f2a 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepository.java +++ b/dmp-backend/src/main/java/eu/eudat/services/operations/DatabaseRepository.java @@ -1,4 +1,4 @@ -package eu.eudat.services; +package eu.eudat.services.operations; import eu.eudat.dao.entities.*; import eu.eudat.dao.entities.security.CredentialDao; diff --git a/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepositoryImpl.java b/dmp-backend/src/main/java/eu/eudat/services/operations/DatabaseRepositoryImpl.java similarity index 99% rename from dmp-backend/src/main/java/eu/eudat/services/DatabaseRepositoryImpl.java rename to dmp-backend/src/main/java/eu/eudat/services/operations/DatabaseRepositoryImpl.java index b4cf99cc0..8f55edaf0 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/DatabaseRepositoryImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/operations/DatabaseRepositoryImpl.java @@ -1,4 +1,4 @@ -package eu.eudat.services; +package eu.eudat.services.operations; import eu.eudat.dao.entities.*; import eu.eudat.dao.entities.security.CredentialDao; diff --git a/dmp-backend/src/main/java/eu/eudat/services/operations/OperationsContext.java b/dmp-backend/src/main/java/eu/eudat/services/operations/OperationsContext.java new file mode 100644 index 000000000..672f6423a --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/operations/OperationsContext.java @@ -0,0 +1,20 @@ +package eu.eudat.services.operations; + +import eu.eudat.builders.BuilderFactory; +import eu.eudat.proxy.fetching.RemoteFetcher; +import org.springframework.context.ApplicationContext; + +/** + * Created by ikalyvas on 3/1/2018. + */ +public interface OperationsContext { + + DatabaseRepository getDatabaseRepository(); + + ApplicationContext getApplicationContext(); + + BuilderFactory getBuilderFactory(); + + RemoteFetcher getRemoteFetcher(); + +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/operations/OperationsContextImpl.java b/dmp-backend/src/main/java/eu/eudat/services/operations/OperationsContextImpl.java new file mode 100644 index 000000000..46615304b --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/operations/OperationsContextImpl.java @@ -0,0 +1,48 @@ +package eu.eudat.services.operations; + +import eu.eudat.builders.BuilderFactory; +import eu.eudat.proxy.fetching.RemoteFetcher; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +/** + * Created by ikalyvas on 3/1/2018. + */ +@Service("operationsContext") +public class OperationsContextImpl implements OperationsContext { + + private DatabaseRepository databaseRepository; + private ApplicationContext applicationContext; + private RemoteFetcher remoteFetcher; + private BuilderFactory builderFactory; + + @Autowired + public OperationsContextImpl(DatabaseRepository databaseRepository, ApplicationContext applicationContext, RemoteFetcher remoteFetcher, BuilderFactory builderFactory) { + this.databaseRepository = databaseRepository; + this.applicationContext = applicationContext; + this.remoteFetcher = remoteFetcher; + this.builderFactory = builderFactory; + } + + @Override + public DatabaseRepository getDatabaseRepository() { + return databaseRepository; + } + + @Override + public ApplicationContext getApplicationContext() { + return applicationContext; + } + + @Override + public RemoteFetcher getRemoteFetcher() { + return remoteFetcher; + } + + @Override + public BuilderFactory getBuilderFactory() { + return builderFactory; + } + +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java b/dmp-backend/src/main/java/eu/eudat/services/utilities/InvitationService.java similarity index 94% rename from dmp-backend/src/main/java/eu/eudat/services/InvitationService.java rename to dmp-backend/src/main/java/eu/eudat/services/utilities/InvitationService.java index 5b3e7cea6..3e5d35ce1 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java +++ b/dmp-backend/src/main/java/eu/eudat/services/utilities/InvitationService.java @@ -1,4 +1,4 @@ -package eu.eudat.services; +package eu.eudat.services.utilities; import eu.eudat.dao.entities.DMPDao; diff --git a/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/utilities/InvitationServiceImpl.java similarity index 98% rename from dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java rename to dmp-backend/src/main/java/eu/eudat/services/utilities/InvitationServiceImpl.java index ed4e45bcb..e79f4cd52 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/utilities/InvitationServiceImpl.java @@ -1,4 +1,4 @@ -package eu.eudat.services; +package eu.eudat.services.utilities; import eu.eudat.dao.entities.DMPDao; import eu.eudat.dao.entities.InvitationDao; diff --git a/dmp-backend/src/main/java/eu/eudat/services/MailService.java b/dmp-backend/src/main/java/eu/eudat/services/utilities/MailService.java similarity index 83% rename from dmp-backend/src/main/java/eu/eudat/services/MailService.java rename to dmp-backend/src/main/java/eu/eudat/services/utilities/MailService.java index ea89f395e..123ffae23 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/MailService.java +++ b/dmp-backend/src/main/java/eu/eudat/services/utilities/MailService.java @@ -1,4 +1,4 @@ -package eu.eudat.services; +package eu.eudat.services.utilities; import eu.eudat.models.mail.SimpleMail; diff --git a/dmp-backend/src/main/java/eu/eudat/services/MailServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/utilities/MailServiceImpl.java similarity index 96% rename from dmp-backend/src/main/java/eu/eudat/services/MailServiceImpl.java rename to dmp-backend/src/main/java/eu/eudat/services/utilities/MailServiceImpl.java index a1dc6c290..0e66b5d2b 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/MailServiceImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/utilities/MailServiceImpl.java @@ -1,4 +1,4 @@ -package eu.eudat.services; +package eu.eudat.services.utilities; import eu.eudat.models.mail.SimpleMail; import org.springframework.beans.factory.annotation.Autowired; diff --git a/dmp-backend/src/main/java/eu/eudat/services/utilities/UtilitiesService.java b/dmp-backend/src/main/java/eu/eudat/services/utilities/UtilitiesService.java new file mode 100644 index 000000000..fd6ec03b8 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/utilities/UtilitiesService.java @@ -0,0 +1,15 @@ +package eu.eudat.services.utilities; + +import eu.eudat.services.forms.VisibilityRuleService; + +/** + * Created by ikalyvas on 3/1/2018. + */ +public interface UtilitiesService { + + InvitationService getInvitationService(); + + MailService getMailService(); + + VisibilityRuleService getVisibilityRuleService(); +} diff --git a/dmp-backend/src/main/java/eu/eudat/services/utilities/UtilitiesServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/utilities/UtilitiesServiceImpl.java new file mode 100644 index 000000000..40c8eada9 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/services/utilities/UtilitiesServiceImpl.java @@ -0,0 +1,38 @@ +package eu.eudat.services.utilities; + +import eu.eudat.services.forms.VisibilityRuleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * Created by ikalyvas on 3/1/2018. + */ +@Service("utilitiesService") +public class UtilitiesServiceImpl implements UtilitiesService { + + private InvitationService invitationService; + private MailService mailService; + private VisibilityRuleService visibilityRuleService; + + @Autowired + public UtilitiesServiceImpl(InvitationService invitationService, MailService mailService, VisibilityRuleService visibilityRuleService) { + this.invitationService = invitationService; + this.mailService = mailService; + this.visibilityRuleService = visibilityRuleService; + } + + @Override + public VisibilityRuleService getVisibilityRuleService() { + return visibilityRuleService; + } + + @Override + public InvitationService getInvitationService() { + return invitationService; + } + + @Override + public MailService getMailService() { + return mailService; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/types/ApiResponseType.java b/dmp-backend/src/main/java/eu/eudat/types/ApiResponseType.java new file mode 100644 index 000000000..501ed62fa --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/types/ApiResponseType.java @@ -0,0 +1,29 @@ +package eu.eudat.types; + +/** + * Created by ikalyvas on 3/5/2018. + */ +public enum ApiResponseType { + JSON_RESPONSE(0), FILE_RESPONSE(1); + + private Integer value; + + private ApiResponseType(Integer value) { + this.value = value; + } + + public Integer getValue() { + return value; + } + + public static ApiResponseType fromInteger(Integer value) { + switch (value) { + case 0: + return JSON_RESPONSE; + case 200: + return FILE_RESPONSE; + default: + throw new RuntimeException("Unsupported Api Response Type Code"); + } + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/types/WarningLevel.java b/dmp-backend/src/main/java/eu/eudat/types/WarningLevel.java new file mode 100644 index 000000000..8ac07413d --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/types/WarningLevel.java @@ -0,0 +1,8 @@ +package eu.eudat.types; + +/** + * Created by ikalyvas on 3/1/2018. + */ +public enum WarningLevel { + INFO, WARN, DEBUG, ERROR +} diff --git a/dmp-backend/src/main/java/eu/eudat/utilities/interfaces/Applier.java b/dmp-backend/src/main/java/eu/eudat/utilities/interfaces/Applier.java index d5332d97f..cb26b7a46 100644 --- a/dmp-backend/src/main/java/eu/eudat/utilities/interfaces/Applier.java +++ b/dmp-backend/src/main/java/eu/eudat/utilities/interfaces/Applier.java @@ -1,8 +1,8 @@ package eu.eudat.utilities.interfaces; /** - * Created by ikalyvas on 2/27/2018. + * Created by ikalyvas on 3/1/2018. */ -public interface Applier { - R apply(A applier, V value); +public interface Applier { + void apply(A applier, V value); } diff --git a/dmp-backend/src/main/java/eu/eudat/utilities/interfaces/ApplierWithValue.java b/dmp-backend/src/main/java/eu/eudat/utilities/interfaces/ApplierWithValue.java new file mode 100644 index 000000000..0c4a76093 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/utilities/interfaces/ApplierWithValue.java @@ -0,0 +1,8 @@ +package eu.eudat.utilities.interfaces; + +/** + * Created by ikalyvas on 2/27/2018. + */ +public interface ApplierWithValue { + R apply(A applier, V value); +} diff --git a/dmp-backend/src/main/resources/application.properties b/dmp-backend/src/main/resources/application.properties index 8bbcb4a80..bd227eea3 100644 --- a/dmp-backend/src/main/resources/application.properties +++ b/dmp-backend/src/main/resources/application.properties @@ -55,4 +55,6 @@ b2access.externallogin.user_info_url = https://b2access-integration.fz-juelich.d b2access.externallogin.access_token_url = https://b2access-integration.fz-juelich.de:443/oauth2/token b2access.externallogin.redirect_uri = http://dmp.eudat.org:4200/api/oauth/authorized/b2access b2access.externallogin.clientid = eudatdmptool -b2access.externallogin.clientSecret = A3b*1*92 \ No newline at end of file +b2access.externallogin.clientSecret = A3b*1*92 +################################################################################# +pdf.converter.url = http://localhost/ \ No newline at end of file diff --git a/dmp-backend/src/main/resources/documents/h2020.docx b/dmp-backend/src/main/resources/documents/h2020.docx new file mode 100644 index 000000000..23ce9fd56 Binary files /dev/null and b/dmp-backend/src/main/resources/documents/h2020.docx differ diff --git a/dmp-frontend/package-lock.json b/dmp-frontend/package-lock.json index e3df6cd06..70ebcec27 100644 --- a/dmp-frontend/package-lock.json +++ b/dmp-frontend/package-lock.json @@ -356,6 +356,11 @@ "integrity": "sha512-q3zfJvaTroV5BjAAR+peTHEGAAhGrPX0z2EzCzpt2mwFA+qzUn2nigJLqSekXRtdULKmT8am7zjvTMZSapIgHw==", "dev": true }, + "@types/file-saver": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-1.3.0.tgz", + "integrity": "sha512-fC12hKtEzVkrV/ZRcrmqvpHG/TMYDZtgpAmgMUA4F7KneDaQeFMwmPz8AfygKKJMqsdTi8bL+E+fciaaMLxUhg==" + }, "@types/minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", @@ -1234,7 +1239,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -2660,6 +2664,11 @@ "schema-utils": "0.3.0" } }, + "file-saver": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", + "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI=" + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -2830,910 +2839,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, "fstream": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", diff --git a/dmp-frontend/package.json b/dmp-frontend/package.json index 7cb74abc8..74bb4a970 100644 --- a/dmp-frontend/package.json +++ b/dmp-frontend/package.json @@ -26,7 +26,9 @@ "@covalent/core": "^1.0.0-rc.1", "@ngx-translate/core": "^9.0.1", "@ngx-translate/http-loader": "^2.0.0", + "@types/file-saver": "^1.3.0", "core-js": "^2.4.1", + "file-saver": "1.3.3", "rxjs": "^5.5.6", "zone.js": "^0.8.17" }, diff --git a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html index 77a27ee92..cc5baf2bb 100644 --- a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html +++ b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html @@ -3,9 +3,11 @@

{{datasetWizardModel?.dmp?.project?.label}} Dataset

- + +
@@ -92,7 +94,8 @@ {{'DATASET-WIZARD.THIRD-STEP.TITLE' | translate}} - + diff --git a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts index 19e04e270..37ef03e30 100644 --- a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts @@ -17,7 +17,7 @@ import { TranslateService } from '@ngx-translate/core'; import { ActivatedRoute, Router, Params } from '@angular/router'; import { Component, ViewChild, OnInit, AfterViewInit, ViewEncapsulation } from "@angular/core"; import { FormGroup, Validators, FormBuilder } from "@angular/forms"; - +import * as FileSaver from 'file-saver'; import { MatPaginator, MatSort, MatSnackBar, MatStepper } from "@angular/material"; @Component({ @@ -28,7 +28,7 @@ import { MatPaginator, MatSort, MatSnackBar, MatStepper } from "@angular/materia encapsulation: ViewEncapsulation.None }) export class DatasetWizardComponent { - @ViewChild('stepper') stepper: MatStepper; + @ViewChild('stepper') stepper: MatStepper; //dmpAutoCompleteConfiguration: AutoCompleteConfiguration; //datasetProfileAutoCompleteConfiguration: AutoCompleteConfiguration; @@ -48,7 +48,7 @@ export class DatasetWizardComponent { filteredRegistries: ExternalSourcesItemModel[]; filteredServices: ExternalSourcesItemModel[]; filteredExternalDatasets: ExternalSourcesItemModel[]; - + itemId: string constructor( private datasetWizardService: DatasetWizardService, private formBuilder: FormBuilder, @@ -73,11 +73,11 @@ export class DatasetWizardComponent { this.route.params.subscribe((params: Params) => { - const itemId = params['id']; + this.itemId = params['id']; const dmpId = params['dmpId']; - if (itemId != null) { + if (this.itemId != null) { this.isNew = false; - this.datasetWizardService.getSingle(itemId).map(data => data as DatasetWizardModel) + this.datasetWizardService.getSingle(this.itemId).map(data => data as DatasetWizardModel) .subscribe(data => { this.datasetWizardModel = JsonSerializer.fromJSONObject(data, DatasetWizardModel); this.formGroup = this.datasetWizardModel.buildForm(); @@ -105,7 +105,7 @@ export class DatasetWizardComponent { ngAfterViewInit() { this.route.params.subscribe((params: Params) => { let itemId = params['id']; - if(itemId !=null) this.stepper.selectedIndex = 2; + if (itemId != null) this.stepper.selectedIndex = 2; }) } @@ -126,9 +126,9 @@ export class DatasetWizardComponent { getDefinition() { if (this.isNew) { this.datasetWizardService.getDefinition(this.formGroup.get("profile").get("id").value).subscribe(item => { - this.datasetWizardModel.datasetProfileDefinition = JsonSerializer.fromJSONObject(item,DatasetProfileDefinitionModel); + this.datasetWizardModel.datasetProfileDefinition = JsonSerializer.fromJSONObject(item, DatasetProfileDefinitionModel); this.datasetProfileDefinitionModel = this.datasetWizardModel.datasetProfileDefinition; - this.formGroup.addControl("datasetProfileDefinition",this.datasetProfileDefinitionModel.buildForm()) + this.formGroup.addControl("datasetProfileDefinition", this.datasetProfileDefinitionModel.buildForm()) }) } } @@ -165,12 +165,12 @@ export class DatasetWizardComponent { save() { - this.datasetWizardModel.status = "0"; + this.formGroup.get("status").setValue("0"); this.submit(); } saveFinalize() { - this.datasetWizardModel.status = "1"; + this.formGroup.get("status").setValue("1"); this.submit(); } @@ -245,4 +245,32 @@ export class DatasetWizardComponent { }); } } + + downloadPDF(): void { + this.datasetWizardService.downloadPDF(this.itemId).subscribe(response => { + const blob = new Blob([response.body], { type: 'application/pdf' }) + const filename = this.getFilenameFromContentDispositionHeader(response.headers.get('Content-Disposition')); + + FileSaver.saveAs(blob, filename) + }) + } + + getFilenameFromContentDispositionHeader(header: string): string { // expecting filename=XXXX or filename="XXXX" to exist + // const regex: RegExp = new RegExp(/filename=((\"(.*)\")|([^;]*))/g); + const regex: RegExp = new RegExp(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/g); + + const matches = header.match(regex); + let filename: string; + for (let i = 0; i < matches.length; i++) { + const match = matches[i]; + if (match.includes('filename="')) { + filename = match.substring(10, match.length - 1); + break; + } else if (match.includes('filename=')) { + filename = match.substring(9); + break; + } + } + return filename; + } } \ No newline at end of file diff --git a/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html index 2b3ef7038..205fc78e8 100644 --- a/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html +++ b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html @@ -18,7 +18,7 @@ -
+
diff --git a/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts index 81ca5f7b4..3a380f70d 100644 --- a/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts +++ b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts @@ -58,11 +58,11 @@ export class DynamicFormComponent implements OnInit { ngOnInit() { - this.datasetProfileDefinitionModel = this.dataModel.datasetProfileDefinition - this.createPagination(); + let rules: Rule[] = JsonSerializer.fromJSONArray(this.dataModel.datasetProfileDefinition.rules, Rule); this.visibilityRulesService.formGroup = this.form; - let rules: Rule[] = JsonSerializer.fromJSONArray(this.datasetProfileDefinitionModel.rules, Rule); this.visibilityRulesService.buildVisibilityRules(rules) + this.datasetProfileDefinitionModel = this.dataModel.datasetProfileDefinition + this.createPagination(); this.progressbar = true; this.route.fragment.subscribe((fragment: string) => { diff --git a/dmp-frontend/src/app/models/Field.ts b/dmp-frontend/src/app/models/Field.ts index c21090a1f..c0bdcd268 100644 --- a/dmp-frontend/src/app/models/Field.ts +++ b/dmp-frontend/src/app/models/Field.ts @@ -6,16 +6,17 @@ import { Serializable } from './interfaces/Serializable'; import { Multiplicity } from './Multiplicity'; import { DefaultValue } from './DefaultValue'; import { ValidationTypes } from '@app/models/common/ValidationTypes'; +import { ViewStyle } from './datasetProfileAdmin/ViewStyle'; export class Field extends BaseModel implements Serializable, FormGenerator{ public id: string; public title: string; - public value: string; + public value: any; public defaultValue: DefaultValue; public description: string; public extendedDescription: string; - public viewStyle: any; + public viewStyle: ViewStyle; public defaultVisibility: boolean; public page: number; public multiplicity: Multiplicity; @@ -38,26 +39,29 @@ export class Field extends BaseModel implements Serializable, FormGenerat this.defaultValue = JsonSerializer.fromJSONObject(item.defaultValue, DefaultValue); this.value = this.defaultValue.value && !item.value ? this.defaultValue.value : item.value; //this.multiplicity = new Multiplicity(); + if (this.viewStyle.renderStyle === "checkBox") { + this.value = this.value === 'true'; + } //this.multiplicity.max = 2; - if(item.multiplicityItems)this.multiplicityItems = JsonSerializer.fromJSONArray(item.multiplicityItems, Field); + if (item.multiplicityItems) this.multiplicityItems = JsonSerializer.fromJSONArray(item.multiplicityItems, Field); this.data = item.data; return this; } - - buildForm(): FormGroup { - if(this.validations) + + buildForm(): FormGroup { + if (this.validations) this.validations.forEach(validation => { - if (validation == ValidationTypes.Required ) this.validationRequired = true; + if (validation == ValidationTypes.Required) this.validationRequired = true; }); let formGroup = this.formBuilder.group({ id: [this.id], - data:[this.data], + data: [this.data], /* title: [this.title], */ - value: [this.value, this.validationRequired == true? Validators.required:null]/* , + value: [this.value, this.validationRequired == true ? Validators.required : null]/* , description: [this.description], extendedDescription:[this.extendedDescription], viewStyle: [this.viewStyle], diff --git a/dmp-frontend/src/app/services/dataset-wizard/dataset-wizard.service.ts b/dmp-frontend/src/app/services/dataset-wizard/dataset-wizard.service.ts index 2525fa815..6d64957e3 100644 --- a/dmp-frontend/src/app/services/dataset-wizard/dataset-wizard.service.ts +++ b/dmp-frontend/src/app/services/dataset-wizard/dataset-wizard.service.ts @@ -2,7 +2,7 @@ import { DatasetProfileDefinitionModel } from '../../models/DatasetProfileDefini import { DatasetWizardModel } from '../../models/datasets/DatasetWizardModel'; import { DatasetProfileCriteria } from '../../models/criteria/dataset-profile/DatasetProfileCriteria'; import 'rxjs/add/operator/map'; -import { HttpHeaders } from '@angular/common/http'; +import { HttpHeaders, HttpResponse, HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { HostConfiguration } from './../../app.constants'; import { BaseHttpService } from '../../utilities/cite-http-service-module/base-http.service'; @@ -11,6 +11,7 @@ import { DataManagementPlanModel } from '../../models/data-managemnt-plans/DataM import { DataManagementPlanCriteria } from '../../models/criteria/data-management-plan/DataManagementPlanCriteria'; import { RequestItem } from '../../models/criteria/RequestItem'; import { DatasetProfileModel } from '@app/models/datasetprofile/DatasetProfileModel'; +import { ResponseContentType } from '@angular/http'; @Injectable() @@ -19,7 +20,7 @@ export class DatasetWizardService { private actionUrl: string; private headers: HttpHeaders; - constructor(private http: BaseHttpService) { + constructor(private http: BaseHttpService, private httpClient: HttpClient) { this.actionUrl = HostConfiguration.Server + 'datasetwizard/'; @@ -44,10 +45,9 @@ export class DatasetWizardService { return this.http.post(this.actionUrl + 'createOrUpdate', datasetModel, { headers: this.headers }); } -/* public saveDataset(datasetWizard: DatasetWizardModel, formValue) { - datasetWizard.properties = formValue; - return this.createDataset(datasetWizard) - } */ + public downloadPDF(id: string): Observable> { + return this.httpClient.get(this.actionUrl + 'getWordDocument/' + id, { responseType: 'blob', observe: 'response' }) + } public getDefinition(id: String): Observable { return this.http.get(this.actionUrl + 'get/' + id, { headers: this.headers }); diff --git a/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.ts b/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.ts index fa15a6b09..f25300251 100644 --- a/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.ts +++ b/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.ts @@ -22,8 +22,8 @@ export class DatasetCriteriaComponent extends BaseCriteriaComponent implements O public criteria: DatasetCriteria= new DatasetCriteria(); statuses = [ - {value: '0', viewValue: 'Active'}, - {value: '1', viewValue: 'Inactive'} + {value: '0', viewValue: 'Saved'}, + {value: '1', viewValue: 'Finalised'} ]; constructor( diff --git a/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts b/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts index 31ca4bf26..f0188098c 100644 --- a/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts +++ b/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts @@ -10,6 +10,7 @@ import { HttpClient } from '@angular/common/http'; import { AuthService } from '../../services/auth/auth.service'; import { SnackBarNotificationComponent } from '../../shared/components/notificaiton/snack-bar-notification.component'; import { BaseHttpResponseModel } from '../../models/http/BaseHttpResponseModel'; +import { ApiResponseCode } from '@app/utilities/types/ApiResponseCode'; @Injectable() export class BaseHttpService { @@ -22,39 +23,39 @@ export class BaseHttpService { public route: ActivatedRoute ) { } - get(url: string, options?: any): Observable { - return this.interceptRepsonse(this.http.get(url, this.buildRequestOptions(options))); + get(url: string, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.get(url, this.buildRequestOptions(appendOptions, options))); } - post(url: string, body: any, options?: any): Observable { - return this.interceptRepsonse(this.http.post(url, body, this.buildRequestOptions(options))); + post(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.post(url, body, this.buildRequestOptions(appendOptions, options))); } - put(url: string, body: any, options?: any): Observable { - return this.interceptRepsonse(this.http.put(url, body, this.buildRequestOptions(options))); + put(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.put(url, body, this.buildRequestOptions(appendOptions, options))); } - delete(url: string, options?: any): Observable { - return this.interceptRepsonse(this.http.delete(url, this.buildRequestOptions(options))); + delete(url: string, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.delete(url, this.buildRequestOptions(appendOptions, options))); } - patch(url: string, body: any, options?: any): Observable { - return this.interceptRepsonse(this.http.patch(url, body, this.buildRequestOptions(options))); + patch(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.patch(url, body, this.buildRequestOptions(appendOptions, options))); } - head(url: string, options?: any): Observable { - return this.interceptRepsonse(this.http.head(url, this.buildRequestOptions(options))); + head(url: string, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.head(url, this.buildRequestOptions(appendOptions, options))); } - options(url: string, options?: any): Observable { - return this.interceptRepsonse(this.http.options(url, this.buildRequestOptions(options))); + options(url: string, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.options(url, this.buildRequestOptions(appendOptions, options))); } - protected buildRequestOptions(options?: any): Object { + protected buildRequestOptions(appendOptions: boolean, options?: any): Object { if (options == null) { options = new RequestOptions(); } if (options.headers == null) { options.headers = new Headers(); } - if (!options.headers.has('Content-Type')) { + if (!options.headers.has('Content-Type') && appendOptions) { options.headers = options.headers.set('Content-Type', 'application/json'); } - if (!options.headers.has('Content-Type')) { + if (!options.headers.has('Content-Type') && appendOptions) { options.headers = options.headers.set('Content-Type', 'application/json'); } if (!options.headers.has('AuthToken')) { @@ -81,26 +82,27 @@ export class BaseHttpService { //this.notification.httpError(error); return Observable.of(); } else { - let error:any = errorResponse.error - if(error.statusCode == ApiMessageCode.ERROR_MESSAGE){ + let error: any = errorResponse.error + if (error.statusCode == ApiMessageCode.ERROR_MESSAGE) { this.snackBar.openFromComponent(SnackBarNotificationComponent, { data: { message: error.message, language: null }, duration: 3000, extraClasses: ['snackbar-warning'] }) - return Observable.throw(errorResponse); + return Observable.throw(errorResponse); } - else{ + else { this.snackBar.openFromComponent(SnackBarNotificationComponent, { data: { message: 'GENERAL.ERRORS.HTTP-REQUEST-ERROR', language: this.language }, duration: 3000, extraClasses: ['snackbar-warning'] }) - return Observable.throw(errorResponse); + return Observable.throw(errorResponse); } } }) .map(response => { + if (response instanceof Blob) return response if (response.statusCode == ApiMessageCode.SUCCESS_MESSAGE) { //throw new Error('Request failed'); this.snackBar.openFromComponent(SnackBarNotificationComponent, { @@ -109,12 +111,12 @@ export class BaseHttpService { extraClasses: ['snackbar-success'] }) return response.payload; - + } - else if(response.statusCode == ApiMessageCode.NO_MESSAGE){ + else if (response.statusCode == ApiMessageCode.NO_MESSAGE) { return response.payload; } - else{ + else { return response.payload; } }); diff --git a/dmp-frontend/src/app/utilities/types/ApiResponseCode.ts b/dmp-frontend/src/app/utilities/types/ApiResponseCode.ts new file mode 100644 index 000000000..fa650dc3b --- /dev/null +++ b/dmp-frontend/src/app/utilities/types/ApiResponseCode.ts @@ -0,0 +1,4 @@ +export enum ApiResponseCode { + JSON_RESPONSE = 0, + FILE_RESPONSE = 1, +} \ No newline at end of file diff --git a/dmp-frontend/src/app/visibility-rules/visibility-rules.service.ts b/dmp-frontend/src/app/visibility-rules/visibility-rules.service.ts index 075bfb147..4c8b43901 100644 --- a/dmp-frontend/src/app/visibility-rules/visibility-rules.service.ts +++ b/dmp-frontend/src/app/visibility-rules/visibility-rules.service.ts @@ -40,11 +40,11 @@ export class VisibilityRulesService { private evaluateVisibility(visibilityRule: VisibilityRule) { for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) { let pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId]; - if (this.formGroup.get(pathKey + '.value') && this.formGroup.get(pathKey + '.value').value != '' + visibilityRule.sourceVisibilityRules[i].sourceControlValue) { + if (this.formGroup.get(pathKey + '.value') && (!this.formGroup.get(pathKey + '.value').value || ""+this.formGroup.get(pathKey + '.value').value != ""+visibilityRule.sourceVisibilityRules[i].sourceControlValue)) { this.elementVisibilityMap.set(visibilityRule.targetControlId, false) - } else { - this.elementVisibilityMap.set(visibilityRule.targetControlId, true) + return; } + this.elementVisibilityMap.set(visibilityRule.targetControlId, true) } } diff --git a/welcome.docx b/welcome.docx new file mode 100644 index 000000000..acb1dd36b Binary files /dev/null and b/welcome.docx differ