no message

This commit is contained in:
annabakouli 2017-12-21 11:26:11 +02:00
parent 2af51a18d2
commit 57f7b672aa
21 changed files with 421 additions and 57 deletions

View File

@ -37,7 +37,7 @@ public class Admin {
viewStyleDefinition = datasetProfileViewstyleDao.create(viewStyleDefinition); viewStyleDefinition = datasetProfileViewstyleDao.create(viewStyleDefinition);
modelDefinition.setViewstyle(viewStyleDefinition); modelDefinition.setViewstyle(viewStyleDefinition);
datasetProfileDao.create(modelDefinition); datasetProfileDao.createOrUpdate(modelDefinition);
return ResponseEntity.status(HttpStatus.OK).body(""); return ResponseEntity.status(HttpStatus.OK).body("");
}catch(Exception ex){ }catch(Exception ex){
@ -54,7 +54,7 @@ public class Admin {
eu.eudat.entities.DatasetProfileViewstyle viewStyleDefinition = AdminManager.generateViewStyleDefinition(profile); eu.eudat.entities.DatasetProfileViewstyle viewStyleDefinition = AdminManager.generateViewStyleDefinition(profile);
eu.eudat.entities.DatasetProfile datasetprofile = datasetProfileDao.read(UUID.fromString(id)); eu.eudat.entities.DatasetProfile datasetprofile = datasetProfileDao.find(UUID.fromString(id));
eu.eudat.entities.DatasetProfileViewstyle oldviewStyle = datasetProfileViewstyleDao.read((datasetprofile.getViewstyle().getId())); eu.eudat.entities.DatasetProfileViewstyle oldviewStyle = datasetProfileViewstyleDao.read((datasetprofile.getViewstyle().getId()));
oldviewStyle.setDefinition(viewStyleDefinition.getDefinition()); oldviewStyle.setDefinition(viewStyleDefinition.getDefinition());
@ -65,7 +65,7 @@ public class Admin {
datasetprofile.setViewstyle(oldviewStyle); datasetprofile.setViewstyle(oldviewStyle);
datasetprofile.setDefinition(modelDefinition.getDefinition()); datasetprofile.setDefinition(modelDefinition.getDefinition());
datasetProfileDao.update(datasetprofile); datasetProfileDao.createOrUpdate(datasetprofile);
return ResponseEntity.status(HttpStatus.OK).body(null); return ResponseEntity.status(HttpStatus.OK).body(null);
}catch(Exception ex){ }catch(Exception ex){
@ -77,7 +77,7 @@ public class Admin {
@RequestMapping(method = RequestMethod.GET, value = { "/admin/get/{id}" }, produces="application/json") @RequestMapping(method = RequestMethod.GET, value = { "/admin/get/{id}" }, produces="application/json")
public ResponseEntity<Object> get(@PathVariable String id){ public ResponseEntity<Object> get(@PathVariable String id){
try{ try{
eu.eudat.entities.DatasetProfile profile = datasetProfileDao.read(UUID.fromString(id)); eu.eudat.entities.DatasetProfile profile = datasetProfileDao.find(UUID.fromString(id));
eu.eudat.models.admin.composite.DatasetProfile datasetprofile = AdminManager.generateDatasetProfileModel(profile); eu.eudat.models.admin.composite.DatasetProfile datasetprofile = AdminManager.generateDatasetProfileModel(profile);
return ResponseEntity.status(HttpStatus.OK).body(datasetprofile); return ResponseEntity.status(HttpStatus.OK).body(datasetprofile);
}catch(Exception ex){ }catch(Exception ex){

View File

@ -9,6 +9,10 @@ import javax.transaction.Transactional;
import eu.eudat.entities.DatasetProfile; import eu.eudat.entities.DatasetProfile;
import eu.eudat.entities.DatasetProfileRuleset; import eu.eudat.entities.DatasetProfileRuleset;
import eu.eudat.entities.DatasetProfileViewstyle; import eu.eudat.entities.DatasetProfileViewstyle;
import eu.eudat.managers.DatasetProfileManager;
import eu.eudat.models.datasetprofile.DatasetProfileAutocompleteItem;
import eu.eudat.models.datasetprofile.DatasetProfileAutocompleteRequest;
import eu.eudat.models.helpers.responses.ResponseItem;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -36,6 +40,7 @@ import eu.eudat.dao.entities.ServiceDao;
@RestController @RestController
@CrossOrigin @CrossOrigin
@RequestMapping(method = RequestMethod.POST, value = { "/dmps" })
public class DatasetProfiles { public class DatasetProfiles {
@Autowired private DataRepositoryDao dataRepositoryDao; @Autowired private DataRepositoryDao dataRepositoryDao;
@ -50,10 +55,22 @@ public class DatasetProfiles {
@Autowired private RegistryDao registryDao; @Autowired private RegistryDao registryDao;
@Autowired private ResearcherDao researcherDao; @Autowired private ResearcherDao researcherDao;
@Autowired private ServiceDao serviceDao; @Autowired private ServiceDao serviceDao;
@RequestMapping(method = RequestMethod.POST, value = { "/datasetprofiles/get" }, produces="application/json")
public @ResponseBody ResponseItem<List<DatasetProfileAutocompleteItem>> get(@RequestBody DatasetProfileAutocompleteRequest datasetProfileAutocompleteRequest) {
try {
List<DatasetProfileAutocompleteItem> datasetProfileAutocompleteItems = DatasetProfileManager.getWithCriteria(datasetProfileDao,datasetProfileAutocompleteRequest);
return new ResponseItem<List<DatasetProfileAutocompleteItem>>().status(HttpStatus.OK).payload(datasetProfileAutocompleteItems);
}
catch(Exception ex) {
return new ResponseItem<List<DatasetProfileAutocompleteItem>>().status(HttpStatus.BAD_REQUEST);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//FETCH BY DATASET PROFILE //FETCH BY DATASET PROFILE
/*
@RequestMapping(method = RequestMethod.GET, value = { "/datasetprofiles" }, produces="text/plain") @RequestMapping(method = RequestMethod.GET, value = { "/datasetprofiles" }, produces="text/plain")
public @ResponseBody ResponseEntity<List<UUID>> listDMPs(){ public @ResponseBody ResponseEntity<List<UUID>> listDMPs(){
try { try {
@ -181,6 +198,6 @@ public class DatasetProfiles {
*/
} }

View File

@ -5,7 +5,9 @@ import eu.eudat.managers.DatasetManager;
import eu.eudat.managers.DatasetWizardManager; import eu.eudat.managers.DatasetWizardManager;
import eu.eudat.models.dataset.DatasetTableRequest; import eu.eudat.models.dataset.DatasetTableRequest;
import eu.eudat.models.datasetwizard.DataManagentPlanListingModel; import eu.eudat.models.datasetwizard.DataManagentPlanListingModel;
import eu.eudat.models.datasetwizard.DatasetProfileWizardAutocompleteRequest;
import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest; import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest;
import eu.eudat.models.dmp.AssociatedProfile;
import eu.eudat.models.dmp.DataManagementPlan; import eu.eudat.models.dmp.DataManagementPlan;
import eu.eudat.models.helpers.DataTableData; import eu.eudat.models.helpers.DataTableData;
import eu.eudat.models.helpers.responses.ResponseItem; import eu.eudat.models.helpers.responses.ResponseItem;
@ -41,4 +43,16 @@ public class DatasetWizardController {
return new ResponseItem<List<DataManagentPlanListingModel>>().status(HttpStatus.BAD_REQUEST).message(ex.getMessage()); return new ResponseItem<List<DataManagentPlanListingModel>>().status(HttpStatus.BAD_REQUEST).message(ex.getMessage());
} }
} }
@RequestMapping(method = RequestMethod.POST, value = { "/getAvailableProfiles" }, produces="application/json")
public @ResponseBody ResponseItem<List<AssociatedProfile>> getAvailableProfiles(@RequestBody DatasetProfileWizardAutocompleteRequest datasetProfileWizardAutocompleteRequest, Principal principal) {
try {
List<AssociatedProfile> dataManagementPlans = DatasetWizardManager.getAvailableProfiles(dMPDao,datasetProfileWizardAutocompleteRequest);
return new ResponseItem<List<AssociatedProfile>>().status(HttpStatus.OK).payload(dataManagementPlans);
} catch (Exception ex) {
ex.printStackTrace();
return new ResponseItem<List<AssociatedProfile>>().status(HttpStatus.BAD_REQUEST).message(ex.getMessage());
}
}
} }

View File

@ -4,15 +4,23 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
import eu.eudat.dao.Dao; import eu.eudat.dao.Dao;
import eu.eudat.entities.Dataset;
import eu.eudat.entities.DatasetProfile; import eu.eudat.entities.DatasetProfile;
import eu.eudat.entities.responses.IDLabelPair; import eu.eudat.entities.responses.IDLabelPair;
import eu.eudat.models.criteria.DatasetCriteria;
import eu.eudat.models.criteria.DatasetProfileCriteria;
import eu.eudat.queryable.QueryableList;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
public interface DatasetProfileDao extends Dao<DatasetProfile, UUID> { public interface DatasetProfileDao {
public List<UUID> listAllIDs(); QueryableList<DatasetProfile> getWithCriteria(DatasetProfileCriteria criteria);
List<IDLabelPair> listAllIDsLabels(); DatasetProfile createOrUpdate(DatasetProfile item);
DatasetProfile find(UUID id);
Long count();
} }

View File

@ -8,37 +8,41 @@ import javax.persistence.Query;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
import eu.eudat.dao.JpaDao; import eu.eudat.dao.JpaDao;
import eu.eudat.dao.databaselayer.service.DatabaseService;
import eu.eudat.entities.Dataset;
import eu.eudat.entities.DatasetProfile; import eu.eudat.entities.DatasetProfile;
import eu.eudat.entities.responses.IDLabelPair; import eu.eudat.entities.responses.IDLabelPair;
import eu.eudat.models.criteria.DatasetCriteria;
import eu.eudat.models.criteria.DatasetProfileCriteria;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component("datasetProfileDao") @Component("datasetProfileDao")
public class DatasetProfileDaoImpl extends JpaDao<DatasetProfile, UUID> implements DatasetProfileDao { public class DatasetProfileDaoImpl implements DatasetProfileDao {
@Autowired
public DatasetProfile loadDetails(DatasetProfile t) { DatabaseService<DatasetProfile> databaseService;
// TODO Auto-generated method stub
@Override
public QueryableList<DatasetProfile> getWithCriteria(DatasetProfileCriteria criteria) {
QueryableList<DatasetProfile> query = databaseService.getQueryable(DatasetProfile.class);
if(criteria.getLike()!=null&&!criteria.getLike().isEmpty())query.where((builder, root) -> builder.like(root.get("label"),"%"+criteria.getLike()+"%"));
return query;
}
@Override
public DatasetProfile createOrUpdate(DatasetProfile item) {
return null; return null;
} }
@Override @Override
public List<UUID> listAllIDs() { public DatasetProfile find(UUID id) {
String queryString = "SELECT dp.id FROM DatasetProfile dp"; return null;
TypedQuery<UUID> typedQuery = entityManager.createQuery(queryString, UUID.class);
return typedQuery.getResultList();
} }
@Override
public List<IDLabelPair> listAllIDsLabels() {
String queryString = "SELECT dp.id, dp.label FROM DatasetProfile dp";
Query query = (Query) entityManager.createQuery(queryString);
List<Object[]> rows = query.getResultList();
return rows.stream().map(row -> {
return new IDLabelPair(row[0].toString(), row[1].toString());
})
.collect(Collectors.toList());
}
@Override
public Long count() {
return null;
}
} }

View File

@ -0,0 +1,27 @@
package eu.eudat.managers;
import eu.eudat.dao.entities.DMPDao;
import eu.eudat.dao.entities.DatasetDao;
import eu.eudat.dao.entities.DatasetProfileDao;
import eu.eudat.entities.DMP;
import eu.eudat.entities.DatasetProfile;
import eu.eudat.models.datasetprofile.DatasetProfileAutocompleteItem;
import eu.eudat.models.datasetprofile.DatasetProfileAutocompleteRequest;
import eu.eudat.models.dmp.DataManagementPlan;
import eu.eudat.models.dmp.DataManagementPlanCriteriaRequest;
import eu.eudat.queryable.QueryableList;
import eu.eudat.utilities.builders.DomainModelConverter;
import java.util.List;
/**
* Created by ikalyvas on 12/20/2017.
*/
public class DatasetProfileManager {
public static List<DatasetProfileAutocompleteItem> getWithCriteria(DatasetProfileDao datasetProfileRepository, DatasetProfileAutocompleteRequest datasetProfileAutocompleteRequest) throws IllegalAccessException, InstantiationException{
QueryableList<DatasetProfile> items = datasetProfileRepository.getWithCriteria(datasetProfileAutocompleteRequest.getCriteria());
List<DatasetProfileAutocompleteItem> datasetProfiles = new DomainModelConverter<DatasetProfile, DatasetProfileAutocompleteItem>().fromDataModel( items.toList(), DatasetProfileAutocompleteItem.class);
return datasetProfiles;
}
}

View File

@ -6,14 +6,20 @@ import eu.eudat.entities.DMP;
import eu.eudat.entities.Dataset; import eu.eudat.entities.Dataset;
import eu.eudat.entities.UserInfo; import eu.eudat.entities.UserInfo;
import eu.eudat.models.datasetwizard.DataManagentPlanListingModel; import eu.eudat.models.datasetwizard.DataManagentPlanListingModel;
import eu.eudat.models.datasetwizard.DatasetProfileWizardAutocompleteRequest;
import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest; import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest;
import eu.eudat.models.dmp.AssociatedProfile;
import eu.eudat.models.dmp.DataManagementPlan; import eu.eudat.models.dmp.DataManagementPlan;
import eu.eudat.models.listingmodels.DatasetListingModel; import eu.eudat.models.listingmodels.DatasetListingModel;
import eu.eudat.models.security.Principal; import eu.eudat.models.security.Principal;
import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.QueryableList;
import eu.eudat.utilities.builders.DomainModelConverter; import eu.eudat.utilities.builders.DomainModelConverter;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/** /**
* Created by ikalyvas on 12/20/2017. * Created by ikalyvas on 12/20/2017.
@ -27,4 +33,13 @@ public class DatasetWizardManager {
List<DataManagentPlanListingModel> dataManagementPlans = new DomainModelConverter<DMP, DataManagentPlanListingModel>().fromDataModel( items.toList(), DataManagentPlanListingModel.class); List<DataManagentPlanListingModel> dataManagementPlans = new DomainModelConverter<DMP, DataManagentPlanListingModel>().fromDataModel( items.toList(), DataManagentPlanListingModel.class);
return dataManagementPlans; return dataManagementPlans;
} }
public static List<AssociatedProfile> getAvailableProfiles(DMPDao dmpRepository, DatasetProfileWizardAutocompleteRequest datasetProfileWizardAutocompleteRequest) throws InstantiationException, IllegalAccessException {
DataManagementPlan dataManagementPlan = new DomainModelConverter<eu.eudat.entities.DMP,DataManagementPlan>().fromDataModel(new LinkedList<DMP>(Arrays.asList(dmpRepository.find(datasetProfileWizardAutocompleteRequest.getCriteria().getId()))),DataManagementPlan.class).get(0);
if(dataManagementPlan.getAssociatedProfile()==null||dataManagementPlan.getAssociatedProfile().getAssociatedProfiles()==null||dataManagementPlan.getAssociatedProfile().getAssociatedProfiles().isEmpty()){
return new LinkedList<>();
}
List<AssociatedProfile> profiles = dataManagementPlan.getAssociatedProfile().getAssociatedProfiles();
return profiles.stream().filter(item->item.getLabel().contains(datasetProfileWizardAutocompleteRequest.getCriteria().getLike())).collect(Collectors.toList());
}
} }

View File

@ -0,0 +1,9 @@
package eu.eudat.models.criteria;
import eu.eudat.entities.DatasetProfile;
/**
* Created by ikalyvas on 12/20/2017.
*/
public class DatasetProfileCriteria extends Criteria<DatasetProfile>{
}

View File

@ -0,0 +1,20 @@
package eu.eudat.models.criteria;
import eu.eudat.entities.DatasetProfile;
import java.util.UUID;
/**
* Created by ikalyvas on 12/20/2017.
*/
public class DatasetProfileWizardCriteria extends Criteria<DatasetProfile> {
private UUID id;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
}

View File

@ -0,0 +1,45 @@
package eu.eudat.models.datasetprofile;
import eu.eudat.entities.DatasetProfile;
import eu.eudat.models.DataModel;
import java.util.UUID;
/**
* Created by ikalyvas on 12/20/2017.
*/
public class DatasetProfileAutocompleteItem implements DataModel<DatasetProfile> {
private UUID id;
private String label;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
@Override
public void fromDataModel(DatasetProfile entity) throws InstantiationException, IllegalAccessException {
this.id = entity.getId();
this.label = entity.getLabel();
}
@Override
public DatasetProfile toDataModel() {
DatasetProfile profile = new DatasetProfile();
profile.setId(this.id);
return profile;
}
}

View File

@ -0,0 +1,12 @@
package eu.eudat.models.datasetprofile;
import eu.eudat.models.criteria.DatasetProfileCriteria;
import eu.eudat.models.criteria.DatasetProfileWizardCriteria;
import eu.eudat.models.criteria.DatasetWizardUserDmpCriteria;
import eu.eudat.models.helpers.requests.RequestItem;
/**
* Created by ikalyvas on 12/20/2017.
*/
public class DatasetProfileAutocompleteRequest extends RequestItem<DatasetProfileCriteria> {
}

View File

@ -0,0 +1,11 @@
package eu.eudat.models.datasetwizard;
import eu.eudat.models.criteria.DatasetProfileWizardCriteria;
import eu.eudat.models.datasetprofile.DatasetProfileAutocompleteRequest;
import eu.eudat.models.helpers.requests.RequestItem;
/**
* Created by ikalyvas on 12/20/2017.
*/
public class DatasetProfileWizardAutocompleteRequest extends RequestItem<DatasetProfileWizardCriteria> {
}

View File

@ -1,25 +1,30 @@
<div class="data-management-plan-editor"> <div class="data-management-plan-editor">
<mat-horizontal-stepper [linear]="isLinear"> <mat-horizontal-stepper [linear]="isLinear">
<mat-step [stepControl]="firstStepFormGroup"> <mat-step [stepControl]="formGroup">
<form [formGroup]="firstStepFormGroup"> <form *ngIf="formGroup" [formGroup]="formGroup">
<ng-template matStepLabel>Fill out your name</ng-template> <ng-template matStepLabel>Dataset Profile Associations</ng-template>
<auto-complete class="full-width" placeholder="{{'FORM-PAYMENT-ORDER.EDITOR.FIELDS.PROJECT' | translate}}" <auto-complete class="full-width" placeholder="{{'FORM-PAYMENT-ORDER.EDITOR.FIELDS.PROJECT' | translate}}"
[configuration]="dmpAutoCompleteConfiguration" [configuration]="dmpAutoCompleteConfiguration"
titleKey="label" titleKey="label"
[control]="firstStepFormGroup.get('dataManagementPlan')" [control]="formGroup.get('dmp')"
[required]="true"> [required]="true">
</auto-complete> </auto-complete>
<auto-complete class="full-width" placeholder="{{'FORM-PAYMENT-ORDER.EDITOR.FIELDS.PROJECT' | translate}}"
[configuration]="datasetProfileAutoCompleteConfiguration"
titleKey="label"
[control]="formGroup.get('profile')"
[required]="true"
[disabled]="!formGroup.get('dmp').value">
</auto-complete>
<div> <div>
<button mat-button matStepperNext>Next</button> <button mat-button matStepperNext>Next</button>
</div> </div>
</form> </form>
</mat-step> </mat-step>
<mat-step [stepControl]="secondFormGroup"> <mat-step [stepControl]="formGroup">
<form [formGroup]="secondFormGroup"> <form *ngIf="formGroup" [formGroup]="formGroup">
<ng-template matStepLabel>Fill out your address</ng-template> <ng-template matStepLabel>Dataset Profile Basic Info</ng-template>
<mat-form-field> <app-dataset-editor-component [formGroup]="formGroup"></app-dataset-editor-component>
<input matInput placeholder="Address" formControlName="secondCtrl" required>
</mat-form-field>
<div> <div>
<button mat-button matStepperPrevious>Back</button> <button mat-button matStepperPrevious>Back</button>
<button mat-button matStepperNext>Next</button> <button mat-button matStepperNext>Next</button>
@ -27,11 +32,13 @@
</form> </form>
</mat-step> </mat-step>
<mat-step> <mat-step>
<ng-template matStepLabel>Done</ng-template> <ng-template matStepLabel>Dataset Profile Form</ng-template>
You are now done. You are now done.
<div> <div>
<button mat-button matStepperPrevious>Back</button> <button mat-button matStepperPrevious>Back</button>
</div> </div>
</mat-step> </mat-step>
</mat-horizontal-stepper> </mat-horizontal-stepper>
<div *ngIf="formGroup"> {{ formGroup.value | json }}</div>
</div> </div>

View File

@ -1,3 +1,8 @@
import { ActivatedRoute, Router, Params} from '@angular/router';
import { DatasetService } from '../services/dataset/dataset.service';
import { DatasetWizardModel } from '../models/datasets/DatasetWizardModel';
import { DatasetModel } from '../models/datasets/DatasetModel';
import { DatasetProfileCriteria } from '../models/criteria/dataset-profile/DatasetProfileCriteria';
import { Component, ViewChild, OnInit, AfterViewInit, ViewEncapsulation } from "@angular/core"; import { Component, ViewChild, OnInit, AfterViewInit, ViewEncapsulation } from "@angular/core";
import { DataManagementPlanService } from "../services/data-management-plan/data-management-plan.service"; import { DataManagementPlanService } from "../services/data-management-plan/data-management-plan.service";
import { FormGroup, Validators, FormBuilder } from "@angular/forms"; import { FormGroup, Validators, FormBuilder } from "@angular/forms";
@ -19,10 +24,17 @@ import { RequestItem } from "../models/criteria/RequestItem";
export class DatasetWizardComponent implements AfterViewInit { export class DatasetWizardComponent implements AfterViewInit {
dmpAutoCompleteConfiguration: AutoCompleteConfiguration; dmpAutoCompleteConfiguration: AutoCompleteConfiguration;
datasetProfileAutoCompleteConfiguration: AutoCompleteConfiguration;
datasetModel:DatasetWizardModel;
isNew = true;
formGroup:FormGroup;
constructor( constructor(
private datasetWizardService: DatasetWizardService, private datasetWizardService: DatasetWizardService,
private formBuilder: FormBuilder private formBuilder: FormBuilder,
private datasetService: DatasetService,
private route: ActivatedRoute,
public router: Router,
) { ) {
} }
@ -36,12 +48,36 @@ export class DatasetWizardComponent implements AfterViewInit {
dmpRequestItem.criteria = new DataManagementPlanCriteria(); dmpRequestItem.criteria = new DataManagementPlanCriteria();
this.dmpAutoCompleteConfiguration = new AutoCompleteConfiguration(this.datasetWizardService.userDmps.bind(this.datasetWizardService), dmpRequestItem); this.dmpAutoCompleteConfiguration = new AutoCompleteConfiguration(this.datasetWizardService.userDmps.bind(this.datasetWizardService), dmpRequestItem);
this.firstStepFormGroup = this.formBuilder.group({ let datasetProfileRequestItem: RequestItem<DatasetProfileCriteria> = new RequestItem();
dataManagementPlan: ['dataManagementPlan', Validators.required] datasetProfileRequestItem.criteria = new DatasetProfileCriteria();
}); this.route.params.subscribe((params: Params) => {
this.secondFormGroup = this.formBuilder.group({ const itemId = params['id'];
secondCtrl: ['', Validators.required] if (itemId != null) {
this.isNew = false;
this.datasetService.getSingle(itemId).map(data => data as DatasetModel)
.subscribe(data => {
this.datasetModel = new JsonSerializer<DatasetWizardModel>().fromJSONObject(data, DatasetWizardModel);
this.formGroup = this.datasetModel.buildForm();
this.datasetProfileAutoCompleteConfiguration = new AutoCompleteConfiguration(this.datasetWizardService.getAvailableProfiles.bind(this.datasetWizardService), datasetProfileRequestItem);
this.formGroup.get("dmp").valueChanges.subscribe(change=>{
this.datasetProfileAutoCompleteConfiguration.requestItem.criteria.id=change.id
}
);
});
} else {
this.datasetModel = new DatasetWizardModel();
setTimeout(() => {
this.formGroup = this.datasetModel.buildForm();
this.datasetProfileAutoCompleteConfiguration = new AutoCompleteConfiguration(this.datasetWizardService.getAvailableProfiles.bind(this.datasetWizardService), datasetProfileRequestItem);
this.formGroup.get("dmp").valueChanges.subscribe(change=>{
this.datasetProfileAutoCompleteConfiguration.requestItem.criteria.id=change.id
}
);
});
}
}); });
} }
ngAfterViewInit() { ngAfterViewInit() {

View File

@ -1,4 +1,4 @@
import { Component, ViewChild, OnInit, AfterViewInit, ViewEncapsulation } from "@angular/core"; import { AfterViewInit, Component, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import { MatPaginator, MatSort, MatSnackBar } from "@angular/material"; import { MatPaginator, MatSort, MatSnackBar } from "@angular/material";
import { Router, ActivatedRoute, Params } from "@angular/router"; import { Router, ActivatedRoute, Params } from "@angular/router";
import { TranslateService } from "@ngx-translate/core"; import { TranslateService } from "@ngx-translate/core";
@ -26,13 +26,16 @@ export class DatasetEditorComponent implements AfterViewInit {
isNew = true; isNew = true;
dataset: DatasetModel; dataset: DatasetModel;
formGroup: FormGroup = null; @Input() formGroup: FormGroup = null;
filtereddataRepositoriesAsync: boolean = false; filtereddataRepositoriesAsync: boolean = false;
filteredRegistriesAsync: boolean = false; filteredRegistriesAsync: boolean = false;
filteredServicesAsync: boolean = false;
filtereddataRepositories: ExternalSourcesItemModel[]; filtereddataRepositories: ExternalSourcesItemModel[];
filteredRegistries: ExternalSourcesItemModel[]; filteredRegistries: ExternalSourcesItemModel[];
filteredServices: ExternalSourcesItemModel[];
constructor( constructor(
private datasetService: DatasetService, private datasetService: DatasetService,
private externalSourcesService: ExternalSourcesService, private externalSourcesService: ExternalSourcesService,
@ -45,7 +48,7 @@ export class DatasetEditorComponent implements AfterViewInit {
} }
ngAfterViewInit() { ngAfterViewInit() {
this.route.params.subscribe((params: Params) => { /* this.route.params.subscribe((params: Params) => {
const itemId = params['id']; const itemId = params['id'];
if (itemId != null) { if (itemId != null) {
@ -61,7 +64,7 @@ export class DatasetEditorComponent implements AfterViewInit {
this.formGroup = this.dataset.buildForm(); this.formGroup = this.dataset.buildForm();
}); });
} }
}); }); */
} }
formSubmit(): void { formSubmit(): void {
@ -140,4 +143,22 @@ export class DatasetEditorComponent implements AfterViewInit {
}); });
} }
} }
filterServices(value: string): void {
this.filteredServices = undefined;
if (value) {
this.filteredServicesAsync = true;
this.externalSourcesService.searchDMPResearchers(value).subscribe(items => {
this.filteredServices = items;
this.filteredServicesAsync = false;
// this.filteredOrganisations = items.filter((filteredObj: any) => {
// return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true;
// });
});
}
}
} }

View File

@ -0,0 +1,4 @@
import { BaseCriteria } from '../BaseCriteria';
export class DatasetProfileCriteria extends BaseCriteria{
public id:string;
}

View File

@ -0,0 +1,31 @@
import { BaseErrorModel } from '../error/BaseErrorModel';
import { BackendErrorValidator } from '../../utilities/validators/BackendErrorValidator';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ValidationContext } from '../../utilities/validators/ValidationContext';
import { Serializable } from "../Serializable";
export class DatasetProfileModel implements Serializable<DatasetProfileModel> {
public id: String;
public errorModel: BaseErrorModel = new BaseErrorModel();
fromJSONObject(item: any): DatasetProfileModel {
this.id = item.id;
return this;
}
buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup {
if (context == null) { context = this.createValidationContext(); }
const formGroup = new FormBuilder().group({
id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators]
});
return formGroup;
}
createValidationContext(): ValidationContext {
const baseContext: ValidationContext = new ValidationContext();
baseContext.validation.push({ key: 'id', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'id')] });
return baseContext;
}
}

View File

@ -0,0 +1,74 @@
import { DatasetProfileModel } from '../datasetprofile/DatasetProfileModel';
import { DataManagementPlanModel } from '../data-managemnt-plans/DataManagementPlanModel';
import { Serializable } from "../Serializable";
import { ValidationContext } from "../../utilities/validators/ValidationContext";
import { FormGroup, FormBuilder, FormControl, Validators } from "@angular/forms";
import { BackendErrorValidator } from "../../utilities/validators/BackendErrorValidator";
import { BaseErrorModel } from "../error/BaseErrorModel";
import { ExternalSourcesItemModel } from "../external-sources/ExternalSourcesItemModel";
import { ServiceModel } from "../services/ServiceModel";
import { JsonSerializer } from "../../utilities/JsonSerializer";
import { RegisterModel } from "../registers/RegisterModel";
import { DataRepositoryModel } from "../dataRepositories/DataRepositoryModel";
export class DatasetWizardModel implements Serializable<DatasetWizardModel> {
public id: String;
public label: String;
public profile: DatasetProfileModel = new DatasetProfileModel;
public uri: String;
public status: String;
public description: String;
public services: ServiceModel[] = [];
public registries: RegisterModel[] = [];
public dataRepositories: DataRepositoryModel[] = [];
public dmp:DataManagementPlanModel = new DataManagementPlanModel();
public errorModel: BaseErrorModel = new BaseErrorModel();
fromJSONObject(item: any): DatasetWizardModel {
this.id = item.id;
this.label = item.label;
this.profile = item.profile;
this.uri = item.uri;
this.status = item.status;
this.description = item.description;
this.services = new JsonSerializer<ServiceModel>().fromJSONArray(item.services, ServiceModel);
this.registries = new JsonSerializer<RegisterModel>().fromJSONArray(item.registries, RegisterModel);
this.dataRepositories = new JsonSerializer<DataRepositoryModel>().fromJSONArray(item.dataRepositories, DataRepositoryModel);
this.dmp = new JsonSerializer<DataManagementPlanModel>().fromJSONObject(item.dmp, DataManagementPlanModel);
this.profile = new JsonSerializer<DatasetWizardModel>().fromJSONObject(item.profile, DatasetWizardModel);
return this;
}
buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup {
if (context == null) { context = this.createValidationContext(); }
const formGroup = new FormBuilder().group({
label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators],
uri: [{ value: this.uri, disabled: disabled }, context.getValidation('uri').validators],
status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators],
description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators],
services: [{ value: this.services, disabled: disabled }, context.getValidation('services').validators],
registries: [{ value: this.registries, disabled: disabled }, context.getValidation('registries').validators],
dataRepositories: [{ value: this.dataRepositories, disabled: disabled }, context.getValidation('dataRepositories').validators],
dmp: [{ value: this.dmp, disabled: disabled }, context.getValidation('dmp').validators],
profile: [{ value: this.profile, disabled: disabled }, context.getValidation('profile').validators],
});
return formGroup;
}
createValidationContext(): ValidationContext {
const baseContext: ValidationContext = new ValidationContext();
baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] });
baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profile')] });
baseContext.validation.push({ key: 'uri', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'uri')] });
baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] });
baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] });
baseContext.validation.push({ key: 'services', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'services')] });
baseContext.validation.push({ key: 'registries', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'registries')] });
baseContext.validation.push({ key: 'dataRepositories', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'dataRepositories')] });
baseContext.validation.push({ key: 'dmp', validators: [BackendErrorValidator(this.errorModel, 'dmp')] }); //TODO
return baseContext;
}
}

View File

@ -1,3 +1,4 @@
import { DatasetProfileCriteria } from '../../models/criteria/dataset-profile/DatasetProfileCriteria';
import 'rxjs/add/operator/map'; import 'rxjs/add/operator/map';
import { HttpHeaders } from '@angular/common/http'; import { HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
@ -27,4 +28,8 @@ export class DatasetWizardService {
public userDmps(criteria: RequestItem<DataManagementPlanCriteria>): Observable<DataManagementPlanModel[]> { public userDmps(criteria: RequestItem<DataManagementPlanCriteria>): Observable<DataManagementPlanModel[]> {
return this.http.post<DataManagementPlanModel[]>(this.actionUrl + 'userDmps', criteria, { headers: this.headers }); return this.http.post<DataManagementPlanModel[]>(this.actionUrl + 'userDmps', criteria, { headers: this.headers });
} }
public getAvailableProfiles(criteria: RequestItem<DatasetProfileCriteria>): Observable<DataManagementPlanModel[]> {
return this.http.post<DataManagementPlanModel[]>(this.actionUrl + 'getAvailableProfiles/', criteria, { headers: this.headers });
}
} }

View File

@ -30,7 +30,7 @@
<mat-error *ngIf="validationErrorString">{{errorString}}</mat-error> <mat-error *ngIf="validationErrorString">{{errorString}}</mat-error>
<mat-progress-spinner matSuffix mode="indeterminate" *ngIf="loading" [diameter]="22"></mat-progress-spinner> <mat-progress-spinner matSuffix mode="indeterminate" *ngIf="loading" [diameter]="22"></mat-progress-spinner>
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayWith.bind(this)" (optionSelected)="this.optionSelected($event)"> <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayWith.bind(this)" (optionSelected)="this.optionSelected($event)">
<mat-option *ngFor="let item of filteredItems | async" [value]="item"> <mat-option *ngFor="let item of filteredItems " [value]="item">
<span *ngIf="titleKey">{{item[titleKey]}}</span> <span *ngIf="titleKey">{{item[titleKey]}}</span>
<span *ngIf="subtitleKey">{{item[subtitleKey]}}</span> <span *ngIf="subtitleKey">{{item[subtitleKey]}}</span>
</mat-option> </mat-option>

View File

@ -1,3 +1,4 @@
import { any } from 'codelyzer/util/function';
import { FormControl, FormGroupDirective, NgForm, FormGroup, FormBuilder } from '@angular/forms'; import { FormControl, FormGroupDirective, NgForm, FormGroup, FormBuilder } from '@angular/forms';
import { Observable } from 'rxjs/Rx'; import { Observable } from 'rxjs/Rx';
import { setTimeout } from 'timers'; import { setTimeout } from 'timers';
@ -38,6 +39,9 @@ export class AutocompleteComponent implements OnInit {
@Input() @Input()
required: boolean; required: boolean;
@Input()
disabled: boolean = false;
// @Input() selectedDropdownItem: AutoCompleteItem; // @Input() selectedDropdownItem: AutoCompleteItem;
// @Output() selectedDropdownItemChange = new EventEmitter<AutoCompleteItem>(); // @Output() selectedDropdownItemChange = new EventEmitter<AutoCompleteItem>();
@ -75,8 +79,8 @@ export class AutocompleteComponent implements OnInit {
.switchMap(val => { .switchMap(val => {
//if (this.hasSelectedItem) return []; //if (this.hasSelectedItem) return [];
this.configuration.requestItem.criteria.like = this.control.value; this.configuration.requestItem.criteria.like = this.control.value;
return this.configuration.callback(this.configuration.requestItem) return this.configuration.callback(this.configuration.requestItem).map(result=>this.filteredItems = (<any[]>result))
}) }).subscribe()
// this.filteredItems = this.inputField.nativeElement.valueChanges.startWith(null) // this.filteredItems = this.inputField.nativeElement.valueChanges.startWith(null)
// .debounceTime(this.delay) // .debounceTime(this.delay)