From fadaa9bbcbf7853e1fa42eebf28768ed639634e2 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Thu, 23 May 2019 12:40:24 +0300 Subject: [PATCH 1/7] Adds missing breadcrumbs. --- .../dataset-profile-editor.component.ts | 8 + .../dataset-profile-listing.component.ts | 16 +- .../editor/dmp-profile-editor.component.ts | 23 +- .../listing/dmp-profile-listing.component.ts | 10 +- .../user/listing/user-listing.component.ts | 7 + .../dataset-create-wizard.component.ts | 2 +- .../dataset-wizard.component.ts | 10 +- .../listing/dataset-listing.component.ts | 14 +- .../app/ui/dmp/editor/dmp-editor.component.ts | 18 +- .../ui/dmp/listing/dmp-listing.component.ts | 19 +- .../explore-dataset-listing.component.ts | 8 +- .../explore-dmp-listing.component.ts | 10 +- .../misc/breadcrumb/breadcrumb.component.ts | 12 +- .../editor/project-editor.component.ts | 26 +- .../dmp-editor/dmp-editor-wizard.component.ts | 248 ++++++++-------- .../project-editor-wizard.component.ts | 274 +++++++++--------- .../quick-wizard-editor.component.ts | 13 +- dmp-frontend/src/assets/i18n/en.json | 14 +- 18 files changed, 405 insertions(+), 327 deletions(-) diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts index 213f44b86..fe68bd513 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts @@ -17,6 +17,8 @@ import { DatasetProfileEditorModel } from './dataset-profile-editor-model'; import { ConfirmationDialogComponent } from '../../../../library/confirmation-dialog/confirmation-dialog.component'; import { DatasetProfileEnum } from '../../../../core/common/enum/dataset-profile'; import * as FileSaver from 'file-saver'; +import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; +import { Observable } from 'rxjs'; //import * as data from 'src/assets/resources/skipDisable.json'; const skipDisable: any[] = require('../../../../../assets/resources/skipDisable.json'); @@ -36,6 +38,7 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn private datasetProfileId: string; newVersionId: string; dataWizardModel: DatasetWizardModel; + breadCrumbs: Observable; @ViewChild('stepper') stepper: MatHorizontalStepper; viewOnly = false; @@ -82,6 +85,11 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn }, error => this.onCallbackError(error) ); + this.breadCrumbs = Observable.of([{ + parentComponentName: 'DatasetProfileListingComponent', + label: this.language.instant('NAV-BAR.TEMPLATE'), + url: '/dataset-profiles/' + this.datasetProfileId + }]); } else if (cloneId != null) { this.datasetProfileService.clone(cloneId) .pipe(map(data => data as DatasetProfile), takeUntil(this._destroyed)) diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts index 0b3a20c04..5b6db04b5 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts @@ -15,6 +15,7 @@ import { DatasetProfileCriteriaComponent } from './criteria/dataset-profile.comp import { error } from 'selenium-webdriver'; import { UiNotificationService, SnackBarNotificationLevel } from '../../../../core/services/notification/ui-notification-service'; import { TranslateService } from '@ngx-translate/core'; +import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; @Component({ selector: 'app-dataset-profile-listing-component', @@ -27,6 +28,7 @@ export class DatasetProfileListingComponent extends BaseComponent implements OnI @ViewChild(MatSort) sort: MatSort; @ViewChild(DatasetProfileCriteriaComponent) criteria: DatasetProfileCriteriaComponent; + breadCrumbs: Observable; dataSource: DatasetDataSource | null; displayedColumns: String[] = ['label', 'description', 'created', 'actions']; pageEvent: PageEvent; @@ -55,16 +57,24 @@ export class DatasetProfileListingComponent extends BaseComponent implements OnI this.criteria.setCriteria(this.getDefaultCriteria()); this.refresh(); this.criteria.setRefreshCallback(() => this.refresh()); + // this.breadCrumbs = Observable.of([{ + // parentComponentName: null, + // label: this.language.instant('NAV-BAR.DATASET-TEMPLATES'), + // url: 'plans/edit/' + this.dmpId + // }]); } else { this.itemId = params['groupId']; - if (this.itemId) { const datasetProfileLabel = this.route.snapshot.queryParams.groupLabel; } - this.criteria.setCriteria(this.getDefaultCriteria()); this.refresh(); this.criteria.setRefreshCallback(() => this.refresh()); + this.breadCrumbs = Observable.of([{ + parentComponentName: null, + label: this.language.instant('NAV-BAR.DATASET-TEMPLATES'), + url: '/dataset-profiles' + }]); } }); } @@ -75,7 +85,7 @@ export class DatasetProfileListingComponent extends BaseComponent implements OnI .subscribe(data => { this.titlePrefix = data.label; } - ); + ); } refresh() { diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.ts b/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.ts index d76f07c83..05b129b0b 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/editor/dmp-profile-editor.component.ts @@ -15,6 +15,8 @@ import { DmpProfileService } from '../../../../core/services/dmp/dmp-profile.ser import { SnackBarNotificationLevel, UiNotificationService } from '../../../../core/services/notification/ui-notification-service'; import { EnumUtils } from '../../../../core/services/utilities/enum-utils.service'; import { DmpProfileEditorModel, DmpProfileFieldEditorModel } from './dmp-profile-editor.model'; +import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; +import { Observable } from 'rxjs'; @Component({ selector: 'app-dmp-profile-editor-component', @@ -29,6 +31,7 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie formGroup: FormGroup = null; host = environment.Server; dmpProfileId: string; + breadCrumbs: Observable; constructor( private dmpProfileService: DmpProfileService, @@ -58,12 +61,22 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie this.formGroup.disable(); this.viewOnly = true } + this.breadCrumbs = Observable.of([{ + parentComponentName: 'DmpProfileListingComponent', + label: this.language.instant('NAV-BAR.TEMPLATE'), + url: '/dmp-profiles/' + this.dmpProfileId + }]); }); } else { this.dmpProfileModel = new DmpProfileEditorModel(); setTimeout(() => { this.formGroup = this.dmpProfileModel.buildForm(); }); + this.breadCrumbs = Observable.of([{ + parentComponentName: 'DmpProfileListingComponent', + label: this.language.instant('NAV-BAR.TEMPLATE'), + url: '/dmp-profiles/' + this.dmpProfileId + }]); } }); } @@ -82,8 +95,8 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie this.dmpProfileService.createDmp(this.formGroup.value) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => this.onCallbackSuccess(), - error => this.onCallbackError(error) + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) ); } @@ -185,8 +198,8 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie this.dmpProfileService.createDmp(this.formGroup.value) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => this.onCallbackSuccess(), - error => this.onCallbackError(error) + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) ); } @@ -226,4 +239,4 @@ export class DmpProfileEditorComponent extends BaseComponent implements AfterVie } return filename; } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/ui/admin/dmp-profile/listing/dmp-profile-listing.component.ts b/dmp-frontend/src/app/ui/admin/dmp-profile/listing/dmp-profile-listing.component.ts index d36c06e13..4353d5e7f 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-profile/listing/dmp-profile-listing.component.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-profile/listing/dmp-profile-listing.component.ts @@ -11,6 +11,7 @@ import { DmpProfileCriteria } from '../../../../core/query/dmp/dmp-profile-crite import { DmpProfileService } from '../../../../core/services/dmp/dmp-profile.service'; import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; import { DmpProfileCriteriaComponent } from './criteria/dmp-profile-criteria.component'; +import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; @Component({ selector: 'app-dmp-profile-listing-component', @@ -28,6 +29,7 @@ export class DmpProfileListingComponent extends BaseComponent implements OnInit pageEvent: PageEvent; titlePrefix: String; dmpId: String; + breadCrumbs: Observable; statuses = [ { value: '0', viewValue: 'Active' }, @@ -44,7 +46,6 @@ export class DmpProfileListingComponent extends BaseComponent implements OnInit super(); } - ngOnInit() { this.route.params .pipe(takeUntil(this._destroyed)) @@ -53,6 +54,11 @@ export class DmpProfileListingComponent extends BaseComponent implements OnInit this.criteria.setCriteria(this.getDefaultCriteria()); this.refresh(); this.criteria.setRefreshCallback(() => this.refresh()); + this.breadCrumbs = Observable.of([{ + parentComponentName: null, + label: this.languageService.instant('NAV-BAR.DMP-TEMPLATES'), + url: '/dmp-profiles' + }]); }); } @@ -73,7 +79,6 @@ export class DmpProfileListingComponent extends BaseComponent implements OnInit // debugger; // this.datasetService.makeDatasetPublic(id).pipe(takeUntil(this._destroyed)).subscribe(); // } - } export class DatasetDataSource extends DataSource { @@ -96,7 +101,6 @@ export class DatasetDataSource extends DataSource { //this._sort.matSortChange ]; - return Observable.merge(...displayDataChanges) .startWith(null) .switchMap(() => { diff --git a/dmp-frontend/src/app/ui/admin/user/listing/user-listing.component.ts b/dmp-frontend/src/app/ui/admin/user/listing/user-listing.component.ts index ee69e25c4..934d66731 100644 --- a/dmp-frontend/src/app/ui/admin/user/listing/user-listing.component.ts +++ b/dmp-frontend/src/app/ui/admin/user/listing/user-listing.component.ts @@ -9,6 +9,7 @@ import { UserService } from '../../../../core/services/user/user.service'; import { SnackBarNotificationComponent } from '../../../../library/notification/snack-bar/snack-bar-notification.component'; import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; import { UserCriteriaComponent } from './criteria/user-criteria.component'; +import { BreadcrumbItem } from '../../../misc/breadcrumb/definition/breadcrumb-item'; export class UsersDataSource extends DataSource { @@ -93,6 +94,7 @@ export class UserListingComponent implements OnInit, AfterViewInit { @ViewChild(MatSort) sort: MatSort; @ViewChild(UserCriteriaComponent) criteria: UserCriteriaComponent; + breadCrumbs: Observable; dataSource: UsersDataSource | null; displayedColumns: String[] = ['name', 'email', 'lastloggedin', 'roles']; @@ -105,6 +107,11 @@ export class UserListingComponent implements OnInit, AfterViewInit { } ngOnInit() { + this.breadCrumbs = Observable.of([{ + parentComponentName: null, + label: this.languageService.instant('NAV-BAR.USERS-BREADCRUMB'), + url: "/users" + }]); //this.refresh(); //called on ngAfterViewInit with default criteria } diff --git a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts index 6d3d46804..c151cc291 100644 --- a/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dataset-create-wizard/dataset-create-wizard.component.ts @@ -47,7 +47,7 @@ export class DatasetCreateWizard extends BaseComponent implements OnInit, IBread this.breadCrumbs = Observable.of([ { parentComponentName: 'Dashboard', - label: 'Dataset description wizard', + label: this.language.instant('NAV-BAR.DATASET-DESCRIPTION-WIZARD'), url: '/datasetcreatewizard' }] ); diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts index 10c8e2bf3..cc305b6cb 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts @@ -136,7 +136,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr this.breadCrumbs = Observable.of([ { parentComponentName: null, - label: 'Datasets', + label: this.language.instant('NAV-BAR.DATASETS'), url: '/datasets', notFoundResolver: [ { @@ -178,7 +178,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr this.breadCrumbs = Observable.of([ { parentComponentName: null, - label: 'Datasets', + label: this.language.instant('NAV-BAR.DATASETS'), url: '/datasets', notFoundResolver: [ { @@ -214,7 +214,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr this.breadCrumbs = Observable.of([ { parentComponentName: null, - label: 'Datasets', + label: this.language.instant('NAV-BAR.DATASETS'), url: '/datasets', notFoundResolver: [ { @@ -260,7 +260,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr this.breadCrumbs = Observable.of([ { parentComponentName: null, - label: 'Datasets', + label: this.language.instant('NAV-BAR.DATASETS'), url: '/datasets', notFoundResolver: [ { @@ -286,7 +286,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr this.breadCrumbs = Observable.of([ { parentComponentName: null, - label: 'Datasets', + label: this.language.instant('NAV-BAR.DATASETS'), url: '/datasets', notFoundResolver: [ { diff --git a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts index 556b7c70a..bd69c5d2f 100644 --- a/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts +++ b/dmp-frontend/src/app/ui/dataset/listing/dataset-listing.component.ts @@ -12,6 +12,7 @@ import { DmpService } from '../../../core/services/dmp/dmp.service'; import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; import { DatasetCriteriaComponent } from './criteria/dataset-criteria.component'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-dataset-listing-component', @@ -38,6 +39,7 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB private router: Router, private route: ActivatedRoute, private dmpService: DmpService, + private language: TranslateService, ) { super(); } @@ -56,7 +58,11 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB this.criteria.setCriteria(this.getDefaultCriteria(dmp)); this.refresh(); this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); - this.breadCrumbs = Observable.of([{ parentComponentName: 'DmpEditorComponent', label: dmp.label, url: 'plans/edit/' + this.dmpId }]); + this.breadCrumbs = Observable.of([{ + parentComponentName: 'DmpEditorComponent', + label: dmp.label, + url: '/plans/edit/' + this.dmpId + }]); if (params['dmpLabel'] !== undefined) { this.titlePrefix = 'for ' + params['dmpLabel']; } @@ -64,7 +70,11 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB this.criteria.setCriteria(this.getDefaultCriteria()); this.refresh(); this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); - this.breadCrumbs = Observable.of([]); + this.breadCrumbs = Observable.of([{ + parentComponentName: null, + label: this.language.instant('NAV-BAR.DATASET-DESCRIPTIONS'), + url: "/datasets" + }]); } if (this.status != null && this.status == 0) { diff --git a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts index 1fae23dda..17ac7f498 100644 --- a/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts +++ b/dmp-frontend/src/app/ui/dmp/editor/dmp-editor.component.ts @@ -155,7 +155,11 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC if (this.isAuthenticated) { // if (!this.isAuthenticated) { const breadCrumbs = []; - breadCrumbs.push({ parentComponentName: null, label: 'DMPs', url: "/plans" }); + breadCrumbs.push({ + parentComponentName: null, + label: this.language.instant('NAV-BAR.DMPS'), + url: "/plans" + }); const breadcrumb = await this.projectService.getSingle(this.dmp.project.id).map(x => ({ label: x.label, url: '/projects/edit/' + x.id }) as BreadcrumbItem).toPromise(); breadCrumbs.push( { @@ -196,7 +200,7 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC this.breadCrumbs = Observable.of([ { parentComponentName: 'DmpListingComponent', - label: 'DMPs', + label: this.language.instant('NAV-BAR.DMPS'), url: 'plans', notFoundResolver: [await this.projectService.getSingle(this.dmp.project.id).map(x => ({ label: x.label, url: '/projects/edit/' + x.id }) as BreadcrumbItem).toPromise()] }] @@ -246,7 +250,7 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC this.breadCrumbs = Observable.of([ { parentComponentName: 'DmpListingComponent', - label: 'DMPs', + label: this.language.instant('NAV-BAR.DMPS'), url: 'plans', } ]); @@ -280,8 +284,8 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC this.dmpService.createDmp(this.formGroup.getRawValue()) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => this.onCallbackSuccess(), - error => this.onCallbackError(error) + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) ); } @@ -373,8 +377,8 @@ export class DmpEditorComponent extends BaseComponent implements OnInit, IBreadC this.dmpService.delete(this.dmp.id) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => { this.onCallbackSuccess() }, - error => this.onDeleteCallbackError(error) + complete => { this.onCallbackSuccess() }, + error => this.onDeleteCallbackError(error) ); } }); diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index 0609e5663..ab774e46a 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -14,6 +14,7 @@ import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; import { DmpInvitationDialogComponent } from '../invitation/dmp-invitation.component'; import { DmpCriteriaComponent } from './criteria/dmp-criteria.component'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-dmp-listing-component', @@ -39,7 +40,8 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread private router: Router, private route: ActivatedRoute, private dialog: MatDialog, - public enumUtils: EnumUtils + public enumUtils: EnumUtils, + private language: TranslateService, ) { super(); } @@ -67,13 +69,18 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread if (this.itemId) { const dmplabel = this.route.snapshot.queryParams.groupLabel; - breadCrumbs.push( - { parentComponentName: null, label: 'DMPs', url: '/plans' }, - ); + breadCrumbs.push({ + parentComponentName: null, + label: this.language.instant('NAV-BAR.DMPS'), + url: '/plans' + }); } - else breadCrumbs.push({ parentComponentName: null, label: 'DMPs', url: "/plans" }) + else breadCrumbs.push({ + parentComponentName: null, + label: this.language.instant('NAV-BAR.DMPS'), + url: "/plans" + }) this.breadCrumbs = Observable.of(breadCrumbs); - this.criteria.setCriteria(this.getDefaultCriteria()); this.refresh(); this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); diff --git a/dmp-frontend/src/app/ui/explore-dataset/explore-dataset-listing.component.ts b/dmp-frontend/src/app/ui/explore-dataset/explore-dataset-listing.component.ts index f35879b75..31f32b832 100644 --- a/dmp-frontend/src/app/ui/explore-dataset/explore-dataset-listing.component.ts +++ b/dmp-frontend/src/app/ui/explore-dataset/explore-dataset-listing.component.ts @@ -10,6 +10,7 @@ import { DatasetService } from '../../core/services/dataset/dataset.service'; import { IBreadCrumbComponent } from '../misc/breadcrumb/definition/IBreadCrumbComponent'; import { BreadcrumbItem } from '../misc/breadcrumb/definition/breadcrumb-item'; import { Observable } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; @Component({ @@ -30,6 +31,7 @@ export class ExploreDatasetListingComponent extends BaseComponent implements OnI constructor( private datasetService: DatasetService, private router: Router, + private language: TranslateService, ) { super(); } @@ -38,7 +40,11 @@ export class ExploreDatasetListingComponent extends BaseComponent implements OnI this.refresh(); const breadCrumbs = []; - breadCrumbs.push({ parentComponentName: null, label: 'PUBLIC DATASETS', url: "/explore" }) + breadCrumbs.push({ + parentComponentName: null, + label: this.language.instant('NAV-BAR.PUBLIC DATASETS'), + url: "/explore" + }) this.breadCrumbs = Observable.of(breadCrumbs); } diff --git a/dmp-frontend/src/app/ui/explore-dmp/explore-dmp-listing.component.ts b/dmp-frontend/src/app/ui/explore-dmp/explore-dmp-listing.component.ts index 9ce83cb22..18a4668e3 100644 --- a/dmp-frontend/src/app/ui/explore-dmp/explore-dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/explore-dmp/explore-dmp-listing.component.ts @@ -10,6 +10,7 @@ import { DmpService } from "../../core/services/dmp/dmp.service"; import { Observable } from "rxjs"; import { IBreadCrumbComponent } from "../misc/breadcrumb/definition/IBreadCrumbComponent"; import { BreadcrumbItem } from "../misc/breadcrumb/definition/breadcrumb-item"; +import { TranslateService } from "@ngx-translate/core"; @Component({ selector: 'app-explore-dmp-listing-component', @@ -29,7 +30,8 @@ export class ExploreDmpListingComponent extends BaseComponent implements OnInit, constructor( private dmpService: DmpService, - private router: Router + private router: Router, + private language: TranslateService, ) { super(); } @@ -38,7 +40,11 @@ export class ExploreDmpListingComponent extends BaseComponent implements OnInit, this.refresh(); const breadCrumbs = []; - breadCrumbs.push({ parentComponentName: null, label: 'PUBLIC DMPS', url: "/explore-plans" }) + breadCrumbs.push({ + parentComponentName: null, + label: this.language.instant('NAV-BAR.PUBLIC DMPS'), + url: "/explore-plans" + }) this.breadCrumbs = Observable.of(breadCrumbs); } diff --git a/dmp-frontend/src/app/ui/misc/breadcrumb/breadcrumb.component.ts b/dmp-frontend/src/app/ui/misc/breadcrumb/breadcrumb.component.ts index a2aeb685e..bbf88b72a 100644 --- a/dmp-frontend/src/app/ui/misc/breadcrumb/breadcrumb.component.ts +++ b/dmp-frontend/src/app/ui/misc/breadcrumb/breadcrumb.component.ts @@ -6,6 +6,7 @@ import { BreadCrumbResolverService } from './service/breadcrumb.service'; import { DashboardService } from '../../../core/services/dashboard/dashboard.service'; import { assertDataInRangeInternal } from '@angular/core/src/render3/util'; import { url } from 'inspector'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-breadcrumb', @@ -22,19 +23,22 @@ export class BreadcrumbComponent implements OnInit { constructor( public activatedRoute: ActivatedRoute, private router: Router, - private breadCrumbService: BreadCrumbResolverService + private breadCrumbService: BreadCrumbResolverService, + private language: TranslateService, ) { - } ngOnInit() { - } buildBreadCrumb(route: ActivatedRoute): Observable { if (this.breadCrumbService.resolve(route)) { return this.breadCrumbService.resolve(route).map(x => { - x.unshift({ label: 'HOME', url: '/home', icon: 'dashboard' }); return x; + x.unshift({ + label: this.language.instant('NAV-BAR.HOME'), + url: '/home', + icon: 'dashboard' + }); return x; }); } return Observable.of([]); diff --git a/dmp-frontend/src/app/ui/project/editor/project-editor.component.ts b/dmp-frontend/src/app/ui/project/editor/project-editor.component.ts index 54754152c..a6cd0c991 100644 --- a/dmp-frontend/src/app/ui/project/editor/project-editor.component.ts +++ b/dmp-frontend/src/app/ui/project/editor/project-editor.component.ts @@ -60,14 +60,18 @@ export class ProjectEditorComponent extends BaseComponent implements OnInit, IBr .subscribe(data => { this.project = new ProjectEditorModel().fromModel(data); this.formGroup = this.project.buildForm(null, this.project.type === ProjectType.External || !this.editMode); - this.breadCrumbs = Observable.of([ - { parentComponentName: 'ProjectListingComponent', label: 'Projects', url: '/projects' }, - ]); + this.breadCrumbs = Observable.of([{ + parentComponentName: 'ProjectListingComponent', + label: this.language.instant('NAV-BAR.PROJECTS'), + url: '/projects' + }]); }); } else { - this.breadCrumbs = Observable.of([ - { parentComponentName: 'ProjectListingComponent', label: 'Projects', url: '/projects' }, - ]); + this.breadCrumbs = Observable.of([{ + parentComponentName: 'ProjectListingComponent', + label: this.language.instant('NAV-BAR.PROJECTS'), + url: '/projects' + }]); this.project = new ProjectEditorModel(); setTimeout(() => { this.formGroup = this.project.buildForm(); @@ -178,8 +182,8 @@ export class ProjectEditorComponent extends BaseComponent implements OnInit, IBr this.formGroup.disable(); } - public imgEnable():boolean{ - if(this.isNew || this.editMode){ + public imgEnable(): boolean { + if (this.isNew || this.editMode) { return true; } return false; @@ -198,7 +202,7 @@ export class ProjectEditorComponent extends BaseComponent implements OnInit, IBr const size: number = event.target.files[0].size; // Get file size. this.sizeError = size > this.maxFileSize; // Checks if file size is valid. const formdata: FormData = new FormData(); - if (!this.sizeError){ + if (!this.sizeError) { if (fileList instanceof FileList) { for (let i = 0; i < fileList.length; i++) { formdata.append('file', fileList[i]); @@ -207,8 +211,8 @@ export class ProjectEditorComponent extends BaseComponent implements OnInit, IBr formdata.append('file', fileList); } this.projectFileUploadService.uploadFile(formdata) - .pipe(takeUntil(this._destroyed)) - .subscribe(files => this.formGroup.get('files').patchValue(files)); + .pipe(takeUntil(this._destroyed)) + .subscribe(files => this.formGroup.get('files').patchValue(files)); } } } diff --git a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts index 5c88d7e41..7d64018f2 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/dmp-editor/dmp-editor-wizard.component.ts @@ -18,148 +18,142 @@ import { DmpEditorWizardModel } from './dmp-editor-wizard-model'; @Component({ - selector: 'app-quick-wizard-dmp-editor-component', - templateUrl: 'dmp-editor-wizard.component.html', - styleUrls: ['./dmp-editor-wizard.component.scss'] + selector: 'app-quick-wizard-dmp-editor-component', + templateUrl: 'dmp-editor-wizard.component.html', + styleUrls: ['./dmp-editor-wizard.component.scss'] }) export class DmpEditorWizardComponent extends BaseComponent implements OnInit, IBreadCrumbComponent { - breadCrumbs: Observable = Observable.of([]); + breadCrumbs: Observable = Observable.of([]); - isNew = true; - dmp: DmpEditorWizardModel; - @Input() formGroup: FormGroup; - @Input() dmpLabel: string; - @Input() datasetFormGroup: FormGroup; - //formGroup: FormGroup = null; - private uiNotificationService: UiNotificationService + isNew = true; + dmp: DmpEditorWizardModel; + @Input() formGroup: FormGroup; + @Input() dmpLabel: string; + @Input() datasetFormGroup: FormGroup; + //formGroup: FormGroup = null; + private uiNotificationService: UiNotificationService - profilesAutoCompleteConfiguration: SingleAutoCompleteConfiguration; - filteredProfiles: DatasetProfileModel[]; - filteredProfilesAsync = false; + profilesAutoCompleteConfiguration: SingleAutoCompleteConfiguration; + filteredProfiles: DatasetProfileModel[]; + filteredProfilesAsync = false; - constructor( - public snackBar: MatSnackBar, - public router: Router, - private route: ActivatedRoute, - private _service: DmpService, - public language: TranslateService - ) { - super(); - } + constructor( + public snackBar: MatSnackBar, + public router: Router, + private route: ActivatedRoute, + private _service: DmpService, + public language: TranslateService + ) { + super(); + } - ngOnInit(): void { + ngOnInit(): void { - this.profilesAutoCompleteConfiguration = { - filterFn: this.filterProfiles.bind(this), - initialItems: (extraData) => this.filterProfiles(''), - displayFn: (item) => item['label'], - titleFn: (item) => item['label'] - }; + this.profilesAutoCompleteConfiguration = { + filterFn: this.filterProfiles.bind(this), + initialItems: (extraData) => this.filterProfiles(''), + displayFn: (item) => item['label'], + titleFn: (item) => item['label'] + }; + + if (this.formGroup == null) { + this.dmp = new DmpEditorWizardModel(); + this.formGroup = this.dmp.buildForm(); + } + this.formGroup.get('label').setValue(this.language.instant('QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.SECOND-STEP.DMP-NAME') + this.dmpLabel); + this.formGroup.get('label').setValue(this.language.instant('QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.SECOND-STEP.DMP-NAME') + this.dmpLabel); + + this.breadCrumbs = Observable.of([{ + parentComponentName: 'project', + label: this.language.instant('NAV-BAR.DMP'), + url: '/quick-wizard/dmp' + }]); + } + + formSubmit(): void { + this.touchAllFormFields(this.formGroup); + if (!this.isFormValid()) { return; } + this.onSubmit(); + } + + public isFormValid() { + return this.formGroup.valid; + } + + public touchAllFormFields(formControl: AbstractControl) { + if (formControl instanceof FormControl) { + formControl.markAsTouched(); + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.touchAllFormFields(control); + }); + } else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.touchAllFormFields(item); + }); + } + } + + onSubmit(): void { + // this.projectService.createProject(this.formGroup.value) + // .pipe(takeUntil(this._destroyed)) + // .subscribe( + // complete => this.onCallbackSuccess(), + // error => this.onCallbackError(error) + // ); + } - if (this.formGroup == null) { - this.dmp = new DmpEditorWizardModel(); - this.formGroup = this.dmp.buildForm(); - } - this.formGroup.get('label').setValue(this.language.instant('QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.SECOND-STEP.DMP-NAME') + this.dmpLabel); - this.formGroup.get('label').setValue(this.language.instant('QUICKWIZARD.CREATE-ADD.CREATE.QUICKWIZARD_CREATE.SECOND-STEP.DMP-NAME') + this.dmpLabel); + onCallbackSuccess(): void { + this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); + this.router.navigate(['/dmp']); + } - this.breadCrumbs = Observable.of([ - { - parentComponentName: 'project', - label: 'Dmp', - url: '/quick-wizard/dmp' - }] - ); + onCallbackError(errorResponse: any) { + this.setErrorModel(errorResponse.error.payload); + this.validateAllFormFields(this.formGroup); + } - } + public setErrorModel(validationErrorModel: ValidationErrorModel) { + Object.keys(validationErrorModel).forEach(item => { + (this.dmp.validationErrorModel)[item] = (validationErrorModel)[item]; + }); + } - formSubmit(): void { - this.touchAllFormFields(this.formGroup); - if (!this.isFormValid()) { return; } - this.onSubmit(); - } + 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); + }); + } + } - public isFormValid() { - return this.formGroup.valid; - } + filterProfiles(value: string): Observable { - public touchAllFormFields(formControl: AbstractControl) { - if (formControl instanceof FormControl) { - formControl.markAsTouched(); - } else if (formControl instanceof FormGroup) { - Object.keys(formControl.controls).forEach(item => { - const control = formControl.get(item); - this.touchAllFormFields(control); - }); - } else if (formControl instanceof FormArray) { - formControl.controls.forEach(item => { - this.touchAllFormFields(item); - }); - } - } + this.filteredProfiles = undefined; + this.filteredProfilesAsync = true; - onSubmit(): void { - // this.projectService.createProject(this.formGroup.value) - // .pipe(takeUntil(this._destroyed)) - // .subscribe( - // complete => this.onCallbackSuccess(), - // error => this.onCallbackError(error) - // ); - } + const request = new RequestItem(); + const criteria = new DatasetProfileCriteria(); + criteria.like = value; + request.criteria = criteria; + return this._service.searchDMPProfiles(request); + } - - onCallbackSuccess(): void { - this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); - this.router.navigate(['/dmp']); - } - - onCallbackError(errorResponse: any) { - this.setErrorModel(errorResponse.error.payload); - this.validateAllFormFields(this.formGroup); - } - - public setErrorModel(validationErrorModel: ValidationErrorModel) { - Object.keys(validationErrorModel).forEach(item => { - (this.dmp.validationErrorModel)[item] = (validationErrorModel)[item]; - }); - } - - 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); - }); - } - } - - filterProfiles(value: string): Observable { - - this.filteredProfiles = undefined; - this.filteredProfilesAsync = true; - - const request = new RequestItem(); - const criteria = new DatasetProfileCriteria(); - criteria.like = value; - request.criteria = criteria; - return this._service.searchDMPProfiles(request); - } - - datasetIsEmpty() { - if (this.datasetFormGroup && this.datasetFormGroup.get('datasetsList') && (this.datasetFormGroup.get('datasetsList') as FormArray).length != 0) { - return true; - } - return false; - } - - -} \ No newline at end of file + datasetIsEmpty() { + if (this.datasetFormGroup && this.datasetFormGroup.get('datasetsList') && (this.datasetFormGroup.get('datasetsList') as FormArray).length != 0) { + return true; + } + return false; + } +} diff --git a/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.ts b/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.ts index 2614bc76f..ca00db149 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/project-editor/project-editor-wizard.component.ts @@ -17,164 +17,156 @@ import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCru import { ProjectEditorWizardModel } from './project-editor-wizard-model'; @Component({ - selector: 'app-quick-wizard-project-editor-component', - templateUrl: 'project-editor-wizard.component.html', - styleUrls: ['./project-editor-wizard.component.scss'] + selector: 'app-quick-wizard-project-editor-component', + templateUrl: 'project-editor-wizard.component.html', + styleUrls: ['./project-editor-wizard.component.scss'] }) export class ProjectEditorWizardComponent extends BaseComponent implements OnInit, IBreadCrumbComponent { - breadCrumbs: Observable = Observable.of([]); + breadCrumbs: Observable = Observable.of([]); - isNew = false; - project: ProjectEditorWizardModel; - @Input() formGroup: FormGroup; - //formGroup: FormGroup = null; - private uiNotificationService: UiNotificationService + isNew = false; + project: ProjectEditorWizardModel; + @Input() formGroup: FormGroup; + //formGroup: FormGroup = null; + private uiNotificationService: UiNotificationService - projectAutoCompleteConfiguration: SingleAutoCompleteConfiguration; + projectAutoCompleteConfiguration: SingleAutoCompleteConfiguration; - constructor( - public snackBar: MatSnackBar, - private route: ActivatedRoute, - public router: Router, - public language: TranslateService, - private projectService: ProjectService, - public languageResolverService: LanguageResolverService, - ) { - super(); - } + constructor( + public snackBar: MatSnackBar, + private route: ActivatedRoute, + public router: Router, + public language: TranslateService, + private projectService: ProjectService, + public languageResolverService: LanguageResolverService, + ) { + super(); + } - ngOnInit() { - this.breadCrumbs = Observable.of([ - { - parentComponentName: 'QuickCreate', - label: 'Project', - url: '/quick-wizard/project' - }] - ); + ngOnInit() { + this.breadCrumbs = Observable.of([{ + parentComponentName: 'QuickCreate', + label: this.language.instant('NAV-BAR.PROJECT'), + url: '/quick-wizard/project' + }]); - const projectRequestItem: RequestItem = new RequestItem(); - projectRequestItem.criteria = new ProjectCriteria(); + const projectRequestItem: RequestItem = new RequestItem(); + projectRequestItem.criteria = new ProjectCriteria(); - this.projectAutoCompleteConfiguration = { - filterFn: this.searchProject.bind(this), - initialItems: (extraData) => this.searchProject(''), - displayFn: (item) => item['label'], - titleFn: (item) => item['label'] - }; + this.projectAutoCompleteConfiguration = { + filterFn: this.searchProject.bind(this), + initialItems: (extraData) => this.searchProject(''), + displayFn: (item) => item['label'], + titleFn: (item) => item['label'] + }; - if (!this.formGroup) { - this.project = new ProjectEditorWizardModel(); - this.formGroup = this.project.buildForm(); - } + if (!this.formGroup) { + this.project = new ProjectEditorWizardModel(); + this.formGroup = this.project.buildForm(); + } - this.formGroup.get('existProject').enable(); - this.formGroup.get('label').disable(); - this.formGroup.get('description').disable(); + this.formGroup.get('existProject').enable(); + this.formGroup.get('label').disable(); + this.formGroup.get('description').disable(); + // this.route.params + // .pipe(takeUntil(this._destroyed)) + // .subscribe((params: Params) => { + // const itemId = params['id']; + // if (itemId != null) { + // this.isNew = false; + // this.projectService.getSingle(itemId).map(data => data as ProjectListingModel) + // .pipe(takeUntil(this._destroyed)) + // .subscribe(data => { + // this.project = new ProjectEditorModel().fromModel(data); + // this.formGroup = this.project.buildForm(null, this.project.type === ProjectType.External || !this.editMode); + // this.breadCrumbs = Observable.of([ + // { parentComponentName: 'ProjectListingComponent', label: 'Projects', url: '/projects' }, + // ]); + // }); + // } else { + // this.breadCrumbs = Observable.of([ + // { parentComponentName: 'QuickWizardComponent', label: 'Projects', url: '/projects' }, + // ]); + // this.project = new ProjectEditorWizardModel(); + // setTimeout(() => { + // this.formGroup = this.project.buildForm(); + // }); + // } + // }); + } - - // this.route.params - // .pipe(takeUntil(this._destroyed)) - // .subscribe((params: Params) => { - // const itemId = params['id']; + public isFormValid() { + return this.formGroup.valid; + } - // if (itemId != null) { - // this.isNew = false; - // this.projectService.getSingle(itemId).map(data => data as ProjectListingModel) - // .pipe(takeUntil(this._destroyed)) - // .subscribe(data => { - // this.project = new ProjectEditorModel().fromModel(data); - // this.formGroup = this.project.buildForm(null, this.project.type === ProjectType.External || !this.editMode); - // this.breadCrumbs = Observable.of([ - // { parentComponentName: 'ProjectListingComponent', label: 'Projects', url: '/projects' }, - // ]); - // }); - // } else { - // this.breadCrumbs = Observable.of([ - // { parentComponentName: 'QuickWizardComponent', label: 'Projects', url: '/projects' }, - // ]); - // this.project = new ProjectEditorWizardModel(); - // setTimeout(() => { - // this.formGroup = this.project.buildForm(); - // }); - // } - // }); - } + public touchAllFormFields(formControl: AbstractControl) { + if (formControl instanceof FormControl) { + formControl.markAsTouched(); + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.touchAllFormFields(control); + }); + } else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.touchAllFormFields(item); + }); + } + } + onCallbackSuccess(): void { + this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); + this.router.navigate(['/project']); + } - public isFormValid() { - return this.formGroup.valid; - } + onCallbackError(errorResponse: any) { + this.setErrorModel(errorResponse.error.payload); + this.validateAllFormFields(this.formGroup); + } - public touchAllFormFields(formControl: AbstractControl) { - if (formControl instanceof FormControl) { - formControl.markAsTouched(); - } else if (formControl instanceof FormGroup) { - Object.keys(formControl.controls).forEach(item => { - const control = formControl.get(item); - this.touchAllFormFields(control); - }); - } else if (formControl instanceof FormArray) { - formControl.controls.forEach(item => { - this.touchAllFormFields(item); - }); - } - } + public setErrorModel(validationErrorModel: ValidationErrorModel) { + Object.keys(validationErrorModel).forEach(item => { + (this.project.validationErrorModel)[item] = (validationErrorModel)[item]; + }); + } - onCallbackSuccess(): void { - this.uiNotificationService.snackBarNotification(this.isNew ? this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-CREATION') : this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); - this.router.navigate(['/project']); - } + 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); + }); + } + } - onCallbackError(errorResponse: any) { - this.setErrorModel(errorResponse.error.payload); - this.validateAllFormFields(this.formGroup); - } + searchProject(query: string) { + const projectRequestItem: RequestItem = new RequestItem(); + projectRequestItem.criteria = new ProjectCriteria(); + projectRequestItem.criteria.like = query; + return this.projectService.getWithExternal(projectRequestItem); + } - public setErrorModel(validationErrorModel: ValidationErrorModel) { - Object.keys(validationErrorModel).forEach(item => { - (this.project.validationErrorModel)[item] = (validationErrorModel)[item]; - }); - } - - 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); - }); - } - } - - - searchProject(query: string) { - const projectRequestItem: RequestItem = new RequestItem(); - projectRequestItem.criteria = new ProjectCriteria(); - projectRequestItem.criteria.like = query; - return this.projectService.getWithExternal(projectRequestItem); - } - - create() { - this.isNew = !this.isNew; - if (this.isNew) { - this.formGroup.get('existProject').disable(); - this.formGroup.get('existProject').reset(); - this.formGroup.get('label').enable(); - this.formGroup.get('description').enable(); - } else { - this.formGroup.get('existProject').enable(); - this.formGroup.get('label').disable(); - this.formGroup.get('label').reset(); - this.formGroup.get('description').disable(); - this.formGroup.get('description').reset(); - } - } - -} \ No newline at end of file + create() { + this.isNew = !this.isNew; + if (this.isNew) { + this.formGroup.get('existProject').disable(); + this.formGroup.get('existProject').reset(); + this.formGroup.get('label').enable(); + this.formGroup.get('description').enable(); + } else { + this.formGroup.get('existProject').enable(); + this.formGroup.get('label').disable(); + this.formGroup.get('label').reset(); + this.formGroup.get('description').disable(); + this.formGroup.get('description').reset(); + } + } +} diff --git a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.ts b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.ts index 9dd8f4f92..1d33863e1 100644 --- a/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.ts +++ b/dmp-frontend/src/app/ui/quick-wizard/quick-wizard-editor/quick-wizard-editor.component.ts @@ -47,14 +47,11 @@ export class QuickWizardEditorComponent extends BaseComponent implements OnInit, this.quickWizard = new QuickWizardEditorWizardModel(); this.quickWizard.project = new ProjectEditorWizardModel(); this.formGroup = this.quickWizard.buildForm(); - this.breadCrumbs = Observable.of([ - { - parentComponentName: 'Dashboard', - label: 'DMP Wizard', - url: '/quick-wizard' - }] - ); - + this.breadCrumbs = Observable.of([{ + parentComponentName: 'Dashboard', + label: this.language.instant('NAV-BAR.DMP-WIZARD'), + url: '/quick-wizard' + }]); } isActive(step: string): boolean { diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index 218152e97..9ae12f1b4 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -51,13 +51,25 @@ "BREADCRUMB-ROOT": "Dashboard", "TITLE": "OpenDMP", "PROJECTS": "Projects", + "PROJECT": "Project", + "DMP": "Dmp", "DMPS": "DMPs", "DATASETS": "Datasets", "PUBLIC-DATASETS": "Explore OpenDMP", "USERS": "Users", "DATASETS-ADMIN": "Dataset Profiles", "DMP-PROFILES": "DMP Profiles", - "ABOUT": "About" + "ABOUT": "About", + "DATASET-DESCRIPTIONS": "DATASET DESCRIPTIONS", + "DATASET-DESCRIPTION-WIZARD": "Dataset description wizard", + "PUBLIC DATASETS": "PUBLIC DATASETS", + "PUBLIC DMPS": "PUBLIC DMPS", + "HOME": "HOME", + "DMP-WIZARD": "DMP Wizard", + "DATASET-TEMPLATES": "DATASET TEMPLATES", + "TEMPLATE": "TEMPLATE", + "DMP-TEMPLATES": "DMP TEMPLATES", + "USERS-BREADCRUMB": "USERS" }, "SIDE-BAR": { "GENERAL": "GENERAL", From 3d316176f85e74fc64ea2c8929cf9f1a8133af44 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Thu, 23 May 2019 16:00:11 +0300 Subject: [PATCH 2/7] Refactors logic and language on Breadcrumbs. --- .../dataset-wizard/dataset-wizard.component.ts | 2 +- .../app/ui/dmp/listing/dmp-listing.component.ts | 2 +- .../app/ui/dmp/overview/dmp-overview.component.ts | 14 ++++++-------- .../app/ui/misc/breadcrumb/breadcrumb.component.ts | 6 +----- dmp-frontend/src/assets/i18n/en.json | 1 + 5 files changed, 10 insertions(+), 15 deletions(-) diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts index cc305b6cb..cc583ff98 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts @@ -136,7 +136,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, IBr this.breadCrumbs = Observable.of([ { parentComponentName: null, - label: this.language.instant('NAV-BAR.DATASETS'), + label: this.language.instant('NAV-BAR.DATASET'), url: '/datasets', notFoundResolver: [ { diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index ab774e46a..bffbba5f5 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -139,7 +139,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread } rowClicked(dmp: DmpListingModel) { - this.router.navigate(['/plans/overview/' + dmp.id, { dmpLabel: dmp.label }]); + this.router.navigate(['/plans/overview/' + dmp.id]); // this.router.navigate(['/plans/edit/' + dmp.id]); } diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts index e119d9383..fb13b0691 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts @@ -53,13 +53,11 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit { .pipe(takeUntil(this._destroyed)) .subscribe(data => { this.dmp = data; + const breadCrumbs = []; + breadCrumbs.push({ parentComponentName: null, label: 'DMPs', url: "/plans" }); + breadCrumbs.push({ parentComponentName: 'DmpListingComponent', label: this.dmp.label, url: '/overview/' + this.dmp.id }); + this.breadCrumbs = Observable.of(breadCrumbs); }) - if (params['dmpLabel'] !== undefined) { - const breadCrumbs = []; - breadCrumbs.push({ parentComponentName: null, label: 'DMPs', url: "/plans" }); - breadCrumbs.push({ parentComponentName: 'DmpListingComponent', label: params['dmpLabel'], url: '/overview/' + itemId }); - this.breadCrumbs = Observable.of(breadCrumbs); - } } }); } @@ -102,8 +100,8 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit { this.dmpService.delete(this.dmp.id) .pipe(takeUntil(this._destroyed)) .subscribe( - complete => { this.onCallbackSuccess() }, - error => this.onDeleteCallbackError(error) + complete => { this.onCallbackSuccess() }, + error => this.onDeleteCallbackError(error) ); } }); diff --git a/dmp-frontend/src/app/ui/misc/breadcrumb/breadcrumb.component.ts b/dmp-frontend/src/app/ui/misc/breadcrumb/breadcrumb.component.ts index bbf88b72a..7d166e524 100644 --- a/dmp-frontend/src/app/ui/misc/breadcrumb/breadcrumb.component.ts +++ b/dmp-frontend/src/app/ui/misc/breadcrumb/breadcrumb.component.ts @@ -49,10 +49,6 @@ export class BreadcrumbComponent implements OnInit { } currentUrl(breadcrumb) { - if (breadcrumb.url == this.router.url) { - return true; - } else { - false - } + return (breadcrumb.url === this.router.url); } } diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index 9ae12f1b4..498f31294 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -55,6 +55,7 @@ "DMP": "Dmp", "DMPS": "DMPs", "DATASETS": "Datasets", + "DATASET": "Dataset", "PUBLIC-DATASETS": "Explore OpenDMP", "USERS": "Users", "DATASETS-ADMIN": "Dataset Profiles", From dd0b23580c3873a2aee35bbb7db894872994fe45 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Mon, 27 May 2019 18:26:03 +0300 Subject: [PATCH 3/7] Adds datasets and dmp roles on DMP edit model. --- .../models/data/dmp/DataManagementPlan.java | 38 +++++++------------ 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index 8f6800dde..52db574fd 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -1,17 +1,14 @@ package eu.eudat.models.data.dmp; -import eu.eudat.data.entities.DMP; -import eu.eudat.data.entities.DMPProfile; -import eu.eudat.data.entities.Dataset; -import eu.eudat.data.entities.UserDMP; +import eu.eudat.data.entities.*; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile; import eu.eudat.models.data.helpermodels.Tuple; import eu.eudat.models.data.listingmodels.DatasetListingModel; +import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.project.Project; -import eu.eudat.models.data.userinfo.UserInfo; import eu.eudat.models.data.userinfo.UserListingModel; import net.minidev.json.JSONObject; import org.w3c.dom.Document; @@ -42,11 +39,11 @@ public class DataManagementPlan implements DataModel { private Date created; private List dynamicFields; private Map properties; + private List users; public UUID getId() { return id; } - public void setId(UUID id) { this.id = id; } @@ -54,7 +51,6 @@ public class DataManagementPlan implements DataModel { public Tuple getProfile() { return profile; } - public void setProfile(Tuple profile) { this.profile = profile; } @@ -62,7 +58,6 @@ public class DataManagementPlan implements DataModel { public String getLabel() { return label; } - public void setLabel(String label) { this.label = label; } @@ -70,7 +65,6 @@ public class DataManagementPlan implements DataModel { public UUID getGroupId() { return groupId; } - public void setGroupId(UUID groupId) { this.groupId = groupId; } @@ -78,7 +72,6 @@ public class DataManagementPlan implements DataModel { public List getAssociatedUsers() { return associatedUsers; } - public void setAssociatedUsers(List associatedUsers) { this.associatedUsers = associatedUsers; } @@ -86,7 +79,6 @@ public class DataManagementPlan implements DataModel { public int getVersion() { return version; } - public void setVersion(int version) { this.version = version; } @@ -94,7 +86,6 @@ public class DataManagementPlan implements DataModel { public List getOrganisations() { return organisations; } - public void setOrganisations(List organizations) { this.organisations = organizations; } @@ -102,7 +93,6 @@ public class DataManagementPlan implements DataModel { public List getResearchers() { return researchers; } - public void setResearchers(List researchers) { this.researchers = researchers; } @@ -110,7 +100,6 @@ public class DataManagementPlan implements DataModel { public int getStatus() { return status; } - public void setStatus(int status) { this.status = status; } @@ -118,7 +107,6 @@ public class DataManagementPlan implements DataModel { public Project getProject() { return project; } - public void setProject(Project project) { this.project = project; } @@ -126,7 +114,6 @@ public class DataManagementPlan implements DataModel { public eu.eudat.models.data.userinfo.UserInfo getCreator() { return creator; } - public void setCreator(eu.eudat.models.data.userinfo.UserInfo creator) { this.creator = creator; } @@ -134,7 +121,6 @@ public class DataManagementPlan implements DataModel { public List getProfiles() { return profiles; } - public void setProfiles(List profiles) { this.profiles = profiles; } @@ -142,7 +128,6 @@ public class DataManagementPlan implements DataModel { public Date getCreated() { return created; } - public void setCreated(Date created) { this.created = created; } @@ -150,7 +135,6 @@ public class DataManagementPlan implements DataModel { public String getDescription() { return description; } - public void setDescription(String description) { this.description = description; } @@ -158,7 +142,6 @@ public class DataManagementPlan implements DataModel { public DataManagementPlanProfile getDefinition() { return definition; } - public void setDefinition(DataManagementPlanProfile definition) { this.definition = definition; } @@ -166,7 +149,6 @@ public class DataManagementPlan implements DataModel { public Map getProperties() { return properties; } - public void setProperties(Map properties) { this.properties = properties; } @@ -174,7 +156,6 @@ public class DataManagementPlan implements DataModel { public List getDynamicFields() { return dynamicFields; } - public void setDynamicFields(List dynamicFields) { this.dynamicFields = dynamicFields; } @@ -182,7 +163,6 @@ public class DataManagementPlan implements DataModel { public boolean getLockable() { return lockable; } - public void setLockable(boolean lockable) { this.lockable = lockable; } @@ -190,11 +170,17 @@ public class DataManagementPlan implements DataModel { public List getDatasets() { return datasets; } - public void setDatasets(List datasets) { this.datasets = datasets; } + public List getUsers() { + return users; + } + public void setUsers(List users) { + this.users = users; + } + @Override public DataManagementPlan fromDataModel(DMP entity) { this.id = entity.getId(); @@ -231,12 +217,14 @@ public class DataManagementPlan implements DataModel { this.profiles.add(new AssociatedProfile().fromXml((Element) associatedProfileElement)); } } - } + }*/ } + this.datasets = entity.getDataset().stream().map(item -> new DatasetListingModel().fromDataModel(item)).collect(Collectors.toList()); this.created = entity.getCreated(); this.description = entity.getDescription(); this.status = entity.getStatus(); this.associatedUsers = entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()); + this.users = entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()); return this; } From 10e76e6d2b50d2b018e91da20f79f12ec00e523c Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Tue, 28 May 2019 10:12:23 +0300 Subject: [PATCH 4/7] Adds email information on UserInfo listing model. --- .../data/listingmodels/UserInfoListingModel.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java index 2435365fa..5d86e1e8d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java @@ -10,7 +10,8 @@ public class UserInfoListingModel implements DataModel Date: Tue, 28 May 2019 10:22:58 +0300 Subject: [PATCH 5/7] Refactors the the connection between DMP and Dataset Template (Profile) and adds Dataset Template criteria on DMP listing. --- .../criteria/DataManagementPlanCriteria.java | 8 ++++ .../dao/criteria/DatasetProfileCriteria.java | 38 +++++++++++++++++++ .../eudat/data/dao/entities/DMPDaoImpl.java | 3 ++ .../dao/entities/DatasetProfileDaoImpl.java | 11 ++++++ .../main/java/eu/eudat/data/entities/DMP.java | 16 ++++++-- .../eudat/data/entities/DatasetProfile.java | 7 ++++ .../main/java/eu/eudat/controllers/Admin.java | 7 ++++ .../managers/DataManagementPlanManager.java | 37 +++++++----------- .../logic/managers/DatasetProfileManager.java | 21 +++++++++- .../DatasetProfileListingModel.java | 1 - .../models/data/dmp/AssociatedProfile.java | 16 +++++++- .../models/data/dmp/DataManagementPlan.java | 18 +++++++-- .../DataManagementPlanNewVersionModel.java | 11 +++++- .../DataManagementPlanListingModel.java | 11 +++++- .../DataManagementPlanOverviewModel.java | 10 ++++- .../src/app/core/query/dmp/dmp-criteria.ts | 1 + .../dataset-profile.service.ts | 4 ++ .../criteria/dmp-criteria.component.html | 13 +++++++ .../criteria/dmp-criteria.component.ts | 24 ++++++++++++ .../ui/dmp/listing/dmp-listing.component.ts | 12 +++--- dmp-frontend/src/assets/i18n/en.json | 4 +- 21 files changed, 227 insertions(+), 46 deletions(-) diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java index e42cf89a1..8faee2f7c 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java @@ -18,6 +18,7 @@ public class DataManagementPlanCriteria extends Criteria { private List organisations; private Integer role; private List collaborators; + private List datasetTemplates; public Date getPeriodStart() { return periodStart; @@ -81,4 +82,11 @@ public class DataManagementPlanCriteria extends Criteria { public void setCollaborators(List collaborators) { this.collaborators = collaborators; } + + public List getDatasetTemplates() { + return datasetTemplates; + } + public void setDatasetTemplates(List datasetTemplates) { + this.datasetTemplates = datasetTemplates; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetProfileCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetProfileCriteria.java index dc5768c60..0bf07564c 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetProfileCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetProfileCriteria.java @@ -6,12 +6,50 @@ import java.util.List; import java.util.UUID; public class DatasetProfileCriteria extends Criteria { + + public enum DatasetProfileFilter { + DMPs((short) 0), Datasets((short) 1); + + private short value; + private DatasetProfileFilter(short value) { + this.value = value; + } + public short getValue() { return value; } + + public static DatasetProfileFilter fromInteger(short value) { + switch (value) { + case 0: + return DMPs; + case 1: + return Datasets; + default: + throw new RuntimeException("Unsupported DatasetProfile filter"); + } + } + } + private boolean allVersions; private List groupIds; + private Short filter; + private UUID userId; public boolean getAllVersions() { return allVersions; } public void setAllVersions(boolean allVersions) { this.allVersions = allVersions; } public List getGroupIds() { return groupIds; } public void setGroupIds(List groupIds) { this.groupIds = groupIds; } + + public Short getFilter() { + return filter; + } + public void setFilter(Short filter) { + this.filter = filter; + } + + public UUID getUserId() { + return userId; + } + public void setUserId(UUID userId) { + this.userId = userId; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java index 34cee13a8..d75b49e80 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java @@ -68,6 +68,9 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao { if (criteria.getCollaborators() != null && !criteria.getCollaborators().isEmpty()) { query.where((builder, root) -> root.join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators())); } + if (criteria.getDatasetTemplates() != null && !criteria.getDatasetTemplates().isEmpty()) { + query.where(((builder, root) -> root.join("associatedDmps", JoinType.LEFT).get("id").in(criteria.getDatasetTemplates()))); + } query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue())); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java index 3d9aac44f..587de4015 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import javax.persistence.criteria.JoinType; import java.util.Arrays; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -34,6 +35,16 @@ public class DatasetProfileDaoImpl extends DatabaseAccess implem nestedRoot.get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "version")), String.class))); if (criteria.getGroupIds() != null && !criteria.getGroupIds().isEmpty()) query.where((builder, root) -> root.get("groupId").in(criteria.getGroupIds())); + if (criteria.getFilter() != null && criteria.getUserId() != null) { + if (criteria.getFilter().equals(DatasetProfileCriteria.DatasetProfileFilter.DMPs.getValue())) { + query.initSubQuery(UUID.class).where((builder, root) -> + builder.and(root.get("id").in( + query.subQuery((builder1, root1) -> builder1.equal(root1.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), criteria.getUserId()), + Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id")))), + builder.notEqual(root.get("id"), criteria.getUserId()))); + //query.where(((builder, root) -> builder.equal(root.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), criteria.getUserId()))); + } + } query.where(((builder, root) -> builder.notEqual(root.get("status"), DatasetProfile.Status.DELETED.getValue()))); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java index 1e80bf94d..7aef38188 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java @@ -4,6 +4,7 @@ package eu.eudat.data.entities; import eu.eudat.data.converters.DateToUTCConverter; import eu.eudat.queryable.queryableentity.DataEntity; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.ManyToAny; import org.hibernate.annotations.Type; import javax.persistence.*; @@ -91,9 +92,16 @@ public class DMP implements DataEntity { private Project project; - @Type(type = "eu.eudat.configurations.typedefinition.XMLType") + /*@Type(type = "eu.eudat.configurations.typedefinition.XMLType") @Column(name = "\"AssociatedDmps\"", columnDefinition = "xml", nullable = true) - private String associatedDmps; + private String associatedDmps;*/ + @OneToMany(fetch = FetchType.EAGER) + @JoinTable(name = "\"DMPDatasetProfile\"", + joinColumns = {@JoinColumn(name = "\"dmp\"", referencedColumnName = "\"ID\"")}, + inverseJoinColumns = {@JoinColumn(name = "\"datasetprofile\"", referencedColumnName = "\"ID\"")} + ) + private List associatedDmps; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"Profile\"") @@ -229,10 +237,10 @@ public class DMP implements DataEntity { this.project = project; } - public String getAssociatedDmps() { + public List getAssociatedDmps() { return associatedDmps; } - public void setAssociatedDmps(String associatedDmps) { + public void setAssociatedDmps(List associatedDmps) { this.associatedDmps = associatedDmps; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DatasetProfile.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DatasetProfile.java index d8e3393da..47cf76cde 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DatasetProfile.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DatasetProfile.java @@ -79,6 +79,13 @@ public class DatasetProfile implements DataEntity{ @Column(name = "\"Version\"", nullable = false) private Short version; + @ManyToMany(fetch = FetchType.LAZY) + @JoinTable(name = "\"DMPDatasetProfile\"", + joinColumns = {@JoinColumn(name = "\"datasetprofile\"", referencedColumnName = "\"ID\"")}, + inverseJoinColumns = {@JoinColumn(name = "\"dmp\"", referencedColumnName = "\"ID\"")} + ) + private List dmps; + public String getDescription() { return description; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java index c9588db00..4d424caa9 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java @@ -94,6 +94,13 @@ public class Admin extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); } + @RequestMapping(method = RequestMethod.POST, value = {"/datasetprofiles/using/paged"}, produces = "application/json") + public @ResponseBody + ResponseEntity>> getUsingDatasetProfilesPaged(@RequestBody DatasetProfileTableRequestItem datasetProfileTableRequestItem, Principal principal) throws Exception { + DataTableData datasetProfileTableData = this.datasetProfileManager.getDatasetProfilesUsedByDMP(datasetProfileTableRequestItem, principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); + } + @RequestMapping(method = RequestMethod.POST, value = {"/preview"}, consumes = "application/json", produces = "application/json") public ResponseEntity> getPreview(@RequestBody DatasetProfile profile, @ClaimedAuthorities(claims = {ADMIN}) Principal principal) { eu.eudat.data.entities.DatasetProfile modelDefinition = AdminManager.generateViewStyleDefinition(profile, getApiContext()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 487015550..c2f22157f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -133,7 +133,6 @@ public class DataManagementPlanManager { CompletableFuture itemsFuture; if(fieldsGroup.equals("listing")){ - itemsFuture = pagedItems.withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class)) .selectAsync(item -> { item.setDataset( @@ -145,7 +144,7 @@ public class DataManagementPlanManager { } else{ itemsFuture = pagedItems - .selectAsync(item -> new DataManagementPlanListingModel().fromDataModel(item)) + .selectAsync(item -> new DataManagementPlanListingModel().fromDataModel(item)) .whenComplete((resultList, throwable) -> dataTable.setData(resultList)); } @@ -670,28 +669,18 @@ public class DataManagementPlanManager { datasetsElement.appendChild(datasetElement); } Element profiles = xmlDoc.createElement("profiles"); - // Get DatasetProfiles from dmp to add to XML. - if (dmp.getAssociatedDmps() != null && !dmp.getAssociatedDmps().isEmpty()) { - Document viewStyleDoc = XmlBuilder.fromXml(dmp.getAssociatedDmps()); - Element item = (Element) viewStyleDoc.getElementsByTagName("profiles").item(0); - if (item != null) { - NodeList associatedProfilesElement = item.getChildNodes(); - for (int temp = 0; temp < associatedProfilesElement.getLength(); temp++) { - Node associatedProfileElement = associatedProfilesElement.item(temp); - if (associatedProfileElement.getNodeType() == Node.ELEMENT_NODE) { - Element profile = xmlDoc.createElement("profile"); - Element profileLabel = xmlDoc.createElement("profilelabel"); - Node labelNode = associatedProfileElement.getAttributes().item(0); - profileLabel.setTextContent(labelNode.getNodeValue()); - profile.appendChild(profileLabel); - Element profileId = xmlDoc.createElement("profileId"); - Node idNode = associatedProfileElement.getAttributes().item(1); - profileId.setTextContent(idNode.getNodeValue()); - profile.appendChild(profileId); - profiles.appendChild(profile); - } - } - } + + // Get DatasetProfiles from DMP to add to XML. + for (DatasetProfile datasetProfile : dmp.getAssociatedDmps()) { + Element researcherElement = xmlDoc.createElement("researcher"); + Element profile = xmlDoc.createElement("profile"); + Element profileLabel = xmlDoc.createElement("profilelabel"); + profileLabel.setTextContent(datasetProfile.getLabel()); + profile.appendChild(profileLabel); + Element profileId = xmlDoc.createElement("profileId"); + profileId.setTextContent(datasetProfile.getId().toString()); + profile.appendChild(profileId); + profiles.appendChild(profile); } dmpElement.appendChild(profiles); dmpElement.appendChild(datasetsElement); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java index 4dab51aef..f40bb0570 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java @@ -3,7 +3,6 @@ package eu.eudat.logic.managers; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; import eu.eudat.data.dao.criteria.DatasetProfileCriteria; -import eu.eudat.data.dao.entities.DatasetProfileDao; import eu.eudat.data.entities.DatasetProfile; import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileAutocompleteRequest; import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; @@ -15,12 +14,14 @@ import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ExportXmlBuilderDatasetProfile; import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ImportXmlBuilderDatasetProfile; +import eu.eudat.logic.utilities.helpers.StreamHelper; import eu.eudat.models.data.components.commons.datafield.AutoCompleteData; import eu.eudat.models.data.datasetprofile.DatasetProfileAutocompleteItem; import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; import eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field; import eu.eudat.models.data.helpermodels.Tuple; import eu.eudat.models.data.helpers.common.DataTableData; +import eu.eudat.models.data.security.Principal; import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; @@ -31,12 +32,14 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.activation.MimetypesFileTypeMap; +import javax.persistence.criteria.Root; import javax.xml.xpath.*; import java.io.IOException; import java.nio.file.Files; import java.util.*; import java.io.*; +import java.util.stream.Collectors; @Component @@ -188,4 +191,20 @@ public class DatasetProfileManager { throw new DatasetProfileNewVersionException("Version to update not the latest."); } } + + public DataTableData getDatasetProfilesUsedByDMP(DatasetProfileTableRequestItem datasetProfileTableRequestItem, Principal principal) { + + datasetProfileTableRequestItem.getCriteria().setFilter(DatasetProfileCriteria.DatasetProfileFilter.DMPs.getValue()); + datasetProfileTableRequestItem.getCriteria().setUserId(principal.getId()); + + QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().getWithCriteria(datasetProfileTableRequestItem.getCriteria()); + List listingModels = items.select(item -> new DatasetProfileListingModel().fromDataModel(item)); + //listingModels = listingModels.stream().filter(StreamHelper.distinctByKey(DatasetProfileListingModel::getId)).collect(Collectors.toList()); + + DataTableData data = new DataTableData<>(); + data.setData(listingModels); + data.setTotalCount((long) listingModels.size()); + + return data; + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetprofile/DatasetProfileListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetprofile/DatasetProfileListingModel.java index b1bece0a6..8d27efed7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetprofile/DatasetProfileListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/datasetprofile/DatasetProfileListingModel.java @@ -6,7 +6,6 @@ import eu.eudat.models.DataModel; import java.util.Date; import java.util.UUID; - public class DatasetProfileListingModel implements DataModel { private UUID id; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/AssociatedProfile.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/AssociatedProfile.java index c635ab3c8..e3fb43d61 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/AssociatedProfile.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/AssociatedProfile.java @@ -1,5 +1,6 @@ package eu.eudat.models.data.dmp; +import eu.eudat.data.entities.DatasetProfile; import eu.eudat.logic.utilities.interfaces.XmlSerializable; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -41,4 +42,17 @@ public class AssociatedProfile implements XmlSerializable { this.label = item.getAttribute("label"); return this; } -} \ No newline at end of file + + public DatasetProfile toData() { + DatasetProfile profile = new DatasetProfile(); + profile.setId(this.id); + profile.setLabel(this.label); + return profile; + } + + public AssociatedProfile fromData(DatasetProfile entity) { + this.id = entity.getId(); + this.label = entity.getLabel(); + return this; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index 52db574fd..b9a967a6a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -206,7 +206,13 @@ public class DataManagementPlan implements DataModel { if (entity.getCreator() != null) this.creator.fromDataModel(entity.getCreator()); if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { - Document viewStyleDoc = XmlBuilder.fromXml(entity.getAssociatedDmps()); + this.profiles = new LinkedList<>(); + for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.profiles.add(associatedProfile); + } + + /*Document viewStyleDoc = XmlBuilder.fromXml(entity.getAssociatedDmps()); Element item = (Element) viewStyleDoc.getElementsByTagName("profiles").item(0); this.profiles = new LinkedList<>(); if (item != null) { @@ -248,13 +254,19 @@ public class DataManagementPlan implements DataModel { dataManagementPlanEntity.setStatus((short) this.status); dataManagementPlanEntity.setDescription(this.description); if (this.profiles != null) { - Document associatedProfileDoc = XmlBuilder.getDocument(); + /* Document associatedProfileDoc = XmlBuilder.getDocument(); Element associatedProfilesElement = associatedProfileDoc.createElement("profiles"); for (AssociatedProfile associatedProfile : this.profiles) { associatedProfilesElement.appendChild(associatedProfile.toXml(associatedProfileDoc)); } associatedProfileDoc.appendChild(associatedProfilesElement); - dataManagementPlanEntity.setAssociatedDmps(XmlBuilder.generateXml(associatedProfileDoc)); + dataManagementPlanEntity.setAssociatedDmps(XmlBuilder.generateXml(associatedProfileDoc));*/ + + List datasetProfiles = new LinkedList<>(); + for (AssociatedProfile profile : this.profiles) { + datasetProfiles.add(profile.toData()); + } + dataManagementPlanEntity.setAssociatedDmps(datasetProfiles); } dataManagementPlanEntity.setProperties(this.properties != null ? JSONObject.toJSONString(this.properties) : null); dataManagementPlanEntity.setGroupId(this.groupId != null ? this.groupId : UUID.randomUUID()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java index 0a5119092..57a2eb969 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java @@ -1,6 +1,7 @@ package eu.eudat.models.data.dmp; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.DatasetProfile; import eu.eudat.data.entities.UserDMP; import eu.eudat.models.DataModel; import eu.eudat.models.data.dataset.Dataset; @@ -175,13 +176,19 @@ public class DataManagementPlanNewVersionModel implements DataModel(this.researchers.stream().map(item -> item.toDataModel()).collect(Collectors.toList()))); if (this.project != null) entity.setProject(this.project.toDataModel()); if (this.profiles != null) { - Document associatedProfileDoc = XmlBuilder.getDocument(); + /*Document associatedProfileDoc = XmlBuilder.getDocument(); Element associatedProfilesElement = associatedProfileDoc.createElement("profiles"); for (AssociatedProfile associatedProfile : this.profiles) { associatedProfilesElement.appendChild(associatedProfile.toXml(associatedProfileDoc)); } associatedProfileDoc.appendChild(associatedProfilesElement); - entity.setAssociatedDmps(XmlBuilder.generateXml(associatedProfileDoc)); + entity.setAssociatedDmps(XmlBuilder.generateXml(associatedProfileDoc));*/ + + List datasetProfiles = new LinkedList<>(); + for (AssociatedProfile profile : this.profiles) { + datasetProfiles.add(profile.toData()); + } + entity.setAssociatedDmps(datasetProfiles); } return entity; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java index bf4afa78e..7a2b37422 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java @@ -1,6 +1,7 @@ package eu.eudat.models.data.listingmodels; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.DatasetProfile; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; import eu.eudat.models.data.dmp.AssociatedProfile; @@ -174,7 +175,13 @@ public class DataManagementPlanListingModel implements DataModel(); + for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.associatedProfiles.add(associatedProfile); + } + + /*Document viewStyleDoc = XmlBuilder.fromXml(entity.getAssociatedDmps()); Element item = (Element) viewStyleDoc.getElementsByTagName("profiles").item(0); this.associatedProfiles = new LinkedList<>(); if (item != null) { @@ -185,7 +192,7 @@ public class DataManagementPlanListingModel implements DataModel new Researcher().fromDataModel(item)).collect(Collectors.toList()); if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { + this.associatedProfiles = new LinkedList<>(); + for (DatasetProfile datasetProfile : entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.associatedProfiles.add(associatedProfile); + } + } + /*if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { Document viewStyleDoc = XmlBuilder.fromXml(entity.getAssociatedDmps()); Element item = (Element) viewStyleDoc.getElementsByTagName("profiles").item(0); this.associatedProfiles = new LinkedList<>(); @@ -178,7 +186,7 @@ public class DataManagementPlanOverviewModel implements DataModel>(this.actionUrl + 'datasetprofiles/getPaged', dataTableRequest); } + getDatasetProfilesUsedPaged(dataTableRequest: DataTableRequest) { + return this.http.post>(this.actionUrl + 'datasetprofiles/using/paged', dataTableRequest); + } + preview(data: DatasetProfile): Observable { return this.http.post(this.actionUrl + 'preview', data); } diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html index 4c4be0fe7..bacd1869e 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html @@ -23,6 +23,19 @@ + +
+
{{ 'CRITERIA.DMP.RELATED-DATASET-TEMPLATES' | translate}}
+ + + + arrow_drop_down + +
+ +
{{ 'DMP-RELATED-PROJECT.RELATED-PROJECT' | translate}}
diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts index ee56c2fc5..e5ba26371 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts @@ -17,6 +17,8 @@ import { UserService } from '../../../../core/services/user/user.service'; import { MultipleAutoCompleteConfiguration } from '../../../../library/auto-complete/multiple/multiple-auto-complete-configuration'; import { BaseCriteriaComponent } from '../../../misc/criteria/base-criteria.component'; import { DmpUploadDialogue } from './upload-dialogue/dmp-upload-dialogue.component'; +import { DatasetProfileCriteria } from '../../../../core/query/dataset-profile/dataset-profile-criteria'; +import { DatasetProfileService } from '../../../../core/services/dataset-profile/dataset-profile.service'; @Component({ selector: 'app-dmp-criteria-component', @@ -39,6 +41,7 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni role: new FormControl, organisations: new FormControl(), collaborators: new FormControl(), + datasetTemplates: new FormControl() }); collaboratorsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { @@ -48,6 +51,13 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni titleFn: (item) => item['name'] }; + datasetTemplateAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { + filterFn: this.filterDatasetTemplate.bind(this), + initialItems: (excludedItems: any[]) => this.filterDatasetTemplate('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), + displayFn: (item) => item['label'], + titleFn: (item) => item['label'] + }; + projectAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterProject.bind(this), initialItems: (excludedItems: any[]) => this.filterProject('').map(result => result.filter(resultItem => excludedItems.map(x => x.id).indexOf(resultItem.id) === -1)), @@ -70,6 +80,7 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni private dialog: MatDialog, private organisationService: OrganisationService, private userService: UserService, + private datasetProfileService: DatasetProfileService ) { super(new ValidationErrorModel()); } @@ -94,6 +105,9 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni this.formGroup.get('collaborators').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(x => this.controlModified()); + this.formGroup.get('datasetTemplates').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); //if (this.criteria == null) { this.criteria = new DataManagementPlanCriteria(); } } @@ -103,6 +117,7 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni this.formGroup.get('status').patchValue(criteria.status); this.formGroup.get('role').patchValue(criteria.role); this.formGroup.get('collaborators').patchValue(criteria.collaborators); + this.formGroup.get('datasetTemplates').patchValue(criteria.datasetTemplates); } onCallbackError(error: any) { @@ -147,6 +162,15 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni return this.userService.getCollaboratorsPaged(collaboratorsRequestItem).map(x => x.data); } + filterDatasetTemplate(query: string) { + const fields: Array = new Array(); + fields.push('asc'); + const datasetTemplateRequestItem: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + datasetTemplateRequestItem.criteria = new DatasetProfileCriteria(); + datasetTemplateRequestItem.criteria.like = query; + return this.datasetProfileService.getDatasetProfilesUsedPaged(datasetTemplateRequestItem).map(x => x.data); + } + fileSave(event) { const dialogRef = this.dialog.open(DmpUploadDialogue, { data: { diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index bffbba5f5..fd03f6eea 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -109,12 +109,12 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread status: value.status, role: value.role } - if (value.collaborators) { - request.criteria.collaborators = value.collaborators.map(x => x.id) - } - if (value.organisations) { - request.criteria.organisations = value.organisations.map(x => x.id) - } + if (value.datasetTemplates) + request.criteria.datasetTemplates = value.datasetTemplates.map(x => x.id); + if (value.collaborators) + request.criteria.collaborators = value.collaborators.map(x => x.id); + if (value.organisations) + request.criteria.organisations = value.organisations.map(x => x.id); if (this.itemId) { request.criteria.groupIds = [this.itemId]; request.criteria.allVersions = true; diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index 498f31294..891348bfa 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -528,7 +528,9 @@ "PROJECTS": "Projects", "SELECT-PROJECTS": "Select Projects", "SELECT-COLLABORATORS": "Select Collaborators", - "RELATED-COLLABORATORS": "Related Collaborators" + "RELATED-COLLABORATORS": "Related Collaborators", + "SELECT-DATASET-TEMPLATES": "Select Dataset Templates", + "RELATED-DATASET-TEMPLATES": "Related Dataset Templates" }, "USERS": { "LABEL": "Search", From a212ad1962b2e5ec44c32805f9fbf70fe0990c13 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Tue, 28 May 2019 10:28:00 +0300 Subject: [PATCH 6/7] Fixes bug importing deleted file. --- .../java/eu/eudat/logic/managers/DatasetProfileManager.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java index f40bb0570..dc427b990 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java @@ -14,7 +14,6 @@ import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ExportXmlBuilderDatasetProfile; import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ImportXmlBuilderDatasetProfile; -import eu.eudat.logic.utilities.helpers.StreamHelper; import eu.eudat.models.data.components.commons.datafield.AutoCompleteData; import eu.eudat.models.data.datasetprofile.DatasetProfileAutocompleteItem; import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; @@ -32,14 +31,12 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.activation.MimetypesFileTypeMap; -import javax.persistence.criteria.Root; import javax.xml.xpath.*; import java.io.IOException; import java.nio.file.Files; import java.util.*; import java.io.*; -import java.util.stream.Collectors; @Component @@ -199,7 +196,6 @@ public class DatasetProfileManager { QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().getWithCriteria(datasetProfileTableRequestItem.getCriteria()); List listingModels = items.select(item -> new DatasetProfileListingModel().fromDataModel(item)); - //listingModels = listingModels.stream().filter(StreamHelper.distinctByKey(DatasetProfileListingModel::getId)).collect(Collectors.toList()); DataTableData data = new DataTableData<>(); data.setData(listingModels); From e2347b9b5040a8572350e91d3059d36c5adcb579 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Tue, 28 May 2019 11:10:42 +0300 Subject: [PATCH 7/7] Fixes the efficiency on fetching DMPs' associated Dataset Templates. --- .../data/src/main/java/eu/eudat/data/entities/DMP.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java index 7aef38188..c42f9e160 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java @@ -17,7 +17,7 @@ import java.util.stream.Collectors; @NamedEntityGraphs({ @NamedEntityGraph( name = "dataManagementPlanListingModel", - attributeNodes = {@NamedAttributeNode("organisations"), @NamedAttributeNode("researchers"), + attributeNodes = {@NamedAttributeNode("organisations"), @NamedAttributeNode("researchers"), @NamedAttributeNode("associatedDmps"), @NamedAttributeNode("project"), @NamedAttributeNode(value = "users", subgraph = "users"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile"), @NamedAttributeNode("dataset")}, subgraphs = { @NamedSubgraph(name = "users", attributeNodes = {@NamedAttributeNode("user")}), @@ -95,7 +95,7 @@ public class DMP implements DataEntity { /*@Type(type = "eu.eudat.configurations.typedefinition.XMLType") @Column(name = "\"AssociatedDmps\"", columnDefinition = "xml", nullable = true) private String associatedDmps;*/ - @OneToMany(fetch = FetchType.EAGER) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name = "\"DMPDatasetProfile\"", joinColumns = {@JoinColumn(name = "\"dmp\"", referencedColumnName = "\"ID\"")}, inverseJoinColumns = {@JoinColumn(name = "\"datasetprofile\"", referencedColumnName = "\"ID\"")}