diff --git a/dmp-backend/src/main/java/dao/entities/DMPDao.java b/dmp-backend/src/main/java/dao/entities/DMPDao.java index 1bc531e8b..af96ac8e1 100644 --- a/dmp-backend/src/main/java/dao/entities/DMPDao.java +++ b/dmp-backend/src/main/java/dao/entities/DMPDao.java @@ -8,6 +8,8 @@ import entities.DMP; import entities.Organisation; import entities.Project; import entities.responses.IDLabelPair; +import models.dmp.DataManagementPlanTableRequest; +import models.project.ProjectTableRequest; public interface DMPDao extends Dao { @@ -17,4 +19,6 @@ public interface DMPDao extends Dao { List getDMPsOfUser(String userID); + public List getWithCriteria(DataManagementPlanTableRequest dataManagementPlanTableRequest); + } \ No newline at end of file diff --git a/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java b/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java index c3b1b83a7..8be6522b4 100644 --- a/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java @@ -6,6 +6,9 @@ import java.util.UUID; import java.util.stream.Collectors; import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; import org.hibernate.query.Query; @@ -14,6 +17,8 @@ import entities.DMP; import entities.Project; import entities.UserInfo; import entities.responses.IDLabelPair; +import models.dmp.DataManagementPlanTableRequest; +import models.project.ProjectTableRequest; public class DMPDaoImpl extends JpaDao implements DMPDao { @@ -53,12 +58,18 @@ public class DMPDaoImpl extends JpaDao implements DMPDao { catch(Exception ex) { //no need to distinguish between exceptions for the moment ex.printStackTrace(); return null; - } - - + } } - - - + @Override + public List getWithCriteria(DataManagementPlanTableRequest dataManagementPlanTableRequest) { + CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder .createQuery(DMP.class); + Root root = criteriaQuery.from(DMP.class); + TypedQuery typedQuery = entityManager.createQuery(criteriaQuery); + typedQuery.setFirstResult(dataManagementPlanTableRequest.getOffset()); + typedQuery.setMaxResults(dataManagementPlanTableRequest.getLength()); + return typedQuery.getResultList(); + } + } diff --git a/dmp-backend/src/main/java/dao/entities/ProjectDao.java b/dmp-backend/src/main/java/dao/entities/ProjectDao.java index 376a38c0c..846ee5e2b 100644 --- a/dmp-backend/src/main/java/dao/entities/ProjectDao.java +++ b/dmp-backend/src/main/java/dao/entities/ProjectDao.java @@ -6,6 +6,7 @@ import java.util.UUID; import dao.Dao; import entities.Project; import entities.responses.IDLabelPair; +import models.project.ProjectTableRequest; public interface ProjectDao extends Dao { @@ -15,4 +16,6 @@ public interface ProjectDao extends Dao { public List getProjectsOfUser(String userID); + public List getWithCriteria(ProjectTableRequest projectTableRequest); + } \ No newline at end of file diff --git a/dmp-backend/src/main/java/dao/entities/ProjectDaoImpl.java b/dmp-backend/src/main/java/dao/entities/ProjectDaoImpl.java index bdd2ce37c..321425e0f 100644 --- a/dmp-backend/src/main/java/dao/entities/ProjectDaoImpl.java +++ b/dmp-backend/src/main/java/dao/entities/ProjectDaoImpl.java @@ -5,13 +5,18 @@ import java.util.UUID; import java.util.stream.Collectors; import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; import org.hibernate.query.Query; import dao.JpaDao; import entities.DMP; import entities.Project; +import entities.Registry; import entities.responses.IDLabelPair; +import models.project.ProjectTableRequest; public class ProjectDaoImpl extends JpaDao implements ProjectDao { @@ -55,6 +60,17 @@ public class ProjectDaoImpl extends JpaDao implements ProjectDao } + @Override + public List getWithCriteria(ProjectTableRequest projectTableRequest) { + CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder .createQuery(Project.class); + Root root = criteriaQuery.from(Project.class); + TypedQuery typedQuery = entityManager.createQuery(criteriaQuery); + typedQuery.setFirstResult(projectTableRequest.getOffset()); + typedQuery.setMaxResults(projectTableRequest.getLength()); + return typedQuery.getResultList(); + } + diff --git a/dmp-backend/src/main/java/managers/DashBoardManager.java b/dmp-backend/src/main/java/managers/DashBoardManager.java new file mode 100644 index 000000000..061b29fff --- /dev/null +++ b/dmp-backend/src/main/java/managers/DashBoardManager.java @@ -0,0 +1,20 @@ +package managers; + +import org.springframework.beans.factory.annotation.Autowired; + +import dao.entities.DMPDao; +import dao.entities.DatasetDao; +import dao.entities.ProjectDao; +import models.dashboard.DashBoardStatistics; + +public class DashBoardManager { + + public DashBoardStatistics getStatistics(DatasetDao datasetRepository,DMPDao dataManagementPlanRepository,ProjectDao projectRepository){ + DashBoardStatistics statistics = new DashBoardStatistics(); + statistics.setTotalDataManagementPlanCount(dataManagementPlanRepository.count()); + statistics.setTotalDataSetCount(datasetRepository.count()); + statistics.setTotalProjectCount(projectRepository.count()); + return statistics; + } + +} diff --git a/dmp-backend/src/main/java/managers/DataManagementPlanManager.java b/dmp-backend/src/main/java/managers/DataManagementPlanManager.java new file mode 100644 index 000000000..8b7613f7e --- /dev/null +++ b/dmp-backend/src/main/java/managers/DataManagementPlanManager.java @@ -0,0 +1,29 @@ +package managers; + +import java.util.List; +import java.util.UUID; + +import dao.entities.DMPDao; +import dao.entities.ProjectDao; +import models.dmp.DataManagementPlanTableRequest; +import models.helpers.DataTableData; +import models.project.Project; +import models.project.ProjectTableRequest; +import utilities.builders.DomainModelConverter; + +public class DataManagementPlanManager { + + public DataTableData getPaged(DMPDao dmpsRepository,DataManagementPlanTableRequest dataManagementPlanTableRequest) throws IllegalAccessException, InstantiationException{ + List datamanagementPlans = new DomainModelConverter().fromDataModel( dmpsRepository.getWithCriteria(dataManagementPlanTableRequest),models.dmp.DataManagementPlan.class); + DataTableData dataTable = new DataTableData(); + dataTable.setData(datamanagementPlans); + dataTable.setTotalCount(dmpsRepository.count()); + return dataTable; + } + + public models.dmp.DataManagementPlan getSingle(DMPDao dmpsRepository,String id) throws InstantiationException, IllegalAccessException{ + models.dmp.DataManagementPlan datamanagementPlan = new models.dmp.DataManagementPlan(); + datamanagementPlan.fromDataModel(dmpsRepository.read(UUID.fromString(id))); + return datamanagementPlan; + } +} diff --git a/dmp-backend/src/main/java/managers/ProjectManager.java b/dmp-backend/src/main/java/managers/ProjectManager.java new file mode 100644 index 000000000..864c17a0d --- /dev/null +++ b/dmp-backend/src/main/java/managers/ProjectManager.java @@ -0,0 +1,27 @@ +package managers; + +import java.util.List; +import java.util.UUID; + +import dao.entities.ProjectDao; +import models.helpers.DataTableData; +import models.project.Project; +import models.project.ProjectTableRequest; +import utilities.builders.DomainModelConverter; + +public class ProjectManager { + + public DataTableData getPaged(ProjectDao projectRepository,ProjectTableRequest projectTableRequest) throws IllegalAccessException, InstantiationException{ + List projects = new DomainModelConverter().fromDataModel( projectRepository.getWithCriteria(projectTableRequest),models.project.Project.class); + DataTableData dataTable = new DataTableData(); + dataTable.setData(projects); + dataTable.setTotalCount(projectRepository.count()); + return dataTable; + } + + public models.project.Project getSingle(ProjectDao projectRepository,String id) throws InstantiationException, IllegalAccessException{ + models.project.Project project = new models.project.Project(); + project.fromDataModel(projectRepository.read(UUID.fromString(id))); + return project; + } +} diff --git a/dmp-backend/src/main/java/models/criteria/DataManagementPlanCriteria.java b/dmp-backend/src/main/java/models/criteria/DataManagementPlanCriteria.java new file mode 100644 index 000000000..86bb56ff7 --- /dev/null +++ b/dmp-backend/src/main/java/models/criteria/DataManagementPlanCriteria.java @@ -0,0 +1,7 @@ +package models.criteria; + +import entities.DMP; + +public class DataManagementPlanCriteria extends Criteria{ + +} diff --git a/dmp-backend/src/main/java/models/criteria/ProjectCriteria.java b/dmp-backend/src/main/java/models/criteria/ProjectCriteria.java new file mode 100644 index 000000000..e6ecf0136 --- /dev/null +++ b/dmp-backend/src/main/java/models/criteria/ProjectCriteria.java @@ -0,0 +1,7 @@ +package models.criteria; + +import entities.Project; + +public class ProjectCriteria extends Criteria{ + +} diff --git a/dmp-backend/src/main/java/models/dashboard/DashBoardStatistics.java b/dmp-backend/src/main/java/models/dashboard/DashBoardStatistics.java new file mode 100644 index 000000000..3b5fbc919 --- /dev/null +++ b/dmp-backend/src/main/java/models/dashboard/DashBoardStatistics.java @@ -0,0 +1,29 @@ +package models.dashboard; + +public class DashBoardStatistics { + private Long totalDataManagementPlanCount; + private Long totalProjectCount; + private Long totalDataSetCount; + + + public Long getTotalDataManagementPlanCount() { + return totalDataManagementPlanCount; + } + public void setTotalDataManagementPlanCount(Long totalDataManagementPlanCount) { + this.totalDataManagementPlanCount = totalDataManagementPlanCount; + } + public Long getTotalProjectCount() { + return totalProjectCount; + } + public void setTotalProjectCount(Long totalProjectCount) { + this.totalProjectCount = totalProjectCount; + } + public Long getTotalDataSetCount() { + return totalDataSetCount; + } + public void setTotalDataSetCount(Long totalDataSetCount) { + this.totalDataSetCount = totalDataSetCount; + } + + +} diff --git a/dmp-backend/src/main/java/models/dmp/DataManagementPlan.java b/dmp-backend/src/main/java/models/dmp/DataManagementPlan.java index 3c0860f09..4fe614cff 100644 --- a/dmp-backend/src/main/java/models/dmp/DataManagementPlan.java +++ b/dmp-backend/src/main/java/models/dmp/DataManagementPlan.java @@ -103,7 +103,7 @@ public class DataManagementPlan implements DataModel{ this.project = new models.dmp.Project(); this.project.fromDataModel(entity.getProject()); this.creator = new models.dmp.UserInfo(); - this.creator.fromDataModel(entity.getCreator()); + if(entity.getCreator()!=null)this.creator.fromDataModel(entity.getCreator()); } @Override diff --git a/dmp-backend/src/main/java/models/dmp/DataManagementPlanTableRequest.java b/dmp-backend/src/main/java/models/dmp/DataManagementPlanTableRequest.java new file mode 100644 index 000000000..1e499ce23 --- /dev/null +++ b/dmp-backend/src/main/java/models/dmp/DataManagementPlanTableRequest.java @@ -0,0 +1,36 @@ +package models.dmp; + +import models.criteria.DataManagementPlanCriteria; + +public class DataManagementPlanTableRequest { + private Integer length; + private Integer offset; + + private DataManagementPlanCriteria criteria; + + public Integer getLength() { + return length; + } + + public void setLength(Integer length) { + this.length = length; + } + + public Integer getOffset() { + return offset; + } + + public void setOffset(Integer offset) { + this.offset = offset; + } + + public DataManagementPlanCriteria getCriteria() { + return criteria; + } + + public void setCriteria(DataManagementPlanCriteria criteria) { + this.criteria = criteria; + } + + +} diff --git a/dmp-backend/src/main/java/models/helpers/DataTableData.java b/dmp-backend/src/main/java/models/helpers/DataTableData.java new file mode 100644 index 000000000..0c5e17feb --- /dev/null +++ b/dmp-backend/src/main/java/models/helpers/DataTableData.java @@ -0,0 +1,21 @@ +package models.helpers; + +import java.util.List; + +public class DataTableData { + private Long totalCount; + private List data; + + public Long getTotalCount() { + return totalCount; + } + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + public List getData() { + return data; + } + public void setData(List data) { + this.data = data; + } +} diff --git a/dmp-backend/src/main/java/models/project/Project.java b/dmp-backend/src/main/java/models/project/Project.java new file mode 100644 index 000000000..f345cae93 --- /dev/null +++ b/dmp-backend/src/main/java/models/project/Project.java @@ -0,0 +1,201 @@ +package models.project; + +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; + +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +import entities.DMP; +import entities.UserInfo; +import models.DataModel; +import models.dmp.DataManagementPlan; + +public class Project implements DataModel{ + + private UUID id; + + private List dmps; + + private String label; + + private String abbreviation; + + private String reference; + + private String uri; + + private String definition; + + private Date startdate; + + private Date enddate; + + private Short status; + + private UserInfo creationUser; + + private Date created; + + private Date modified; + + private String description; + + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public List getDmps() { + return dmps; + } + + public void setDmps(List dmps) { + this.dmps = dmps; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getAbbreviation() { + return abbreviation; + } + + public void setAbbreviation(String abbreviation) { + this.abbreviation = abbreviation; + } + + public String getReference() { + return reference; + } + + public void setReference(String reference) { + this.reference = reference; + } + + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + + public String getDefinition() { + return definition; + } + + public void setDefinition(String definition) { + this.definition = definition; + } + + public Date getStartdate() { + return startdate; + } + + public void setStartdate(Date startdate) { + this.startdate = startdate; + } + + public Date getEnddate() { + return enddate; + } + + public void setEnddate(Date enddate) { + this.enddate = enddate; + } + + public Short getStatus() { + return status; + } + + public void setStatus(Short status) { + this.status = status; + } + + public UserInfo getCreationUser() { + return creationUser; + } + + public void setCreationUser(UserInfo creationUser) { + this.creationUser = creationUser; + } + + 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(entities.Project entity) throws InstantiationException, IllegalAccessException { + this.id = entity.getId(); + this.label = entity.getLabel(); + this.abbreviation = entity.getAbbreviation(); + this.reference = entity.getReference(); + this.uri = entity.getUri(); + this.definition = entity.getDefinition(); + this.startdate = entity.getStartdate(); + this.enddate = entity.getEnddate(); + this.status = entity.getStatus(); + this.created = entity.getCreated(); + this.modified = entity.getModified(); + this.description = entity.getDescription(); + + } + + @Override + public entities.Project toDataModel() { + entities.Project entity = new entities.Project(); + entity.setId(this.id); + entity.setAbbreviation(this.abbreviation); + entity.setLabel(this.label); + entity.setReference(this.reference); + entity.setUri(this.uri); + entity.setDefinition(this.definition); + entity.setStartdate(this.startdate); + entity.setCreated(this.created == null? new Date():this.created); + entity.setEnddate(this.enddate); + entity.setStatus(this.status); + entity.setModified(new Date()); + entity.setDescription(this.description); + return entity; + } +} diff --git a/dmp-backend/src/main/java/models/project/ProjectTableRequest.java b/dmp-backend/src/main/java/models/project/ProjectTableRequest.java new file mode 100644 index 000000000..4afa14eaa --- /dev/null +++ b/dmp-backend/src/main/java/models/project/ProjectTableRequest.java @@ -0,0 +1,36 @@ +package models.project; + +import models.criteria.ProjectCriteria; + +public class ProjectTableRequest { + private int length; + private int offset; + + private ProjectCriteria 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 ProjectCriteria getCriteria() { + return criteria; + } + + public void setCriteria(ProjectCriteria criteria) { + this.criteria = criteria; + } + + +} diff --git a/dmp-backend/src/main/java/rest/entities/DMPs.java b/dmp-backend/src/main/java/rest/entities/DMPs.java index 7bbc0a352..70335e2ba 100644 --- a/dmp-backend/src/main/java/rest/entities/DMPs.java +++ b/dmp-backend/src/main/java/rest/entities/DMPs.java @@ -11,6 +11,10 @@ import models.criteria.OrganisationCriteria; import models.criteria.ResearcherCriteria; import models.criteria.ServiceCriteria; import models.dmp.DataManagementPlan; +import models.dmp.DataManagementPlanTableRequest; +import models.helpers.DataTableData; +import models.project.ProjectTableRequest; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -38,9 +42,12 @@ import dao.entities.ServiceDao; import dao.entities.UserInfoDao; import entities.DMP; import entities.Dataset; +import entities.Project; import entities.UserInfo; import entities.responses.IDLabelPair; import helpers.SerializerProvider; +import managers.DataManagementPlanManager; +import managers.ProjectManager; import utilities.builders.DomainModelConverter; @@ -66,6 +73,42 @@ public class DMPs { // FETCH BY DMP(S) + + @RequestMapping(method = RequestMethod.POST, value = { "/dmps/getPaged" }, consumes = "application/json", produces="application/json") + public @ResponseBody ResponseEntity> getPaged(@RequestBody DataManagementPlanTableRequest dataManagementPlanTableRequest) { + try { + DataTableData dataTable = new DataManagementPlanManager().getPaged(dMPDao, dataManagementPlanTableRequest); + + 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 = { "/dmps/getSingle/{id}" }, produces="application/json") + public @ResponseBody ResponseEntity getPaged(@PathVariable String id) { + try { + models.dmp.DataManagementPlan project = new DataManagementPlanManager().getSingle(dMPDao, id); + return ResponseEntity.status(HttpStatus.OK).body(project); + + } catch (Exception ex) { + ex.printStackTrace(); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } + } + + @Transactional + @RequestMapping(method = RequestMethod.POST, value = { "/dmps/add" }, consumes = "application/json", produces="application/json") + public @ResponseBody ResponseEntity addDmp(@RequestBody models.dmp.DataManagementPlan dataManagementPlan) { + entities.DMP createdProject = dMPDao.update(dataManagementPlan.toDataModel()); + return ResponseEntity.status(HttpStatus.CREATED).body(createdProject); + } + + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + @RequestMapping(method = RequestMethod.GET, value = { "/dmps" }, produces="text/plain") public @ResponseBody ResponseEntity listDMPs(){ try { diff --git a/dmp-backend/src/main/java/rest/entities/DashBoardController.java b/dmp-backend/src/main/java/rest/entities/DashBoardController.java new file mode 100644 index 000000000..e61e84ba7 --- /dev/null +++ b/dmp-backend/src/main/java/rest/entities/DashBoardController.java @@ -0,0 +1,51 @@ +package rest.entities; + +import java.util.Map; +import java.util.UUID; + +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import dao.entities.DMPDao; +import dao.entities.DMPProfileDao; +import dao.entities.DataRepositoryDao; +import dao.entities.DatasetDao; +import dao.entities.DatasetProfileDao; +import dao.entities.DatasetProfileRulesetDao; +import dao.entities.DatasetProfileViewstyleDao; +import dao.entities.OrganisationDao; +import dao.entities.ProjectDao; +import dao.entities.RegistryDao; +import dao.entities.ResearcherDao; +import dao.entities.ServiceDao; +import managers.DashBoardManager; +import managers.UserManager; +import models.dashboard.DashBoardStatistics; + +@RestController +@CrossOrigin +public class DashBoardController { + + @Autowired private DatasetDao datasetDao; + @Autowired private DMPDao dMPDao; + @Autowired private ProjectDao projectDao; + + @RequestMapping(method = RequestMethod.GET, value = { "/dashboard/getStatistics" }, produces="application/json") + public ResponseEntity getStatistics(){ + try { + DashBoardStatistics statistics = new DashBoardManager().getStatistics(datasetDao, dMPDao, projectDao); + return ResponseEntity.status(HttpStatus.OK).body(statistics); + } + catch(Exception ex) { + ex.printStackTrace(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); + } + } +} diff --git a/dmp-backend/src/main/java/rest/entities/Projects.java b/dmp-backend/src/main/java/rest/entities/Projects.java index 4ef5066b1..e69aec8a0 100644 --- a/dmp-backend/src/main/java/rest/entities/Projects.java +++ b/dmp-backend/src/main/java/rest/entities/Projects.java @@ -61,6 +61,9 @@ import entities.UserInfo; import entities.responses.IDLabelPair; import helpers.SerializerProvider; import helpers.Transformers; +import managers.ProjectManager; +import models.helpers.DataTableData; +import models.project.ProjectTableRequest; import proxy.config.exceptions.HugeResultSet; import proxy.config.exceptions.NoURLFound; import proxy.fetching.RemoteFetcher; @@ -88,6 +91,43 @@ public class Projects { @Autowired private RemoteFetcher remoteFetcher; + + + + @RequestMapping(method = RequestMethod.POST, value = { "/projects/getPaged" }, consumes = "application/json", produces="application/json") + public @ResponseBody ResponseEntity> getPaged(@RequestBody ProjectTableRequest projectTableRequest) { + try { + DataTableData dataTable = new ProjectManager().getPaged(projectDao, projectTableRequest); + 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 = { "/projects/getSingle/{id}" }, produces="application/json") + public @ResponseBody ResponseEntity getPaged(@PathVariable String id) { + try { + models.project.Project project = new ProjectManager().getSingle(projectDao, id); + return ResponseEntity.status(HttpStatus.OK).body(project); + } catch (Exception ex) { + ex.printStackTrace(); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } + } + + + @Transactional + @RequestMapping(method = RequestMethod.POST, value = { "/projects/add" }, consumes = "application/json", produces="application/json") + public @ResponseBody ResponseEntity addProject(@RequestBody models.project.Project project) { + Project createdProject = projectDao.update(project.toDataModel()); + return ResponseEntity.status(HttpStatus.CREATED).body(createdProject); + } + + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + @RequestMapping(method = RequestMethod.GET, value = { "/external/projects" }, produces="application/json") public @ResponseBody ResponseEntity listExternalProjects(@RequestParam(value="query", required=false) String query ){ try { diff --git a/dmp-backend/src/main/webapp/WEB-INF/spring-security.xml b/dmp-backend/src/main/webapp/WEB-INF/spring-security.xml index fc919aa63..5c180fdae 100644 --- a/dmp-backend/src/main/webapp/WEB-INF/spring-security.xml +++ b/dmp-backend/src/main/webapp/WEB-INF/spring-security.xml @@ -24,7 +24,7 @@ - + diff --git a/dmp-frontend/2.4.2 b/dmp-frontend/2.4.2 new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/package-lock.json b/dmp-frontend/package-lock.json index d375d9378..eb24a5a4f 100644 --- a/dmp-frontend/package-lock.json +++ b/dmp-frontend/package-lock.json @@ -269,16 +269,6 @@ "tslib": "1.7.1" } }, - "@angular/platform-server": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-4.4.5.tgz", - "integrity": "sha1-dvI7LDhO1zldwXk8+Fl4iDuiy1A=", - "requires": { - "parse5": "3.0.2", - "tslib": "1.7.1", - "xhr2": "0.1.4" - } - }, "@angular/router": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.1.1.tgz", @@ -594,92 +584,6 @@ "resolved": "https://registry.npmjs.org/angular-2-data-table/-/angular-2-data-table-0.1.2.tgz", "integrity": "sha1-eiz/jPxKpxSpfTMwmLkRaqQourw=" }, - "angular-4-data-table-bootstrap-4": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/angular-4-data-table-bootstrap-4/-/angular-4-data-table-bootstrap-4-0.2.0.tgz", - "integrity": "sha512-gw+3z96SSXZZFSjzAXEx69JecBZ9O5K2uMl/asCc7HFrLeS9Q2T0+HGrb4syODEBhJtey0JpzX4GGBotXuHfjg==", - "requires": { - "@angular/common": "4.4.6", - "@angular/core": "4.4.6", - "@angular/forms": "4.4.6", - "@angular/platform-browser": "4.4.6", - "@angular/platform-browser-dynamic": "4.4.6", - "@angular/platform-server": "4.4.5", - "@types/node": "8.0.44", - "rxjs": "5.4.3", - "ts-node": "3.3.0", - "zone.js": "0.8.17" - }, - "dependencies": { - "@angular/common": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.4.6.tgz", - "integrity": "sha1-S4FCByTggooOg5uVpV6xp+g5GPI=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/core": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.4.6.tgz", - "integrity": "sha1-EwMf0Q3P5DiHVBmzjyESCVi8I1Q=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/forms": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.4.6.tgz", - "integrity": "sha1-/mSs5CQ1wbgPSQNLfEHOjK8UpEo=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/platform-browser": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.4.6.tgz", - "integrity": "sha1-qYOcVH4bZU+h0kqJeAyLpquNzOA=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/platform-browser-dynamic": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.4.6.tgz", - "integrity": "sha1-TT2aanvyzz3kBYphWuBZ7/ZB+jY=", - "requires": { - "tslib": "1.7.1" - } - }, - "@types/node": { - "version": "8.0.44", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.44.tgz", - "integrity": "sha512-56TeARKE2uMi7xWhpRRws/QdnpSVx9i7E8esGiPYoj90jnonGfmV1vwRLvHWYjPxF5u5l7p5fgdKwdse+VeAQQ==" - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "ts-node": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", - "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", - "requires": { - "arrify": "1.0.1", - "chalk": "2.1.0", - "diff": "3.3.0", - "make-error": "1.3.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.4.16", - "tsconfig": "6.0.0", - "v8flags": "3.0.0", - "yn": "2.0.0" - } - } - } - }, "angular-google-signin": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/angular-google-signin/-/angular-google-signin-0.1.5.tgz", @@ -742,6 +646,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1067,7 +972,8 @@ "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true }, "asap": { "version": "2.0.6", @@ -1748,6 +1654,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, "requires": { "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", @@ -1758,6 +1665,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, "requires": { "color-convert": "1.9.0" } @@ -1765,12 +1673,14 @@ "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, "requires": { "has-flag": "2.0.0" } @@ -1785,6 +1695,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1956,6 +1867,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -1963,7 +1875,8 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "color-string": { "version": "0.3.0", @@ -2742,7 +2655,8 @@ "diff": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.0.tgz", - "integrity": "sha512-w0XZubFWn0Adlsapj9EAWX0FqWdO4tz8kc3RiYdWLh4k/V8PTb6i0SMgXt0vRM3zyKnT8tKO7mUlieRQHIjMNg==" + "integrity": "sha512-w0XZubFWn0Adlsapj9EAWX0FqWdO4tz8kc3RiYdWLh4k/V8PTb6i0SMgXt0vRM3zyKnT8tKO7mUlieRQHIjMNg==", + "dev": true }, "diffie-hellman": { "version": "5.0.2", @@ -3241,7 +3155,8 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "escope": { "version": "3.6.0", @@ -3774,6 +3689,910 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, "fstream": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", @@ -5725,7 +6544,8 @@ "make-error": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=" + "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", + "dev": true }, "map-obj": { "version": "1.0.1", @@ -6678,11 +7498,6 @@ "error-ex": "1.3.1" } }, - "parse5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz", - "integrity": "sha1-Be/1fw70V3+xRKefi5qWemzERRA=" - }, "parsejson": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", @@ -8761,7 +9576,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-loader": { "version": "0.2.3", @@ -8798,6 +9614,7 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz", "integrity": "sha512-A6vlydY7H/ljr4L2UOhDSajQdZQ6dMD7cLH0pzwcmwLyc9u8PNI4WGtnfDDzX7uzGL6c/T+ORL97Zlh+S4iOrg==", + "dev": true, "requires": { "source-map": "0.5.7" } @@ -9020,7 +9837,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "style-loader": { "version": "0.13.2", @@ -9384,22 +10202,6 @@ } } }, - "tsconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", - "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", - "requires": { - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, "tsickle": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.25.5.tgz", @@ -9681,7 +10483,8 @@ "user-home": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=" + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true }, "useragent": { "version": "2.2.1", @@ -9746,6 +10549,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.0.tgz", "integrity": "sha512-AGl+C+4qpeSu2g3JxCD/mGFFOs/vVZ3XREkD3ibQXEqr4Y4zgIrPWW124/IKJFHOIVFIoH8miWrLf0o84HYjwA==", + "dev": true, "requires": { "user-home": "1.1.1" } @@ -10436,11 +11240,6 @@ "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", "dev": true }, - "xhr2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", - "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" - }, "xml-char-classes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", @@ -10555,7 +11354,8 @@ "yn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true }, "zone.js": { "version": "0.8.17", diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index 47de7ae49..f4daaffcb 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -109,6 +109,10 @@ import { DataManagementPlanListingComponent } from './dmps/dmp-listing.component import { ProjectEditorComponent } from './projects/editor/project-editor.component'; import { DataManagementPlanEditorComponent } from './dmps/editor/dmp-editor.component'; +import { FigurecardComponent } from './figurecard/figurecard.component'; + + + @NgModule({ declarations: [ AppComponent, @@ -146,8 +150,8 @@ import { DataManagementPlanEditorComponent } from './dmps/editor/dmp-editor.comp DynamicFieldCheckBoxComponent, BreadcrumbComponent, DmpDetailedComponent, ProjectDetailedComponent, ProjectEditorComponent, - DataManagementPlanEditorComponent - + DataManagementPlanEditorComponent, + FigurecardComponent ], imports: [ BrowserModule, diff --git a/dmp-frontend/src/app/figurecard/figurecard.component.css b/dmp-frontend/src/app/figurecard/figurecard.component.css new file mode 100644 index 000000000..c2099ed33 --- /dev/null +++ b/dmp-frontend/src/app/figurecard/figurecard.component.css @@ -0,0 +1,51 @@ +.figure-card{ + display: inline-block; + position: relative; + width: 100%; + margin: 25px 0; + } + + .card-content{ + text-align: right; + padding: 15px 20px 13px 20px; + } + + .card-header { + float: left; + text-align: center; + /*background: linear-gradient(60deg, #ffa726, #fb8c00);*/ + /*box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.14), 0 7px 10px -5px rgba(255, 152, 0, 0.4);*/ + margin: -20px 15px 0; + border-radius: 3px; + padding: 15px; + position: relative; + } + + .card-header i { + font-size: 36px; + line-height: 56px; + width: 56px; + height: 56px; + color: #fff; + } + + .category{ + color: #999; + } + + .card-footer{ + margin: 0 20px 10px; + padding-top: 10px; + border-top: 1px solid #eee; + color: #999; + font-size: 12px; + position: relative; + } + + .card-footer i { + font-size: 16px; + position: relative; + top: 4px; + color: #999; + } + \ No newline at end of file diff --git a/dmp-frontend/src/app/figurecard/figurecard.component.html b/dmp-frontend/src/app/figurecard/figurecard.component.html new file mode 100644 index 000000000..2280fca69 --- /dev/null +++ b/dmp-frontend/src/app/figurecard/figurecard.component.html @@ -0,0 +1,13 @@ +
+
+ {{ headerIcon }} +
+
+

{{ category }}

+

{{ title }}

+
+ +
+ \ No newline at end of file diff --git a/dmp-frontend/src/app/figurecard/figurecard.component.ts b/dmp-frontend/src/app/figurecard/figurecard.component.ts new file mode 100644 index 000000000..0ad976e4b --- /dev/null +++ b/dmp-frontend/src/app/figurecard/figurecard.component.ts @@ -0,0 +1,21 @@ +import { Component, OnInit, Input } from '@angular/core'; + +@Component({ + selector: 'app-figurecard', + templateUrl: './figurecard.component.html', + styleUrls: ['./figurecard.component.css'] +}) +export class FigurecardComponent implements OnInit { + @Input() headerIcon: string; + @Input() category: string; + @Input() title: string; + @Input() footerIcon: string; + @Input() footContent: string; + @Input() linearColor: string; + @Input() boxShadow: string; + constructor() { } + + ngOnInit() { + } + +} diff --git a/dmp-frontend/src/app/homepage/homepage.component.css b/dmp-frontend/src/app/homepage/homepage.component.css index e69de29bb..8366959a7 100644 --- a/dmp-frontend/src/app/homepage/homepage.component.css +++ b/dmp-frontend/src/app/homepage/homepage.component.css @@ -0,0 +1,44 @@ + .card{ + padding: 25px 20px 20px 20px; + display: flex; + flex-direction: column; + align-items: center; + } + + .card h6, p { + color: #999; + } + + .icon{ + margin-top: 20px; + width: 130px; + height: 130px; + border: 1px solid #e5e5e5; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + } + + .icon i{ + font-size: 55px; + color: #e91e63; + } + + .card-title{ + margin-top: 30px; + margin-bottom: 3px; + } + + .card-description{ + margin-bottom: 20px; + } + + .card-dataset{ + display: flex; + flex-direction: column; + padding: 20px; + position: relative; + margin-top: 40px; + } + \ No newline at end of file diff --git a/dmp-frontend/src/app/homepage/homepage.component.html b/dmp-frontend/src/app/homepage/homepage.component.html index da54d7661..0e28568e7 100644 --- a/dmp-frontend/src/app/homepage/homepage.component.html +++ b/dmp-frontend/src/app/homepage/homepage.component.html @@ -1,8 +1,169 @@ - -
+ -
+ + +
+ + + +
+ +
+
+
+
+
+
Projects
+
+ list +
+

52

+

+ This is good if your company size is between 2 and 10 Persons. +

+ +
+
+
+
+
DMPs
+
+ mode_edit +
+

33

+

+ This is good if your company size is between 2 and 10 Persons. +

+ +
+
+
+
+
Datasets
+
+ subject +
+

3

+

+ This is good if your company size is between 2 and 10 Persons. +

+ +
+
+
+
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ +
+
+
+
+ assignment + add_circle +
+
+

Active Datasets

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
First NameCountryCitySalary
Dakota RiceNigerOud-Turnhout$36,738
Minerva HooperCuraçaoSinaai-Waas$23,789
Sage RodriguezNetherlandsBaileux$56,142
Philip ChaneyKorea, SouthOverland Park$38,735
Doris GreeneMalawiFeldkirchen in Kärnten$63,542
Mason PorterChileGloucester$78,615
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/dmp-frontend/src/app/homepage/homepage.component.ts b/dmp-frontend/src/app/homepage/homepage.component.ts index c8d1ea827..b2957b6b1 100644 --- a/dmp-frontend/src/app/homepage/homepage.component.ts +++ b/dmp-frontend/src/app/homepage/homepage.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Router, ActivatedRoute } from '@angular/router'; import { ServerService } from '../../app/services/server.service'; +import { RestBase } from '../../app/services/rest-base'; @Component({ selector: 'homepage', @@ -12,7 +13,7 @@ export class HomepageComponent implements OnInit{ private userInfo: any; - constructor(private serverService: ServerService, private route: ActivatedRoute, private router: Router){ + constructor(private serverService: ServerService, private route: ActivatedRoute, private router: Router, private restbase: RestBase){ } @@ -25,8 +26,12 @@ export class HomepageComponent implements OnInit{ error => { } - ); + ); + } + getStatistics(){ + return this.restbase.get("datasetprofile/getAll"); + } } \ No newline at end of file diff --git a/dmp-frontend/src/app/shared/material/material.module.ts b/dmp-frontend/src/app/shared/material/material.module.ts index d6ddacd19..7d23975fb 100644 --- a/dmp-frontend/src/app/shared/material/material.module.ts +++ b/dmp-frontend/src/app/shared/material/material.module.ts @@ -22,6 +22,7 @@ import { MatProgressSpinnerModule, DateAdapter, MatTooltipModule, + MatCheckboxModule, MatTabsModule } from '@angular/material'; import { CdkTableModule } from '@angular/cdk/table'; @@ -54,6 +55,7 @@ import { SnackBarNotificationComponent } from '../components/notificaiton/snack- MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, + MatCheckboxModule, MatTabsModule ], diff --git a/dmp-frontend/src/index.html b/dmp-frontend/src/index.html index 5000ba2cf..7e56dec5f 100644 --- a/dmp-frontend/src/index.html +++ b/dmp-frontend/src/index.html @@ -51,6 +51,7 @@ + diff --git a/dmp-frontend/src/styles.css b/dmp-frontend/src/styles.css index 182f7f681..67f8ba2b1 100644 --- a/dmp-frontend/src/styles.css +++ b/dmp-frontend/src/styles.css @@ -71,4 +71,33 @@ body { .cursor-link{ cursor: pointer; } - \ No newline at end of file + + /* dashboard */ + + .card{ + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.14); + border-radius: 6px; + color: rgba(0,0,0, 0.87); + background: #fff; + } + + .card-raised{ + box-shadow: 0 10px 30px -12px rgba(0, 0, 0, 0.42), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); + } + + @media screen and (max-width: 990px){ + #sidebar, #nav-right, #nav-left-button{ + display: none; + } + #menu{ + display: inline; + } + #main-panel{ + padding-left: 0; + -webkit-transition: all 400ms; + -moz-transition: all 400ms; + -ms-transition: all 400ms; + -o-transition: all 400ms; + transition: all 400ms; + } + } \ No newline at end of file