diff --git a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html
index bd924121f..bf69ceeb4 100644
--- a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html
+++ b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html
@@ -1,9 +1,23 @@
{{group.title}}
-
\ No newline at end of file
diff --git a/dmp-frontend/src/app/form/dynamic-form-group/group-base.ts b/dmp-frontend/src/app/form/dynamic-form-group/group-base.ts
index a697231f1..6b40acb5b 100644
--- a/dmp-frontend/src/app/form/dynamic-form-group/group-base.ts
+++ b/dmp-frontend/src/app/form/dynamic-form-group/group-base.ts
@@ -13,6 +13,7 @@ export class GroupBase
{
style:string;
class: string;
page: number;
+ compositeFields: GroupBase;
constructor(options: {
value?: T,
@@ -26,7 +27,8 @@ export class GroupBase{
section?: string,
style?:string
class?:string,
- page?:number
+ page?:number,
+ compositeFields?:GroupBase
} = {}) {
this.value = options.value;
this.key = options.key || '';
@@ -40,5 +42,6 @@ export class GroupBase{
this.style = options.style || '';
this.class = options.class || '';
this.page = options.page || 1;
+ this.compositeFields = options.compositeFields;
}
}
diff --git a/dmp-frontend/src/app/services/dataModelBuilder.service.ts b/dmp-frontend/src/app/services/dataModelBuilder.service.ts
index f6052bd3f..e8a163559 100644
--- a/dmp-frontend/src/app/services/dataModelBuilder.service.ts
+++ b/dmp-frontend/src/app/services/dataModelBuilder.service.ts
@@ -29,11 +29,11 @@ export class dataModelBuilder {
this.dataModel = new DataModel();
this.fields = this.buildFields(data.viewstyle.definition.root.fields.field);
- this.dataModel.groups = this.getGroups(data.viewstyle.definition.root.fieldGroups.fieldGroup, this.fields, dataValues);
+
this.dataModel.semanticAttr = new Array(new Attribute);
- this.dataModel.semanticAttr = this.getFieldsAttributes(data.definition.root.fields.field, data.ruleset.definition.root.functions.function, this.fields);
+ this.dataModel.semanticAttr = this.getFieldsAttributes(data.definition.root.fields.fieldset, data.ruleset.definition.root.functions.function, this.fields);
+ this.dataModel.groups = this.getGroups(data.viewstyle.definition.root.fieldGroups.fieldGroup, this.fields, dataValues);
this.dataModel.sections = this.getSections(data.viewstyle.definition.root.sections.section, this.dataModel.groups);
- //this.getDatatypes(data.definition.root);
this.dataModel.buildIndex();
this.checkDuplicateInObject('order', this.dataModel.groups[13].groupFields); //for future use , for composite field
@@ -162,13 +162,19 @@ export class dataModelBuilder {
if (fieldGroups.length > 1) {
fieldGroups.forEach(fieldGroup => { // each fiedgroup fills with its fields from json
let newfldGroup = new GroupBase();
+ let compositeFields = new GroupBase();
newfldGroup.groupFields = new Array();
+ compositeFields.groupFields = new Array();
fields.forEach(field => {
if (fieldGroup._id == field.group) {
- if (dataValues != "")
+ if (dataValues != "")//--------------------------SET VALUES--------------------------------------------
if (dataValues[fieldGroup._id][field.key] != undefined) // to put values in fields
field.value = dataValues[fieldGroup._id][field.key].value == undefined ? dataValues[fieldGroup._id][field.key] : dataValues[fieldGroup._id][field.key].value;
- newfldGroup.groupFields.push(field);
+ if(field.order.toString().split(",").length > 1){
+ compositeFields.groupFields.push(field);
+ newfldGroup.compositeFields = compositeFields;
+ }else
+ newfldGroup.groupFields.push(field);
} else {
//this.dataModel.fields.push(field);
}
@@ -201,78 +207,109 @@ export class dataModelBuilder {
return groups;
}
+ addAttributesToFields(attr, functions, fields, multiplicity){
- private getFieldsAttributes(attributes: any, functions: any, fields: any[]) {
- let attribute: Attribute[] = [];
- attributes.forEach(attr => {
- let newAttribute = new Attribute();
- newAttribute.datatype = attr._datatype;
- newAttribute.defaultValue = attr.defaultValue._value;
- newAttribute.id = attr._id;
- newAttribute.multiplicityMax = attr.multiplicity._max;
- newAttribute.multiplicityMin = attr.multiplicity._min;
- newAttribute.ordinal = attr._ordinal;
- newAttribute.sources = new Array();
- newAttribute.validation = new Array();
- //newAttribute.validation.push(attr.validation.rule);
- //-----------------Sources---------------------------------------------------------------
- if (attr.sources) {
- newAttribute.sources.push(attr.sources.source);
- if (attr.sources.source.length != undefined) {
- for (var i = 0; i < attr.sources.source.length; i++) {
- if (attr.sources.source[i]._type == "url") {
- newAttribute.url = attr.sources.source[i].value._value;
- break;
- }
- }
+ let newAttribute = new Attribute();
+ newAttribute.datatype = attr._datatype;
+ newAttribute.defaultValue = attr.defaultValue._value;
+ newAttribute.id = attr._id;
+ newAttribute.multiplicityMax = attr.multiplicity._max;
+ newAttribute.multiplicityMin = attr.multiplicity._min;
+ newAttribute.ordinal = attr._ordinal
+ if (multiplicity){
+ fields.find(x => x.key == newAttribute.id).order = fields.find(x => x.key == newAttribute.id).order +','+ newAttribute.ordinal;
+ fields.find(x => x.key == newAttribute.id).multiplicity = true;
+ }
+ newAttribute.ordinal = attr._ordinal;
+ newAttribute.sources = new Array();
+ newAttribute.validation = new Array();
+ //newAttribute.validation.push(attr.validation.rule);
+ //-----------------Sources---------------------------------------------------------------
+ if (attr.sources) {
+ newAttribute.sources.push(attr.sources.source);
+ if (attr.sources.source.length != undefined) {
+ for (var i = 0; i < attr.sources.source.length; i++) {
+ if (attr.sources.source[i]._type == "url") {
+ newAttribute.url = attr.sources.source[i].value._value;
+ break;
+ }
}
- if (attr.sources.source._type == "url") {
- newAttribute.url = attr.sources.source.value._value;
- }
}
- //-----------Rules------------------------------------------------------------------------
- if(attr.validation.rule != undefined)
- if (attr.validation.rule.length)
- for (var i = 0, len = attr.validation.rule.length; i < len; i++) {
- let rule = new Rule();
- rule.ruleStyle = attr.validation.rule[i]._ruleStyle;
- rule.ruleType = attr.validation.rule[i]._type;
- if (attr.validation.rule[i]._ruleStyle == "regex")
- rule.regex = attr.validation.rule[i].__cdata;
- if (attr.validation.rule[i]._ruleStyle == "customValidation") {
- rule.method = attr.validation.rule[i]._method;
- functions.forEach(fnc => {
- if (fnc._id == rule.method)
- rule.methodJs = fnc.script.__cdata;
- });
- }
- newAttribute.validation.push(rule);
+ if (attr.sources.source._type == "url") {
+ newAttribute.url = attr.sources.source.value._value;
+ }
+ }
+ //-----------Rules------------------------------------------------------------------------
+ if(attr.validation.rule != undefined)
+ if (attr.validation.rule.length)
+ for (var i = 0, len = attr.validation.rule.length; i < len; i++) {
+ let rule = new Rule();
+ rule.ruleStyle = attr.validation.rule[i]._ruleStyle;
+ rule.ruleType = attr.validation.rule[i]._type;
+ if (attr.validation.rule[i]._ruleStyle == "regex")
+ rule.regex = attr.validation.rule[i].__cdata;
+ if (attr.validation.rule[i]._ruleStyle == "customValidation") {
+ rule.method = attr.validation.rule[i]._method;
+ functions.forEach(fnc => {
+ if (fnc._id == rule.method)
+ rule.methodJs = fnc.script.__cdata;
+ });
}
- else {
- if (attr.validation.rule) {
- let rule = new Rule();
- rule.ruleStyle = attr.validation.rule._ruleStyle;
- rule.ruleType = attr.validation.rule._type;
- if (attr.validation.rule._ruleStyle == "regex")
- rule.regex = attr.validation.rule.__cdata;
- if (attr.validation.rule._ruleStyle == "customValidation") {
- rule.method = attr.validation.rule._method;
- functions.forEach(fnc => {
- if (fnc._id == rule.method)
- rule.methodJs = fnc.__cdata;
- });
- }
- newAttribute.validation.push(rule); }
+ newAttribute.validation.push(rule);
}
+ else {
+ if (attr.validation.rule) {
+ let rule = new Rule();
+ rule.ruleStyle = attr.validation.rule._ruleStyle;
+ rule.ruleType = attr.validation.rule._type;
+ if (attr.validation.rule._ruleStyle == "regex")
+ rule.regex = attr.validation.rule.__cdata;
+ if (attr.validation.rule._ruleStyle == "customValidation") {
+ rule.method = attr.validation.rule._method;
+ functions.forEach(fnc => {
+ if (fnc._id == rule.method)
+ rule.methodJs = fnc.__cdata;
+ });
+ }
+ newAttribute.validation.push(rule); }
+ }
- attribute.push(newAttribute);
- if (newAttribute.url !== undefined)
- fields.find(x => x.key == newAttribute.id).url = newAttribute.url;
- fields.find(x => x.key == newAttribute.id).attributes.sources = newAttribute.sources;
- fields.find(x => x.key == newAttribute.id).attributes.validation = newAttribute.validation;
+
+
+
+
+ return newAttribute;
+ }
+
+ private getFieldsAttributes(fieldsets: any, functions: any, fields: any[]) {
+ let attribute: Attribute[] = [];
+ let newAttribute = new Attribute();
+ let multiplicityParam = false;
+ fieldsets.forEach(fieldset => {
+ if (fieldset.fields.field.length){
+ if(fieldset.multiplicity._max >1 || fieldset.multiplicity._max == "n")
+ multiplicityParam = true;
+ fieldset.fields.field.forEach(fieldAttribute=>{
+ newAttribute = this.addAttributesToFields(fieldAttribute, functions, fields, multiplicityParam)
+ attribute.push(newAttribute);
+ if (newAttribute.url !== undefined)
+ fields.find(x => x.key == newAttribute.id).url = newAttribute.url;
+ fields.find(x => x.key == newAttribute.id).attributes.sources = newAttribute.sources;
+ fields.find(x => x.key == newAttribute.id).attributes.validation = newAttribute.validation;
+ })
+ }else{
+ if(fieldset.multiplicity._max >1 || fieldset.multiplicity._max == "n")
+ multiplicityParam = true;
+ newAttribute = this.addAttributesToFields(fieldset.fields.field, functions, fields, multiplicityParam)
+ attribute.push(newAttribute);
+ if (newAttribute.url !== undefined)
+ fields.find(x => x.key == newAttribute.id).url = newAttribute.url;
+ fields.find(x => x.key == newAttribute.id).attributes.sources = newAttribute.sources;
+ fields.find(x => x.key == newAttribute.id).attributes.validation = newAttribute.validation;
+ }
});
-
return attribute;
+
}
private getSections(sections: any, fieldGroups: GroupBase[]) {
@@ -299,16 +336,6 @@ export class dataModelBuilder {
return sects;
}
- private getDatatypes(dataTypes){
- if (dataTypes.datatypes.datatype.id == "compositeField"){
- dataTypes.datatypes.datatype.fields.forEach(field => {
- this.dataModel.fields.forEach(fieldinModel=>{
- if (field.id == fieldinModel.key)
- fieldinModel.datatype = "compositeField";
- });
- });
- }
- }
checkDuplicateInObject(propertyName, inputArray) {
let DuplicateArray = [];
diff --git a/dmp-frontend/src/app/services/field-control.service.ts b/dmp-frontend/src/app/services/field-control.service.ts
index 06c751b63..bbf62148f 100644
--- a/dmp-frontend/src/app/services/field-control.service.ts
+++ b/dmp-frontend/src/app/services/field-control.service.ts
@@ -15,6 +15,8 @@ export class FieldControlService {
groups.forEach(group => {
let subgroup: any = {};
+ let subgroupFieldset: any = {};
+ let fieldset: boolean = false;
group.groupFields.forEach(field => {
//if(field.attributes.validation != undefined)
// field.attributes.validation.forEach(val => {
@@ -26,9 +28,25 @@ export class FieldControlService {
// }
// });
subgroup[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '')
+
+ if (group.compositeFields!=undefined){
+ fieldset = true;
+ group.compositeFields.groupFields.forEach(field => {
+ //subgroupFieldset[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '')
+ subgroup[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '');
+ });
+ }
});
+
+
//PLEASE CHANGE THE group.key TO BE SAME AS THE ONE ON THE DYNAMIC-FORM-GROUP-COMPONENT.html
- form[group.key] = new FormGroup(subgroup);
+ if (fieldset){
+ //subgroup["FieldSet"+ group.key] = form[group.key] = new FormGroup(subgroupFieldset);
+ form[group.key] = new FormGroup(subgroup);
+ }
+
+ else
+ form[group.key] = new FormGroup(subgroup);
//console.log("FORM_GROUP_GROUP: ");
//console.log(form);
});
diff --git a/dmp-frontend/src/app/services/rest-base.ts b/dmp-frontend/src/app/services/rest-base.ts
index 981357da9..ac4ac82c4 100644
--- a/dmp-frontend/src/app/services/rest-base.ts
+++ b/dmp-frontend/src/app/services/rest-base.ts
@@ -18,19 +18,19 @@ export class RestBase {
- /*
+
protocol: string = "http";
hostname: string ="dl010.madgik.di.uoa.gr" ;//"localhost";//"dl010.madgik.di.uoa.gr";//
port: number = 8080;//8080;//
webappname: string = "dmp-backend";//"dmp-backend-new";//
- */
- protocol: string = "http";
- hostname: string = "dionysus.di.uoa.gr" ;
- port: number = 7070;
- webappname: string = "dmp-backend";
+
+ // protocol: string = "http";
+ // hostname: string = "dionysus.di.uoa.gr" ;
+ // port: number = 7070;
+ // webappname: string = "dmp-backend";