From a5160738eb71f62a16cea1f37635c2f007e633b7 Mon Sep 17 00:00:00 2001 From: Ioannis Kalyvas Date: Tue, 18 Sep 2018 15:41:24 +0300 Subject: [PATCH] no message --- .../eudat/data/dao/entities/DMPDaoImpl.java | 2 +- .../logger/common/AbstractBatchLogger.java | 4 +- .../ControllerErrorHandler.java | 6 +- .../ControllerUnauthorisedHandler.java | 4 + .../ControllerValidatorErrorHandler.java | 2 + .../logic/managers/DashBoardManager.java | 6 +- .../eudat/logic/managers/DatasetManager.java | 2 +- .../validators/ProjectModelValidator.java | 4 +- .../src/main/resources/application.properties | 6 +- dmp-frontend/src/app/app.module.ts | 2 +- .../dataset-public-listing.component.html | 2 +- .../dataset-wizard.component.html | 56 +++++++------- .../dataset-wizard.component.ts | 13 ++++ .../dynamic-form-field.component.html | 2 +- .../dynamic-form-field.component.ts | 18 +++-- .../dynamic-form-composite-field.html | 61 +++++++-------- .../dynamic-form-composite-field.ts | 8 +- .../dynamic-form-group.component.html | 29 +++---- .../dynamic-form-group.component.ts | 6 +- .../dynamic-form-section.html | 75 ++++++++++--------- .../dynamic-form-section.ts | 16 ++-- .../dynamic-form/dynamic-form.component.ts | 10 ++- dmp-frontend/src/app/models/Section.ts | 6 +- .../src/app/models/dashboard/SearchBarItem.ts | 7 ++ .../app/models/datasets/DatasetWizardModel.ts | 2 +- .../editor/project-editor.component.ts | 4 +- .../auto-complete.component.scss | 1 - .../breadcrumb/breadcrumb.component.ts | 2 +- .../external-item-listing.component.html | 6 +- .../navigation/navigation.component.html | 6 +- .../navigation/navigation.component.scss | 5 ++ .../navigation/navigation.component.ts | 11 ++- .../visibility-rules.service.ts | 22 +++--- dmp-frontend/src/assets/lang/en.json | 17 ++++- .../src/environments/environment.prod.ts | 6 +- elastic-config/elasticsearch-custom.yml | 2 +- 36 files changed, 255 insertions(+), 176 deletions(-) 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 f2b106fc9..547d60452 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 @@ -29,7 +29,7 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao { public QueryableList getWithCriteria(DataManagementPlanCriteria criteria) { QueryableList query = getDatabaseService().getQueryable(DMP.getHints(), DMP.class); if (criteria.getLike() != null && !criteria.getLike().isEmpty()) - query.where((builder, root) -> builder.like(root.get("label"), "%" + criteria.getLike() + "%")); + query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%")); if (criteria.getPeriodEnd() != null) query.where((builder, root) -> builder.lessThan(root.get("created"), criteria.getPeriodEnd())); if (criteria.getPeriodStart() != null) diff --git a/dmp-backend/logging/src/main/java/eu/eudat/core/logger/common/AbstractBatchLogger.java b/dmp-backend/logging/src/main/java/eu/eudat/core/logger/common/AbstractBatchLogger.java index e9938a5ff..baf14718a 100644 --- a/dmp-backend/logging/src/main/java/eu/eudat/core/logger/common/AbstractBatchLogger.java +++ b/dmp-backend/logging/src/main/java/eu/eudat/core/logger/common/AbstractBatchLogger.java @@ -19,9 +19,9 @@ public abstract class AbstractBatchLogger { private Map concurrentHashMap = new ConcurrentHashMap(); public AbstractBatchLogger(Environment environment) { - ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + //ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); - executor.scheduleAtFixedRate(() -> this.outputData(), Long.parseLong(environment.getProperty("http-logger.initial-delay")), Long.parseLong(environment.getProperty("http-logger.delay")), TimeUnit.SECONDS); + //executor.scheduleAtFixedRate(() -> this.outputData(), Long.parseLong(environment.getProperty("http-logger.initial-delay")), Long.parseLong(environment.getProperty("http-logger.delay")), TimeUnit.SECONDS); } public abstract LoggingOutputType logOutputType(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java index ab42b9fc7..3da81d2d4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java @@ -6,6 +6,7 @@ import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.security.Principal; import eu.eudat.types.ApiMessageCode; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import types.LoggingType; +import javax.annotation.Priority; import java.util.HashMap; import java.util.Map; @@ -20,6 +22,7 @@ import java.util.Map; * Created by ikalyvas on 6/12/2018. */ @ControllerAdvice +@Priority(5) public class ControllerErrorHandler { private Logger logger; @@ -29,7 +32,7 @@ public class ControllerErrorHandler { this.logger = logger; } - @ExceptionHandler(NullPointerException.class) + @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseBody public ResponseItem processValidationError(Principal principal, Exception ex) throws Exception { @@ -41,6 +44,7 @@ public class ControllerErrorHandler { apiExceptionLoggingModel.setData(exceptionMap); apiExceptionLoggingModel.setMessage(ex.getMessage()); apiExceptionLoggingModel.setType(LoggingType.ERROR); + ex.printStackTrace(); this.logger.error(apiExceptionLoggingModel); return new ResponseItem().message(ex.getMessage()).status(ApiMessageCode.DEFAULT_ERROR_MESSAGE); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java index ba89aa83e..72e02ad89 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java @@ -3,16 +3,20 @@ package eu.eudat.controllers.controllerhandler; import eu.eudat.core.logger.Logger; import eu.eudat.exceptions.security.UnauthorisedException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; +import javax.annotation.Priority; + /** * Created by ikalyvas on 6/12/2018. */ @ControllerAdvice +@Priority(4) public class ControllerUnauthorisedHandler { private Logger logger; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerValidatorErrorHandler.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerValidatorErrorHandler.java index 5edafa4b6..ad433cdd0 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerValidatorErrorHandler.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerValidatorErrorHandler.java @@ -6,6 +6,7 @@ import eu.eudat.types.ApiMessageCode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; @@ -20,6 +21,7 @@ import java.util.Locale; @ControllerAdvice +@Order(3) public class ControllerValidatorErrorHandler { private MessageSource messageSource; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java index d81ea70fd..886d8b038 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java @@ -102,21 +102,21 @@ public class DashBoardManager { List searchBarItems = new LinkedList<>(); CompletableFuture> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.asQueryable(), user) .withHint("dmpRecentActivity") - .where((builder, root) -> builder.like(root.get("label"), "%" + like + "%")) + .where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + like.toUpperCase() + "%")) .orderBy((builder, root) -> builder.desc(root.get("modified"))) .selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.DMP.getValue())) .whenComplete((dmpItems, throwable) -> searchBarItems.addAll(dmpItems)); CompletableFuture> datasets = datasetRepository.getAuthenticated(datasetRepository.asQueryable(), user) .withHint("datasetRecentActivity") - .where((builder, root) -> builder.like(root.get("label"), "%" + like + "%")) + .where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + like.toUpperCase() + "%")) .orderBy((builder, root) -> builder.desc(root.get("modified"))) .selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.DATASET.getValue())) .whenComplete((dataSetItems, throwable) -> searchBarItems.addAll(dataSetItems)); CompletableFuture> projects = projectRepository.getAuthenticated(projectRepository.asQueryable(), user) .withHint("projectRecentActivity") - .where((builder, root) -> builder.like(root.get("label"), "%" + like + "%")) + .where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + like.toUpperCase() + "%")) .orderBy((builder, root) -> builder.desc(root.get("modified"))) .selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.PROJECT.getValue())) .whenComplete((projectItems, throwable) -> searchBarItems.addAll(projectItems)); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index e0f00019d..21dc814e1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -254,7 +254,7 @@ public class DatasetManager { datasetDataRepository.setDataset(dataset); dataset.getDatasetDataRepositories().add(datasetDataRepository); } else { - datasetDataRepository.getDataRepository().setId(UUID.randomUUID()); + //datasetDataRepository.getDataRepository().setId(UUID.randomUUID()); DataRepository dataRepository = dataRepositoryDao.createOrUpdate(datasetDataRepository.getDataRepository()); datasetDataRepository.setDataRepository(dataRepository); dataset.getDatasetDataRepositories().add(datasetDataRepository); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/validators/ProjectModelValidator.java b/dmp-backend/web/src/main/java/eu/eudat/models/validators/ProjectModelValidator.java index 5ed5b1c6f..68143fc31 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/validators/ProjectModelValidator.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/validators/ProjectModelValidator.java @@ -15,7 +15,9 @@ public class ProjectModelValidator extends FluentValidator { ruleFor(x -> x.getType()).compareAs((x -> eu.eudat.data.entities.Project.ProjectType.EXTERNAL.getValue()), (leftItem, rightItem) -> leftItem == rightItem) .withName("type").withMessage("project.external.edit"); ruleFor(x -> x.getStartDate()).compareAs((x -> x.getEndDate()), (leftItem, rightItem) -> leftItem.after(rightItem)) - .withName("startDate").withMessage("project.startDate.overlapping"); + .withName("startDate").withMessage("project.startDate.overlapping") + .ruleIf(x -> x.getStartDate() != null && x.getEndDate() != null); + } @Override diff --git a/dmp-backend/web/src/main/resources/application.properties b/dmp-backend/web/src/main/resources/application.properties index ed1996337..a09e516eb 100644 --- a/dmp-backend/web/src/main/resources/application.properties +++ b/dmp-backend/web/src/main/resources/application.properties @@ -41,11 +41,11 @@ google.login.clientId=524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleu ########################LINKEDIN LOGIN Properties#############################HiR4hQH9HNubKC5iKQy0l4mAZ linkedin.login.clientId=86bl8vfk77clh9 linkedin.login.clientSecret=2OCO9e3wKylW05Tt -linkedin.login.redirect_uri=http://localhost:4200/login/linkedin +linkedin.login.redirect_uri=http://opendmp.eu/login/linkedin ########################LINKEDIN LOGIN Properties############################# twitter.login.clientId=HiR4hQH9HNubKC5iKQy0l4mAZ twitter.login.clientSecret=9KZHgkqUO2QFnELSL14jeUvfUacWX23rqD8OW8X0xoRDXOSfKH -twitter.login.redirect_uri=http://dl043.madgik.di.uoa.gr/login/twitter +twitter.login.redirect_uri=http://opendmp.eu/login/twitter ########################Persistence/Hibernate/Batch############################## spring.profiles.active=devel ########################Persistence/Hibernate/Connection pool#################### @@ -55,7 +55,7 @@ autouser.root.username=root ################################################################################# b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://dl043.madgik.di.uoa.gr/api/oauth/authorized/b2access +b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access b2access.externallogin.clientid=eudatdmptool b2access.externallogin.clientSecret=A3b*1*92 ################################################################################# diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index 2f8c76a13..8755cc8e0 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -90,7 +90,7 @@ import { CultureService } from './utilities/culture/culture-service'; clientId: 'eudatdmptool', clientSecret: 'A3b*1*92', oauthUrl: 'https://b2access-integration.fz-juelich.de:443/oauth2-as/oauth2-authz', - redirectUri: 'http://dl043.madgik.di.uoa.gr/api/oauth/authorized/b2access', + redirectUri: 'http://opendmp.eu/api/oauth/authorized/b2access', accessTokenUri: 'https://b2access-integration.fz-juelich.de:443/oauth2/token' } }), diff --git a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html index 5cabc997f..b0f6b8814 100644 --- a/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html +++ b/dmp-frontend/src/app/datasets/dataset-public/dataset-public-listing.component.html @@ -1,5 +1,5 @@
-

{{'DATASET-LISTING.TITLE' | translate}} {{titlePrefix}}

+

{{'DATASET-PUBLIC-LISTING.TITLE' | translate}} {{titlePrefix}}

diff --git a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html index 36d6e38d4..947bd3cd5 100644 --- a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html +++ b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.html @@ -1,6 +1,12 @@

New Dataset

-

{{datasetWizardModel?.label}} Dataset

+
+
+

{{datasetWizardModel?.label}} {{ 'GENERAL.NAMES.DATASET' | translate }}

+

- {{ 'GENERAL.STATUSES.EDIT' | translate }}

+

- {{ 'GENERAL.STATUSES.FINALISED' | translate }}

+
+
-
@@ -49,7 +54,7 @@ - + {{'DATASET-EDITOR.FIELDS.DATAREPOSITORIES' | translate}} @@ -83,11 +88,11 @@ - + {{'DATASET-EDITOR.FIELDS.EXTERNAL-DATASETS' | translate}} + {{'DATASET-EDITOR.FIELDS.CREATE'|translate}} + -
+

{{i+1}}) {{suggestion.get('label').value}}

-
+
-
+
{{'TYPES.EXTERNAL-DATASET-TYPE.SOURCE' | translate}} @@ -117,7 +122,7 @@
-
+
@@ -127,27 +132,26 @@ - + {{'DATASET-EDITOR.FIELDS.REGISTRIES' | translate}} + {{'DATASET-EDITOR.FIELDS.CREATE'|translate}} + - -
+

{{i+1}}) {{suggestion.get('label').value}}

-
+
@@ -157,11 +161,11 @@ - + {{'DATASET-EDITOR.FIELDS.SERVICES' | translate}} + {{'DATASET-EDITOR.FIELDS.CREATE'|translate}} + -
+

{{i+1}}) {{suggestion.get('label').value}}

-
+
@@ -199,12 +203,12 @@ -
+

{{i+1}}) {{suggestion.get('name').value}}

-
+
diff --git a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts index bdd85d451..00d294dd3 100644 --- a/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/datasets/dataset-wizard/dataset-wizard.component.ts @@ -179,6 +179,10 @@ export class DatasetWizardComponent implements OnInit, IBreadCrumbComponent { ] }]) this.formGroup = this.datasetWizardModel.buildForm(); + if (this.datasetWizardModel.status == 1) { + this.formGroup.disable() + this.viewOnly = true; + } if (this.viewOnly) this.formGroup.disable(); this.loadDatasetProfiles(); }); @@ -190,6 +194,10 @@ export class DatasetWizardComponent implements OnInit, IBreadCrumbComponent { setTimeout(() => { this.datasetWizardModel.dmp = data; this.formGroup = this.datasetWizardModel.buildForm(); + if (this.datasetWizardModel.status == 1) { + this.formGroup.disable() + this.viewOnly = true; + } this.loadDatasetProfiles(); this.breadCrumbs = Observable.of([ @@ -214,6 +222,11 @@ export class DatasetWizardComponent implements OnInit, IBreadCrumbComponent { } else { this.datasetWizardModel = new DatasetWizardModel(); this.formGroup = this.datasetWizardModel.buildForm() + if (this.datasetWizardModel.status == 1) { + this.formGroup.disable() + this.viewOnly = true; + } + if (this.viewOnly) this.formGroup.disable(); this.formGroup.get('dmp').valueChanges.subscribe(x => { diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.html b/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.html index f00a4be02..cddd89e79 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.html +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.ts b/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.ts index 1ddfc34a3..0b325c337 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.ts +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.ts @@ -22,18 +22,20 @@ export class DynamicFormFieldComponent implements OnInit { @Input() pathName: string; @Input() path: string; change: Subscription; - trackByFn = (index,item) => item["id"] + trackByFn = (index, item) => item ? item["id"] : null constructor(private route: ActivatedRoute, public visibilityRulesService: VisibilityRulesService) { } ngOnInit() { - this.form = this.visibilityRulesService.getFormGroup(this.field.id) - if(!this.form) debugger; - if(!this.form.get('value')) debugger; - this.change = this.form.get('value').valueChanges.subscribe(item => { - this.visibilityRulesService.updateValueAndVisibility(this.field.id) - }) + if (this.field) { + this.form = this.visibilityRulesService.getFormGroup(this.field.id) + if (!this.form) debugger; + if (!this.form.get('value')) debugger; + this.change = this.form.get('value').valueChanges.subscribe(item => { + this.visibilityRulesService.updateValueAndVisibility(this.field.id) + }) + } } ngOnChanges(changeRecord) { @@ -43,7 +45,7 @@ export class DynamicFormFieldComponent implements OnInit { ngOnDestroy(): void { //Called once, before the instance is destroyed. //Add 'implements OnDestroy' to the class. - this.change.unsubscribe() + if(this.change) this.change.unsubscribe() } clearInput() { diff --git a/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.html b/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.html index ce3c6d70a..d69af5092 100644 --- a/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.html +++ b/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.html @@ -1,39 +1,40 @@
-
-
{{compositeField.title}}
-
-
{{compositeField.description}}
-
- {{compositeField.extendedDescription}} -
- -
+
+
{{compositeField.title}}
+
+
{{compositeField.description}}
+
+ {{compositeField.extendedDescription}} +
+
+
-
-
{{compositeField.title}}
-
-
{{compositeField.description}}
-
- {{compositeField.extendedDescription}} -
-
- +
+
{{compositeField.title}}
+
+
{{compositeField.description}}
+
+ {{compositeField.extendedDescription}} +
+
+ - -
- -
-
+ +
+
+ +
+
+
diff --git a/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.ts b/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.ts index f50a16894..d9306881a 100644 --- a/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.ts +++ b/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.ts @@ -17,13 +17,15 @@ export class DynamicFormCompositeFieldComponent implements OnInit { form: FormGroup; @Input() pathName: string; @Input() path: string; - trackByFn = (index, item) => item["id"] + trackByFn = (index, item) => item ? item["id"] : null constructor(private visibilityRulesService: VisibilityRulesService) { } ngOnInit() { - this.form = this.visibilityRulesService.getFormGroup(this.compositeField.id) + if (this.compositeField) { + this.form = this.visibilityRulesService.getFormGroup(this.compositeField.id) + } } @@ -32,6 +34,4 @@ export class DynamicFormCompositeFieldComponent implements OnInit { this.compositeField.fields[fieldIndex].multiplicityItems.push(field); ((this.form.get("fields").get('' + fieldIndex).get('multiplicityItems'))).push(field.buildForm()); } - - } diff --git a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html index b7c88206c..28db509eb 100644 --- a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html +++ b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html @@ -1,19 +1,20 @@
-
+
-
- - -
- -
+
+ + +
+
+ +
+
+
diff --git a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.ts b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.ts index 21ef6f52f..04173391f 100644 --- a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.ts +++ b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.ts @@ -19,12 +19,14 @@ export class DynamicFormGroupComponent implements OnInit { @Input() pathName: string; @Input() path: string; - trackByFn = (index,item) => item["id"] + trackByFn = (index, item) => item ? item["id"] : null constructor(public visibilityRulesService: VisibilityRulesService) { } ngOnInit() { - this.form = this.visibilityRulesService.getFormGroup(this.group.id) + if (this.group) { + this.form = this.visibilityRulesService.getFormGroup(this.group.id) + } } diff --git a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.html b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.html index 1dcf545b6..2a77b69b7 100644 --- a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.html +++ b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.html @@ -1,42 +1,43 @@
- - - - - {{path}} {{section.title}} - - -

{{section.description}}

- -
-
- -
-
- - -
- -
-
- - - -
-
+ + + + + {{path}} {{section.title}} + + +

{{section.description}}

+ +
+
+
+
+ + +
+
+
- -
-
- -
+
+ + +
- - +
+
+ +
+ +
+
+ +
+
+ +
diff --git a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts index 970deec8d..e8527dcbc 100644 --- a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts +++ b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts @@ -19,11 +19,17 @@ export class DynamicFormSectionComponent implements OnInit { form: FormGroup; @Input() pathName: string; @Input() path: string; - trackByFn = (item) => item["id"] + trackByFn = (index, item) => item ? item["id"] : null constructor(public visibilityRulesService: VisibilityRulesService) { } ngOnInit() { - this.form = this.visibilityRulesService.getFormGroup(this.section.id) + if (this.section) { + this.form = this.visibilityRulesService.getFormGroup(this.section.id) + } + } + + ngAfterViewInit() { + this.visibilityRulesService.triggerVisibilityEvaluation() } addMultipleField(fieldsetIndex: number) { @@ -32,10 +38,10 @@ export class DynamicFormSectionComponent implements OnInit { ((this.form.get("compositeFields").get('' + fieldsetIndex).get('multiplicityItems'))).push(compositeField.buildForm()); } - isVisible(pathname: string, fieldSet: CompositeField): boolean { - if (!fieldSet || !this.visibilityRulesService.getFormGroup(fieldSet.id)) return false; + isElementVisible(fieldSet: CompositeField): boolean { + if (!fieldSet) return false; for (var i = 0; i < fieldSet.fields.length; i++) { - if (this.visibilityRulesService.getFormGroup(fieldSet.fields[i].id)) + if (fieldSet.fields[i]) return true; } return false; diff --git a/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts index 527ea332f..98dedac09 100644 --- a/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts +++ b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.ts @@ -26,15 +26,15 @@ declare function simple_notifier(type: string, title: string, message: string): ], encapsulation: ViewEncapsulation.None, }) -export class DynamicFormComponent implements OnInit { +export class DynamicFormComponent implements OnInit, AfterViewInit { @Input() dataModel: DatasetWizardModel = new DatasetWizardModel(); @Input() path: string; @Input() form: FormGroup; id: string; - trackByFn = (index,item) => item["id"] - pageTrackByFn = (index,item) => item["id"] + trackByFn = (index, item) => item ? item["id"] : null + pageTrackByFn = (index, item) => item["id"] // @Input() datasetId: string; pathName: string; @@ -82,6 +82,10 @@ export class DynamicFormComponent implements OnInit { }); } + ngAfterViewInit() { + this.visibilityRulesService.triggerVisibilityEvaluation() + } + toggleSidebar() { this.visibleSidebar = !this.visibleSidebar; diff --git a/dmp-frontend/src/app/models/Section.ts b/dmp-frontend/src/app/models/Section.ts index 828ede260..ba096aa59 100644 --- a/dmp-frontend/src/app/models/Section.ts +++ b/dmp-frontend/src/app/models/Section.ts @@ -11,6 +11,7 @@ export class Section extends BaseModel implements Serializable
, FormGen //public fieldGroups: Array; public defaultVisibility: boolean; public page: number; + public ordinal: number; public id: string public title: string public description: string; @@ -23,6 +24,7 @@ export class Section extends BaseModel implements Serializable
, FormGen this.defaultVisibility = item.defaultVisibility; this.id = item.id; this.title = item.title; + this.ordinal = item.ordinal; this.description = item.description; this.compositeFields = JsonSerializer.fromJSONArray(item.compositeFields, CompositeField); return this; @@ -58,7 +60,7 @@ export class Section extends BaseModel implements Serializable
, FormGen formGroup.addControl('page', new FormControl(this.page)) formGroup.addControl('id', new FormControl(this.id)) formGroup.addControl('title', new FormControl(this.title)) - formGroup.addControl('description', new FormControl(this.description)) */ + formGroup.addControl('description', new FormControl(this.description)) */ return formGroup; } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/models/dashboard/SearchBarItem.ts b/dmp-frontend/src/app/models/dashboard/SearchBarItem.ts index 68c938171..954a40f05 100644 --- a/dmp-frontend/src/app/models/dashboard/SearchBarItem.ts +++ b/dmp-frontend/src/app/models/dashboard/SearchBarItem.ts @@ -1,4 +1,11 @@ +export enum SearchBarItemType { + DATASET = 0, + DMP = 1, + PROJECT = 2 +} + export class SearchBarItem { public id: string; public label: string; + public type: string; } diff --git a/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts b/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts index 229d0e5d7..256df374f 100644 --- a/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts +++ b/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts @@ -19,7 +19,7 @@ export class DatasetWizardModel implements Serializable { public label: string; public profile: DatasetProfileModel = new DatasetProfileModel(); public uri: String; - public status: String; + public status: number; public description: String; public services: ServiceModel[] = []; public registries: RegisterModel[] = []; diff --git a/dmp-frontend/src/app/projects/editor/project-editor.component.ts b/dmp-frontend/src/app/projects/editor/project-editor.component.ts index 05e48a389..dc11d6f66 100644 --- a/dmp-frontend/src/app/projects/editor/project-editor.component.ts +++ b/dmp-frontend/src/app/projects/editor/project-editor.component.ts @@ -101,7 +101,7 @@ export class ProjectEditorComponent implements OnInit, IBreadCrumbComponent { } onCallbackError(errorResponse: any) { - this.setErrorModel(errorResponse.error); + this.setErrorModel(errorResponse.error.payload); this.validateAllFormFields(this.formGroup); } @@ -190,7 +190,7 @@ export class ProjectEditorComponent implements OnInit, IBreadCrumbComponent { let fileList: FileList | File = event.target.files; let formdata: FormData = new FormData(); - + if (fileList instanceof FileList) { for (let i: number = 0; i < fileList.length; i++) { formdata.append('file', fileList[i]); diff --git a/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.scss b/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.scss index 1138f7885..759a360e7 100644 --- a/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.scss +++ b/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.scss @@ -3,5 +3,4 @@ width: 100%; padding: 3px; } - } diff --git a/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.ts b/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.ts index 8cd982a73..c74dc6bf9 100644 --- a/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.ts +++ b/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.ts @@ -30,7 +30,7 @@ export class BreadcrumbComponent implements OnInit { } buildBreadCrumb(route: ActivatedRoute): Observable { - return this.breadCrumbService.resolve(route).map(x => { x.unshift({ label: 'Home', url: '/welcome' }); return x; }); + return this.breadCrumbService.resolve(route).map(x => { x.unshift({ label: 'Dashboard', url: '/welcome' }); return x; }); } navigate(url, params) { diff --git a/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.html b/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.html index 56aa867b8..53af92904 100644 --- a/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.html +++ b/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.html @@ -1,7 +1,7 @@
-
+
@@ -11,13 +11,13 @@
-
-
+
diff --git a/dmp-frontend/src/app/shared/components/navigation/navigation.component.html b/dmp-frontend/src/app/shared/components/navigation/navigation.component.html index aab4498e1..d00845e55 100644 --- a/dmp-frontend/src/app/shared/components/navigation/navigation.component.html +++ b/dmp-frontend/src/app/shared/components/navigation/navigation.component.html @@ -21,8 +21,10 @@ - - {{option.label}} + + {{option.label}} +
+ {{transformType(option.type)}}
diff --git a/dmp-frontend/src/app/shared/components/navigation/navigation.component.scss b/dmp-frontend/src/app/shared/components/navigation/navigation.component.scss index d7dcddc8c..5ea652246 100644 --- a/dmp-frontend/src/app/shared/components/navigation/navigation.component.scss +++ b/dmp-frontend/src/app/shared/components/navigation/navigation.component.scss @@ -37,3 +37,8 @@ .full-width { width: 100%; } + +.transformation-value-mat-option { + height: 3.5em; + line-height: 1.2em; +} diff --git a/dmp-frontend/src/app/shared/components/navigation/navigation.component.ts b/dmp-frontend/src/app/shared/components/navigation/navigation.component.ts index f3a722f02..3545529ce 100644 --- a/dmp-frontend/src/app/shared/components/navigation/navigation.component.ts +++ b/dmp-frontend/src/app/shared/components/navigation/navigation.component.ts @@ -12,7 +12,7 @@ import { ProjectService } from '../../../services/project/project.service'; import { FormControl } from '@angular/forms'; import { DashboardService } from '../../../services/dashboard/dashboard.service'; import { Observable } from 'rxjs/Observable'; -import { SearchBarItem } from '../../../models/dashboard/SearchBarItem'; +import { SearchBarItem, SearchBarItemType } from '../../../models/dashboard/SearchBarItem'; import { SearchBarType } from '../search-bar/types/search-bar-type'; import { Router } from '@angular/router'; @@ -52,7 +52,7 @@ export class NavigationComponent { loadDataOnStart: true }; - this.filteredOptions = this.searchControl.valueChanges.flatMap(x => { + this.filteredOptions = this.searchControl.valueChanges.debounceTime(500).distinctUntilChanged().flatMap(x => { return this.dashBoardService.searchUserItems(x); }) } @@ -122,4 +122,11 @@ export class NavigationComponent { if (selectedSearchBarItem.type == SearchBarType.DATAMANAGEMENTPLAN) this.router.navigate(["dmps/edit/" + selectedSearchBarItem.id]) } + transformType(type) { + switch(type){ + case SearchBarItemType.DATASET: return "Dataset" + case SearchBarItemType.DMP: return "DMP" + case SearchBarItemType.PROJECT: return "Project" + } + } } diff --git a/dmp-frontend/src/app/utilities/visibility-rules/visibility-rules.service.ts b/dmp-frontend/src/app/utilities/visibility-rules/visibility-rules.service.ts index 8438f03c4..3528fa7c1 100644 --- a/dmp-frontend/src/app/utilities/visibility-rules/visibility-rules.service.ts +++ b/dmp-frontend/src/app/utilities/visibility-rules/visibility-rules.service.ts @@ -22,8 +22,11 @@ export class VisibilityRulesService { public setModel(model: DatasetProfileDefinitionModel) { this.initialModel = JsonSerializer.fromJSONObject(model, DatasetProfileDefinitionModel); this.currentModel = model - this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item)) + //this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item)) + } + public triggerVisibilityEvaluation() { + this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item)) } public getFormGroup(id: string): FormGroup { @@ -53,7 +56,7 @@ export class VisibilityRulesService { private evaluateVisibility(visibilityRule: VisibilityRule) { for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) { let pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId]; - if (this.formGroup.get(pathKey + '.value') && ((this.formGroup.get(pathKey + '.value').value == null || this.formGroup.get(pathKey + '.value').value == undefined) || "" + this.formGroup.get(pathKey + '.value').value != "" + visibilityRule.sourceVisibilityRules[i].sourceControlValue)) { + if (this.formGroup.get(pathKey + '.value') && ((this.formGroup.get(pathKey + '.value').value == null || this.formGroup.get(pathKey + '.value').value == null) || "" + this.formGroup.get(pathKey + '.value').value != "" + visibilityRule.sourceVisibilityRules[i].sourceControlValue)) { if (this.formGroup.get(pathKey).parent.get("id")) { if (!this.checkElementVisibility(this.formGroup.get(pathKey).parent.get("id").value)) { let targetPathKey = this.fieldsPathMemory[visibilityRule.targetControlId] @@ -78,10 +81,6 @@ export class VisibilityRulesService { this.elementVisibilityMap.set(visibilityRule.targetControlId, true) } - private getParentPath(parentId: string): string { - return ''; - } - private clearValues(pathKey) { if (pathKey && this.formGroup.get(pathKey + '.value')) this.formGroup.get(pathKey + '.value').patchValue(null) if (pathKey && this.formGroup.get(pathKey)["controls"].fields) { @@ -107,15 +106,16 @@ export class VisibilityRulesService { updateValue(obj, value, path) { var i; - if (value['id'].targetControlId === "other216a") debugger; path = path.split('.'); - for (i = 0; i < path.length - 1; i++) + + for (i = 0; i < path.length - 1; i++) { obj = obj[path[i]]; + } for (let propIndex = 0; propIndex < obj.length; propIndex++) { - if (obj[propIndex]["id"] === value["id"]) return + if (obj[propIndex] && obj[propIndex]["id"] === value["id"]) return } - obj.splice(path[i], 0, value); + obj[path[i]] = value; } search(path, obj, target) { @@ -140,7 +140,7 @@ export class VisibilityRulesService { if (returnObj) return returnObj } else if (i == key && obj[key] == val) { //console.log(obj[key]) - if (deleteObj) parent.splice(parent.indexOf(obj), 1); + if (deleteObj) parent[parent.indexOf(obj)] = null return obj } } diff --git a/dmp-frontend/src/assets/lang/en.json b/dmp-frontend/src/assets/lang/en.json index 5ddfa6289..9e54ff4df 100644 --- a/dmp-frontend/src/assets/lang/en.json +++ b/dmp-frontend/src/assets/lang/en.json @@ -19,6 +19,13 @@ }, "ERRORS": { "HTTP-REQUEST-ERROR": "An Unexpected Error Has Occured" + }, + "NAMES": { + "DATASET": "Dataset" + }, + "STATUSES": { + "EDIT": "Edited", + "FINALISED": "Finalized" } }, "NAV-BAR": { @@ -26,7 +33,7 @@ "PROJECTS": "Projects", "DMPS": "DMPs", "DATASETS": "Datasets", - "PUBLIC-DATASETS": "Public Datasets", + "PUBLIC-DATASETS": "Explore OpenDMP", "USERS": "Users", "DATASETS-ADMIN": "Dataset Profiles", "DMP-PROFILES": "DMP Profiles", @@ -78,10 +85,10 @@ "PROFILE": "Dataset Profile" }, "SECOND-STEP": { - "TITLE": "External Sources" + "TITLE": "External References" }, "THIRD-STEP": { - "TITLE": "Definition" + "TITLE": "Description" }, "ACTIONS": { "NEXT": "Next", @@ -112,6 +119,9 @@ "VIEW": "View" } }, + "DATASET-PUBLIC-LISTING": { + "TITLE": "Published dataset descriptions" + }, "DMP-PROFILE-EDITOR": { "TITLE": { "NEW": "New DMP Profile", @@ -212,6 +222,7 @@ "DESCRIPTION": "Description", "PROFILE": "Profile", "URI": "Uri", + "DMP": "DMP", "DATAREPOSITORIES": "Data Repositories", "REGISTRIES": "Registries", "SERVICES": "Services", diff --git a/dmp-frontend/src/environments/environment.prod.ts b/dmp-frontend/src/environments/environment.prod.ts index b3c3e167c..99024690b 100644 --- a/dmp-frontend/src/environments/environment.prod.ts +++ b/dmp-frontend/src/environments/environment.prod.ts @@ -1,7 +1,7 @@ export const environment = { production: true, - Server: 'http://dl043.madgik.di.uoa.gr:8080/api/', - App: 'http://dl043.madgik.di.uoa.gr/', - HelpServiceUrl: 'http://dl043.madgik.di.uoa.gr:5555/', + Server: 'http://opendmp.eu:8080/api/', + App: 'http://opendmp.eu/', + HelpServiceUrl: 'http://opendmp.eu:5555/', defaultCulture: "en-GB" }; diff --git a/elastic-config/elasticsearch-custom.yml b/elastic-config/elasticsearch-custom.yml index 62c2ff915..2a1bbc050 100644 --- a/elastic-config/elasticsearch-custom.yml +++ b/elastic-config/elasticsearch-custom.yml @@ -1,3 +1,3 @@ transport.host: 0.0.0.0 network.host: 0.0.0.0 -xpack.security.enabled: false \ No newline at end of file +xpack.security.enabled: true \ No newline at end of file