Create roadmap module as Standalone application

roadmap
parent 6072708d8a
commit e127e353de

1
.gitignore vendored

@ -27,6 +27,7 @@ dmp-backend/data/target/
dmp-backend/queryable/target/
dmp-backend/elastic/target/
dmp-backend/queryengine/target/
dmp-backend/roadmap/target/
*.tar
*.gz
final/

@ -18,6 +18,7 @@
<module>web</module>
<module>data</module>
<module>elastic</module>
<module>roadmap</module>
</modules>
<properties>

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dmp-backend</artifactId>
<groupId>eu.eudat</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>roadmap</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>dmp-backend</groupId>
<artifactId>web</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,37 @@
package eu.eudat.migration;
import eu.eudat.migration.services.DMPRoadmapService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticSearchRestHealthContributorAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
@SpringBootApplication(
scanBasePackages = "eu.eudat.migration",
exclude = ElasticSearchRestHealthContributorAutoConfiguration.class
)
@ConfigurationPropertiesScan("eu.eudat.migration.properties")
public class DMPRoadmapMigration implements CommandLineRunner {
private final DMPRoadmapService service;
@Autowired
public DMPRoadmapMigration(DMPRoadmapService service) {
this.service = service;
}
public static void main(String[] args) {
new SpringApplicationBuilder(DMPRoadmapMigration.class)
.web(WebApplicationType.NONE).run(args);
System.out.println("Migration Finished");
}
@Override
public void run(String... args) throws Exception {
this.service.migrate();
System.out.println(this.service.getDatesetProfiles());
}
}

@ -1,5 +1,7 @@
package eu.eudat.migration.configuration;
import eu.eudat.migration.properties.ConfigProperties;
import eu.eudat.migration.properties.Database;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@ -23,23 +25,22 @@ import java.util.Objects;
entityManagerFactoryRef = "roadmapEntityManagerFactory",
transactionManagerRef = "roadmapTransactionManager"
)
@ConditionalOnProperty(prefix = "roadmap", name="database.url")
public class DMPRoadmapConfiguration {
private final Environment env;
private final Database database;
@Autowired
public DMPRoadmapConfiguration(Environment env) {
this.env = env;
public DMPRoadmapConfiguration(ConfigProperties properties) {
this.database = properties.getDatabase();
}
@Bean(name = "roadmapDataSource")
public DataSource roadmapDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(Objects.requireNonNull(env.getProperty("roadmap.database.driver")));
dataSource.setUrl(env.getProperty("roadmap.database.url"));
dataSource.setUsername(env.getProperty("roadmap.database.username"));
dataSource.setPassword(env.getProperty("roadmap.database.password"));
dataSource.setDriverClassName(Objects.requireNonNull(database.getDriver()));
dataSource.setUrl(database.getUrl());
dataSource.setUsername(database.getUsername());
dataSource.setPassword(database.getPassword());
return dataSource;
}
@ -51,7 +52,7 @@ public class DMPRoadmapConfiguration {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.dialect", env.getProperty("roadmap.hibernate.dialect"));
properties.put("hibernate.dialect", database.getDialect());
properties.put("hibernate.hbm2ddl.auto", "none");
em.setJpaPropertyMap(properties);
return em;

@ -1,5 +1,6 @@
package eu.eudat.migration.entities;
import eu.eudat.models.data.admin.components.datasetprofile.Section;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
@ -7,6 +8,8 @@ import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Entity
@Table(name = "phases")
@ -30,7 +33,7 @@ public class Phase {
@JoinColumn(name = "phase_id")
@OrderBy("number")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Section> sections = new ArrayList<>();
private List<RoadmapSection> sections = new ArrayList<>();
@Override
public String toString() {
@ -118,11 +121,27 @@ public class Phase {
this.versionableId = versionableId;
}
public List<Section> getSections() {
public List<RoadmapSection> getSections() {
return sections;
}
public void setSections(List<Section> sections) {
public void setSections(List<RoadmapSection> sections) {
this.sections = sections;
}
public List<Section> buildSections(String pageId) {
return sections.stream().map(s -> {
Section section = new Section();
section.setId(String.valueOf(UUID.randomUUID()));
section.setPage(pageId);
section.setTitle(s.getTitle());
section.setDescription(s.getDescription());
section.setOrdinal(Math.toIntExact(s.getNumber()) - 1);
section.setDefaultVisibility(true);
section.setMultiplicity(false);
section.setSections(new ArrayList<>());
section.setFieldSets(s.buildFieldSets(s.getQuestions()));
return section;
}).collect(Collectors.toList());
}
}

@ -1,10 +1,18 @@
package eu.eudat.migration.entities;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel;
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
import eu.eudat.models.data.dmp.DataManagementPlanEditorModel;
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import javax.persistence.*;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "plans")
@ -253,4 +261,32 @@ public class Plan {
public void setAnswers(Set<Answer> answers) {
this.answers = answers;
}
public DataManagementPlanEditorModel buildDMP(DatasetProfile datasetProfile) {
DataManagementPlanEditorModel dmpModel = new DataManagementPlanEditorModel();
return dmpModel;
}
public DatasetWizardModel buildDataset(DatasetProfile datasetProfile) {
DatasetWizardModel datasetModel = new DatasetWizardModel();
datasetModel.setDataRepositories(new ArrayList<>());
if(datasetProfile != null) {
/* TODO Dataset Definition */
PagedDatasetProfile datasetProfileDefinition = new PagedDatasetProfile();
datasetModel.setDatasetProfileDefinition(datasetProfileDefinition);
/* TODO DMP */
DatasetProfileOverviewModel profile = new DatasetProfileOverviewModel();
profile.setId(datasetProfile.getId());
profile.setLabel(datasetProfile.getLabel());
datasetModel.setProfile(profile);
}
datasetModel.setDescription(this.getDescription());
datasetModel.setExternalDatasets(new ArrayList<>());
datasetModel.setLabel(this.getTitle());
datasetModel.setRegistries(new ArrayList<>());
datasetModel.setServices(new ArrayList<>());
datasetModel.setTags(new ArrayList<>());
return datasetModel;
}
}

@ -1,10 +1,14 @@
package eu.eudat.migration.entities;
import eu.eudat.models.data.admin.components.datasetprofile.Field;
import eu.eudat.models.data.components.commons.DefaultValue;
import eu.eudat.models.data.components.commons.Visibility;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import javax.persistence.*;
import java.util.*;
import java.util.stream.Collectors;
@Entity
@Table(name = "questions")
@ -170,4 +174,72 @@ public class Question {
public void setThemes(Set<Theme> themes) {
this.themes = themes;
}
public String buildDescription() {
StringBuilder sb = new StringBuilder();
themes.forEach(theme -> {
if(theme.getTitle() != null) {
sb.append("<b>").append(theme.getTitle()).append("</b><br>");
}
if(theme.getDescription() != null) {
sb.append("<p>").append(theme.getDescription()).append("</p>");
}
if(theme.getGuidances().size() > 0) {
theme.getGuidances().forEach(guidance -> {
sb.append("<b>").append(guidance.getGuidanceGroup().getName()).append("</b><br>");
sb.append("<p>").append(guidance.getText()).append("</p>");
});
}
});
return sb.toString();
}
public List<Field> buildFields() {
Field field = new Field();
field.setId(String.valueOf(UUID.randomUUID()));
field.setOrdinal(0);
field.setDefaultValue(this.buildDefaultValue());
field.setValue(field.getDefaultValue().getValue());
field.setValidations(this.buildValidators());
field.setVisible(this.buildVisibility());
field.setViewStyle(this.getQuestionFormat().buildViewStyle());
field.setData(this.buildData());
return Collections.singletonList(field);
}
private DefaultValue buildDefaultValue() {
DefaultValue defaultValue = new DefaultValue();
defaultValue.setType("String");
defaultValue.setValue((this.defaultValue != null)?this.defaultValue :"");
return defaultValue;
}
private List<Integer> buildValidators() {
return Collections.singletonList((int) Field.ValidationType.REQUIRED.getValue());
}
private Visibility buildVisibility() {
Visibility visibility = new Visibility();
visibility.setRules(new ArrayList<>());
visibility.setStyle("");
return visibility;
}
private Map<String, Object> buildData() {
Map<String, Object> object = new HashMap<>();
object.put("label", "");
if(this.getQuestionFormat().getOptionBased()) {
object.put("options", this.getOptions().stream().map(questionOption -> {
Map<String, Object> option = new HashMap<>();
option.put(questionOption.getText(), questionOption.getText());
return option;
}).collect(Collectors.toList()));
}
if(this.getQuestionFormat().getFormattype() == QuestionFormat.FormatType.DROPDOWN ||
this.getQuestionFormat().getFormattype() == QuestionFormat.FormatType.MULTI_SELECT) {
object.put("type", "wordlist");
object.put("multiList", this.getQuestionFormat().getFormattype() == QuestionFormat.FormatType.MULTI_SELECT);
}
return object;
}
}

@ -1,5 +1,7 @@
package eu.eudat.migration.entities;
import eu.eudat.models.data.components.commons.ViewStyle;
import javax.persistence.*;
import java.util.Date;
@ -100,4 +102,33 @@ public class QuestionFormat {
public void setFormattype(FormatType formattype) {
this.formattype = formattype;
}
public ViewStyle buildViewStyle() {
ViewStyle viewStyle = new ViewStyle();
viewStyle.setCssClass("");
switch (formattype) {
case TEXT_FIELD:
viewStyle.setRenderStyle("freetext");
break;
case TEXTAREA:
viewStyle.setRenderStyle("richTextarea");
break;
case CHECKBOX:
viewStyle.setRenderStyle("checkBox");
break;
case RADIOBUTTON:
viewStyle.setRenderStyle("radiobox");
break;
case DATE:
viewStyle.setRenderStyle("datePicker");
break;
case DROPDOWN:
case MULTI_SELECT:
viewStyle.setRenderStyle("combobox");
break;
default:
break;
}
return viewStyle;
}
}

@ -1,5 +1,7 @@
package eu.eudat.migration.entities;
import eu.eudat.models.data.admin.components.datasetprofile.FieldSet;
import eu.eudat.models.data.components.commons.Multiplicity;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
@ -7,10 +9,12 @@ import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Entity
@Table(name = "sections")
public class Section {
public class RoadmapSection {
@Id
private Long id;
@ -124,4 +128,24 @@ public class Section {
public void setQuestions(List<Question> questions) {
this.questions = questions;
}
public List<FieldSet> buildFieldSets(List<Question> questions) {
return questions.stream().map(question -> {
FieldSet fieldSet = new FieldSet();
fieldSet.setId(String.valueOf(UUID.randomUUID()));
fieldSet.setTitle(question.getText());
fieldSet.setDescription(question.buildDescription());
fieldSet.setOrdinal(Math.toIntExact(question.getNumber()) - 1);
fieldSet.setMultiplicity(this.buildMultiplicity());
fieldSet.setHasCommentField(question.getOptionCommentDisplay());
fieldSet.setFields(question.buildFields());
return fieldSet;
}).collect(Collectors.toList());
}
private Multiplicity buildMultiplicity() {
Multiplicity multiplicity = new Multiplicity();
multiplicity.setPlaceholder("");
return multiplicity;
}
}

@ -1,6 +1,9 @@
package eu.eudat.migration.entities;
import eu.eudat.migration.utils.JsonTypeConverter;
import eu.eudat.models.data.admin.components.datasetprofile.Page;
import eu.eudat.models.data.admin.components.datasetprofile.Section;
import eu.eudat.models.data.admin.composite.DatasetProfile;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
@ -220,4 +223,32 @@ public class Template {
", plans=" + plans +
'}';
}
public DatasetProfile buildDatasetProfile() {
DatasetProfile datasetProfile = new DatasetProfile();
datasetProfile.setLabel(this.getTitle());
datasetProfile.setDescription(this.getDescription());
datasetProfile.setLanguage(this.getLocale());
datasetProfile.setStatus((short) 1);
datasetProfile.setVersion((short) 0);
datasetProfile.setUsers(new ArrayList<>());
this.buildPages(datasetProfile);
return datasetProfile;
}
public void buildPages(DatasetProfile datasetProfile) {
List<Page> pages = new ArrayList<>();
List<Section> sections = new ArrayList<>();
this.getPhases().forEach(phase -> {
Page page = new Page();
page.setId(String.valueOf(UUID.randomUUID()));
page.setOrdinal(Math.toIntExact(phase.getNumber()) - 1);
page.setTitle(phase.getTitle());
pages.add(page);
sections.addAll(phase.buildSections(page.getId()));
});
datasetProfile.setPages(pages);
datasetProfile.setSections(sections);
}
}

@ -0,0 +1,25 @@
package eu.eudat.migration.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "roadmap")
public class ConfigProperties {
private Database database;
private String argos;
public Database getDatabase() {
return database;
}
public void setDatabase(Database database) {
this.database = database;
}
public String getArgos() {
return argos;
}
public void setArgos(String argos) {
this.argos = argos;
}
}

@ -0,0 +1,49 @@
package eu.eudat.migration.properties;
public class Database {
private String driver;
private String url;
private String username;
private String password;
private String dialect;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDialect() {
return dialect;
}
public void setDialect(String dialect) {
this.dialect = dialect;
}
}

@ -0,0 +1,23 @@
package eu.eudat.migration.services;
import eu.eudat.migration.properties.ConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.UUID;
@Service
public class ArgosService {
private final String argos;
private UUID token;
@Autowired
public ArgosService(ConfigProperties properties) {
this.argos = properties.getArgos();
}
public void login() {
}
}

@ -0,0 +1,55 @@
package eu.eudat.migration.services;
import eu.eudat.migration.dao.TemplateRepository;
import eu.eudat.migration.dao.UserRepository;
import eu.eudat.migration.entities.Plan;
import eu.eudat.migration.entities.Template;
import eu.eudat.migration.entities.User;
import eu.eudat.models.data.admin.composite.DatasetProfile;
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
import eu.eudat.models.data.dmp.DataManagementPlanEditorModel;
import eu.eudat.models.data.principal.PrincipalModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
@ConditionalOnProperty(prefix = "roadmap", name = "database.url")
public class DMPRoadmapService {
/** DMPRoadmap Repositories*/
private final TemplateRepository templateRepository;
private final UserRepository userRepository;
private final List<DatasetProfile> datasetProfiles = new ArrayList<>();
private final List<DataManagementPlanEditorModel> dmps = new ArrayList<>();
private final List<DatasetWizardModel> datasets = new ArrayList<>();
/** Metadata */
private final Map<Long, UUID> groups = new HashMap<>();
@Autowired
public DMPRoadmapService(TemplateRepository templateRepository, UserRepository userRepository) {
this.templateRepository = templateRepository;
this.userRepository = userRepository;
}
public void login() {
}
public void migrate() {
List<Template> templates = templateRepository.findAll();
List<User> users = userRepository.findAll();
templates.forEach(template -> {
DatasetProfile datasetProfile = template.buildDatasetProfile();
this.datasetProfiles.add(datasetProfile);
/*template.getPlans().forEach(plan -> {
DataManagementPlanEditorModel dmpModel = this.buildDMP(plan, null);
this.dmps.add(dmpModel);
});*/
});
/*users.forEach(user -> {
});*/
}
}

@ -0,0 +1,11 @@
#################### DMP ROADMAP DATABASE CONFIGURATION (Postgres or MySQL) Last Database Migration: 15-03-2022 ##########
#roadmap.database.driver=org.postgresql.Driver
roadmap.database.driver=com.mysql.jdbc.Driver
roadmap.database.url=jdbc:mysql://localhost:3306/dmp
roadmap.database.username=dmp
roadmap.database.password=dmp
roadmap.database.dialect=org.hibernate.dialect.MySQL5Dialect
#roadmap.database.dialect=org.hibernate.dialect.PostgreSQL92Dialect
## Argos Backend URL ##
roadmap.argos=localhost:8081

@ -90,12 +90,6 @@
<version>42.2.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>

@ -1,51 +0,0 @@
package eu.eudat.migration.controllers;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.migration.dao.TemplateRepository;
import eu.eudat.migration.entities.Template;
import eu.eudat.migration.entities.User;
import eu.eudat.migration.services.DMPRoadmapService;
import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.types.ApiMessageCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.UUID;
@RestController
@RequestMapping("/")
@ConditionalOnProperty(prefix = "roadmap", name="database.url")
public class MigrateController {
private final DMPRoadmapService roadmapMigration;
@Autowired
public MigrateController(DMPRoadmapService roadmapMigration) {
this.roadmapMigration = roadmapMigration;
}
@GetMapping(path = "template/all", produces = "application/json")
public ResponseEntity<List<Template>> getAllTemplates() {
return ResponseEntity.ok(this.roadmapMigration.getTemplates());
}
@GetMapping(path = "template/argos/memory", produces = "application/json")
public ResponseEntity<List<eu.eudat.models.data.admin.composite.DatasetProfile>> getDatasetProfiles() {
return ResponseEntity.ok(this.roadmapMigration.getDatesetProfiles());
}
@GetMapping(path = "user/all", produces = "application/json")
public ResponseEntity<List<User>> getAllUsers() {
return ResponseEntity.ok(this.roadmapMigration.getUsers());
}
@GetMapping(path = "migration/execute", produces = "application/json")
public ResponseEntity<Object> migrate() {
this.roadmapMigration.migrate();
return ResponseEntity.ok(new ResponseItem<UUID>().status(ApiMessageCode.NO_MESSAGE));
}
}

@ -1,293 +0,0 @@
package eu.eudat.migration.services;
import eu.eudat.logic.managers.AdminManager;
import eu.eudat.logic.managers.MetricsManager;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.migration.dao.TemplateRepository;
import eu.eudat.migration.dao.UserRepository;
import eu.eudat.migration.entities.*;
import eu.eudat.models.data.admin.components.datasetprofile.Field;
import eu.eudat.models.data.admin.components.datasetprofile.FieldSet;
import eu.eudat.models.data.admin.components.datasetprofile.Page;
import eu.eudat.models.data.admin.components.datasetprofile.Section;
import eu.eudat.models.data.admin.composite.DatasetProfile;
import eu.eudat.models.data.components.commons.DefaultValue;
import eu.eudat.models.data.components.commons.Multiplicity;
import eu.eudat.models.data.components.commons.ViewStyle;
import eu.eudat.models.data.components.commons.Visibility;
import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel;
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
import eu.eudat.models.data.dmp.DataManagementPlanEditorModel;
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
import eu.eudat.types.MetricNames;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@Service
@ConditionalOnProperty(prefix = "roadmap", name = "database.url")
public class DMPRoadmapService {
/** DMPRoadmap Repositories*/
private final TemplateRepository templateRepository;
private final UserRepository userRepository;
/** Argos beans */
private final ApiContext apiContext;
private final MetricsManager metricsManager;
/** Data */
private final List<DatasetProfile> datasetProfiles = new ArrayList<>();
private final List<DataManagementPlanEditorModel> dmps = new ArrayList<>();
private final List<DatasetWizardModel> datasets = new ArrayList<>();
/** Metadata */
private final Map<Long, UUID> groups = new HashMap<>();
@Autowired
public DMPRoadmapService(TemplateRepository templateRepository, UserRepository userRepository, ApiContext apiContext, MetricsManager metricsManager) {
this.templateRepository = templateRepository;
this.userRepository = userRepository;
this.apiContext = apiContext;
this.metricsManager = metricsManager;
}
public void migrate() {
List<Template> templates = templateRepository.findAll();
List<User> users = userRepository.findAll();
templates.forEach(template -> {
DatasetProfile datasetProfile = buildDatasetProfile(template);
this.datasetProfiles.add(datasetProfile);
// this.createProfile(datasetProfile, template);
template.getPlans().forEach(plan -> {
DataManagementPlanEditorModel dmpModel = this.buildDMP(plan, null);
this.dmps.add(dmpModel);
});
});
users.forEach(user -> {
});
}
@Transactional
void createProfile(DatasetProfile profile, Template template) {
DatasetProfile shortenProfile = profile.toShort();
eu.eudat.data.entities.DatasetProfile datasetProfile = AdminManager.generateViewStyleDefinition(shortenProfile, this.apiContext);
if(groups.get(template.getFamilyId()) == null) {
groups.put(template.getFamilyId(), UUID.randomUUID());
}
datasetProfile.setGroupId(groups.get(template.getFamilyId()));
datasetProfile.setVersion(template.getVersion());
datasetProfile = this.apiContext.getOperationsContext().getDatabaseRepository().
getDatasetProfileDao().createOrUpdate(datasetProfile);
metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricsManager.datasetTemplateStatus.get(datasetProfile.getStatus()));
}
private DataManagementPlanEditorModel buildDMP(Plan plan, eu.eudat.data.entities.DatasetProfile datasetProfile) {
DataManagementPlanEditorModel dmpModel = new DataManagementPlanEditorModel();
return dmpModel;
}
private DatasetWizardModel buildDataset(Plan plan, eu.eudat.data.entities.DatasetProfile datasetProfile) {
DatasetWizardModel datasetModel = new DatasetWizardModel();
datasetModel.setDataRepositories(new ArrayList<>());
if(datasetProfile != null) {
/* TODO Dataset Definition */
PagedDatasetProfile datasetProfileDefinition = new PagedDatasetProfile();
datasetModel.setDatasetProfileDefinition(datasetProfileDefinition);
/* TODO DMP */
DatasetProfileOverviewModel profile = new DatasetProfileOverviewModel();
profile.setId(datasetProfile.getId());
profile.setLabel(datasetProfile.getLabel());
datasetModel.setProfile(profile);
}
datasetModel.setDescription(plan.getDescription());
datasetModel.setExternalDatasets(new ArrayList<>());
datasetModel.setLabel(plan.getTitle());
datasetModel.setRegistries(new ArrayList<>());
datasetModel.setServices(new ArrayList<>());
datasetModel.setTags(new ArrayList<>());
return datasetModel;
}
private DatasetProfile buildDatasetProfile(Template template) {
DatasetProfile datasetProfile = new DatasetProfile();
datasetProfile.setLabel(template.getTitle());
datasetProfile.setDescription(template.getDescription());
datasetProfile.setLanguage(template.getLocale());
datasetProfile.setStatus((short) 1);
datasetProfile.setVersion((short) 0);
datasetProfile.setUsers(new ArrayList<>());
this.buildPages(template, datasetProfile);
return datasetProfile;
}
private DatasetProfile buildPages(Template template, DatasetProfile datasetProfile) {
List<Page> pages = new ArrayList<>();
List<Section> sections = new ArrayList<>();
template.getPhases().forEach(phase -> {
Page page = new Page();
page.setId(String.valueOf(UUID.randomUUID()));
page.setOrdinal(Math.toIntExact(phase.getNumber()) - 1);
page.setTitle(phase.getTitle());
pages.add(page);
sections.addAll(buildSections(phase.getSections(), page.getId()));
});
datasetProfile.setPages(pages);
datasetProfile.setSections(sections);
return datasetProfile;
}
private List<Section> buildSections(List<eu.eudat.migration.entities.Section> sections, String pageId) {
return sections.stream().map(s -> {
Section section = new Section();
section.setId(String.valueOf(UUID.randomUUID()));
section.setPage(pageId);
section.setTitle(s.getTitle());
section.setDescription(s.getDescription());
section.setOrdinal(Math.toIntExact(s.getNumber()) - 1);
section.setDefaultVisibility(true);
section.setMultiplicity(false);
section.setSections(new ArrayList<>());
section.setFieldSets(buildFieldSets(s.getQuestions()));
return section;
}).collect(Collectors.toList());
}
private List<FieldSet> buildFieldSets(List<Question> questions) {
return questions.stream().map(question -> {
FieldSet fieldSet = new FieldSet();
fieldSet.setId(String.valueOf(UUID.randomUUID()));
fieldSet.setTitle(question.getText());
fieldSet.setDescription(buildDescription(question.getThemes()));
fieldSet.setOrdinal(Math.toIntExact(question.getNumber()) - 1);
fieldSet.setMultiplicity(buildMultiplicity());
fieldSet.setHasCommentField(question.getOptionCommentDisplay());
fieldSet.setFields(buildFields(question));
return fieldSet;
}).collect(Collectors.toList());
}
private String buildDescription(Set<Theme> themes) {
StringBuilder sb = new StringBuilder();
themes.forEach(theme -> {
if(theme.getTitle() != null) {
sb.append("<b>").append(theme.getTitle()).append("</b><br>");
}
if(theme.getDescription() != null) {
sb.append("<p>").append(theme.getDescription()).append("</p>");
}
if(theme.getGuidances().size() > 0) {
theme.getGuidances().forEach(guidance -> {
sb.append("<b>").append(guidance.getGuidanceGroup().getName()).append("</b><br>");
sb.append("<p>").append(guidance.getText()).append("</p>");
});
}
});
return sb.toString();
}
private Multiplicity buildMultiplicity() {
Multiplicity multiplicity = new Multiplicity();
multiplicity.setPlaceholder("");
return multiplicity;
}
private List<Field> buildFields(Question question) {
Field field = new Field();
field.setId(String.valueOf(UUID.randomUUID()));
field.setOrdinal(0);
field.setDefaultValue(buildDefaultValue(question.getDefaultValue()));
field.setValue(field.getDefaultValue().getValue());
field.setValidations(buildValidators());
field.setVisible(buildVisibility());
field.setViewStyle(buildViewStyle(question.getQuestionFormat()));
field.setData(buildData(question));
return Collections.singletonList(field);
}
private DefaultValue buildDefaultValue(String value) {
DefaultValue defaultValue = new DefaultValue();
defaultValue.setType("String");
defaultValue.setValue((value != null)?value:"");
return defaultValue;
}
private List<Integer> buildValidators() {
return Collections.singletonList((int) Field.ValidationType.REQUIRED.getValue());
}
private Visibility buildVisibility() {
Visibility visibility = new Visibility();
visibility.setRules(new ArrayList<>());
visibility.setStyle("");
return visibility;
}
private ViewStyle buildViewStyle(QuestionFormat questionFormat) {
ViewStyle viewStyle = new ViewStyle();
viewStyle.setCssClass("");
switch (questionFormat.getFormattype()) {
case TEXT_FIELD:
viewStyle.setRenderStyle("freetext");
break;
case TEXTAREA:
viewStyle.setRenderStyle("richTextarea");
break;
case CHECKBOX:
viewStyle.setRenderStyle("checkBox");
break;
case RADIOBUTTON:
viewStyle.setRenderStyle("radiobox");
break;
case DATE:
viewStyle.setRenderStyle("datePicker");
break;
case DROPDOWN:
case MULTI_SELECT:
viewStyle.setRenderStyle("combobox");
break;
default:
break;
}
return viewStyle;
}
private Map<String, Object> buildData(Question question) {
Map<String, Object> object = new HashMap<>();
object.put("label", "");
if(question.getQuestionFormat().getOptionBased()) {
object.put("options", question.getOptions().stream().map(questionOption -> {
Map<String, Object> option = new HashMap<>();
option.put(questionOption.getText(), questionOption.getText());
return option;
}).collect(Collectors.toList()));
}
if(question.getQuestionFormat().getFormattype() == QuestionFormat.FormatType.DROPDOWN ||
question.getQuestionFormat().getFormattype() == QuestionFormat.FormatType.MULTI_SELECT) {
object.put("type", "wordlist");
object.put("multiList", question.getQuestionFormat().getFormattype() == QuestionFormat.FormatType.MULTI_SELECT);
}
return object;
}
public List<DatasetProfile> getDatesetProfiles() {
return datasetProfiles;
}
public List<DataManagementPlanEditorModel> getDmps() {
return dmps;
}
public List<DatasetWizardModel> getDatasets() {
return datasets;
}
public List<Template> getTemplates() {
return templateRepository.findAll();
}
public List<User> getUsers() {
return userRepository.findAll();
}
}

@ -1,9 +1,9 @@
dmp.domain = http://localhost:4200
####################PERSISTENCE OVERRIDES CONFIGURATIONS##########
database.url=jdbc:postgresql://dl170.madgik.di.uoa.gr:5432/dmptool
database.username=dmptool
database.password=dmpt00lu$r
database.url=
database.username=
database.password=
spring.datasource.maxIdle=10
spring.datasource.minIdle=5
spring.datasource.maxActive=10
@ -39,7 +39,7 @@ facebook.login.clientSecret=
facebook.login.namespace=
#############GOOGLE LOGIN CONFIGURATIONS#########
google.login.clientId=524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleusercontent.com
google.login.clientId=
#############LINKEDIN LOGIN CONFIGURATIONS#########
linkedin.login.clientId=
@ -87,17 +87,10 @@ zenodo.login.redirect_uri=http://localhost:4200/login/external/zenodo
#############CONTACT EMAIL CONFIGURATIONS#########
contact_email.mail=
language.path=../dmp-frontend/src/assets/i18n/
language.path=dmp-frontend/src/assets/i18n/
#############LOGGING#########
logging.config=classpath:logging/logback-${spring.profiles.active}.xml
#############PROMETHEUS#########
endpoints.prometheus.sensitive: false
#################### DMP ROADMAP DATABASE CONFIGURATION (Postgres or MySQL) Last Database Migration: 15-03-2022 ##########
roadmap.database.driver=org.postgresql.Driver
roadmap.database.url=
roadmap.database.username=
roadmap.database.password=
roadmap.hibernate.dialect=org.hibernate.dialect.PostgreSQL92Dialect
endpoints.prometheus.sensitive: false
Loading…
Cancel
Save