diff --git a/dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java b/dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java index f662b21a7..e3cc0a776 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java +++ b/dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java @@ -50,7 +50,8 @@ public class AuditableAction { public static final EventId DescriptionTemplate_PersistNewVersion = new EventId(8005, "DescriptionTemplate_PersistNewVersion"); public static final EventId DescriptionTemplate_GetXml = new EventId(8006, "DescriptionTemplate_GetXml"); public static final EventId DescriptionTemplate_Import = new EventId(8007, "DescriptionTemplate_Import"); - + public static final EventId DescriptionTemplate_GetSemantics = new EventId(8007, "DescriptionTemplate_GetSemantics"); + public static final EventId SupportiveMaterial_Query = new EventId(9000, "SupportiveMaterial_Query"); public static final EventId SupportiveMaterial_Lookup = new EventId(9001, "SupportiveMaterial_Lookup"); public static final EventId SupportiveMaterial_Persist = new EventId(9002, "SupportiveMaterial_Persist"); diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/config/filepath/FilePathsConfiguration.java b/dmp-backend/core/src/main/java/eu/eudat/commons/config/filepath/FilePathsConfiguration.java new file mode 100644 index 000000000..47024f6c7 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/config/filepath/FilePathsConfiguration.java @@ -0,0 +1,10 @@ +package eu.eudat.commons.config.filepath; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties(FilePathsProperties.class) +public class FilePathsConfiguration { + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/config/filepath/FilePathsProperties.java b/dmp-backend/core/src/main/java/eu/eudat/commons/config/filepath/FilePathsProperties.java new file mode 100644 index 000000000..9c5f4ea22 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/config/filepath/FilePathsProperties.java @@ -0,0 +1,54 @@ +package eu.eudat.commons.config.filepath; + + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "file-paths") +public class FilePathsProperties { + private String externalUrls; + private String semantics; + private String h2020template; + private String h2020DatasetTemplate; + private String pidLinks; + + public String getExternalUrls() { + return externalUrls; + } + + public void setExternalUrls(String externalUrls) { + this.externalUrls = externalUrls; + } + + public String getSemantics() { + return semantics; + } + + public void setSemantics(String semantics) { + this.semantics = semantics; + } + + public String getH2020template() { + return h2020template; + } + + public void setH2020template(String h2020template) { + this.h2020template = h2020template; + } + + public String getH2020DatasetTemplate() { + return h2020DatasetTemplate; + } + + public void setH2020DatasetTemplate(String h2020DatasetTemplate) { + this.h2020DatasetTemplate = h2020DatasetTemplate; + } + + public String getPidLinks() { + return pidLinks; + } + + public void setPidLinks(String pidLinks) { + this.pidLinks = pidLinks; + } +} + diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateService.java b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateService.java index 1699a75ca..3b9d5c00b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateService.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateService.java @@ -17,6 +17,7 @@ import javax.management.InvalidApplicationException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import java.io.IOException; +import java.util.List; import java.util.UUID; public interface DescriptionTemplateService { @@ -27,4 +28,8 @@ public interface DescriptionTemplateService { DescriptionTemplate createNewVersion(NewVersionDescriptionTemplatePersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, JsonProcessingException, TransformerException; DescriptionTemplate importXml(byte[] bytes, UUID id, String label, FieldSet fields) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, TransformerException, InvalidApplicationException, IOException, InstantiationException, IllegalAccessException, SAXException; ResponseEntity exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, TransformerException, InvalidApplicationException; + + List getSemantics(String query) throws IOException; + + List getSemantics() throws IOException; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java index b7c39e420..adef8b250 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/DescriptionTemplateServiceImpl.java @@ -3,7 +3,9 @@ package eu.eudat.service.descriptiontemplate; import com.fasterxml.jackson.core.JsonProcessingException; import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.authorization.Permission; +import eu.eudat.commons.JsonHandlingService; import eu.eudat.commons.XmlHandlingService; +import eu.eudat.commons.config.filepath.FilePathsProperties; import eu.eudat.commons.enums.DescriptionTemplateStatus; import eu.eudat.commons.enums.FieldType; import eu.eudat.commons.enums.IsActive; @@ -11,7 +13,6 @@ import eu.eudat.commons.enums.UserDescriptionTemplateRole; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.commons.types.descriptiontemplate.*; import eu.eudat.commons.types.descriptiontemplate.fielddata.BaseFieldDataEntity; -import eu.eudat.commons.types.descriptiontemplate.fielddata.FieldDataHelper; import eu.eudat.commons.types.descriptiontemplate.importexport.*; import eu.eudat.convention.ConventionService; import eu.eudat.data.DescriptionTemplateEntity; @@ -62,13 +63,15 @@ import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.core.env.Environment; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import org.w3c.dom.Element; import org.xml.sax.SAXException; import javax.management.InvalidApplicationException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.ArrayList; @@ -79,6 +82,7 @@ import java.util.stream.Collectors; @Service public class DescriptionTemplateServiceImpl implements DescriptionTemplateService { + private List semantics = null; private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DescriptionTemplateServiceImpl.class)); @@ -100,6 +104,8 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic private final MailService mailService; private final Environment environment; private final ResponseUtilsService responseUtilsService; + private final FilePathsProperties filePathsProperties; + private final JsonHandlingService jsonHandlingService; @Autowired public DescriptionTemplateServiceImpl( @@ -110,7 +116,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic ConventionService conventionService, MessageSource messageSource, XmlHandlingService xmlHandlingService, - FieldDataHelperServiceProvider fieldDataHelperServiceProvider, QueryFactory queryFactory, ErrorThesaurusProperties errors, ValidationService validationService, MailService mailService, Environment environment, ResponseUtilsService responseUtilsService) { + FieldDataHelperServiceProvider fieldDataHelperServiceProvider, QueryFactory queryFactory, ErrorThesaurusProperties errors, ValidationService validationService, MailService mailService, Environment environment, ResponseUtilsService responseUtilsService, FilePathsProperties filePathsProperties, JsonHandlingService jsonHandlingService) { this.entityManager = entityManager; this.userScope = userScope; this.authorizationService = authorizationService; @@ -126,6 +132,8 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic this.mailService = mailService; this.environment = environment; this.responseUtilsService = responseUtilsService; + this.filePathsProperties = filePathsProperties; + this.jsonHandlingService = jsonHandlingService; } //region Persist @@ -648,6 +656,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic //region Export + @Override public ResponseEntity exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, TransformerException, InvalidApplicationException { logger.debug(new MapLogEntry("persisting data").And("id", id)); @@ -660,7 +669,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic return this.responseUtilsService.buildResponseFileFromText(xml, data.getLabel() + ".xml"); } - public DescriptionTemplateImportExport definitionXmlToExport(DescriptionTemplateEntity data, DefinitionEntity entity){ + private DescriptionTemplateImportExport definitionXmlToExport(DescriptionTemplateEntity data, DefinitionEntity entity){ DescriptionTemplateImportExport xml = new DescriptionTemplateImportExport(); xml.setType(data.getType()); xml.setLanguage(data.getLanguage()); @@ -674,7 +683,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic return xml; } - public PageImportExport pageXmlToExport(PageEntity entity, List sectionEntities){ + private PageImportExport pageXmlToExport(PageEntity entity, List sectionEntities){ PageImportExport xml = new PageImportExport(); xml.setId(entity.getId()); xml.setOrdinal(entity.getOrdinal()); @@ -692,7 +701,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic return xml; } - public SectionImportExport sectionXmlToExport(SectionEntity entity) { + private SectionImportExport sectionXmlToExport(SectionEntity entity) { SectionImportExport xml = new SectionImportExport(); List sectionsListEntity = new LinkedList<>(); @@ -721,7 +730,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic } - public FieldSetImportExport fieldSetXmlToExport(FieldSetEntity entity) { + private FieldSetImportExport fieldSetXmlToExport(FieldSetEntity entity) { FieldSetImportExport fieldSet1Entity = new FieldSetImportExport(); fieldSet1Entity.setId(entity.getId()); fieldSet1Entity.setOrdinal(entity.getOrdinal()); @@ -743,7 +752,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic } - public FieldImportExport fieldXmlToExport(FieldEntity entity) { + private FieldImportExport fieldXmlToExport(FieldEntity entity) { FieldImportExport xml = new FieldImportExport(); xml.setId(entity.getId()); xml.setOrdinal(entity.getOrdinal()); @@ -766,7 +775,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic return xml; } - public RuleImportExport toRuleModel(RuleEntity entity){ + private RuleImportExport toRuleModel(RuleEntity entity){ RuleImportExport xml = new RuleImportExport(); xml.setTarget(entity.getTarget()); xml.setValue(entity.getValue()); @@ -774,7 +783,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic } - public MultiplicityImportXml multiplicityXmlToExport(MultiplicityEntity entity) { + private MultiplicityImportXml multiplicityXmlToExport(MultiplicityEntity entity) { MultiplicityImportXml xml = new MultiplicityImportXml(); xml.setMax(entity.getMax()); xml.setMin(entity.getMin()); @@ -784,5 +793,58 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic } //endregion + + //region + + @Override + public List getSemantics(String query) throws IOException { + List semantics = this.getSemantics(); + List filteredSemantics = semantics.stream().map(Semantic::getName).collect(Collectors.toList()); + if(query != null && !query.isEmpty()){ + filteredSemantics = semantics.stream().filter(x -> x.getCategory().contains(query) || x.getName().contains(query)).map(Semantic::getName).collect(Collectors.toList()); + } + return filteredSemantics; + } + + @Override + public List getSemantics() throws IOException { + this.authorizationService.authorizeForce(Permission.BrowseDescriptionTemplate); + + if (semantics == null) { + semantics = new ArrayList<>(); + this.loadSemantics(); + } + return semantics; + } + + private void loadSemantics() throws IOException { + String filePath = this.filePathsProperties.getSemantics(); + logger.info("Loaded also config file: " + filePath); + if (filePath != null) { + InputStream stream = null; + try { + stream = getStreamFromPath(filePath); + String json = new String(getStreamFromPath(filePath).readAllBytes(), StandardCharsets.UTF_8); + semantics = List.of(jsonHandlingService.fromJson(Semantic[].class, json)); + } + catch (IOException e) { + logger.error(e.getMessage(), e); + } + finally { + if (stream != null) stream.close(); + } + } + } + + private InputStream getStreamFromPath(String filePath) { + try { + return new FileInputStream(filePath); + } catch (FileNotFoundException e) { + logger.info("loading from classpath"); + return getClass().getClassLoader().getResourceAsStream(filePath); + } + } + + //endregion } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/Semantic.java b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/Semantic.java similarity index 91% rename from dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/Semantic.java rename to dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/Semantic.java index bd7d717d2..6c7162462 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/Semantic.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/descriptiontemplate/Semantic.java @@ -1,4 +1,4 @@ -package eu.eudat.logic.proxy.config; +package eu.eudat.service.descriptiontemplate; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java deleted file mode 100644 index 42ea11657..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java +++ /dev/null @@ -1,225 +0,0 @@ -package eu.eudat.controllers; - -import eu.eudat.authorization.Permission; -import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.DescriptionTemplateEntity; -import eu.eudat.logic.managers.DatasetProfileManager; -import eu.eudat.logic.managers.MetricsManager; -import eu.eudat.logic.managers.UserManager; -import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; -import eu.eudat.logic.services.ApiContext; -import eu.eudat.models.data.helpers.responses.ResponseItem; -import eu.eudat.query.DescriptionTemplateTypeQuery; -import eu.eudat.service.descriptiontemplatetype.DescriptionTemplateTypeService; -import eu.eudat.service.fielddatahelper.FieldDataHelperService; -import eu.eudat.types.ApiMessageCode; -import gr.cite.commons.web.authz.service.AuthorizationService; -import gr.cite.tools.data.query.QueryFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import jakarta.transaction.Transactional; - -import javax.management.InvalidApplicationException; -import java.io.IOException; -import java.util.List; -import java.util.UUID; - -@RestController -@CrossOrigin -@RequestMapping(value = {"/api/admin/"}) -public class Admin extends BaseController { - - private DatasetProfileManager datasetProfileManager; - private UserManager userManager; - private ConfigLoader configLoader; - private final MetricsManager metricsManager; - private final AuthorizationService authorizationService; - private final UserScope userScope; - private final QueryFactory queryFactory; - - private final DescriptionTemplateTypeService descriptionTemplateTypeService; - - private final FieldDataHelperService fieldDataHelperService; - - @Autowired - public Admin(ApiContext apiContext, DatasetProfileManager datasetProfileManager, UserManager userManager/*, Logger logger*/, ConfigLoader configLoader, MetricsManager metricsManager, AuthorizationService authorizationService, UserScope userScope, QueryFactory queryFactory, DescriptionTemplateTypeService descriptionTemplateTypeService, FieldDataHelperService fieldDataHelperService) { - super(apiContext); - this.datasetProfileManager = datasetProfileManager; - this.userManager = userManager; - this.configLoader = configLoader; - this.metricsManager = metricsManager; - this.authorizationService = authorizationService; - this.userScope = userScope; - this.queryFactory = queryFactory; - this.descriptionTemplateTypeService = descriptionTemplateTypeService; - this.fieldDataHelperService = fieldDataHelperService; - } - -// @Transactional -// @RequestMapping(method = RequestMethod.POST, value = {"/addDmp"}, consumes = "application/json", produces = "application/json") -// public ResponseEntity addDmp(@Valid @RequestBody DatasetProfile profile) throws Exception { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// //this.getLoggerService().info(principal, "Admin Added Dataset Profile"); -// DatasetProfile shortenProfile = profile.toShort(); -// DescriptionTemplateEntity modelDefinition = AdminManager.generateViewStyleDefinition(shortenProfile, getApiContext(), descriptionTemplateTypeService); -//// modelDefinition.setType(getApiContext().getOperationsContext().getDatabaseRepository().getDescriptionTemplateTypeDao().findFromName(profile.getType())); -////TODO: dtziotzios modelDefinition.setType(descriptionTemplateTypeService.getEntityByName(profile.getType())); -// modelDefinition.setGroupId(UUID.randomUUID()); -// modelDefinition.setVersion((short) 0); -// -// DescriptionTemplateEntity descriptionTemplateEntity = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition); -// UserDescriptionTemplateEntity userDatasetProfile = new UserDescriptionTemplateEntity(); -// userDatasetProfile.setDescriptionTemplate(descriptionTemplateEntity.getId()); -// UserInfo userInfo = getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); -// userDatasetProfile.setUser(userInfo.getId()); -// userDatasetProfile.setRole(UserDescriptionTemplateRole.Owner); -// getApiContext().getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile); -// datasetProfileManager.storeDatasetProfileUsers(descriptionTemplateEntity, profile); -// -// metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricsManager.datasetTemplateStatus.get(descriptionTemplateEntity.getStatus()) ); -// return ResponseEntity.status(HttpStatus.OK).body(modelDefinition.getId()); -// } - -// @Transactional -// @RequestMapping(method = RequestMethod.POST, value = {"/addDmp/{id}"}, consumes = "application/json", produces = "application/json") -// public ResponseEntity> updateDmp(@PathVariable String id, @RequestBody DatasetProfile profile) throws Exception { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// DatasetProfile shortenProfile = profile.toShort(); -// DescriptionTemplateEntity modelDefinition = AdminManager.generateViewStyleDefinition(shortenProfile, getApiContext(), descriptionTemplateTypeService); -// DescriptionTemplateEntity datasetprofile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); -// datasetprofile.setDefinition(modelDefinition.getDefinition()); -// DescriptionTemplateStatus oldStatus = datasetprofile.getStatus(); -// datasetprofile.setStatus(modelDefinition.getStatus()); -// datasetprofile.setLabel(modelDefinition.getLabel()); -// datasetprofile.setDescription(modelDefinition.getDescription()); -// datasetprofile.setLanguage(modelDefinition.getLanguage()); -// DescriptionTemplateEntity descriptionTemplateEntity = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(datasetprofile); -// datasetProfileManager.storeDatasetProfileUsers(descriptionTemplateEntity, profile); -// if (DescriptionTemplateStatus.Finalized.equals(descriptionTemplateEntity.getStatus()) && DescriptionTemplateStatus.Draft.equals(oldStatus)) { -// metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricNames.ACTIVE); -// } -// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE)); -// } - -// @Transactional -// @RequestMapping(method = RequestMethod.POST, value = {"/newVersion/{id}"}, produces = "application/json") -// public ResponseEntity newVersionDatasetProfile(@PathVariable String id, @RequestBody DatasetProfile profile) throws Exception { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// try { -// DescriptionTemplateEntity modelDefinition = this.datasetProfileManager.createNewVersionDatasetProfile(id, profile); -// return ResponseEntity.status(HttpStatus.OK).body(modelDefinition.getId()); -// } catch (DatasetProfileNewVersionException exception) { -// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(exception.getMessage())); -// } -// } - -// @RequestMapping(method = RequestMethod.GET, value = {"/get/{id}"}, produces = "application/json") -// @Transactional -// public ResponseEntity> get(@PathVariable String id) throws InvalidApplicationException { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// eu.eudat.models.data.admin.composite.DatasetProfile datasetprofile = this.datasetProfileManager.getDatasetProfile(id); -// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(datasetprofile)); -// } - -// @RequestMapping(method = RequestMethod.POST, value = {"/datasetprofiles/getPaged"}, produces = "application/json") -// public @ResponseBody -// ResponseEntity>> getPaged(@RequestBody DatasetProfileTableRequestItem datasetProfileTableRequestItem) throws Exception { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// DataTableData datasetProfileTableData = this.datasetProfileManager.getPaged(datasetProfileTableRequestItem); -// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); -// } - -// @RequestMapping(method = RequestMethod.POST, value = {"/preview"}, consumes = "application/json", produces = "application/json") -// public ResponseEntity> getPreview(@RequestBody DatasetProfile profile) throws Exception { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// DescriptionTemplateEntity modelDefinition = AdminManager.generateViewStyleDefinition(profile, getApiContext(), descriptionTemplateTypeService); -// eu.eudat.models.data.user.composite.DatasetProfile datasetProfile = userManager.generateDatasetProfileModel(modelDefinition); -// PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile(); -// pagedDatasetProfile.buildPagedDatasetProfile(datasetProfile); -// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(pagedDatasetProfile)); -// } - -// @Transactional -// @RequestMapping(method = RequestMethod.POST, value = {"/datasetprofile/clone/{id}"}, consumes = "application/json", produces = "application/json") -// public ResponseEntity> clone(@PathVariable String id) throws InvalidApplicationException { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// eu.eudat.models.data.admin.composite.DatasetProfile datasetprofile = this.datasetProfileManager.getDatasetProfile(id); -// datasetprofile.setLabel(datasetprofile.getLabel() + " new "); -// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(datasetprofile)); -// } - -// @Transactional -// @RequestMapping(method = RequestMethod.DELETE, value = {"{id}"}, consumes = "application/json", produces = "application/json") -// public @ResponseBody -// ResponseEntity> inactivate(@PathVariable String id) { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// try { -// DescriptionTemplateEntity ret = AdminManager.inactivate(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao(), this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), id); -// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE)); -// } catch (DatasetProfileWithDatasetsExeption | InvalidApplicationException exception) { -// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.UNSUCCESS_DELETE).message(exception.getMessage())); -// } -// } - -// @Transactional -// @RequestMapping(method = RequestMethod.GET, value = {"/getXml/{id}"}, produces = "application/json") -// public ResponseEntity getDatasetProfileXml(@PathVariable String id, @RequestHeader("Content-Type") String contentType) throws IllegalAccessException, IOException, InstantiationException, InvalidApplicationException { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// if (contentType.equals("application/xml")) { -// DescriptionTemplateEntity profile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); -// eu.eudat.models.data.user.composite.DatasetProfile datasetProfile = userManager.generateDatasetProfileModel(profile); -// datasetProfile.setStatus(profile.getStatus().getValue()); -// datasetProfile.setDescription(profile.getDescription()); -// datasetProfile.setLanguage(profile.getLanguage()); -// datasetProfile.setType(this.queryFactory.query(DescriptionTemplateTypeQuery.class).ids(profile.getType()).first().getName()); -// return this.datasetProfileManager.getDocument(datasetProfile, profile.getLabel()); -// } else { -// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("NOT AUTHORIZE")); -// } -// } - -// @RequestMapping(method = RequestMethod.POST, value = {"/upload", "/upload/{id}"}) -// public ResponseEntity setDatasetProfileXml(@RequestParam("file") MultipartFile file, -// @PathVariable(value = "id", required = false) String id) throws Exception { -// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); -// -// DescriptionTemplateImportXml descriptionTemplateImportXmlModel = this.datasetProfileManager.createDatasetProfileFromXml(file); -// eu.eudat.models.data.admin.composite.DatasetProfile datasetProfileEntity = descriptionTemplateImportXmlModel.toPersistModel(file.getOriginalFilename(), this.fieldDataHelperService); -// DescriptionTemplateEntity modelDefinition; -// if (id == null) { -// modelDefinition = AdminManager.generateViewStyleDefinition(datasetProfileEntity, getApiContext(), descriptionTemplateTypeService); -// DescriptionTemplateEntity descriptionTemplateEntity = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition); -// UserDescriptionTemplateEntity userDatasetProfile = new UserDescriptionTemplateEntity(); -// userDatasetProfile.setDescriptionTemplate(descriptionTemplateEntity.getId()); -// UserInfo userInfo = getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userScope.getUserId()); -// userDatasetProfile.setUser(userInfo.getId()); -// userDatasetProfile.setRole(UserDescriptionTemplateRole.Owner); -// getApiContext().getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile); -// } else { -// modelDefinition = datasetProfileManager.createNewVersionDatasetProfile(id, datasetProfileEntity); -// } -// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>() -// .status(ApiMessageCode.SUCCESS_MESSAGE).message("")); -// } - - - @RequestMapping(method = RequestMethod.GET, value = {"/getSemantics"}, produces = "application/json") - public ResponseEntity>> getSemantics(@RequestParam(value = "query", required = false) String query) { - this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole); - - List semantics = this.datasetProfileManager.getSemantics(query); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(semantics)); - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateController.java index e4f763683..0d16e9a11 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateController.java @@ -204,4 +204,18 @@ public class DescriptionTemplateController { return model; } + + @RequestMapping(method = RequestMethod.GET, value = {"/get-semantics"}, produces = "application/json") + public List getSemantics(@RequestParam(value = "query", required = false) String query) throws IOException { + logger.debug(new MapLogEntry("import" + DescriptionTemplate.class.getSimpleName()).And("query", query)); + + List semantics = this.descriptionTemplateTypeService.getSemantics(query); + + this.auditService.track(AuditableAction.DescriptionTemplate_GetSemantics, Map.ofEntries( + new AbstractMap.SimpleEntry("query", query) + )); + //this.auditService.trackIdentity(AuditableAction.IdentityTracking_Action); + + return semantics; + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java index d1c1e5a05..fc136e541 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java @@ -1,6 +1,5 @@ package eu.eudat.logic.managers; -import eu.eudat.commons.scope.user.UserScope; import eu.eudat.commons.types.descriptiontemplate.FieldEntity; import eu.eudat.commons.types.descriptiontemplate.fielddata.AutoCompleteDataEntity; import eu.eudat.commons.types.xml.XmlBuilder; @@ -12,14 +11,10 @@ import eu.eudat.logic.proxy.fetching.RemoteFetcher; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.models.data.externaldataset.ExternalAutocompleteFieldModel; -import eu.eudat.service.descriptiontemplatetype.DescriptionTemplateTypeService; -import gr.cite.commons.web.authz.service.AuthorizationService; -import gr.cite.tools.data.deleter.DeleterFactory; -import gr.cite.tools.data.query.QueryFactory; +import eu.eudat.service.descriptiontemplate.Semantic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.w3c.dom.Document; @@ -219,15 +214,6 @@ public class DatasetProfileManager { return item != null ? item.toString() : null; } - public List getSemantics(String query) { - List semantics = configLoader.getSemantics(); - List filteredSemantics = semantics.stream().map(Semantic::getName).collect(Collectors.toList()); - if(query != null && !query.isEmpty()){ - filteredSemantics = semantics.stream().filter(x -> x.getCategory().contains(query) || x.getName().contains(query)).map(Semantic::getName).collect(Collectors.toList()); - } - return filteredSemantics; - } - public void addSemanticsInDatasetProfiles() throws XPathExpressionException, InvalidApplicationException { List ids = this.databaseRepository.getDatasetProfileDao().getAllIds(); for(DescriptionTemplateEntity dp: ids){ diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java index f2d85e24e..31ee9319b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java @@ -1,7 +1,7 @@ package eu.eudat.logic.proxy.config.configloaders; import eu.eudat.logic.proxy.config.ExternalUrls; -import eu.eudat.logic.proxy.config.Semantic; +import eu.eudat.service.descriptiontemplate.Semantic; import eu.eudat.models.data.pid.PidLinks; import org.apache.poi.xwpf.usermodel.XWPFDocument; @@ -10,7 +10,6 @@ import java.util.Map; public interface ConfigLoader { ExternalUrls getExternalUrls(); - List getSemantics(); XWPFDocument getDocument(); XWPFDocument getDatasetDocument(); PidLinks getPidLinks(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java index 7e4697467..1ed59ca4f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java @@ -1,16 +1,15 @@ package eu.eudat.logic.proxy.config.configloaders; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import eu.eudat.commons.config.filepath.FilePathsProperties; import eu.eudat.logic.proxy.config.ExternalUrls; -import eu.eudat.logic.proxy.config.Semantic; +import eu.eudat.service.descriptiontemplate.Semantic; import eu.eudat.models.data.pid.PidLinks; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -37,17 +36,17 @@ public class DefaultConfigLoader implements ConfigLoader { private static final ObjectMapper mapper = new ObjectMapper(); private ExternalUrls externalUrls; - private List semantics; private XWPFDocument document; private XWPFDocument datasetDocument; private PidLinks pidLinks; private Map keyToSourceMap; - + @Autowired - private Environment environment; + private FilePathsProperties config; + private void setExternalUrls() { - String fileUrl = this.environment.getProperty("configuration.externalUrls"); + String fileUrl = this.config.getExternalUrls(); logger.info("Loaded also config file: " + fileUrl); InputStream is = null; try { @@ -66,21 +65,8 @@ public class DefaultConfigLoader implements ConfigLoader { } } - private void setSemantics() { - String filePath = environment.getProperty("configuration.semantics"); - logger.info("Loaded also config file: " + filePath); - if (filePath != null) { - try { - semantics = mapper.readValue(getStreamFromPath(filePath), new TypeReference>(){}); - } - catch (IOException e) { - logger.error(e.getMessage(), e); - } - } - } - private void setDocument() { - String filePath = environment.getProperty("configuration.h2020template"); + String filePath = this.config.getH2020template(); logger.info("Loaded also config file: " + filePath); InputStream is = null; try { @@ -98,7 +84,7 @@ public class DefaultConfigLoader implements ConfigLoader { } private void setDatasetDocument() { - String filePath = environment.getProperty("configuration.h2020datasettemplate"); + String filePath = this.config.getH2020DatasetTemplate(); logger.info("Loaded also config file: " + filePath); InputStream is = null; try { @@ -116,7 +102,7 @@ public class DefaultConfigLoader implements ConfigLoader { } private void setPidLinks() { - String filePath = environment.getProperty("configuration.pid_links"); + String filePath = this.config.getPidLinks(); logger.info("Loaded also config file: " + filePath); InputStream is = null; try { @@ -135,7 +121,7 @@ public class DefaultConfigLoader implements ConfigLoader { } private void setKeyToSourceMap() { - String filePath = this.environment.getProperty("configuration.externalUrls"); + String filePath = this.config.getExternalUrls(); logger.info("Loaded also config file: " + filePath); Document doc = getXmlDocumentFromFilePath(filePath); if (doc == null) { @@ -166,13 +152,7 @@ public class DefaultConfigLoader implements ConfigLoader { return externalUrls; } - public List getSemantics() { - if (semantics == null) { - semantics = new ArrayList<>(); - this.setSemantics(); - } - return semantics; - } + public XWPFDocument getDocument() { this.setDocument(); diff --git a/dmp-backend/web/src/main/resources/config/file-path.yml b/dmp-backend/web/src/main/resources/config/file-path.yml index 638f02b0f..4cab21415 100644 --- a/dmp-backend/web/src/main/resources/config/file-path.yml +++ b/dmp-backend/web/src/main/resources/config/file-path.yml @@ -1,9 +1,9 @@ -configuration: +file-paths: externalUrls: externalUrls/ExternalUrls.xml semantics: Semantics.json h2020template: documents/h2020.docx - h2020datasettemplate: documents/h2020_dataset.docx - pid_links: pidLinks.json + h2020DatasetTemplate: documents/h2020_dataset.docx + pidLinks: pidLinks.json userguide: path: dmp-backend/web/src/main/resources/material/user-guide