diff --git a/dmp-backend/.settings/org.eclipse.core.resources.prefs b/dmp-backend/.settings/org.eclipse.core.resources.prefs index 5b781ec6d..2b763404c 100644 --- a/dmp-backend/.settings/org.eclipse.core.resources.prefs +++ b/dmp-backend/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,2 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 -encoding//src/test/java=UTF-8 diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index 7c979186d..0da532fe2 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -55,7 +55,10 @@ 20160810 - + + org.springframework.boot + spring-boot-devtools + org.hibernate hibernate-core diff --git a/dmp-backend/src/main/java/eu/eudat/EuDatApplication.java b/dmp-backend/src/main/java/eu/eudat/EuDatApplication.java index ffb9c7edc..39f2c2410 100644 --- a/dmp-backend/src/main/java/eu/eudat/EuDatApplication.java +++ b/dmp-backend/src/main/java/eu/eudat/EuDatApplication.java @@ -9,6 +9,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class EuDatApplication { public static void main(String[] args) { + System.setProperty("spring.devtools.restart.enabled", "true"); SpringApplication.run(EuDatApplication.class, args); } } diff --git a/dmp-backend/src/main/java/eu/eudat/configurations/DatabaseConfiguration.java b/dmp-backend/src/main/java/eu/eudat/configurations/DatabaseConfiguration.java index e85734f30..1d0b57f82 100644 --- a/dmp-backend/src/main/java/eu/eudat/configurations/DatabaseConfiguration.java +++ b/dmp-backend/src/main/java/eu/eudat/configurations/DatabaseConfiguration.java @@ -67,6 +67,7 @@ public class DatabaseConfiguration { Properties properties = new Properties(); properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL92Dialect"); properties.setProperty("hibernate.show_sql", "true"); + properties.setProperty("hibernate.temp.use_jdbc_metadata_defaults","false"); return properties; } } \ No newline at end of file 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 c3bb6508e..7fedf775a 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java @@ -8,6 +8,12 @@ import eu.eudat.entities.DMP; import eu.eudat.entities.Dataset; import eu.eudat.entities.DatasetProfile; import eu.eudat.entities.UserInfo; +import eu.eudat.managers.DatasetManager; +import eu.eudat.managers.ProjectManager; +import eu.eudat.models.dataset.DatasetTableRequest; +import eu.eudat.models.helpers.DataTableData; +import eu.eudat.models.project.Project; +import eu.eudat.models.project.ProjectTableRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -57,8 +63,37 @@ public class Datasets { @Autowired private ResearcherDao researcherDao; @Autowired private ServiceDao serviceDao; @Autowired private UserInfoDao userInfoDao; - - + + + + + @RequestMapping(method = RequestMethod.POST, value = { "/datasets/getPaged" }, consumes = "application/json", produces="application/json") + public @ResponseBody ResponseEntity> getPaged(@RequestBody DatasetTableRequest datasetTableRequest) { + try { + DataTableData dataTable = new DatasetManager().getPaged(datasetDao, datasetTableRequest); + return ResponseEntity.status(HttpStatus.OK).body(dataTable); + + } catch (Exception ex) { + ex.printStackTrace(); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } + } + + @RequestMapping(method = RequestMethod.GET, value = { "/datasets/getSingle/{id}" }, produces="application/json") + public @ResponseBody ResponseEntity getPaged(@PathVariable String id) { + try { + eu.eudat.models.dataset.Dataset dataset = new DatasetManager().getSingle(datasetDao, id); + return ResponseEntity.status(HttpStatus.OK).body(dataset); + } catch (Exception ex) { + ex.printStackTrace(); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + // FETCH BY DATASET(S) diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Users.java b/dmp-backend/src/main/java/eu/eudat/controllers/Users.java index 34effad1e..0cdc9e7e4 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Users.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Users.java @@ -75,21 +75,22 @@ public class Users { @RequestMapping(method = RequestMethod.GET, value = { "/user/whoami" }, produces="application/json;charset=UTF-8") - public @ResponseBody ResponseEntity whoami(){ + public @ResponseBody ResponseEntity whoami(){ String userID = null; try { userID = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString(); } catch(NullPointerException ex) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("You have not logged in. You shouldn't be here"); + ex.printStackTrace(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } UserInfo userInfo = userInfoDao.getUserInfo(userID); if(userInfo==null) //this should normally never happer - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("There's no such a user on the system. You shouldn't be here"); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); try { @@ -98,7 +99,7 @@ public class Users { } catch(Exception ex) { ex.printStackTrace(); - return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDao.java index 3abc2e9f1..098b5178f 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDao.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDao.java @@ -5,7 +5,10 @@ import java.util.UUID; import eu.eudat.dao.Dao; import eu.eudat.entities.Dataset; +import eu.eudat.entities.Project; import eu.eudat.entities.responses.IDLabelPair; +import eu.eudat.models.dataset.DatasetTableRequest; +import eu.eudat.models.project.ProjectTableRequest; import org.springframework.stereotype.Service; public interface DatasetDao extends Dao { @@ -16,5 +19,7 @@ public interface DatasetDao extends Dao { List listAllIDsLabels(); List getDatasetsOfDmp(UUID dmpID); - + + public List getWithCriteria(DatasetTableRequest datasetTableRequest); + } \ No newline at end of file diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java index 667c189d7..87fd944fb 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java @@ -7,10 +7,15 @@ import java.util.stream.Collectors; import javax.persistence.Query; import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; import eu.eudat.dao.JpaDao; import eu.eudat.entities.Dataset; +import eu.eudat.entities.Project; import eu.eudat.entities.responses.IDLabelPair; +import eu.eudat.models.dataset.DatasetTableRequest; import org.springframework.stereotype.Component; @Component("datasetDao") @@ -49,5 +54,14 @@ public class DatasetDaoImpl extends JpaDao implements DatasetDao return datasets; } - + @Override + public List getWithCriteria(DatasetTableRequest datasetTableRequest) { + CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder .createQuery(Dataset.class); + Root root = criteriaQuery.from(Dataset.class); + TypedQuery typedQuery = entityManager.createQuery(criteriaQuery); + typedQuery.setFirstResult(datasetTableRequest.getOffset()); + typedQuery.setMaxResults(datasetTableRequest.getLength()); + return typedQuery.getResultList(); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/entities/DatasetProfile.java b/dmp-backend/src/main/java/eu/eudat/entities/DatasetProfile.java index f82c6494f..b104db1fb 100644 --- a/dmp-backend/src/main/java/eu/eudat/entities/DatasetProfile.java +++ b/dmp-backend/src/main/java/eu/eudat/entities/DatasetProfile.java @@ -26,8 +26,8 @@ import com.fasterxml.jackson.annotation.ObjectIdGenerators; @Entity @Table(name="\"DatasetProfile\"") @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") -public class DatasetProfile implements Serializable { - +public class DatasetProfile implements Serializable,DataEntity { + private static final long serialVersionUID = 8203086344232867334L; @@ -173,7 +173,7 @@ public class DatasetProfile implements Serializable { @Override public String toString() { - return "DatasetProfile [id=" + id + ", label=" + label + ", dataset=" + dataset + ", ruleset=" + ruleset + return "DatasetProfileListingModel [id=" + id + ", label=" + label + ", dataset=" + dataset + ", ruleset=" + ruleset + ", viewstyle=" + viewstyle + ", definition=" + definition + "]"; } diff --git a/dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java b/dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java index 18e288dfb..e4c1a175e 100644 --- a/dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java +++ b/dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java @@ -32,8 +32,8 @@ public class Transformers { dpv.setDefinition(formData.getFirst("DatasetProfileViewStyle.definition")); DatasetProfile dp = new DatasetProfile(); - dp.setLabel(formData.getFirst("DatasetProfile.label")); - dp.setDefinition(formData.getFirst("DatasetProfile.definition")); + dp.setLabel(formData.getFirst("DatasetProfileListingModel.label")); + dp.setDefinition(formData.getFirst("DatasetProfileListingModel.definition")); dp.setRuleset(dpr); dp.setViewstyle(dpv); diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java new file mode 100644 index 000000000..187d3f3d8 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java @@ -0,0 +1,33 @@ +package eu.eudat.managers; + +import eu.eudat.dao.entities.DatasetDao; +import eu.eudat.dao.entities.ProjectDao; +import eu.eudat.models.dataset.Dataset; +import eu.eudat.models.dataset.DatasetTableRequest; +import eu.eudat.models.helpers.DataTableData; +import eu.eudat.models.project.Project; +import eu.eudat.models.project.ProjectTableRequest; +import eu.eudat.utilities.builders.DomainModelConverter; + +import java.util.List; +import java.util.UUID; + +/** + * Created by ikalyvas on 12/15/2017. + */ +public class DatasetManager { + + public DataTableData getPaged(DatasetDao datatasetRepository, DatasetTableRequest datasetTableRequest) throws IllegalAccessException, InstantiationException{ + List datasets = new DomainModelConverter().fromDataModel( datatasetRepository.getWithCriteria(datasetTableRequest), eu.eudat.models.dataset.Dataset.class); + DataTableData dataTable = new DataTableData(); + dataTable.setData(datasets); + dataTable.setTotalCount(datatasetRepository.count()); + return dataTable; + } + + public eu.eudat.models.dataset.Dataset getSingle(DatasetDao datatasetRepository, String id) throws InstantiationException, IllegalAccessException{ + eu.eudat.models.dataset.Dataset dataset = new eu.eudat.models.dataset.Dataset(); + dataset.fromDataModel(datatasetRepository.read(UUID.fromString(id))); + return dataset; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/criteria/DatasetCriteria.java b/dmp-backend/src/main/java/eu/eudat/models/criteria/DatasetCriteria.java new file mode 100644 index 000000000..6514f9e62 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/criteria/DatasetCriteria.java @@ -0,0 +1,9 @@ +package eu.eudat.models.criteria; + +import eu.eudat.entities.Dataset; + +/** + * Created by ikalyvas on 12/15/2017. + */ +public class DatasetCriteria extends Criteria{ +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/dataset/Dataset.java b/dmp-backend/src/main/java/eu/eudat/models/dataset/Dataset.java index b85e73eb7..648ccad85 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/dataset/Dataset.java +++ b/dmp-backend/src/main/java/eu/eudat/models/dataset/Dataset.java @@ -1,11 +1,11 @@ package eu.eudat.models.dataset; import eu.eudat.models.DataModel; +import eu.eudat.models.datasetprofile.DatasetProfileListingModel; +import eu.eudat.models.dmp.DataManagementPlan; import eu.eudat.utilities.builders.DomainModelConverter; -import java.util.Date; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @@ -18,8 +18,8 @@ public class Dataset implements DataModel{ private String description; private short status; private String properties; - private eu.eudat.entities.DMP dmp; - private eu.eudat.entities.DatasetProfile profile; + private DataManagementPlan dmp; + private DatasetProfileListingModel profile; private List registries; private List services; private List dataRepositories; @@ -88,27 +88,31 @@ public class Dataset implements DataModel{ public void setDescription(String description) { this.description = description; } - public eu.eudat.entities.DMP getDmp() { + + public DataManagementPlan getDmp() { return dmp; } - public void setDmp(eu.eudat.entities.DMP dmp) { + + public void setDmp(DataManagementPlan dmp) { this.dmp = dmp; } - public eu.eudat.entities.DatasetProfile getProfile() { + + public DatasetProfileListingModel getProfile() { return profile; } - public void setProfile(eu.eudat.entities.DatasetProfile profile) { + + public void setProfile(DatasetProfileListingModel profile) { this.profile = profile; } - + public void fromDataModel(eu.eudat.entities.Dataset entity) throws IllegalAccessException, InstantiationException{ this.id = entity.getId(); this.label = entity.getLabel(); this.properties = entity.getProperties(); this.reference = entity.getReference(); - //this.dmp = entity.getDmp(); this.description = entity.getDescription(); - this.profile = entity.getProfile(); + this.profile = new DatasetProfileListingModel(); + this.profile.fromDataModel(entity.getProfile()); this.registries = new DomainModelConverter().fromDataModel(entity.getRegistries().stream().collect(Collectors.toList()), Registry.class); this.dataRepositories = new DomainModelConverter().fromDataModel(entity.getDataRepositories().stream().collect(Collectors.toList()), DataRepository.class); this.services = new DomainModelConverter().fromDataModel(entity.getServices().stream().collect(Collectors.toList()), Service.class); @@ -122,9 +126,9 @@ public class Dataset implements DataModel{ entity.setUri(this.uri); entity.setProperties(this.properties); entity.setStatus(this.status); - entity.setDmp(dmp); + entity.setDmp(dmp.toDataModel()); entity.setDescription(this.description); - entity.setProfile(profile); + entity.setProfile(profile.toDataModel()); ///TODO if(!this.registries.isEmpty()){ entity.setRegistries(new HashSet()); for(Registry registry:this.registries){ diff --git a/dmp-backend/src/main/java/eu/eudat/models/dataset/DatasetTableRequest.java b/dmp-backend/src/main/java/eu/eudat/models/dataset/DatasetTableRequest.java new file mode 100644 index 000000000..d82914170 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/dataset/DatasetTableRequest.java @@ -0,0 +1,38 @@ +package eu.eudat.models.dataset; + +import eu.eudat.models.criteria.DatasetCriteria; +import eu.eudat.models.criteria.ProjectCriteria; + +/** + * Created by ikalyvas on 12/15/2017. + */ +public class DatasetTableRequest { + private int length; + private int offset; + + private DatasetCriteria criteria; + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } + + public DatasetCriteria getCriteria() { + return criteria; + } + + public void setCriteria(DatasetCriteria criteria) { + this.criteria = criteria; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/datasetprofile/DatasetProfileListingModel.java b/dmp-backend/src/main/java/eu/eudat/models/datasetprofile/DatasetProfileListingModel.java new file mode 100644 index 000000000..2f4cc051a --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/datasetprofile/DatasetProfileListingModel.java @@ -0,0 +1,95 @@ +package eu.eudat.models.datasetprofile; + +import eu.eudat.entities.Dataset; +import eu.eudat.entities.DatasetProfile; +import eu.eudat.entities.DatasetProfileRuleset; +import eu.eudat.entities.DatasetProfileViewstyle; +import eu.eudat.models.DataModel; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.util.Date; +import java.util.Set; +import java.util.UUID; + +/** + * Created by ikalyvas on 12/15/2017. + */ +public class DatasetProfileListingModel implements DataModel { + + private UUID id; + + private String label; + + private Short status; + + private Date created; + + private Date modified = new Date(); + + private String description; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public Short getStatus() { + return status; + } + + public void setStatus(Short status) { + this.status = status; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getModified() { + return modified; + } + + public void setModified(Date modified) { + this.modified = modified; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + @Override + public void fromDataModel(DatasetProfile entity) throws InstantiationException, IllegalAccessException { + this.id = entity.getId(); + this.label = entity.getLabel(); + this.status = entity.getStatus(); + this.created = entity.getCreated(); + this.modified = entity.getModified(); + this.description = entity.getDescription(); + } + + @Override + public DatasetProfile toDataModel() { + return null; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/proxy/config/ConfigLoader.java b/dmp-backend/src/main/java/eu/eudat/proxy/config/ConfigLoader.java index 5f3a087e6..e2324644f 100644 --- a/dmp-backend/src/main/java/eu/eudat/proxy/config/ConfigLoader.java +++ b/dmp-backend/src/main/java/eu/eudat/proxy/config/ConfigLoader.java @@ -1,5 +1,7 @@ package eu.eudat.proxy.config; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import java.io.IOException; @@ -14,39 +16,41 @@ public class ConfigLoader { private ExternalUrls externalUrls; - + @Autowired + private Environment environment; // public static void main(String [] args) { // ConfigLoader l = new ConfigLoader("file:///home/nikolas/git/OpenAIRE-EUDAT-DMP/dmp-backend/src/main/resources/ExternalUrls.xml"); // } public ConfigLoader() { } - public ConfigLoader(String fileUrl) { - System.out.println("Loaded also config file: "+fileUrl); - InputStream is = null; - try { - JAXBContext jaxbContext = JAXBContext.newInstance(ExternalUrls.class); - Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); - is = new URL(fileUrl).openStream(); - externalUrls = (ExternalUrls) jaxbUnmarshaller.unmarshal(is); -// System.out.println(new ObjectMapper().writeValueAsString(externalUrls)); - } - catch(Exception ex) { - //log the error and shutdown the system (that's a critical error) - ex.printStackTrace(); - System.exit(0); - } - finally { + private void setExternalUrls() { + String fileUrl = this.environment.getProperty("configuration.externalUrls"); + System.out.println("Loaded also config file: " + fileUrl); + InputStream is = null; try { - if(is !=null) is.close(); - } catch (IOException e) { - System.out.println("Warning: Could not close a stream after reading from file: "+fileUrl); - } - } + JAXBContext jaxbContext = JAXBContext.newInstance(ExternalUrls.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); + is = new URL(fileUrl).openStream(); + externalUrls = (ExternalUrls) jaxbUnmarshaller.unmarshal(is); +// System.out.println(new ObjectMapper().writeValueAsString(externalUrls)); + } catch (Exception ex) { + //log the error and shutdown the system (that's a critical error) + ex.printStackTrace(); + System.exit(0); + } finally { + try { + if (is != null) is.close(); + } catch (IOException e) { + System.out.println("Warning: Could not close a stream after reading from file: " + fileUrl); + } + } + } public ExternalUrls getExternalUrls() { + this.setExternalUrls(); return externalUrls; } diff --git a/dmp-backend/src/main/resources/application.properties b/dmp-backend/src/main/resources/application.properties index cbc0d65d3..b9402a93d 100644 --- a/dmp-backend/src/main/resources/application.properties +++ b/dmp-backend/src/main/resources/application.properties @@ -12,6 +12,7 @@ database.password = dmpt00lu$r ###################Allowed Proxy Service Host ############################ eu.eudat.proxy.allowed.host = https://eestore.paas2.uninett.no +configuration.externalUrls = file:///C:\\Users\\ikalyvas\\Documents\\Projects\\OpenAIRE-EUDAT-DMP-service-pilot\\dmp-backend\\src\\main\\resources\\ExternalUrls.xml ####################################################### ########################Persistence/Hibernate Generic#############################