From bdf4a76a21dd6a9b05a8fea7c50ffc1e98f15095 Mon Sep 17 00:00:00 2001 From: Ioannis Kalyvas Date: Wed, 21 Mar 2018 15:15:06 +0200 Subject: [PATCH] no message --- .../eudat/data/query/PaginationService.java | 58 ++++++++ .../data/query/definition/Collector.java | 7 +- .../data/query/definition/CriteriaQuery.java | 2 +- .../eu/eudat/data/query/definition/Query.java | 32 +++- .../query/definition/TableCriteriaQuery.java | 4 +- .../data/query/definition/TableQuery.java | 9 +- .../DatasetWizardAutocompleteRequest.java | 2 +- .../DatasetProfileAutocompleteRequest.java | 2 +- ...tasetProfileWizardAutocompleteRequest.java | 2 +- .../DataManagementPlanCriteriaRequest.java | 2 +- .../item/project/ProjectCriteriaRequest.java | 5 +- .../researcher/ResearcherCriteriaRequest.java | 2 +- .../item/userinfo/UserInfoRequestItem.java | 4 +- .../dmp/DataManagementPlanTableRequest.java | 14 +- .../managers/DataManagementPlanManager.java | 2 +- dmp-frontend/src/app/app.module.ts | 3 +- .../listing/dataset-listing.component.html | 8 +- dmp-frontend/src/app/dmps/dmps.routes.ts | 1 + .../dmps/listing/dmp-listing.component.html | 9 +- .../app/dmps/listing/dmp-listing.component.ts | 30 ++-- .../src/app/homepage/homepage.component.html | 118 +++------------ .../src/app/models/files/ContentFile.ts | 16 ++ .../models/projects/ProjectListingModel.ts | 23 ++- .../src/app/models/projects/ProjectModel.ts | 12 +- .../editor/project-editor.component.html | 18 ++- .../editor/project-editor.component.scss | 9 ++ .../editor/project-editor.component.ts | 37 ++--- .../listing/project-listing.component.html | 16 ++ .../listing/project-listing.component.ts | 13 +- .../app/services/dataset-profile.service.ts | 2 +- .../files/project-file-uploader.service.ts | 34 +++++ .../user-reference-data.service.ts | 4 + .../dmp-criteria.component.html | 2 +- .../dmp-criteria.component.ts | 38 ++--- .../components/file-uploader/FileUploader.ts | 6 + .../file-uploader.component.html | 11 ++ .../file-uploader/file-uploader.component.ts | 57 +++++++ .../components/url-listing/UrlListingItem.ts | 14 ++ .../url-listing/url-listing.component.html | 4 + .../url-listing/url-listing.component.ts | 19 +++ .../app/shared/material/material.module.ts | 3 +- .../pipes/ngforlimit/ngforlimit.pipe.ts | 10 ++ dmp-frontend/src/app/shared/shared.module.ts | 13 +- .../admin-login/admin-login.component.html | 34 +++++ .../admin-login/admin-login.component.scss | 139 ++++++++++++++++++ .../admin-login/admin-login.component.ts | 36 +++++ .../src/app/user-management/login.module.ts | 7 +- .../src/app/user-management/login.routes.ts | 2 + .../login/login.component.html | 1 + .../app/users/activity/RecentActivityTypes.ts | 5 + .../activity/recent-activity.component.html | 21 +++ .../activity/recent-activity.component.scss | 0 .../activity/recent-activity.component.ts | 60 ++++++++ dmp-frontend/src/app/users/users.module.ts | 7 +- .../src/app/utilities/JsonSerializer.ts | 6 +- dmp-frontend/src/assets/lang/en.json | 67 +++++---- 56 files changed, 833 insertions(+), 229 deletions(-) create mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/query/PaginationService.java create mode 100644 dmp-frontend/src/app/models/files/ContentFile.ts create mode 100644 dmp-frontend/src/app/services/files/project-file-uploader.service.ts create mode 100644 dmp-frontend/src/app/shared/components/file-uploader/FileUploader.ts create mode 100644 dmp-frontend/src/app/shared/components/file-uploader/file-uploader.component.html create mode 100644 dmp-frontend/src/app/shared/components/file-uploader/file-uploader.component.ts create mode 100644 dmp-frontend/src/app/shared/components/url-listing/UrlListingItem.ts create mode 100644 dmp-frontend/src/app/shared/components/url-listing/url-listing.component.html create mode 100644 dmp-frontend/src/app/shared/components/url-listing/url-listing.component.ts create mode 100644 dmp-frontend/src/app/shared/pipes/ngforlimit/ngforlimit.pipe.ts create mode 100644 dmp-frontend/src/app/user-management/admin-login/admin-login.component.html create mode 100644 dmp-frontend/src/app/user-management/admin-login/admin-login.component.scss create mode 100644 dmp-frontend/src/app/user-management/admin-login/admin-login.component.ts create mode 100644 dmp-frontend/src/app/users/activity/RecentActivityTypes.ts create mode 100644 dmp-frontend/src/app/users/activity/recent-activity.component.html create mode 100644 dmp-frontend/src/app/users/activity/recent-activity.component.scss create mode 100644 dmp-frontend/src/app/users/activity/recent-activity.component.ts diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/PaginationService.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/PaginationService.java new file mode 100644 index 000000000..3ab1cab40 --- /dev/null +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/PaginationService.java @@ -0,0 +1,58 @@ +package eu.eudat.data.query; + +import eu.eudat.data.query.definition.TableQuery; +import eu.eudat.data.query.definition.helpers.ColumnOrderings; +import eu.eudat.data.query.definition.helpers.Ordering; +import eu.eudat.queryable.QueryableList; +import eu.eudat.queryable.queryableentity.DataEntity; + +import java.util.Arrays; +import java.util.Collection; + +/** + * Created by ikalyvas on 3/21/2018. + */ +public class PaginationService { + public static QueryableList applyPaging(QueryableList items, TableQuery tableRequest) throws Exception { + if (tableRequest.getOrderings() != null) applyOrder(items, tableRequest); + if (tableRequest.getLength() != null) items.take(tableRequest.getLength()); + if (tableRequest.getOffset() != null) items.skip(tableRequest.getOffset()); + if (tableRequest.getSelection() != null && tableRequest.getSelection().getFields() != null && tableRequest.getSelection().getFields().length > 0) + items.withFields(Arrays.asList(tableRequest.getSelection().getFields())); + return items; + } + + public static void applyOrder(QueryableList items, TableQuery tableRequest) throws Exception { + ColumnOrderings columnOrderings = tableRequest.getOrderings(); + for (Ordering ordering : columnOrderings.getFieldOrderings()) { + if (ordering.getOrderByType() == Ordering.OrderByType.ASC) + applyAscOrder(items, ordering); + if (ordering.getOrderByType() == Ordering.OrderByType.DESC) { + applyDescOrder(items, ordering); + } + } + return; + } + + private static void applyAscOrder(QueryableList items, Ordering ordering) { + if (ordering.getColumnType() == Ordering.ColumnType.COUNT) { + items.orderBy((builder, root) -> builder.asc(builder.size(root.get(ordering.getFieldName())))); + } else if (ordering.getColumnType() == Ordering.ColumnType.JOIN_COLUMN) { + String[] fields = ordering.getFieldName().split(":"); + items.orderBy((builder, root) -> builder.asc(root.get(fields[0]).get(fields[1]))); + } else { + items.orderBy((builder, root) -> builder.asc(root.get(ordering.getFieldName()))); + } + } + + private static void applyDescOrder(QueryableList items, Ordering ordering) { + if (ordering.getColumnType() == Ordering.ColumnType.COUNT) { + items.orderBy((builder, root) -> builder.desc(builder.size(root.get(ordering.getFieldName())))); + } else if (ordering.getColumnType() == Ordering.ColumnType.JOIN_COLUMN) { + String[] fields = ordering.getFieldName().split(":"); + items.orderBy((builder, root) -> builder.desc(root.get(fields[0]).get(fields[1]))); + } else { + items.orderBy((builder, root) -> builder.desc(root.get(ordering.getFieldName()))); + } + } +} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/Collector.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/Collector.java index 366f6b511..d6a301527 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/Collector.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/Collector.java @@ -6,6 +6,9 @@ import eu.eudat.queryable.queryableentity.DataEntity; /** * Created by ikalyvas on 3/21/2018. */ -public interface Collector, K> { - QueryableList collect(); +public interface Collector { + QueryableList collect() throws Exception; + + QueryableList collect(QueryableList repo) throws Exception; + } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/CriteriaQuery.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/CriteriaQuery.java index 72feba21c..f8ec01d33 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/CriteriaQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/CriteriaQuery.java @@ -7,7 +7,7 @@ import eu.eudat.queryable.queryableentity.DataEntity; /** * Created by ikalyvas on 3/21/2018. */ -public interface CriteriaQuery, T extends DataEntity, K> extends Collector { +public interface CriteriaQuery, T extends DataEntity> extends Collector { QueryableList applyCriteria(); } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/Query.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/Query.java index fdaae9ad5..f4596cbd1 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/Query.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/Query.java @@ -4,10 +4,32 @@ import eu.eudat.data.dao.criteria.Criteria; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.queryableentity.DataEntity; -public abstract class Query, T extends DataEntity, K> implements CriteriaQuery { +public abstract class Query, T extends DataEntity> implements CriteriaQuery { private C criteria; private QueryableList query; + public static class QueryBuilder, T extends DataEntity, Q extends Query> { + private C criteria; + private QueryableList query; + + public QueryBuilder criteria(C criteria) { + this.criteria = criteria; + return this; + } + + public QueryBuilder query(QueryableList query) { + this.query = query; + return this; + } + + public Q build(Class qClass) throws IllegalAccessException, InstantiationException { + Q q = qClass.newInstance(); + q.setCriteria(criteria); + q.setQuery(query); + return q; + } + } + public QueryableList getQuery() { return query; } @@ -25,7 +47,13 @@ public abstract class Query, T extends DataEntity, K } @Override - public QueryableList collect() { + public QueryableList collect() throws Exception { + return this.applyCriteria(); + } + + @Override + public QueryableList collect(QueryableList repo) throws Exception { + this.query = repo; return this.applyCriteria(); } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/TableCriteriaQuery.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/TableCriteriaQuery.java index 316dc4ed4..4dc6d43e2 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/TableCriteriaQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/TableCriteriaQuery.java @@ -7,6 +7,6 @@ import eu.eudat.queryable.queryableentity.DataEntity; /** * Created by ikalyvas on 3/21/2018. */ -public interface TableCriteriaQuery, T extends DataEntity, K> extends CriteriaQuery { - QueryableList applyPaging(QueryableList items); +public interface TableCriteriaQuery, T extends DataEntity> extends CriteriaQuery { + QueryableList applyPaging(QueryableList items) throws Exception; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/TableQuery.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/TableQuery.java index b6763e927..c3f9fe2a3 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/TableQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/definition/TableQuery.java @@ -8,7 +8,7 @@ import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.queryableentity.DataEntity; -public abstract class TableQuery, T extends DataEntity, K> extends Query implements TableCriteriaQuery { +public abstract class TableQuery, T extends DataEntity, K> extends Query implements TableCriteriaQuery { private ColumnOrderings orderings; private SelectionFields selection; private Integer length; @@ -47,7 +47,12 @@ public abstract class TableQuery, T extends DataEntity collect() { + public QueryableList collect() throws Exception { return this.applyPaging(super.collect()); } + + @Override + public QueryableList collect(QueryableList repo) throws Exception { + return this.applyPaging(super.collect(repo)); + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/dataset/DatasetWizardAutocompleteRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/dataset/DatasetWizardAutocompleteRequest.java index 32021c486..5b0316ee7 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/dataset/DatasetWizardAutocompleteRequest.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/dataset/DatasetWizardAutocompleteRequest.java @@ -8,7 +8,7 @@ import eu.eudat.queryable.QueryableList; import java.util.UUID; -public class DatasetWizardAutocompleteRequest extends Query { +public class DatasetWizardAutocompleteRequest extends Query { @Override public QueryableList applyCriteria() { QueryableList query = this.getQuery().where((builder, root) -> builder.or(builder.equal(root.get("creator"), this.getCriteria().getUserInfo()), builder.isMember(this.getCriteria().getUserInfo(), root.get("users")))); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/datasetprofile/DatasetProfileAutocompleteRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/datasetprofile/DatasetProfileAutocompleteRequest.java index 444b568db..06999e09f 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/datasetprofile/DatasetProfileAutocompleteRequest.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/datasetprofile/DatasetProfileAutocompleteRequest.java @@ -7,7 +7,7 @@ import eu.eudat.queryable.QueryableList; import java.util.UUID; -public class DatasetProfileAutocompleteRequest extends Query { +public class DatasetProfileAutocompleteRequest extends Query { @Override public QueryableList applyCriteria() { QueryableList query = this.getQuery(); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/datasetprofile/DatasetProfileWizardAutocompleteRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/datasetprofile/DatasetProfileWizardAutocompleteRequest.java index 2b2dd6e14..2d7c0b393 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/datasetprofile/DatasetProfileWizardAutocompleteRequest.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/datasetprofile/DatasetProfileWizardAutocompleteRequest.java @@ -7,7 +7,7 @@ import eu.eudat.queryable.QueryableList; import java.util.UUID; -public class DatasetProfileWizardAutocompleteRequest extends Query { +public class DatasetProfileWizardAutocompleteRequest extends Query { @Override public QueryableList applyCriteria() { return null; diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/dmp/DataManagementPlanCriteriaRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/dmp/DataManagementPlanCriteriaRequest.java index c2f398ac5..1b88b8872 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/dmp/DataManagementPlanCriteriaRequest.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/dmp/DataManagementPlanCriteriaRequest.java @@ -11,7 +11,7 @@ import java.util.Arrays; import java.util.UUID; -public class DataManagementPlanCriteriaRequest extends Query { +public class DataManagementPlanCriteriaRequest extends Query { @Override public QueryableList applyCriteria() { QueryableList query = this.getQuery(); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/project/ProjectCriteriaRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/project/ProjectCriteriaRequest.java index 0e5e43d8a..6c53e19f9 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/project/ProjectCriteriaRequest.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/project/ProjectCriteriaRequest.java @@ -7,7 +7,10 @@ import eu.eudat.queryable.QueryableList; import java.util.UUID; -public class ProjectCriteriaRequest extends Query { +public class ProjectCriteriaRequest extends Query { + private ProjectCriteriaRequest() { + } + @Override public QueryableList applyCriteria() { QueryableList query = this.getQuery(); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/researcher/ResearcherCriteriaRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/researcher/ResearcherCriteriaRequest.java index 55c320690..5e80f3cbc 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/researcher/ResearcherCriteriaRequest.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/researcher/ResearcherCriteriaRequest.java @@ -10,7 +10,7 @@ import java.util.UUID; /** * Created by ikalyvas on 3/6/2018. */ -public class ResearcherCriteriaRequest extends Query { +public class ResearcherCriteriaRequest extends Query { @Override public QueryableList applyCriteria() { QueryableList query = this.getQuery(); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java index ceb7165c8..de2386979 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java @@ -5,10 +5,8 @@ import eu.eudat.data.entities.UserInfo; import eu.eudat.data.query.definition.Query; import eu.eudat.queryable.QueryableList; -import java.util.UUID; - -public class UserInfoRequestItem extends Query { +public class UserInfoRequestItem extends Query { @Override public QueryableList applyCriteria() { QueryableList users = this.getQuery(); diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/dmp/DataManagementPlanTableRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/dmp/DataManagementPlanTableRequest.java index b10857f03..06d91959f 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/dmp/DataManagementPlanTableRequest.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/dmp/DataManagementPlanTableRequest.java @@ -2,7 +2,7 @@ package eu.eudat.data.query.items.table.dmp; import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; import eu.eudat.data.entities.DMP; -import eu.eudat.data.query.definition.Query; +import eu.eudat.data.query.PaginationService; import eu.eudat.data.query.definition.TableQuery; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; @@ -11,14 +11,9 @@ import eu.eudat.queryable.types.SelectionField; import java.util.Arrays; import java.util.UUID; -public class DataManagementPlanTableRequest extends TableQuery { +public class DataManagementPlanTableRequest extends TableQuery { @Override public QueryableList applyCriteria() { - return null; - } - - @Override - public QueryableList applyPaging(QueryableList items) { QueryableList query = this.getQuery(); if (this.getCriteria().getLike() != null && !this.getCriteria().getLike().isEmpty()) query.where((builder, root) -> builder.like(root.get("label"), "%" + this.getCriteria().getLike() + "%")); @@ -35,4 +30,9 @@ public class DataManagementPlanTableRequest extends TableQuery builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue())); return query; } + + @Override + public QueryableList applyPaging(QueryableList items) throws Exception { + return PaginationService.applyPaging(items, this); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/managers/DataManagementPlanManager.java index 3f690362e..527e6c878 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/managers/DataManagementPlanManager.java @@ -129,7 +129,7 @@ public class DataManagementPlanManager { ResearcherCriteria criteria = new ResearcherCriteria(); criteria.setLike(researcher.getReference()); List entries = researcherRepository.getWithCriteria(criteria).toList(); - if (entries != null && !entries.isEmpty()) researcher.setId(entries.get(0).getId()); + if (entries != null && !entries.isEmpty()) researcher.setId(entries.get(0).getId ()); else researcher = researcherRepository.createOrUpdate(researcher); } } diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index 41094d9eb..3a8322299 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -34,12 +34,14 @@ import { WelcomepageComponent } from '@app/welcomepage/welcomepage.component'; import { HelpContentService } from './services/help-content/help-content.service'; import { HelpContentComponent } from './help-content/help-content.component'; import { B2AccessLoginComponent } from './user-management/login/b2access/b2access-login.component'; +import { RecentActivityComponent } from '@app/users/activity/recent-activity.component'; @NgModule({ declarations: [ AppComponent, PageNotFoundComponent, HomepageComponent, + RecentActivityComponent, WelcomepageComponent, HelpContentComponent, B2AccessLoginComponent @@ -53,7 +55,6 @@ import { B2AccessLoginComponent } from './user-management/login/b2access/b2acces loginProviders: [ LoginOptions.facebookOauth, LoginOptions.googleOauth, - LoginOptions.nativeLogin, LoginOptions.linkedInOauth, LoginOptions.twitterOauth, LoginOptions.b2Access diff --git a/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html index e438c4a05..81f0bc2e6 100644 --- a/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html +++ b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html @@ -67,11 +67,9 @@ {{'DATASET-LISTING.COLUMNS.ACTIONS' | translate}} - + - - - + + + @@ -70,7 +69,7 @@ - + diff --git a/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts index d1f8082e9..0cc765c81 100644 --- a/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts @@ -14,6 +14,7 @@ import { DataSource } from "@angular/cdk/table"; import { Observable } from "rxjs/Observable"; import { DataManagementPlanRoutes } from '@app/dmps/dmps.routes'; import { DatasetRoutes } from '@app/datasets/dataset.routes'; +import { ProjectModel } from '@app/models/projects/ProjectModel'; @@ -33,7 +34,8 @@ export class DataManagementPlanListingComponent implements OnInit { dataSource: DataManagementPlanDataSource | null; displayedColumns: String[] = ['name', 'project', 'creationTime', 'organisations', 'version', 'numOfDatasets', 'actions']; itemId: string; - + projectId: string; + showProject: boolean; constructor( private dataManagementPlanService: DataManagementPlanService, private router: Router, @@ -47,10 +49,20 @@ export class DataManagementPlanListingComponent implements OnInit { ngOnInit() { this.route.params.subscribe(params => { - this.itemId = params['groupId']; - this.criteria.setCriteria(this.getDefaultCriteria()); - this.refresh(); - this.criteria.setRefreshCallback(() => this.refresh()); + if (params["projectId"]) { + this.projectId = params["projectId"]; + this.showProject = false; + let project = new ProjectModel(); + project.id = this.projectId; + this.criteria.setCriteria({ like: null, projects: [project], groupIds: null, allVersions: false }) + this.refresh(); + this.criteria.setRefreshCallback(() => this.refresh()); + } else { + this.itemId = params['groupId']; + this.criteria.setCriteria(this.getDefaultCriteria()); + this.refresh(); + this.criteria.setRefreshCallback(() => this.refresh()); + } }) } @@ -67,12 +79,12 @@ export class DataManagementPlanListingComponent implements OnInit { this.router.navigate(['/datasets/new/' + rowId]); } - showDatasets(rowId: String, rowLabel:String) { - this.router.navigate(['/datasets/dmp/' + rowId, {dmpLabel:rowLabel}]); + showDatasets(rowId: String, rowLabel: String) { + this.router.navigate(['/datasets/dmp/' + rowId, { dmpLabel: rowLabel }]); } - newVersion(rowId: String, rowLabel:String) { - this.router.navigate(['/dmps/new_version/' + rowId, {dmpLabel:rowLabel}]); + newVersion(rowId: String, rowLabel: String) { + this.router.navigate(['/dmps/new_version/' + rowId, { dmpLabel: rowLabel }]); } viewVersions(rowId: String) { diff --git a/dmp-frontend/src/app/homepage/homepage.component.html b/dmp-frontend/src/app/homepage/homepage.component.html index 3524b760a..7451d652f 100644 --- a/dmp-frontend/src/app/homepage/homepage.component.html +++ b/dmp-frontend/src/app/homepage/homepage.component.html @@ -1,99 +1,29 @@
- -
-
-
- - -
-
- - -
-
- - -
-
+
+
+
+ +
- - - - - - - +
+
+ +
+
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/models/files/ContentFile.ts b/dmp-frontend/src/app/models/files/ContentFile.ts new file mode 100644 index 000000000..7c61fcce5 --- /dev/null +++ b/dmp-frontend/src/app/models/files/ContentFile.ts @@ -0,0 +1,16 @@ +import { Serializable } from "@app/models/Serializable"; + +export class ContentFile implements Serializable{ + + private filename: string; + private id: string; + private location: string; + private type: string; + fromJSONObject(item: any): ContentFile { + this.filename = item.filename; + this.id = item.id; + this.location = item.location + this.type = item.type + return this; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/projects/ProjectListingModel.ts b/dmp-frontend/src/app/models/projects/ProjectListingModel.ts index 003fc5461..50c76b96e 100644 --- a/dmp-frontend/src/app/models/projects/ProjectListingModel.ts +++ b/dmp-frontend/src/app/models/projects/ProjectListingModel.ts @@ -1,4 +1,8 @@ import { Serializable } from "../Serializable"; +import { ContentFile } from "@app/models/files/ContentFile"; +import { JsonSerializer } from "@app/utilities/JsonSerializer"; +import { UrlListingComponent } from "@app/shared/components/url-listing/url-listing.component"; +import { UrlListingItem } from "@app/shared/components/url-listing/UrlListingItem"; export class ProjectListingModel implements Serializable { public id: String; @@ -10,18 +14,21 @@ export class ProjectListingModel implements Serializable { public startDate: Date; public endDate: Date; public description: String; + public files: ContentFile[] = new Array(); + public dmps: UrlListingItem[] = new Array(); fromJSONObject(item: any): ProjectListingModel { this.id = item.id; this.label = item.label; - this.abbreviation = item.abbreviation; - this.reference = item.reference; - this.uri = item.uri; - this.status = item.status; - this.startDate = new Date(item.startdate); - this.endDate = new Date(item.enddate); - this.description = item.description; - + this.abbreviation = item.abbreviation; + this.reference = item.reference; + this.uri = item.uri; + this.status = item.status; + this.startDate = new Date(item.startdate); + this.endDate = new Date(item.enddate); + this.description = item.description; + this.files = JsonSerializer.fromJSONArray(item.files, ContentFile) + this.dmps = JsonSerializer.fromJSONArray(item.dmps,UrlListingItem) return this; } } \ No newline at end of file diff --git a/dmp-frontend/src/app/models/projects/ProjectModel.ts b/dmp-frontend/src/app/models/projects/ProjectModel.ts index 49e51c22d..74cc07c1f 100644 --- a/dmp-frontend/src/app/models/projects/ProjectModel.ts +++ b/dmp-frontend/src/app/models/projects/ProjectModel.ts @@ -4,6 +4,8 @@ import { FormGroup, FormBuilder, FormControl, Validators } from "@angular/forms" import { BackendErrorValidator } from "../../utilities/validators/BackendErrorValidator"; import { BaseErrorModel } from "../error/BaseErrorModel"; import { Status } from "../Status"; +import { ContentFile } from "@app/models/files/ContentFile"; +import { JsonSerializer } from "@app/utilities/JsonSerializer"; export class ProjectModel implements Serializable { public id: String; @@ -15,7 +17,8 @@ export class ProjectModel implements Serializable { public startDate: Date; public endDate: Date; public description: String; - + public contentUrl: string; + public files: ContentFile[] = new Array(); public errorModel: BaseErrorModel = new BaseErrorModel(); fromJSONObject(item: any): ProjectModel { @@ -28,7 +31,8 @@ export class ProjectModel implements Serializable { this.startDate = new Date(item.startDate); this.endDate = new Date(item.endDate); this.description = item.description; - + this.contentUrl = item.contentUrl; + this.files = JsonSerializer.fromJSONArray(item.files,ContentFile) return this; } @@ -43,7 +47,8 @@ export class ProjectModel implements Serializable { status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], startDate: [{ value: this.startDate, disabled: disabled }, context.getValidation('startDate').validators], - endDate: [{ value: this.endDate, disabled: disabled }, context.getValidation('endDate').validators] + endDate: [{ value: this.endDate, disabled: disabled }, context.getValidation('endDate').validators], + files: [{ value: this.files, disabled: disabled }, context.getValidation('files').validators] }); return formGroup; @@ -59,6 +64,7 @@ export class ProjectModel implements Serializable { baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); baseContext.validation.push({ key: 'startDate', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'startDate')] }); baseContext.validation.push({ key: 'endDate', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'endDate')] }); + baseContext.validation.push({ key: 'files', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'files')] }); return baseContext; } diff --git a/dmp-frontend/src/app/projects/editor/project-editor.component.html b/dmp-frontend/src/app/projects/editor/project-editor.component.html index bd2ef3aa8..c645fc3c9 100644 --- a/dmp-frontend/src/app/projects/editor/project-editor.component.html +++ b/dmp-frontend/src/app/projects/editor/project-editor.component.html @@ -1,8 +1,11 @@
- {{'PROJECT-EDITOR.TITLE.NEW' | translate}} - {{formGroup.get('label').value}} + + {{'PROJECT-EDITOR.TITLE.NEW' | translate}} + {{formGroup.get('label').value}} + + @@ -56,7 +59,18 @@ {{errorModel.description}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} +

{{'PROJECT-EDITOR.FIELDS.LOGO' | translate}}

+ + + + + +
+ + + +
diff --git a/dmp-frontend/src/app/projects/editor/project-editor.component.scss b/dmp-frontend/src/app/projects/editor/project-editor.component.scss index 31e8a8de3..4b5eda25a 100644 --- a/dmp-frontend/src/app/projects/editor/project-editor.component.scss +++ b/dmp-frontend/src/app/projects/editor/project-editor.component.scss @@ -6,6 +6,15 @@ table-layout: fixed; } + +.logo-table { + table-layout: fixed; + display: inline-block; + td{ + padding: 3px; + } +} + .table-card .mat-grid-tile { background: rgba(0, 0, 0, 0.32); } diff --git a/dmp-frontend/src/app/projects/editor/project-editor.component.ts b/dmp-frontend/src/app/projects/editor/project-editor.component.ts index d7817f28b..a10f4b8cb 100644 --- a/dmp-frontend/src/app/projects/editor/project-editor.component.ts +++ b/dmp-frontend/src/app/projects/editor/project-editor.component.ts @@ -12,6 +12,8 @@ import { FormGroup, AbstractControl, FormControl, FormArray } from "@angular/for import { SnackBarNotificationComponent } from "../../shared/components/notificaiton/snack-bar-notification.component"; import { BaseErrorModel } from "../../models/error/BaseErrorModel"; import { TdDialogService } from "@covalent/core"; +import { ProjectFileUploaderService } from "@app/services/files/project-file-uploader.service"; +import { HostConfiguration } from "@app/app.constants"; @@ -19,7 +21,7 @@ import { TdDialogService } from "@covalent/core"; selector: 'app-project-editor-component', templateUrl: 'project-editor.component.html', styleUrls: ['./project-editor.component.scss'], - providers: [ProjectService], + providers: [ProjectService, ProjectFileUploaderService], encapsulation: ViewEncapsulation.None }) export class ProjectEditorComponent implements AfterViewInit { @@ -27,14 +29,15 @@ export class ProjectEditorComponent implements AfterViewInit { isNew = true; project: ProjectModel; formGroup: FormGroup = null; - + host = HostConfiguration.Server; constructor( private projectService: ProjectService, private route: ActivatedRoute, public snackBar: MatSnackBar, public router: Router, public language: TranslateService, - private dialogService: TdDialogService + private dialogService: TdDialogService, + private uploaderService: ProjectFileUploaderService ) { } @@ -135,18 +138,18 @@ export class ProjectEditorComponent implements AfterViewInit { } public validateAllFormFields(formControl: AbstractControl) { - if (formControl instanceof FormControl) { - formControl.updateValueAndValidity({ emitEvent: false }) - } else if (formControl instanceof FormGroup) { - Object.keys(formControl.controls).forEach(item => { - const control = formControl.get(item); - this.validateAllFormFields(control); - }) - } - else if (formControl instanceof FormArray) { - formControl.controls.forEach(item => { - this.validateAllFormFields(item); - }) - } - } + if (formControl instanceof FormControl) { + formControl.updateValueAndValidity({ emitEvent: false }) + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.validateAllFormFields(control); + }) + } + else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.validateAllFormFields(item); + }) + } + } } \ No newline at end of file diff --git a/dmp-frontend/src/app/projects/listing/project-listing.component.html b/dmp-frontend/src/app/projects/listing/project-listing.component.html index 509047b02..0ced8c255 100644 --- a/dmp-frontend/src/app/projects/listing/project-listing.component.html +++ b/dmp-frontend/src/app/projects/listing/project-listing.component.html @@ -9,6 +9,13 @@ + + + {{'PROJECT-LISTING.COLUMNS.AVATAR' | translate}} + + + + {{'PROJECT-LISTING.COLUMNS.NAME' | translate}} @@ -33,6 +40,15 @@ {{row.endDate | date:'shortDate'}} + + + {{'PROJECT-LISTING.COLUMNS.DMPS' | translate}} + + + + + +