no message

dmp-editor
Ioannis Kalyvas 6 years ago
parent 8c7d505178
commit a5160738eb

@ -29,7 +29,7 @@ public class DMPDaoImpl extends DatabaseAccess<DMP> implements DMPDao {
public QueryableList<DMP> getWithCriteria(DataManagementPlanCriteria criteria) { public QueryableList<DMP> getWithCriteria(DataManagementPlanCriteria criteria) {
QueryableList<DMP> query = getDatabaseService().getQueryable(DMP.getHints(), DMP.class); QueryableList<DMP> query = getDatabaseService().getQueryable(DMP.getHints(), DMP.class);
if (criteria.getLike() != null && !criteria.getLike().isEmpty()) 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) if (criteria.getPeriodEnd() != null)
query.where((builder, root) -> builder.lessThan(root.get("created"), criteria.getPeriodEnd())); query.where((builder, root) -> builder.lessThan(root.get("created"), criteria.getPeriodEnd()));
if (criteria.getPeriodStart() != null) if (criteria.getPeriodStart() != null)

@ -19,9 +19,9 @@ public abstract class AbstractBatchLogger {
private Map<String, Object> concurrentHashMap = new ConcurrentHashMap<String, Object>(); private Map<String, Object> concurrentHashMap = new ConcurrentHashMap<String, Object>();
public AbstractBatchLogger(Environment environment) { 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(); public abstract LoggingOutputType logOutputType();

@ -6,6 +6,7 @@ import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.security.Principal;
import eu.eudat.types.ApiMessageCode; import eu.eudat.types.ApiMessageCode;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler; 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 org.springframework.web.bind.annotation.ResponseStatus;
import types.LoggingType; import types.LoggingType;
import javax.annotation.Priority;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -20,6 +22,7 @@ import java.util.Map;
* Created by ikalyvas on 6/12/2018. * Created by ikalyvas on 6/12/2018.
*/ */
@ControllerAdvice @ControllerAdvice
@Priority(5)
public class ControllerErrorHandler { public class ControllerErrorHandler {
private Logger logger; private Logger logger;
@ -29,7 +32,7 @@ public class ControllerErrorHandler {
this.logger = logger; this.logger = logger;
} }
@ExceptionHandler(NullPointerException.class) @ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody @ResponseBody
public ResponseItem<Exception> processValidationError(Principal principal, Exception ex) throws Exception { public ResponseItem<Exception> processValidationError(Principal principal, Exception ex) throws Exception {
@ -41,6 +44,7 @@ public class ControllerErrorHandler {
apiExceptionLoggingModel.setData(exceptionMap); apiExceptionLoggingModel.setData(exceptionMap);
apiExceptionLoggingModel.setMessage(ex.getMessage()); apiExceptionLoggingModel.setMessage(ex.getMessage());
apiExceptionLoggingModel.setType(LoggingType.ERROR); apiExceptionLoggingModel.setType(LoggingType.ERROR);
ex.printStackTrace();
this.logger.error(apiExceptionLoggingModel); this.logger.error(apiExceptionLoggingModel);
return new ResponseItem<Exception>().message(ex.getMessage()).status(ApiMessageCode.DEFAULT_ERROR_MESSAGE); return new ResponseItem<Exception>().message(ex.getMessage()).status(ApiMessageCode.DEFAULT_ERROR_MESSAGE);
} }

@ -3,16 +3,20 @@ package eu.eudat.controllers.controllerhandler;
import eu.eudat.core.logger.Logger; import eu.eudat.core.logger.Logger;
import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.exceptions.security.UnauthorisedException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;
import javax.annotation.Priority;
/** /**
* Created by ikalyvas on 6/12/2018. * Created by ikalyvas on 6/12/2018.
*/ */
@ControllerAdvice @ControllerAdvice
@Priority(4)
public class ControllerUnauthorisedHandler { public class ControllerUnauthorisedHandler {
private Logger logger; private Logger logger;

@ -6,6 +6,7 @@ import eu.eudat.types.ApiMessageCode;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource; import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;
@ -20,6 +21,7 @@ import java.util.Locale;
@ControllerAdvice @ControllerAdvice
@Order(3)
public class ControllerValidatorErrorHandler { public class ControllerValidatorErrorHandler {
private MessageSource messageSource; private MessageSource messageSource;

@ -102,21 +102,21 @@ public class DashBoardManager {
List<SearchBarItem> searchBarItems = new LinkedList<>(); List<SearchBarItem> searchBarItems = new LinkedList<>();
CompletableFuture<List<SearchBarItem>> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.asQueryable(), user) CompletableFuture<List<SearchBarItem>> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.asQueryable(), user)
.withHint("dmpRecentActivity") .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"))) .orderBy((builder, root) -> builder.desc(root.get("modified")))
.selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.DMP.getValue())) .selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.DMP.getValue()))
.whenComplete((dmpItems, throwable) -> searchBarItems.addAll(dmpItems)); .whenComplete((dmpItems, throwable) -> searchBarItems.addAll(dmpItems));
CompletableFuture<List<SearchBarItem>> datasets = datasetRepository.getAuthenticated(datasetRepository.asQueryable(), user) CompletableFuture<List<SearchBarItem>> datasets = datasetRepository.getAuthenticated(datasetRepository.asQueryable(), user)
.withHint("datasetRecentActivity") .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"))) .orderBy((builder, root) -> builder.desc(root.get("modified")))
.selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.DATASET.getValue())) .selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.DATASET.getValue()))
.whenComplete((dataSetItems, throwable) -> searchBarItems.addAll(dataSetItems)); .whenComplete((dataSetItems, throwable) -> searchBarItems.addAll(dataSetItems));
CompletableFuture<List<SearchBarItem>> projects = projectRepository.getAuthenticated(projectRepository.asQueryable(), user) CompletableFuture<List<SearchBarItem>> projects = projectRepository.getAuthenticated(projectRepository.asQueryable(), user)
.withHint("projectRecentActivity") .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"))) .orderBy((builder, root) -> builder.desc(root.get("modified")))
.selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.PROJECT.getValue())) .selectAsync(item -> new SearchBarItem(item.getId().toString(), item.getLabel(), SearchBarItemType.PROJECT.getValue()))
.whenComplete((projectItems, throwable) -> searchBarItems.addAll(projectItems)); .whenComplete((projectItems, throwable) -> searchBarItems.addAll(projectItems));

@ -254,7 +254,7 @@ public class DatasetManager {
datasetDataRepository.setDataset(dataset); datasetDataRepository.setDataset(dataset);
dataset.getDatasetDataRepositories().add(datasetDataRepository); dataset.getDatasetDataRepositories().add(datasetDataRepository);
} else { } else {
datasetDataRepository.getDataRepository().setId(UUID.randomUUID()); //datasetDataRepository.getDataRepository().setId(UUID.randomUUID());
DataRepository dataRepository = dataRepositoryDao.createOrUpdate(datasetDataRepository.getDataRepository()); DataRepository dataRepository = dataRepositoryDao.createOrUpdate(datasetDataRepository.getDataRepository());
datasetDataRepository.setDataRepository(dataRepository); datasetDataRepository.setDataRepository(dataRepository);
dataset.getDatasetDataRepositories().add(datasetDataRepository); dataset.getDatasetDataRepositories().add(datasetDataRepository);

@ -15,7 +15,9 @@ public class ProjectModelValidator extends FluentValidator<Project> {
ruleFor(x -> x.getType()).compareAs((x -> eu.eudat.data.entities.Project.ProjectType.EXTERNAL.getValue()), (leftItem, rightItem) -> leftItem == rightItem) ruleFor(x -> x.getType()).compareAs((x -> eu.eudat.data.entities.Project.ProjectType.EXTERNAL.getValue()), (leftItem, rightItem) -> leftItem == rightItem)
.withName("type").withMessage("project.external.edit"); .withName("type").withMessage("project.external.edit");
ruleFor(x -> x.getStartDate()).compareAs((x -> x.getEndDate()), (leftItem, rightItem) -> leftItem.after(rightItem)) 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 @Override

@ -41,11 +41,11 @@ google.login.clientId=524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleu
########################LINKEDIN LOGIN Properties#############################HiR4hQH9HNubKC5iKQy0l4mAZ ########################LINKEDIN LOGIN Properties#############################HiR4hQH9HNubKC5iKQy0l4mAZ
linkedin.login.clientId=86bl8vfk77clh9 linkedin.login.clientId=86bl8vfk77clh9
linkedin.login.clientSecret=2OCO9e3wKylW05Tt 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############################# ########################LINKEDIN LOGIN Properties#############################
twitter.login.clientId=HiR4hQH9HNubKC5iKQy0l4mAZ twitter.login.clientId=HiR4hQH9HNubKC5iKQy0l4mAZ
twitter.login.clientSecret=9KZHgkqUO2QFnELSL14jeUvfUacWX23rqD8OW8X0xoRDXOSfKH 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############################## ########################Persistence/Hibernate/Batch##############################
spring.profiles.active=devel spring.profiles.active=devel
########################Persistence/Hibernate/Connection pool#################### ########################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.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.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.clientid=eudatdmptool
b2access.externallogin.clientSecret=A3b*1*92 b2access.externallogin.clientSecret=A3b*1*92
################################################################################# #################################################################################

@ -90,7 +90,7 @@ import { CultureService } from './utilities/culture/culture-service';
clientId: 'eudatdmptool', clientId: 'eudatdmptool',
clientSecret: 'A3b*1*92', clientSecret: 'A3b*1*92',
oauthUrl: 'https://b2access-integration.fz-juelich.de:443/oauth2-as/oauth2-authz', 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' accessTokenUri: 'https://b2access-integration.fz-juelich.de:443/oauth2/token'
} }
}), }),

@ -1,5 +1,5 @@
<div> <div>
<h3>{{'DATASET-LISTING.TITLE' | translate}} {{titlePrefix}}</h3> <h3>{{'DATASET-PUBLIC-LISTING.TITLE' | translate}} {{titlePrefix}}</h3>
<app-datasets-criteria-component [isPublic]='true'></app-datasets-criteria-component> <app-datasets-criteria-component [isPublic]='true'></app-datasets-criteria-component>

@ -1,6 +1,12 @@
<div class="dataset-wizard"> <div class="dataset-wizard">
<h3 *ngIf="isNew">New Dataset</h3> <h3 *ngIf="isNew">New Dataset</h3>
<h3 *ngIf="!isNew">{{datasetWizardModel?.label}} Dataset</h3> <div class="flex-container">
<div fxLayout="row">
<h3 *ngIf="!isNew">{{datasetWizardModel?.label}} {{ 'GENERAL.NAMES.DATASET' | translate }}</h3>
<h3 *ngIf="this.formGroup && this.formGroup.dirty"> - {{ 'GENERAL.STATUSES.EDIT' | translate }}</h3>
<h3 *ngIf="this.formGroup && viewOnly"> - {{ 'GENERAL.STATUSES.FINALISED' | translate }}</h3>
</div>
</div>
<div class="flex-container"> <div class="flex-container">
<button mat-raised-button color="primary" *ngIf="datasetWizardModel&&datasetWizardModel?.status != 1" style="margin-top: 15px;margin-bottom: 15px;margin-right: 15px;" <button mat-raised-button color="primary" *ngIf="datasetWizardModel&&datasetWizardModel?.status != 1" style="margin-top: 15px;margin-bottom: 15px;margin-right: 15px;"
@ -39,7 +45,6 @@
<button matStepperNext mat-raised-button style="float:right;" color="primary">{{'DATASET-WIZARD.ACTIONS.NEXT' | <button matStepperNext mat-raised-button style="float:right;" color="primary">{{'DATASET-WIZARD.ACTIONS.NEXT' |
translate}} translate}}
</button> </button>
</div> </div>
</form> </form>
</mat-step> </mat-step>
@ -49,7 +54,7 @@
<mat-card> <mat-card>
<mat-card-header> <mat-card-header>
<mat-card-title class="thick"> <mat-card-title class="thick" *ngIf='!viewOnly'>
{{'DATASET-EDITOR.FIELDS.DATAREPOSITORIES' | translate}} {{'DATASET-EDITOR.FIELDS.DATAREPOSITORIES' | translate}}
<button mat-raised-button color="primary" (click)="addDataRepository()"> <button mat-raised-button color="primary" (click)="addDataRepository()">
{{'DATASET-EDITOR.FIELDS.CREATE'|translate}} {{'DATASET-EDITOR.FIELDS.CREATE'|translate}}
@ -64,17 +69,17 @@
</app-external-item-listing> </app-external-item-listing>
<ng-template #dataRepositoriesTemplate let-suggestion let-i="index" let-callback="function"> <ng-template #dataRepositoriesTemplate let-suggestion let-i="index" let-callback="function">
<div> <div class="col-md-2">
<p> <p>
{{i+1}}) {{suggestion.get('label').value}} {{i+1}}) {{suggestion.get('label').value}}
</p> </p>
</div> </div>
<div> <div class="col-md-8">
<mat-form-field> <mat-form-field>
<input matInput placeholder="{{'DATASET-EDITOR.FIELDS.DATAREPOSITORIES-INFO' | translate}}" type="text" name="info" [formControl]="suggestion.get('info')"> <input matInput placeholder="{{'DATASET-EDITOR.FIELDS.DATAREPOSITORIES-INFO' | translate}}" type="text" name="info" [formControl]="suggestion.get('info')">
</mat-form-field> </mat-form-field>
</div> </div>
<div> <div class="col-md-2">
<button mat-button (click)="callback(i)"> <button mat-button (click)="callback(i)">
<mat-icon>close</mat-icon> <mat-icon>close</mat-icon>
</button> </button>
@ -83,11 +88,11 @@
</mat-card> </mat-card>
<mat-card> <mat-card>
<mat-card-header> <mat-card-header>
<mat-card-title class="thick"> <mat-card-title class="thick" *ngIf='!viewOnly'>
{{'DATASET-EDITOR.FIELDS.EXTERNAL-DATASETS' | translate}} {{'DATASET-EDITOR.FIELDS.EXTERNAL-DATASETS' | translate}}
<button mat-raised-button color="primary" (click)="addExternalDataset()"> <button mat-raised-button color="primary" (click)="addExternalDataset()">
{{'DATASET-EDITOR.FIELDS.CREATE'|translate}} {{'DATASET-EDITOR.FIELDS.CREATE'|translate}}
</button> </button>
</mat-card-title> </mat-card-title>
</mat-card-header> </mat-card-header>
<app-external-item-listing *ngIf="formGroup.get('externalDatasets') && externalDatasetsTemplate && externalSourcesConfiguration" <app-external-item-listing *ngIf="formGroup.get('externalDatasets') && externalDatasetsTemplate && externalSourcesConfiguration"
@ -98,18 +103,18 @@
</app-external-item-listing> </app-external-item-listing>
<ng-template #externalDatasetsTemplate let-suggestion let-i="index" let-callback="function"> <ng-template #externalDatasetsTemplate let-suggestion let-i="index" let-callback="function">
<div> <div class="col-md-2">
<p> <p>
{{i+1}}) {{suggestion.get('label').value}} {{i+1}}) {{suggestion.get('label').value}}
</p> </p>
</div> </div>
<div> <div class="col-md-4">
<mat-form-field> <mat-form-field>
<input matInput placeholder="{{'DATASET-EDITOR.FIELDS.EXTERNAL-DATASET-INFO' | translate}}" type="text" name="info" [formControl]="suggestion.get('info')"> <input matInput placeholder="{{'DATASET-EDITOR.FIELDS.EXTERNAL-DATASET-INFO' | translate}}" type="text" name="info" [formControl]="suggestion.get('info')">
</mat-form-field> </mat-form-field>
</div> </div>
<div> <div class="col-md-4">
<mat-form-field> <mat-form-field>
<mat-select placeholder="{{'DATASET-WIZARD.EDITOR.FIELDS.EXTERNAL-DATASET-TYPE' | translate}}" [formControl]="suggestion.get('type')"> <mat-select placeholder="{{'DATASET-WIZARD.EDITOR.FIELDS.EXTERNAL-DATASET-TYPE' | translate}}" [formControl]="suggestion.get('type')">
<mat-option [value]="0">{{'TYPES.EXTERNAL-DATASET-TYPE.SOURCE' | translate}}</mat-option> <mat-option [value]="0">{{'TYPES.EXTERNAL-DATASET-TYPE.SOURCE' | translate}}</mat-option>
@ -117,7 +122,7 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<div> <div class="col-md-2">
<button mat-button (click)="callback(i)"> <button mat-button (click)="callback(i)">
<mat-icon>close</mat-icon> <mat-icon>close</mat-icon>
</button> </button>
@ -127,27 +132,26 @@
<mat-card> <mat-card>
<mat-card-header> <mat-card-header>
<mat-card-title class="thick"> <mat-card-title class="thick" *ngIf='!viewOnly'>
{{'DATASET-EDITOR.FIELDS.REGISTRIES' | translate}} {{'DATASET-EDITOR.FIELDS.REGISTRIES' | translate}}
<button mat-raised-button color="primary" (click)="addRegistry()"> <button mat-raised-button color="primary" (click)="addRegistry()">
{{'DATASET-EDITOR.FIELDS.CREATE'|translate}} {{'DATASET-EDITOR.FIELDS.CREATE'|translate}}
</button> </button>
</mat-card-title> </mat-card-title>
</mat-card-header> </mat-card-header>
<app-external-item-listing *ngIf="formGroup.get('registries') && registriesTemplate && externalSourcesConfiguration" [options]="externalSourcesConfiguration.registries" <app-external-item-listing *ngIf="formGroup.get('registries') && registriesTemplate && externalSourcesConfiguration" [options]="externalSourcesConfiguration.registries"
placeholder="{{'DATASET-EDITOR.FIELDS.REGISTRIES' | translate}}" [parentTemplate]='registriesTemplate' [displayFunction]='registriesDisplayFunc' placeholder="{{'DATASET-EDITOR.FIELDS.REGISTRIES' | translate}}" [parentTemplate]='registriesTemplate' [displayFunction]='registriesDisplayFunc'
[formGroup]="formGroup.get('registries')" [viewOnly]='viewOnly' [subtitleFunction]='dataRepositoryDisplaySubtitleFunc' [formGroup]="formGroup.get('registries')" [viewOnly]='viewOnly' [subtitleFunction]='dataRepositoryDisplaySubtitleFunc'
[autoCompleteConfiguration]="registriesAutoCompleteConfiguration" (onItemChange)="registriesOnItemChange($event)"> [autoCompleteConfiguration]="registriesAutoCompleteConfiguration" (onItemChange)="registriesOnItemChange($event)">
</app-external-item-listing> </app-external-item-listing>
<ng-template #registriesTemplate let-suggestion let-i="index" let-callback="function"> <ng-template #registriesTemplate let-suggestion let-i="index" let-callback="function">
<div> <div class="col-md-2">
<p> <p>
{{i+1}}) {{suggestion.get('label').value}} {{i+1}}) {{suggestion.get('label').value}}
</p> </p>
</div> </div>
<div> <div class="col-md-10">
<button mat-button (click)="callback(i)"> <button mat-button (click)="callback(i)">
<mat-icon>close</mat-icon> <mat-icon>close</mat-icon>
</button> </button>
@ -157,11 +161,11 @@
<mat-card> <mat-card>
<mat-card-header> <mat-card-header>
<mat-card-title class="thick"> <mat-card-title class="thick" *ngIf='!viewOnly'>
{{'DATASET-EDITOR.FIELDS.SERVICES' | translate}} {{'DATASET-EDITOR.FIELDS.SERVICES' | translate}}
<button mat-raised-button color="primary" (click)="addService()"> <button mat-raised-button color="primary" (click)="addService()">
{{'DATASET-EDITOR.FIELDS.CREATE'|translate}} {{'DATASET-EDITOR.FIELDS.CREATE'|translate}}
</button> </button>
</mat-card-title> </mat-card-title>
</mat-card-header> </mat-card-header>
<app-external-item-listing *ngIf="formGroup.get('services') && servicesTemplate && externalSourcesConfiguration" [options]="externalSourcesConfiguration.services" <app-external-item-listing *ngIf="formGroup.get('services') && servicesTemplate && externalSourcesConfiguration" [options]="externalSourcesConfiguration.services"
@ -172,12 +176,12 @@
</app-external-item-listing> </app-external-item-listing>
<ng-template #servicesTemplate let-suggestion let-i="index" let-callback="function"> <ng-template #servicesTemplate let-suggestion let-i="index" let-callback="function">
<div> <div class="col-md-2">
<p> <p>
{{i+1}}) {{suggestion.get('label').value}} {{i+1}}) {{suggestion.get('label').value}}
</p> </p>
</div> </div>
<div> <div class="col-md-10">
<button mat-button (click)="callback(i)"> <button mat-button (click)="callback(i)">
<mat-icon>close</mat-icon> <mat-icon>close</mat-icon>
</button> </button>
@ -199,12 +203,12 @@
</app-external-item-listing> </app-external-item-listing>
<ng-template #tagsTemplate let-suggestion let-i="index" let-callback="function"> <ng-template #tagsTemplate let-suggestion let-i="index" let-callback="function">
<div> <div class="col-md-2">
<p> <p>
{{i+1}}) {{suggestion.get('name').value}} {{i+1}}) {{suggestion.get('name').value}}
</p> </p>
</div> </div>
<div> <div class="col-md-10">
<button mat-button (click)="callback(i)"> <button mat-button (click)="callback(i)">
<mat-icon>close</mat-icon> <mat-icon>close</mat-icon>
</button> </button>

@ -179,6 +179,10 @@ export class DatasetWizardComponent implements OnInit, IBreadCrumbComponent {
] ]
}]) }])
this.formGroup = this.datasetWizardModel.buildForm(); this.formGroup = this.datasetWizardModel.buildForm();
if (this.datasetWizardModel.status == 1) {
this.formGroup.disable()
this.viewOnly = true;
}
if (this.viewOnly) this.formGroup.disable(); if (this.viewOnly) this.formGroup.disable();
this.loadDatasetProfiles(); this.loadDatasetProfiles();
}); });
@ -190,6 +194,10 @@ export class DatasetWizardComponent implements OnInit, IBreadCrumbComponent {
setTimeout(() => { setTimeout(() => {
this.datasetWizardModel.dmp = data; this.datasetWizardModel.dmp = data;
this.formGroup = this.datasetWizardModel.buildForm(); this.formGroup = this.datasetWizardModel.buildForm();
if (this.datasetWizardModel.status == 1) {
this.formGroup.disable()
this.viewOnly = true;
}
this.loadDatasetProfiles(); this.loadDatasetProfiles();
this.breadCrumbs = Observable.of([ this.breadCrumbs = Observable.of([
@ -214,6 +222,11 @@ export class DatasetWizardComponent implements OnInit, IBreadCrumbComponent {
} else { } else {
this.datasetWizardModel = new DatasetWizardModel(); this.datasetWizardModel = new DatasetWizardModel();
this.formGroup = this.datasetWizardModel.buildForm() this.formGroup = this.datasetWizardModel.buildForm()
if (this.datasetWizardModel.status == 1) {
this.formGroup.disable()
this.viewOnly = true;
}
if (this.viewOnly) this.formGroup.disable(); if (this.viewOnly) this.formGroup.disable();
this.formGroup.get('dmp').valueChanges.subscribe(x => { this.formGroup.get('dmp').valueChanges.subscribe(x => {

@ -1,4 +1,4 @@
<div *ngIf="form" [id]="field.id" [formGroup]="form" [ngSwitch]="field.viewStyle.renderStyle"> <div *ngIf="form && field" [id]="field.id" [formGroup]="form" [ngSwitch]="field.viewStyle.renderStyle">
<!-- <h5 *ngIf="field.title">{{field.title}}</h5> --> <!-- <h5 *ngIf="field.title">{{field.title}}</h5> -->

@ -22,18 +22,20 @@ export class DynamicFormFieldComponent implements OnInit {
@Input() pathName: string; @Input() pathName: string;
@Input() path: string; @Input() path: string;
change: Subscription; change: Subscription;
trackByFn = (index,item) => item["id"] trackByFn = (index, item) => item ? item["id"] : null
constructor(private route: ActivatedRoute, public visibilityRulesService: VisibilityRulesService) { constructor(private route: ActivatedRoute, public visibilityRulesService: VisibilityRulesService) {
} }
ngOnInit() { ngOnInit() {
this.form = this.visibilityRulesService.getFormGroup(this.field.id) if (this.field) {
if(!this.form) debugger; this.form = this.visibilityRulesService.getFormGroup(this.field.id)
if(!this.form.get('value')) debugger; if (!this.form) debugger;
this.change = this.form.get('value').valueChanges.subscribe(item => { if (!this.form.get('value')) debugger;
this.visibilityRulesService.updateValueAndVisibility(this.field.id) this.change = this.form.get('value').valueChanges.subscribe(item => {
}) this.visibilityRulesService.updateValueAndVisibility(this.field.id)
})
}
} }
ngOnChanges(changeRecord) { ngOnChanges(changeRecord) {
@ -43,7 +45,7 @@ export class DynamicFormFieldComponent implements OnInit {
ngOnDestroy(): void { ngOnDestroy(): void {
//Called once, before the instance is destroyed. //Called once, before the instance is destroyed.
//Add 'implements OnDestroy' to the class. //Add 'implements OnDestroy' to the class.
this.change.unsubscribe() if(this.change) this.change.unsubscribe()
} }
clearInput() { clearInput() {

@ -1,39 +1,40 @@
<div *ngIf="form" [id]="compositeField.id" [formGroup]="form"> <div *ngIf="form" [id]="compositeField.id" [formGroup]="form">
<div *ngIf="compositeField.fields.length == 1" class="fieldset-component"> <div *ngIf="compositeField.fields.length == 1" class="fieldset-component">
<h5 *ngIf="compositeField.title" style="font-weight:bold; color: #3a3737;">{{compositeField.title}}</h5> <h5 *ngIf="compositeField.title" style="font-weight:bold; color: #3a3737;">{{compositeField.title}}</h5>
<div class="content-left-margin"> <div class="content-left-margin">
<h5 *ngIf="compositeField.description">{{compositeField.description}}</h5> <h5 *ngIf="compositeField.description">{{compositeField.description}}</h5>
<h5 *ngIf="compositeField.extendedDescription" class="fieldset-extended-desc"> <h5 *ngIf="compositeField.extendedDescription" class="fieldset-extended-desc">
<i>{{compositeField.extendedDescription}}</i> <i>{{compositeField.extendedDescription}}</i>
</h5> </h5>
<df-field *ngIf="compositeField.fields.length == 1" [field]="compositeField.fields[0]" <df-field *ngIf="compositeField.fields.length == 1" [field]="compositeField.fields[0]" [pathName]="pathName+'.fields.'+0"></df-field>
[pathName]="pathName+'.fields.'+0"></df-field>
</div>
</div> </div>
</div>
<div *ngIf="compositeField.fields.length > 1" class="fieldset-component"> <div *ngIf="compositeField.fields.length > 1" class="fieldset-component">
<h5 *ngIf="compositeField.title" style="font-weight:bold; color: #3a3737;">{{compositeField.title}}</h5> <h5 *ngIf="compositeField.title" style="font-weight:bold; color: #3a3737;">{{compositeField.title}}</h5>
<div class="content-left-margin"> <div class="content-left-margin">
<h5 *ngIf="compositeField.description">{{compositeField.description}}</h5> <h5 *ngIf="compositeField.description">{{compositeField.description}}</h5>
<h5 *ngIf="compositeField.extendedDescription" class="fieldset-extended-desc"> <h5 *ngIf="compositeField.extendedDescription" class="fieldset-extended-desc">
<i>{{compositeField.extendedDescription}}</i> <i>{{compositeField.extendedDescription}}</i>
</h5> </h5>
<div *ngFor="let field of compositeField.fields; let i = index; trackBy: trackByFn "> <div *ngFor="let field of compositeField.fields; let i = index; trackBy: trackByFn ">
<div> <div>
<div *ngIf="(field?.multiplicity?.max - 1) > (field?.multiplicityItems?.length)"> <div *ngIf="(field?.multiplicity?.max - 1) > (field?.multiplicityItems?.length)">
<a (click)="addMultipleField(i)" style="cursor: pointer"> <a (click)="addMultipleField(i)" style="cursor: pointer">
Add one more field + Add one more field +
</a> </a>
</div> </div>
</div> </div>
<df-field [field]="field" [pathName]="pathName+'.fields.'+i"></df-field> <df-field [field]="field" [pathName]="pathName+'.fields.'+i"></df-field>
<div *ngFor="let multipleField of field.multiplicityItems; let j = index; trackBy: trackByFn"> <div *ngIf="field">
<df-field [field]="multipleField" [pathName]="pathName+'.fields.'+i+'.multiplicityItems.'+j"></df-field> <div *ngFor="let multipleField of field.multiplicityItems; let j = index; trackBy: trackByFn">
</div> <df-field [field]="multipleField" [pathName]="pathName+'.fields.'+i+'.multiplicityItems.'+j"></df-field>
</div> </div>
</div> </div>
</div>
</div> </div>
</div>
</div> </div>

@ -17,13 +17,15 @@ export class DynamicFormCompositeFieldComponent implements OnInit {
form: FormGroup; form: FormGroup;
@Input() pathName: string; @Input() pathName: string;
@Input() path: string; @Input() path: string;
trackByFn = (index, item) => item["id"] trackByFn = (index, item) => item ? item["id"] : null
constructor(private visibilityRulesService: VisibilityRulesService) { constructor(private visibilityRulesService: VisibilityRulesService) {
} }
ngOnInit() { 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.compositeField.fields[fieldIndex].multiplicityItems.push(field);
(<FormArray>(this.form.get("fields").get('' + fieldIndex).get('multiplicityItems'))).push(field.buildForm()); (<FormArray>(this.form.get("fields").get('' + fieldIndex).get('multiplicityItems'))).push(field.buildForm());
} }
} }

@ -1,19 +1,20 @@
<div *ngIf="form" class="group-component" [id]="group.id" [formGroup]="form"> <div *ngIf="form" class="group-component" [id]="group.id" [formGroup]="form">
<div class="content-left-margin"> <div class="content-left-margin">
<div *ngFor="let compositeField of group.compositeFields; let i = index; trackBy: trackByFn"> <div *ngFor="let compositeField of group.compositeFields; let i = index; trackBy: trackByFn">
<div> <div>
<div *ngIf="(compositeField?.multiplicity?.max - 1) > (compositeField?.multiplicityItems?.length)"> <div *ngIf="(compositeField?.multiplicity?.max - 1) > (compositeField?.multiplicityItems?.length)">
<a (click)="addMultipleField(i)" style="cursor: pointer"> <a (click)="addMultipleField(i)" style="cursor: pointer">
Add one more fieldset + Add one more fieldset +
</a> </a>
</div>
</div>
<df-composite-field [compositeField]="compositeField" [path]="path" [pathName]="pathName+'.compositeFields.'+i"></df-composite-field>
<div *ngFor="let multipleCompositeField of compositeField.multiplicityItems; let j = index; trackBy: trackByFn">
<df-composite-field [compositeField]="multipleCompositeField"
[pathName]="pathName+'.compositeFields.'+i+'.multiplicityItems.'+j"></df-composite-field>
</div>
</div> </div>
</div>
<df-composite-field [compositeField]="compositeField" [path]="path" [pathName]="pathName+'.compositeFields.'+i"></df-composite-field>
<div *ngIf="compositeField">
<div *ngFor="let multipleCompositeField of compositeField.multiplicityItems; let j = index; trackBy: trackByFn">
<df-composite-field [compositeField]="multipleCompositeField" [pathName]="pathName+'.compositeFields.'+i+'.multiplicityItems.'+j"></df-composite-field>
</div>
</div>
</div> </div>
</div>
</div> </div>

@ -19,12 +19,14 @@ export class DynamicFormGroupComponent implements OnInit {
@Input() pathName: string; @Input() pathName: string;
@Input() path: string; @Input() path: string;
trackByFn = (index,item) => item["id"] trackByFn = (index, item) => item ? item["id"] : null
constructor(public visibilityRulesService: VisibilityRulesService) { constructor(public visibilityRulesService: VisibilityRulesService) {
} }
ngOnInit() { ngOnInit() {
this.form = this.visibilityRulesService.getFormGroup(this.group.id) if (this.group) {
this.form = this.visibilityRulesService.getFormGroup(this.group.id)
}
} }

@ -1,42 +1,43 @@
<div class="panel-group" style="margin-top:10px;"> <div class="panel-group" style="margin-top:10px;">
<mat-accordion> <mat-accordion>
<mat-expansion-panel expanded=true> <mat-expansion-panel expanded=true>
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
{{path}} {{section.title}} {{path}} {{section.title}}
</mat-panel-title> </mat-panel-title>
<mat-panel-description> <mat-panel-description>
<h3 *ngIf="section.description">{{section.description}}</h3> <h3 *ngIf="section.description">{{section.description}}</h3>
<!-- <h4 *ngIf="section.extendedDescription">{{section.extendedDescription}}</h4> --> <!-- <h4 *ngIf="section.extendedDescription">{{section.extendedDescription}}</h4> -->
</mat-panel-description> </mat-panel-description>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<div *ngFor="let compositeField of section.compositeFields; let i = index; trackBy: trackByFn">
<div>
<div *ngIf="(compositeField?.multiplicity?.max - 1) > (compositeField?.multiplicityItems?.length)">
<a (click)="addMultipleField(i)" style="cursor: pointer">
Add one more fieldset +
</a>
</div>
<df-composite-field [compositeField]="compositeField" [path]="path" [pathName]="pathName+'.compositeFields.'+i"></df-composite-field>
<div *ngFor="let multipleCompositeField of compositeField.multiplicityItems; let j = index; trackBy: trackByFn">
<df-composite-field [compositeField]="multipleCompositeField"
[pathName]="pathName+'.compositeFields.'+i+'.multiplicityItems.'+j"></df-composite-field>
</div>
<div *ngIf="compositeField.hasCommentField" [formGroup]="form.get('compositeFields').get(''+i)">
<mat-form-field>
<input matInput formControlName="commentFieldValue" placeholder="comment">
</mat-form-field>
</div>
</div>
<div *ngFor="let compositeField of section.compositeFields; let i = index; trackBy: trackByFn">
<div *ngIf="isElementVisible(compositeField)">
<div *ngIf="(compositeField?.multiplicity?.max - 1) > (compositeField?.multiplicityItems?.length)">
<a (click)="addMultipleField(i)" style="cursor: pointer">
Add one more fieldset +
</a>
</div>
<df-composite-field [compositeField]="compositeField" [path]="path" [pathName]="pathName+'.compositeFields.'+i"></df-composite-field>
<div *ngIf="compositeField">
<div *ngFor="let multipleCompositeField of compositeField.multiplicityItems; let j = index; trackBy: trackByFn">
<df-composite-field [compositeField]="multipleCompositeField" [pathName]="pathName+'.compositeFields.'+i+'.multiplicityItems.'+j"></df-composite-field>
</div> </div>
<div *ngIf="compositeField.hasCommentField" [formGroup]="form.get('compositeFields').get(''+i)">
<div *ngIf="section.sections"> <mat-form-field>
<div *ngFor="let itemsection of section.sections; let j = index;"> <input matInput formControlName="commentFieldValue" placeholder="comment">
<df-section [section]="itemsection" [path]="path+'.'+(j+1)" [pathName]="pathName+'.sections.'+j"></df-section> </mat-form-field>
</div>
</div> </div>
</mat-expansion-panel> </div>
</mat-accordion> </div>
</div>
<div *ngIf="section?.sections">
<div *ngFor="let itemsection of section.sections; let j = index;">
<df-section [section]="itemsection" [path]="path+'.'+(j+1)" [pathName]="pathName+'.sections.'+j"></df-section>
</div>
</div>
</mat-expansion-panel>
</mat-accordion>
</div> </div>

@ -19,11 +19,17 @@ export class DynamicFormSectionComponent implements OnInit {
form: FormGroup; form: FormGroup;
@Input() pathName: string; @Input() pathName: string;
@Input() path: string; @Input() path: string;
trackByFn = (item) => item["id"] trackByFn = (index, item) => item ? item["id"] : null
constructor(public visibilityRulesService: VisibilityRulesService) { } constructor(public visibilityRulesService: VisibilityRulesService) { }
ngOnInit() { 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) { addMultipleField(fieldsetIndex: number) {
@ -32,10 +38,10 @@ export class DynamicFormSectionComponent implements OnInit {
(<FormArray>(this.form.get("compositeFields").get('' + fieldsetIndex).get('multiplicityItems'))).push(compositeField.buildForm()); (<FormArray>(this.form.get("compositeFields").get('' + fieldsetIndex).get('multiplicityItems'))).push(compositeField.buildForm());
} }
isVisible(pathname: string, fieldSet: CompositeField): boolean { isElementVisible(fieldSet: CompositeField): boolean {
if (!fieldSet || !this.visibilityRulesService.getFormGroup(fieldSet.id)) return false; if (!fieldSet) return false;
for (var i = 0; i < fieldSet.fields.length; i++) { for (var i = 0; i < fieldSet.fields.length; i++) {
if (this.visibilityRulesService.getFormGroup(fieldSet.fields[i].id)) if (fieldSet.fields[i])
return true; return true;
} }
return false; return false;

@ -26,15 +26,15 @@ declare function simple_notifier(type: string, title: string, message: string):
], ],
encapsulation: ViewEncapsulation.None, encapsulation: ViewEncapsulation.None,
}) })
export class DynamicFormComponent implements OnInit { export class DynamicFormComponent implements OnInit, AfterViewInit {
@Input() dataModel: DatasetWizardModel = new DatasetWizardModel(); @Input() dataModel: DatasetWizardModel = new DatasetWizardModel();
@Input() path: string; @Input() path: string;
@Input() form: FormGroup; @Input() form: FormGroup;
id: string; id: string;
trackByFn = (index,item) => item["id"] trackByFn = (index, item) => item ? item["id"] : null
pageTrackByFn = (index,item) => item["id"] pageTrackByFn = (index, item) => item["id"]
// @Input() datasetId: string; // @Input() datasetId: string;
pathName: string; pathName: string;
@ -82,6 +82,10 @@ export class DynamicFormComponent implements OnInit {
}); });
} }
ngAfterViewInit() {
this.visibilityRulesService.triggerVisibilityEvaluation()
}
toggleSidebar() { toggleSidebar() {
this.visibleSidebar = !this.visibleSidebar; this.visibleSidebar = !this.visibleSidebar;

@ -11,6 +11,7 @@ export class Section extends BaseModel implements Serializable<Section>, FormGen
//public fieldGroups: Array<FieldGroup>; //public fieldGroups: Array<FieldGroup>;
public defaultVisibility: boolean; public defaultVisibility: boolean;
public page: number; public page: number;
public ordinal: number;
public id: string public id: string
public title: string public title: string
public description: string; public description: string;
@ -23,6 +24,7 @@ export class Section extends BaseModel implements Serializable<Section>, FormGen
this.defaultVisibility = item.defaultVisibility; this.defaultVisibility = item.defaultVisibility;
this.id = item.id; this.id = item.id;
this.title = item.title; this.title = item.title;
this.ordinal = item.ordinal;
this.description = item.description; this.description = item.description;
this.compositeFields = JsonSerializer.fromJSONArray(item.compositeFields, CompositeField); this.compositeFields = JsonSerializer.fromJSONArray(item.compositeFields, CompositeField);
return this; return this;
@ -58,7 +60,7 @@ export class Section extends BaseModel implements Serializable<Section>, FormGen
formGroup.addControl('page', new FormControl(this.page)) formGroup.addControl('page', new FormControl(this.page))
formGroup.addControl('id', new FormControl(this.id)) formGroup.addControl('id', new FormControl(this.id))
formGroup.addControl('title', new FormControl(this.title)) formGroup.addControl('title', new FormControl(this.title))
formGroup.addControl('description', new FormControl(this.description)) */ formGroup.addControl('description', new FormControl(this.description)) */
return formGroup; return formGroup;
} }
} }

@ -1,4 +1,11 @@
export enum SearchBarItemType {
DATASET = 0,
DMP = 1,
PROJECT = 2
}
export class SearchBarItem { export class SearchBarItem {
public id: string; public id: string;
public label: string; public label: string;
public type: string;
} }

@ -19,7 +19,7 @@ export class DatasetWizardModel implements Serializable<DatasetWizardModel> {
public label: string; public label: string;
public profile: DatasetProfileModel = new DatasetProfileModel(); public profile: DatasetProfileModel = new DatasetProfileModel();
public uri: String; public uri: String;
public status: String; public status: number;
public description: String; public description: String;
public services: ServiceModel[] = []; public services: ServiceModel[] = [];
public registries: RegisterModel[] = []; public registries: RegisterModel[] = [];

@ -101,7 +101,7 @@ export class ProjectEditorComponent implements OnInit, IBreadCrumbComponent {
} }
onCallbackError(errorResponse: any) { onCallbackError(errorResponse: any) {
this.setErrorModel(errorResponse.error); this.setErrorModel(errorResponse.error.payload);
this.validateAllFormFields(this.formGroup); this.validateAllFormFields(this.formGroup);
} }
@ -190,7 +190,7 @@ export class ProjectEditorComponent implements OnInit, IBreadCrumbComponent {
let fileList: FileList | File = event.target.files; let fileList: FileList | File = event.target.files;
let formdata: FormData = new FormData(); let formdata: FormData = new FormData();
if (fileList instanceof FileList) { if (fileList instanceof FileList) {
for (let i: number = 0; i < fileList.length; i++) { for (let i: number = 0; i < fileList.length; i++) {
formdata.append('file', fileList[i]); formdata.append('file', fileList[i]);

@ -3,5 +3,4 @@
width: 100%; width: 100%;
padding: 3px; padding: 3px;
} }
} }

@ -30,7 +30,7 @@ export class BreadcrumbComponent implements OnInit {
} }
buildBreadCrumb(route: ActivatedRoute): Observable<BreadcrumbItem[]> { buildBreadCrumb(route: ActivatedRoute): Observable<BreadcrumbItem[]> {
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) { navigate(url, params) {

@ -1,7 +1,7 @@
<div> <div>
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-5"> <div class="col-md-3">
<mat-form-field > <mat-form-field >
<mat-select placeholder="Sources" [(ngModel)]="choice" (selectionChange)="selectionChange($event)" [disabled]="viewOnly"> <mat-select placeholder="Sources" [(ngModel)]="choice" (selectionChange)="selectionChange($event)" [disabled]="viewOnly">
<mat-option *ngFor="let option of options" [value]="option.key"> <mat-option *ngFor="let option of options" [value]="option.key">
@ -11,13 +11,13 @@
</mat-form-field> </mat-form-field>
</div> </div>
<div> <div>
<app-external-item class="col-md-7" [autoCompleteConfiguration]="autoCompleteConfiguration" [formGroup]="formGroup" [displayFunction]="displayFunction" <app-external-item class="col-md-9" [autoCompleteConfiguration]="autoCompleteConfiguration" [formGroup]="formGroup" [displayFunction]="displayFunction"
[placeholder]="placeholder" [subtitleFunction]="subtitleFunction" (onItemChange)="this.onItemChangeFunc($event)" [formCtrl]="formControl" [placeholder]="placeholder" [subtitleFunction]="subtitleFunction" (onItemChange)="this.onItemChangeFunc($event)" [formCtrl]="formControl"
[disabled]="disabled"> [disabled]="disabled">
</app-external-item> </app-external-item>
</div> </div>
</div> </div>
<div fxLayout="row" *ngFor="let suggestion of formGroup['controls']; let i = index"> <div class="row" *ngFor="let suggestion of formGroup['controls']; let i = index">
<ng-container *ngTemplateOutlet="parentTemplate; context: { $implicit: suggestion, index: i,function: this.deleteItem.bind(this) }"> <ng-container *ngTemplateOutlet="parentTemplate; context: { $implicit: suggestion, index: i,function: this.deleteItem.bind(this) }">
</ng-container> </ng-container>
</div> </div>

@ -21,8 +21,10 @@
<mat-form-field class="full-width" floatLabel="never"> <mat-form-field class="full-width" floatLabel="never">
<input type="text" placeholder="{{'DASHBOARD.SEARCH' | translate}}" matInput [formControl]="searchControl" [matAutocomplete]="auto"> <input type="text" placeholder="{{'DASHBOARD.SEARCH' | translate}}" matInput [formControl]="searchControl" [matAutocomplete]="auto">
<mat-autocomplete autoActiveFirstOption #auto="matAutocomplete" (optionSelected)="onOptionSelected($event)"> <mat-autocomplete autoActiveFirstOption #auto="matAutocomplete" (optionSelected)="onOptionSelected($event)">
<mat-option *ngFor="let option of filteredOptions | async" [value]="option"> <mat-option *ngFor="let option of filteredOptions | async" [value]="option" class="transformation-value-mat-option">
{{option.label}} <span>{{option.label}}</span>
<br>
<small>{{transformType(option.type)}}</small>
</mat-option> </mat-option>
</mat-autocomplete> </mat-autocomplete>
</mat-form-field> </mat-form-field>

@ -37,3 +37,8 @@
.full-width { .full-width {
width: 100%; width: 100%;
} }
.transformation-value-mat-option {
height: 3.5em;
line-height: 1.2em;
}

@ -12,7 +12,7 @@ import { ProjectService } from '../../../services/project/project.service';
import { FormControl } from '@angular/forms'; import { FormControl } from '@angular/forms';
import { DashboardService } from '../../../services/dashboard/dashboard.service'; import { DashboardService } from '../../../services/dashboard/dashboard.service';
import { Observable } from 'rxjs/Observable'; 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 { SearchBarType } from '../search-bar/types/search-bar-type';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
@ -52,7 +52,7 @@ export class NavigationComponent {
loadDataOnStart: true loadDataOnStart: true
}; };
this.filteredOptions = this.searchControl.valueChanges.flatMap(x => { this.filteredOptions = this.searchControl.valueChanges.debounceTime(500).distinctUntilChanged().flatMap(x => {
return this.dashBoardService.searchUserItems(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]) 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"
}
}
} }

@ -22,8 +22,11 @@ export class VisibilityRulesService {
public setModel(model: DatasetProfileDefinitionModel) { public setModel(model: DatasetProfileDefinitionModel) {
this.initialModel = JsonSerializer.fromJSONObject(model, DatasetProfileDefinitionModel); this.initialModel = JsonSerializer.fromJSONObject(model, DatasetProfileDefinitionModel);
this.currentModel = model 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 { public getFormGroup(id: string): FormGroup {
@ -53,7 +56,7 @@ export class VisibilityRulesService {
private evaluateVisibility(visibilityRule: VisibilityRule) { private evaluateVisibility(visibilityRule: VisibilityRule) {
for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) { for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) {
let pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId]; 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.formGroup.get(pathKey).parent.get("id")) {
if (!this.checkElementVisibility(this.formGroup.get(pathKey).parent.get("id").value)) { if (!this.checkElementVisibility(this.formGroup.get(pathKey).parent.get("id").value)) {
let targetPathKey = this.fieldsPathMemory[visibilityRule.targetControlId] let targetPathKey = this.fieldsPathMemory[visibilityRule.targetControlId]
@ -78,10 +81,6 @@ export class VisibilityRulesService {
this.elementVisibilityMap.set(visibilityRule.targetControlId, true) this.elementVisibilityMap.set(visibilityRule.targetControlId, true)
} }
private getParentPath(parentId: string): string {
return '';
}
private clearValues(pathKey) { private clearValues(pathKey) {
if (pathKey && this.formGroup.get(pathKey + '.value')) this.formGroup.get(pathKey + '.value').patchValue(null) if (pathKey && this.formGroup.get(pathKey + '.value')) this.formGroup.get(pathKey + '.value').patchValue(null)
if (pathKey && this.formGroup.get(pathKey)["controls"].fields) { if (pathKey && this.formGroup.get(pathKey)["controls"].fields) {
@ -107,15 +106,16 @@ export class VisibilityRulesService {
updateValue(obj, value, path) { updateValue(obj, value, path) {
var i; var i;
if (value['id'].targetControlId === "other216a") debugger;
path = path.split('.'); path = path.split('.');
for (i = 0; i < path.length - 1; i++)
for (i = 0; i < path.length - 1; i++) {
obj = obj[path[i]]; obj = obj[path[i]];
}
for (let propIndex = 0; propIndex < obj.length; propIndex++) { 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) { search(path, obj, target) {
@ -140,7 +140,7 @@ export class VisibilityRulesService {
if (returnObj) return returnObj if (returnObj) return returnObj
} else if (i == key && obj[key] == val) { } else if (i == key && obj[key] == val) {
//console.log(obj[key]) //console.log(obj[key])
if (deleteObj) parent.splice(parent.indexOf(obj), 1); if (deleteObj) parent[parent.indexOf(obj)] = null
return obj return obj
} }
} }

@ -19,6 +19,13 @@
}, },
"ERRORS": { "ERRORS": {
"HTTP-REQUEST-ERROR": "An Unexpected Error Has Occured" "HTTP-REQUEST-ERROR": "An Unexpected Error Has Occured"
},
"NAMES": {
"DATASET": "Dataset"
},
"STATUSES": {
"EDIT": "Edited",
"FINALISED": "Finalized"
} }
}, },
"NAV-BAR": { "NAV-BAR": {
@ -26,7 +33,7 @@
"PROJECTS": "Projects", "PROJECTS": "Projects",
"DMPS": "DMPs", "DMPS": "DMPs",
"DATASETS": "Datasets", "DATASETS": "Datasets",
"PUBLIC-DATASETS": "Public Datasets", "PUBLIC-DATASETS": "Explore OpenDMP",
"USERS": "Users", "USERS": "Users",
"DATASETS-ADMIN": "Dataset Profiles", "DATASETS-ADMIN": "Dataset Profiles",
"DMP-PROFILES": "DMP Profiles", "DMP-PROFILES": "DMP Profiles",
@ -78,10 +85,10 @@
"PROFILE": "Dataset Profile" "PROFILE": "Dataset Profile"
}, },
"SECOND-STEP": { "SECOND-STEP": {
"TITLE": "External Sources" "TITLE": "External References"
}, },
"THIRD-STEP": { "THIRD-STEP": {
"TITLE": "Definition" "TITLE": "Description"
}, },
"ACTIONS": { "ACTIONS": {
"NEXT": "Next", "NEXT": "Next",
@ -112,6 +119,9 @@
"VIEW": "View" "VIEW": "View"
} }
}, },
"DATASET-PUBLIC-LISTING": {
"TITLE": "Published dataset descriptions"
},
"DMP-PROFILE-EDITOR": { "DMP-PROFILE-EDITOR": {
"TITLE": { "TITLE": {
"NEW": "New DMP Profile", "NEW": "New DMP Profile",
@ -212,6 +222,7 @@
"DESCRIPTION": "Description", "DESCRIPTION": "Description",
"PROFILE": "Profile", "PROFILE": "Profile",
"URI": "Uri", "URI": "Uri",
"DMP": "DMP",
"DATAREPOSITORIES": "Data Repositories", "DATAREPOSITORIES": "Data Repositories",
"REGISTRIES": "Registries", "REGISTRIES": "Registries",
"SERVICES": "Services", "SERVICES": "Services",

@ -1,7 +1,7 @@
export const environment = { export const environment = {
production: true, production: true,
Server: 'http://dl043.madgik.di.uoa.gr:8080/api/', Server: 'http://opendmp.eu:8080/api/',
App: 'http://dl043.madgik.di.uoa.gr/', App: 'http://opendmp.eu/',
HelpServiceUrl: 'http://dl043.madgik.di.uoa.gr:5555/', HelpServiceUrl: 'http://opendmp.eu:5555/',
defaultCulture: "en-GB" defaultCulture: "en-GB"
}; };

@ -1,3 +1,3 @@
transport.host: 0.0.0.0 transport.host: 0.0.0.0
network.host: 0.0.0.0 network.host: 0.0.0.0
xpack.security.enabled: false xpack.security.enabled: true
Loading…
Cancel
Save