From 767b1194b1a63fa6c8775c64ed26377dd238f2d8 Mon Sep 17 00:00:00 2001 From: annabakouli Date: Thu, 30 Nov 2017 12:10:42 +0200 Subject: [PATCH] model serializers-deserializers between admin model and xml field definition --- dmp-admin/src/app/app.component.html | 4 +- .../profile-editor.component.ts | 2 +- .../datasets-viewer.component.html | 2 +- .../app/field-form/field-form.component.html | 4 +- .../src/app/formBuilder/form.component.ts | 48 ++-- .../datasetprofile-editor.component.html | 7 + dmp-admin/src/app/routes.ts | 5 + .../app/services/dataset-profile.service.ts | 2 +- dmp-admin/src/app/services/rest-base.ts | 4 +- dmp-backend/pom.xml | 6 +- .../DatabaseModelDefinition.java | 7 + .../xmlmodels/modeldefinition/Field.java | 91 ++++++++ .../xmlmodels/modeldefinition/FieldGroup.java | 54 +++++ .../xmlmodels/modeldefinition/FieldSet.java | 78 +++++++ .../DatabaseViewStyleDefinition.java | 7 + .../xmlmodels/viewstyledefinition/Field.java | 116 ++++++++++ .../viewstyledefinition/FieldGroup.java | 128 +++++++++++ .../viewstyledefinition/FieldSet.java | 58 +++++ .../viewstyledefinition/Section.java | 156 +++++++++++++ .../viewstyledefinition/ViewStyleModel.java | 56 +++++ .../src/main/java/managers/AdminManager.java | 69 ++++++ .../components/commons/DefaultValue.java | 21 ++ .../components/commons/Multiplicity.java | 22 ++ .../models/components/commons/ViewStyle.java | 20 ++ .../datafield/BooleanDecisionData.java | 32 +++ .../commons/datafield/CheckBoxData.java | 34 +++ .../commons/datafield/ComboBoxData.java | 119 ++++++++++ .../commons/datafield/FieldData.java | 22 ++ .../commons/datafield/FreeTextData.java | 34 +++ .../commons/datafield/RadioBoxData.java | 108 +++++++++ .../components/datasetprofile/Field.java | 100 +++++++- .../components/datasetprofile/FieldSet.java | 55 ++++- .../components/datasetprofile/Group.java | 50 +++- .../components/datasetprofile/Section.java | 37 ++- .../java/models/composite/DatasetProfile.java | 15 +- .../src/main/java/rest/entities/Admin.java | 49 ++++ .../java/utilities/DatabaseDefinition.java | 5 + .../main/java/utilities/ModelDefinition.java | 8 + .../main/java/utilities/ModelSerializer.java | 9 + .../java/utilities/ViewStyleDefinition.java | 10 + .../main/java/utilities/XmlSerializable.java | 7 +- .../java/utilities/builders/ModelBuilder.java | 70 +++++- .../java/utilities/builders/XmlBuilder.java | 69 ++++++ .../helpers/ModelBuilderCollector.java | 81 +++++++ dmp-frontend/src/app/testModel/testmodel.ts | 216 ++++++++++++++++-- 45 files changed, 2042 insertions(+), 55 deletions(-) create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/DatabaseModelDefinition.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/Field.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/FieldGroup.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/FieldSet.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/DatabaseViewStyleDefinition.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Field.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/FieldGroup.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/FieldSet.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Section.java create mode 100644 dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/ViewStyleModel.java create mode 100644 dmp-backend/src/main/java/managers/AdminManager.java create mode 100644 dmp-backend/src/main/java/models/components/commons/DefaultValue.java create mode 100644 dmp-backend/src/main/java/models/components/commons/Multiplicity.java create mode 100644 dmp-backend/src/main/java/models/components/commons/ViewStyle.java create mode 100644 dmp-backend/src/main/java/models/components/commons/datafield/BooleanDecisionData.java create mode 100644 dmp-backend/src/main/java/models/components/commons/datafield/CheckBoxData.java create mode 100644 dmp-backend/src/main/java/models/components/commons/datafield/ComboBoxData.java create mode 100644 dmp-backend/src/main/java/models/components/commons/datafield/FieldData.java create mode 100644 dmp-backend/src/main/java/models/components/commons/datafield/FreeTextData.java create mode 100644 dmp-backend/src/main/java/models/components/commons/datafield/RadioBoxData.java create mode 100644 dmp-backend/src/main/java/utilities/DatabaseDefinition.java create mode 100644 dmp-backend/src/main/java/utilities/ModelDefinition.java create mode 100644 dmp-backend/src/main/java/utilities/ModelSerializer.java create mode 100644 dmp-backend/src/main/java/utilities/ViewStyleDefinition.java create mode 100644 dmp-backend/src/main/java/utilities/builders/XmlBuilder.java create mode 100644 dmp-backend/src/main/java/utilities/helpers/ModelBuilderCollector.java diff --git a/dmp-admin/src/app/app.component.html b/dmp-admin/src/app/app.component.html index 8eda0142b..8033861af 100644 --- a/dmp-admin/src/app/app.component.html +++ b/dmp-admin/src/app/app.component.html @@ -39,8 +39,8 @@ - - + + diff --git a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.ts b/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.ts index 2e510c887..ef479a242 100644 --- a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.ts +++ b/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.ts @@ -12,7 +12,7 @@ declare function simple_notifier(type: string, title: string, message:string): a }) export class ProfileEditorComponent implements OnInit { - @Input('profileID') profileID: string = null; + public profileID: string = null; profile : any = new Array(); diff --git a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html b/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html index 5095aca05..a92228921 100644 --- a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html +++ b/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html @@ -12,7 +12,7 @@

Manage Datasets

- +
diff --git a/dmp-admin/src/app/field-form/field-form.component.html b/dmp-admin/src/app/field-form/field-form.component.html index 1f606d9f8..724c598ac 100644 --- a/dmp-admin/src/app/field-form/field-form.component.html +++ b/dmp-admin/src/app/field-form/field-form.component.html @@ -67,7 +67,7 @@ -
+
\ No newline at end of file diff --git a/dmp-admin/src/app/formBuilder/form.component.ts b/dmp-admin/src/app/formBuilder/form.component.ts index 5de8e5a3c..ac8f4c1c7 100644 --- a/dmp-admin/src/app/formBuilder/form.component.ts +++ b/dmp-admin/src/app/formBuilder/form.component.ts @@ -1,3 +1,4 @@ +import { DatasetProfileService } from '../services/dataset-profile.service'; import { Component, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { JsonSerializer } from '../utilities/JsonSerializer'; @@ -7,7 +8,8 @@ import { FieldGroup } from '../models/FieldGroup'; import { DatasetProfileModel } from '../models/DatasetProfileModel'; import { TestModel } from '../testModel/testModel'; import { FormArray } from '@angular/forms/src/model'; -import {RestBase} from '../services/rest-base'; +import { RestBase } from '../services/rest-base'; +import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router'; @Component({ selector: 'form-comp', @@ -17,37 +19,51 @@ import {RestBase} from '../services/rest-base'; export class FormComponent { - dataModel: DatasetProfileModel ; + dataModel: DatasetProfileModel; form: FormGroup; + private profileID: string; - constructor(public restBase: RestBase){ - } + constructor(public restBase: RestBase, private datasetProfileService: DatasetProfileService, private route: ActivatedRoute) { + this.profileID = route.snapshot.params['id']; - ngOnInit(){ - this.dataModel = new DatasetProfileModel(); - this.dataModel = new JsonSerializer().fromJSONObject(TestModel,DatasetProfileModel); - this.form = this.dataModel.buildForm(); - //if (!this.dataModel) this.addSection(); } - - addSection(){ - let section:Section = new Section(); + + ngOnInit() { + + this.dataModel = new JsonSerializer().fromJSONObject(new DatasetProfileModel(), DatasetProfileModel); + this.form = this.dataModel.buildForm(); + if (this.profileID) { + this.datasetProfileService.getDatasetProfileById(this.profileID).subscribe((data) => { + + this.dataModel = new JsonSerializer().fromJSONObject(data, DatasetProfileModel); + this.form = this.dataModel.buildForm(); + }); + } + else{ + + this.addSection(); + } + } + + addSection() { + let section: Section = new Section(); this.dataModel.sections.push(section); (this.form.get("sections")).push(section.buildForm()); } - DeleteSection(index){ + DeleteSection(index) { this.dataModel.sections.splice(index); (this.form.get("sections")).removeAt(index) } - updateForm(data){ + updateForm(data) { return this.restBase.post("", data); } - onSubmit(){ debugger; + onSubmit() { + debugger; let data = JSON.stringify(this.form.value); this.updateForm(data).subscribe(); } - + } \ No newline at end of file diff --git a/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.html b/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.html index f600a06d3..4b6426bc9 100644 --- a/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.html +++ b/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.html @@ -13,6 +13,10 @@ + + + + ID @@ -20,6 +24,7 @@ Ruleset Viewstyle Definition + @@ -30,6 +35,8 @@ {{datasetProfile?.ruleset?.label}} {{datasetProfile?.viewstyle?.label}} {{datasetProfile?.definition}} + + diff --git a/dmp-admin/src/app/routes.ts b/dmp-admin/src/app/routes.ts index bf966523e..c0765cab2 100644 --- a/dmp-admin/src/app/routes.ts +++ b/dmp-admin/src/app/routes.ts @@ -1,3 +1,4 @@ +import { FormComponent } from './formBuilder/form.component'; import { ModuleWithProviders } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; @@ -74,6 +75,10 @@ export const routes: Routes = [ { path: 'main', component: MainWindowComponent + }, + { + path: 'form/:id', + component: FormComponent } diff --git a/dmp-admin/src/app/services/dataset-profile.service.ts b/dmp-admin/src/app/services/dataset-profile.service.ts index cdae154de..38a33c85b 100644 --- a/dmp-admin/src/app/services/dataset-profile.service.ts +++ b/dmp-admin/src/app/services/dataset-profile.service.ts @@ -21,7 +21,7 @@ export class DatasetProfileService implements OnInit { } getDatasetProfileById(datasetProfileID){ - return this.restBase.get("datasetprofile/"+datasetProfileID); + return this.restBase.get("admin/get//"+datasetProfileID); } createDatasetProfile(datasetProfile){ diff --git a/dmp-admin/src/app/services/rest-base.ts b/dmp-admin/src/app/services/rest-base.ts index 4fdf398f2..bc80e0cae 100644 --- a/dmp-admin/src/app/services/rest-base.ts +++ b/dmp-admin/src/app/services/rest-base.ts @@ -18,8 +18,8 @@ export class RestBase { /* */ protocol: string = "http"; - hostname: string = "dionysus.di.uoa.gr"; - port: number = 7070; + hostname: string = "localhost"; + port: number = 8080; webappname: string = "dmp-backend"; restpath: string = "rest"; diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index e946c9595..ee6b72f9a 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -154,7 +154,11 @@ 2.8.4 - + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.9.0 + diff --git a/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/DatabaseModelDefinition.java b/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/DatabaseModelDefinition.java new file mode 100644 index 000000000..5523ecd3e --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/DatabaseModelDefinition.java @@ -0,0 +1,7 @@ +package entities.xmlmodels.modeldefinition; + +import utilities.DatabaseDefinition; + +public interface DatabaseModelDefinition extends DatabaseDefinition{ + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/Field.java b/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/Field.java new file mode 100644 index 000000000..b159c52d5 --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/Field.java @@ -0,0 +1,91 @@ +package entities.xmlmodels.modeldefinition; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +import models.components.commons.DefaultValue; +import models.components.commons.Multiplicity; +import utilities.XmlSerializable; + +public class Field implements DatabaseModelDefinition,XmlSerializable{ + + private String id; + private String datatype; + private int ordinal; + private DefaultValue defaultValue; + private Multiplicity multiplicity; + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getDatatype() { + return datatype; + } + public void setDatatype(String datatype) { + this.datatype = datatype; + } + public int getOrdinal() { + return ordinal; + } + public void setOrdinal(int ordinal) { + this.ordinal = ordinal; + } + + public DefaultValue getDefaultValue() { + return defaultValue; + } + public void setDefaultValue(DefaultValue defaultValue) { + this.defaultValue = defaultValue; + } + + public Multiplicity getMultiplicity() { + return multiplicity; + } + public void setMultiplicity(Multiplicity multiplicity) { + this.multiplicity = multiplicity; + } + + @Override + public Element toXml(Document doc) { + Element element = doc.createElement("field"); + element.setAttribute("id", this.id); + element.setAttribute("ordinal",""+this.ordinal); + element.setAttribute("datatype", this.datatype); + + Element defaultValue = doc.createElement("defaultValue"); + defaultValue.setAttribute("type", this.defaultValue.getType()); + defaultValue.setAttribute("value",this.defaultValue.getValue()); + + Element multiplicity = doc.createElement("multiplicity"); + multiplicity.setAttribute("min", ""+this.multiplicity.getMin()); + multiplicity.setAttribute("max", ""+this.multiplicity.getMax()); + + element.appendChild(defaultValue); + element.appendChild(multiplicity); + return element; + } + @Override + public Field fromXml(Element item) { + this.id = item.getAttribute("id"); + this.ordinal = Integer.parseInt(item.getAttribute("ordinal")); + this.datatype = item.getAttribute("datatype"); + + this.defaultValue = new DefaultValue(); + Element defaultValue = (Element)item.getElementsByTagName("defaultValue").item(0); + this.defaultValue.setType(defaultValue.getAttribute("type")); + this.defaultValue.setValue(defaultValue.getAttribute("value")); + + this.multiplicity = new Multiplicity(); + Element multiplicity = (Element)item.getElementsByTagName("multiplicity").item(0); + this.multiplicity.setMin(Integer.parseInt(multiplicity.getAttribute("min"))); + this.multiplicity.setMax(Integer.parseInt(multiplicity.getAttribute("max"))); + + return this; + } + + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/FieldGroup.java b/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/FieldGroup.java new file mode 100644 index 000000000..64804d815 --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/FieldGroup.java @@ -0,0 +1,54 @@ +package entities.xmlmodels.modeldefinition; + +import java.util.LinkedList; +import java.util.List; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import utilities.XmlSerializable; + +public class FieldGroup implements DatabaseModelDefinition,XmlSerializable{ + private List
fieldSets; + + public List
getFieldSets() { + return fieldSets; + } + + public void setFieldSets(List
fieldSets) { + this.fieldSets = fieldSets; + } + + @Override + public Element toXml(Document doc) { + Element rootElement = doc.createElement("root"); + Element fieldSetsElement = doc.createElement("fieldSets"); + for(FieldSet fieldSet : fieldSets){ + fieldSetsElement.appendChild(fieldSet.toXml(doc)); + } + rootElement.appendChild(fieldSetsElement); + doc.appendChild(rootElement); + return rootElement; + } + + @Override + public FieldGroup fromXml(Element element) { + this.fieldSets = new LinkedList(); + Element fieldSets = (Element)element.getElementsByTagName("fieldSets").item(0); + if(fieldSets!=null){ + NodeList fieldSetElements = fieldSets.getChildNodes(); + for (int temp = 0; temp < fieldSetElements.getLength(); temp++) { + Node fieldSetElement = fieldSetElements.item(temp); + if (fieldSetElement.getNodeType() == Node.ELEMENT_NODE) { + this.fieldSets.add(new FieldSet().fromXml((Element)fieldSetElement)); + } + } + } + return this; + } + + + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/FieldSet.java b/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/FieldSet.java new file mode 100644 index 000000000..04fd12ec2 --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/modeldefinition/FieldSet.java @@ -0,0 +1,78 @@ +package entities.xmlmodels.modeldefinition; + +import java.util.LinkedList; +import java.util.List; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +import utilities.XmlSerializable; +import utilities.builders.XmlBuilder; + +public class FieldSet implements DatabaseModelDefinition,XmlSerializable
{ + + private String id; + + private int ordinal; + + private List fields; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public int getOrdinal() { + return ordinal; + } + public void setOrdinal(int ordinal) { + this.ordinal = ordinal; + } + public List getFields() { + return fields; + } + public void setFields(List fields) { + this.fields = fields; + } + + @Override + public Element toXml(Document doc) { + + Element rootElement = doc.createElement("fieldset"); + rootElement.setAttribute("id", this.id); + rootElement.setAttribute("ordinal",""+this.ordinal); + + Element fieldsElement = doc.createElement("fields"); + for(Field field:this.fields){ + fieldsElement.appendChild(field.toXml(doc)); + } + rootElement.appendChild(fieldsElement); + return rootElement; + } + @Override + public FieldSet fromXml(Element element) { + this.id = element.getAttribute("id"); + this.ordinal = Integer.parseInt(element.getAttribute("ordinal")); + + this.fields = new LinkedList(); + Element fields = (Element)element.getElementsByTagName("fields").item(0); + if(fields!=null){ + NodeList fieldElements = fields.getChildNodes(); + for (int temp = 0; temp < fieldElements.getLength(); temp++) { + Node fieldElement = fieldElements.item(temp); + if (fieldElement.getNodeType() == Node.ELEMENT_NODE) { + this.fields.add(new Field().fromXml((Element)fieldElement)); + } + } + } + return this; + } + + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/DatabaseViewStyleDefinition.java b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/DatabaseViewStyleDefinition.java new file mode 100644 index 000000000..d7998eaf7 --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/DatabaseViewStyleDefinition.java @@ -0,0 +1,7 @@ +package entities.xmlmodels.viewstyledefinition; + +import utilities.DatabaseDefinition; + +public interface DatabaseViewStyleDefinition extends DatabaseDefinition{ + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Field.java b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Field.java new file mode 100644 index 000000000..3c752fd98 --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Field.java @@ -0,0 +1,116 @@ +package entities.xmlmodels.viewstyledefinition; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import entities.xmlmodels.modeldefinition.DatabaseModelDefinition; +import models.components.commons.ViewStyle; +import models.components.commons.datafield.FieldData; +import utilities.XmlSerializable; +import utilities.builders.ModelBuilder; + +public class Field implements DatabaseViewStyleDefinition,XmlSerializable{ + private String id; + private int ordinal; + private boolean defaultVisibility; + private String title; + private String description; + private String extendedDescription; + private ViewStyle viewStyle; + private FieldData data; + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public int getOrdinal() { + return ordinal; + } + public void setOrdinal(int ordinal) { + this.ordinal = ordinal; + } + public boolean isDefaultVisibility() { + return defaultVisibility; + } + public void setDefaultVisibility(boolean defaultVisibility) { + this.defaultVisibility = defaultVisibility; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public String getExtendedDescription() { + return extendedDescription; + } + public void setExtendedDescription(String extendedDescription) { + this.extendedDescription = extendedDescription; + } + public ViewStyle getViewStyle() { + return viewStyle; + } + public void setViewStyle(ViewStyle viewStyle) { + this.viewStyle = viewStyle; + } + + public FieldData getData() { + return data; + } + public void setData(FieldData data) { + this.data = data; + } + @Override + public Element toXml(Document doc) { + Element rootElement = doc.createElement("field"); + rootElement.setAttribute("id", this.id); + rootElement.setAttribute("ordinal", ""+this.ordinal); + rootElement.setAttribute("defaultVisibility",""+this.defaultVisibility); + + Element extendedDescription = doc.createElement("extendedDescription"); + extendedDescription.setTextContent(this.extendedDescription); + + Element description = doc.createElement("description"); + description.setTextContent(this.description); + + Element viewStyle = doc.createElement("viewStyle"); + viewStyle.setAttribute("renderstyle", this.viewStyle.getRenderStyle()); + viewStyle.setAttribute("cssClass", this.viewStyle.getCssClass()); + + rootElement.appendChild(extendedDescription); + rootElement.appendChild(viewStyle); + rootElement.appendChild(description); + if(this.data!=null)rootElement.appendChild(this.data.toXml(doc)); + return rootElement; + } + @Override + public Field fromXml(Element element) { + this.id = element.getAttribute("id"); + this.ordinal = Integer.parseInt(element.getAttribute("ordinal")); + this.defaultVisibility = Boolean.getBoolean(element.getAttribute("defaultVisibility")); + + Element extendedDescription = (Element)element.getElementsByTagName("extendedDescription").item(0); + this.extendedDescription = extendedDescription.getTextContent(); + + Element description = (Element)element.getElementsByTagName("description").item(0); + this.description = description.getTextContent(); + + this.viewStyle = new ViewStyle(); + Element viewStyle = (Element)element.getElementsByTagName("viewStyle").item(0); + this.viewStyle.setRenderStyle(viewStyle.getAttribute("renderstyle")); + this.viewStyle.setCssClass(viewStyle.getAttribute("cssClass")); + + Element dataElement = (Element)element.getElementsByTagName("data").item(0); + this.data = new ModelBuilder().toFieldData(null, this.viewStyle.getRenderStyle()); + if(this.data!=null)this.data.fromXml(dataElement); + return this; + } + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/FieldGroup.java b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/FieldGroup.java new file mode 100644 index 000000000..c61ce0584 --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/FieldGroup.java @@ -0,0 +1,128 @@ +package entities.xmlmodels.viewstyledefinition; + +import java.util.LinkedList; +import java.util.List; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import entities.xmlmodels.modeldefinition.DatabaseModelDefinition; +import utilities.XmlSerializable; + +public class FieldGroup implements DatabaseViewStyleDefinition,XmlSerializable{ + private String id; + private int ordinal; + private boolean defaultVisibility; + private int page; + private String description; + private String title; + private String extendedDescription; + private List
fieldSets; + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public int getOrdinal() { + return ordinal; + } + public void setOrdinal(int ordinal) { + this.ordinal = ordinal; + } + public boolean isDefaultVisibility() { + return defaultVisibility; + } + public void setDefaultVisibility(boolean defaultVisibility) { + this.defaultVisibility = defaultVisibility; + } + public int getPage() { + return page; + } + public void setPage(int page) { + this.page = page; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getExtendedDescription() { + return extendedDescription; + } + public void setExtendedDescription(String extendedDescription) { + this.extendedDescription = extendedDescription; + } + public List
getFieldSets() { + return fieldSets; + } + public void setFieldSets(List
fieldSets) { + this.fieldSets = fieldSets; + } + @Override + public Element toXml(Document doc) { + Element root = doc.createElement("fieldGroup"); + root.setAttribute("id", this.id); + root.setAttribute("ordinal", ""+this.ordinal); + root.setAttribute("defaultVisibility", ""+this.defaultVisibility); + root.setAttribute("page", ""+this.page); + + Element title = doc.createElement("title"); + title.setTextContent(this.title); + + Element description = doc.createElement("description"); + description.setTextContent(this.description); + + Element extendedDescription = doc.createElement("extendedDescription"); + extendedDescription.setTextContent(this.extendedDescription); + + Element fieldSets = doc.createElement("fieldsets"); + for(FieldSet fieldSet : this.fieldSets){ + fieldSets.appendChild(fieldSet.toXml(doc)); + } + + root.appendChild(fieldSets); + root.appendChild(title); + root.appendChild(description); + root.appendChild(extendedDescription); + + return root; + } + @Override + public FieldGroup fromXml(Element element) { + this.id = element.getAttribute("id"); + this.ordinal = Integer.parseInt(element.getAttribute("ordinal")); + this.defaultVisibility = Boolean.getBoolean(element.getAttribute("defaultVisibility")); + this.page = Integer.parseInt(element.getAttribute("page")); + + Element title = (Element)element.getElementsByTagName("title").item(0); + this.title = title.getTextContent(); + + Element extendedDescription = (Element)element.getElementsByTagName("extendedDescription").item(0); + this.extendedDescription = extendedDescription.getTextContent(); + + this.fieldSets = new LinkedList(); + Element fieldSets = (Element)element.getElementsByTagName("fieldsets").item(0); + if(fieldSets!=null){ + NodeList fieldSetElements = fieldSets.getChildNodes(); + for (int temp = 0; temp < fieldSetElements.getLength(); temp++) { + Node fieldSetElement = fieldSetElements.item(temp); + if (fieldSetElement.getNodeType() == Node.ELEMENT_NODE) { + this.fieldSets.add(new FieldSet().fromXml((Element)fieldSetElement)); + } + } + } + return this; + } + + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/FieldSet.java b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/FieldSet.java new file mode 100644 index 000000000..db3ef0ef8 --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/FieldSet.java @@ -0,0 +1,58 @@ +package entities.xmlmodels.viewstyledefinition; + +import java.util.LinkedList; +import java.util.List; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import entities.xmlmodels.modeldefinition.DatabaseModelDefinition; +import utilities.XmlSerializable; + +public class FieldSet implements DatabaseViewStyleDefinition,XmlSerializable
{ + private String id; + private int ordinal; + private List fields; + + public List getFields() { + return fields; + } + + public void setFields(List fields) { + this.fields = fields; + } + + @Override + public Element toXml(Document doc) { + Element fieldSet = doc.createElement("fieldSet"); + fieldSet.setAttribute("id", this.id); + fieldSet.setAttribute("ordinal", ""+this.ordinal); + Element fieldsElement = doc.createElement("fields"); + for(Field field : fields){ + fieldsElement.appendChild(field.toXml(doc)); + } + fieldSet.appendChild(fieldsElement); + return fieldSet; + } + + @Override + public FieldSet fromXml(Element element) { + this.id = element.getAttribute("id"); + this.ordinal = Integer.parseInt(element.getAttribute("ordinal")); + this.fields = new LinkedList(); + Element fields = (Element)element.getElementsByTagName("fields").item(0); + if(fields!=null){ + NodeList fieldElements = fields.getChildNodes(); + for (int temp = 0; temp < fieldElements.getLength(); temp++) { + Node fieldElement = fieldElements.item(temp); + if (fieldElement.getNodeType() == Node.ELEMENT_NODE) { + this.fields.add(new Field().fromXml((Element)fieldElement)); + } + } + } + return this; + } + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Section.java b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Section.java new file mode 100644 index 000000000..1f4aa2b69 --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Section.java @@ -0,0 +1,156 @@ +package entities.xmlmodels.viewstyledefinition; + +import java.util.LinkedList; +import java.util.List; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import entities.xmlmodels.modeldefinition.DatabaseModelDefinition; +import utilities.XmlSerializable; + +public class Section implements DatabaseViewStyleDefinition,XmlSerializable
{ + private String id; + private int ordinal; + private boolean defaultVisibility; + private int page; + private String title; + private String description; + private String extendedDescription; + private List
sections; + private List fieldGroups; + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public int getOrdinal() { + return ordinal; + } + public void setOrdinal(int ordinal) { + this.ordinal = ordinal; + } + public boolean isDefaultVisibility() { + return defaultVisibility; + } + public void setDefaultVisibility(boolean defaultVisibility) { + this.defaultVisibility = defaultVisibility; + } + public int getPage() { + return page; + } + public void setPage(int page) { + this.page = page; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public List
getSections() { + return sections; + } + public void setSections(List
sections) { + this.sections = sections; + } + public List getFieldGroups() { + return fieldGroups; + } + public void setFieldGroups(List fieldGroups) { + this.fieldGroups = fieldGroups; + } + + public String getExtendedDescription() { + return extendedDescription; + } + public void setExtendedDescription(String extendedDescription) { + this.extendedDescription = extendedDescription; + } + + @Override + public Element toXml(Document doc) { + Element rootElement = doc.createElement("section"); + rootElement.setAttribute("id", this.id); + rootElement.setAttribute("ordinal", ""+this.ordinal); + rootElement.setAttribute("defaultVisibility", ""+this.defaultVisibility); + rootElement.setAttribute("page", ""+this.page); + + Element description = doc.createElement("description"); + description.setTextContent(this.description); + + Element extendedDescription = doc.createElement("extendedDescription"); + extendedDescription.setTextContent(this.extendedDescription); + + if(sections!=null){ + Element sections = doc.createElement("sections"); + for(Section section : this.sections){ + sections.appendChild(section.toXml(doc)); + } + rootElement.appendChild(sections); + } + + if(this.fieldGroups!=null){ + Element formGroups = doc.createElement("fieldGroups"); + for(FieldGroup fieldGroup : this.fieldGroups){ + formGroups.appendChild(fieldGroup.toXml(doc)); + } + rootElement.appendChild(formGroups); + } + rootElement.appendChild(extendedDescription); + rootElement.appendChild(description); + + return rootElement; + } + @Override + public Section fromXml(Element element) { + + this.id = element.getAttribute("id"); + this.ordinal = Integer.parseInt(element.getAttribute("ordinal")); + this.defaultVisibility = Boolean.getBoolean(element.getAttribute("defaultVisibility")); + this.page = Integer.parseInt(element.getAttribute("page")); + + Element description = (Element)element.getElementsByTagName("description").item(0); + if(description!=null) this.description = description.getTextContent(); + + Element extendedDescription = (Element)element.getElementsByTagName("extendedDescription").item(0); + if(extendedDescription != null) this.extendedDescription = description.getTextContent(); + + this.sections = new LinkedList
(); + Element sections = (Element)element.getElementsByTagName("sections").item(0); + if(sections!=null){ + NodeList sectionElements = sections.getChildNodes(); + for (int temp = 0; temp < sectionElements.getLength(); temp++) { + Node sectionElement = sectionElements.item(temp); + if (sectionElement.getNodeType() == Node.ELEMENT_NODE) { + this.sections.add(new Section().fromXml((Element)sectionElement)); + } + } + } + + this.fieldGroups = new LinkedList(); + Element fieldGroups = (Element)element.getElementsByTagName("fieldGroups").item(0); + if(fieldGroups!=null){ + NodeList fieldGroupElements = fieldGroups.getChildNodes(); + for (int temp = 0; temp < fieldGroupElements.getLength(); temp++) { + Node fieldGroupElement = fieldGroupElements.item(temp); + if (fieldGroupElement.getNodeType() == Node.ELEMENT_NODE) { + this.fieldGroups.add(new FieldGroup().fromXml((Element)fieldGroupElement)); + } + } + } + + return this; + } + + +} diff --git a/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/ViewStyleModel.java b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/ViewStyleModel.java new file mode 100644 index 000000000..1792db42d --- /dev/null +++ b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/ViewStyleModel.java @@ -0,0 +1,56 @@ +package entities.xmlmodels.viewstyledefinition; + +import java.util.LinkedList; +import java.util.List; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import entities.xmlmodels.modeldefinition.FieldSet; +import utilities.XmlSerializable; + +public class ViewStyleModel implements XmlSerializable{ + private List
sections; + + public List
getSections() { + return sections; + } + + public void setSections(List
sections) { + this.sections = sections; + } + + @Override + public Element toXml(Document doc) { + Element root = doc.createElement("root"); + Element sections = doc.createElement("sections"); + + for(Section section: this.sections){ + sections.appendChild(section.toXml(doc)); + } + + root.appendChild(sections); + return root; + } + + @Override + public ViewStyleModel fromXml(Element element) { + + this.sections = new LinkedList(); + Element sections = (Element)element.getElementsByTagName("sections").item(0); + if(sections!=null){ + NodeList sectionElements = sections.getChildNodes(); + for (int temp = 0; temp < sectionElements.getLength(); temp++) { + Node sectionElement = sectionElements.item(temp); + if (sectionElement.getNodeType() == Node.ELEMENT_NODE) { + this.sections.add(new Section().fromXml((Element)sectionElement)); + } + } + } + return this; + } + + +} diff --git a/dmp-backend/src/main/java/managers/AdminManager.java b/dmp-backend/src/main/java/managers/AdminManager.java new file mode 100644 index 000000000..648f1120b --- /dev/null +++ b/dmp-backend/src/main/java/managers/AdminManager.java @@ -0,0 +1,69 @@ +package managers; + +import java.util.Date; +import java.util.List; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; + +import entities.DatasetProfileViewstyle; +import entities.xmlmodels.modeldefinition.FieldGroup; +import entities.xmlmodels.viewstyledefinition.Section; +import entities.xmlmodels.viewstyledefinition.ViewStyleModel; +import models.components.datasetprofile.FieldSet; +import models.composite.DatasetProfile; +import utilities.builders.ModelBuilder; +import utilities.builders.XmlBuilder; +import utilities.helpers.ModelBuilderCollector; + +public class AdminManager { + public static entities.DatasetProfile generateModelDefinition(DatasetProfile profile){ + ObjectMapper xmlMapper = new XmlMapper(); + List
fieldSets = ModelBuilderCollector.collectCompositeFields(profile.getSections()); + FieldGroup fieldGroup = new FieldGroup(); + List fieldset = new ModelBuilder().toModelDefinition(fieldSets, entities.xmlmodels.modeldefinition.FieldSet.class); + fieldGroup.setFieldSets(fieldset); + Document modelDoc = XmlBuilder.getDocument(); + fieldGroup.toXml(modelDoc); + String xml = XmlBuilder.generateXml(modelDoc); + + entities.DatasetProfile datasetProfile = new entities.DatasetProfile(); + datasetProfile.setDefinition(xml); + datasetProfile.setStatus((short)1); + datasetProfile.setLabel("dasd"); + datasetProfile.setCreated(new Date()); + return datasetProfile; + } + + public static DatasetProfileViewstyle generateViewStyleDefinition(DatasetProfile profile){ + ViewStyleModel viewStyleModel = new ViewStyleModel(); + viewStyleModel.setSections(new ModelBuilder().toViewStyleDefinition(profile.getSections(), entities.xmlmodels.viewstyledefinition.Section.class)); + Document viewStyleDoc = XmlBuilder.getDocument(); + Element elementViewStyle = viewStyleModel.toXml(viewStyleDoc); + viewStyleDoc.appendChild(elementViewStyle); + String xml = XmlBuilder.generateXml(viewStyleDoc); + + DatasetProfileViewstyle datasetProfileViewstyle = new DatasetProfileViewstyle(); + datasetProfileViewstyle.setDefinition(xml); + datasetProfileViewstyle.setLabel("skdjal"); + return datasetProfileViewstyle; + } + + public static models.composite.DatasetProfile generateDatasetProfileModel(entities.DatasetProfile profile){ + Document viewStyleDoc = XmlBuilder.fromXml(profile.getViewstyle().getDefinition()); + Element root = (Element)viewStyleDoc.getDocumentElement(); + entities.xmlmodels.viewstyledefinition.ViewStyleModel viewstyle= new entities.xmlmodels.viewstyledefinition.ViewStyleModel().fromXml(root); + + Document profileDoc = XmlBuilder.fromXml(profile.getDefinition()); + root = (Element)profileDoc.getDocumentElement(); + entities.xmlmodels.modeldefinition.FieldGroup fieldGroup = new entities.xmlmodels.modeldefinition.FieldGroup().fromXml(root); + + models.composite.DatasetProfile datasetprofile = new models.composite.DatasetProfile(); + datasetprofile.buildProfile(fieldGroup, viewstyle); + + return datasetprofile; + } +} diff --git a/dmp-backend/src/main/java/models/components/commons/DefaultValue.java b/dmp-backend/src/main/java/models/components/commons/DefaultValue.java new file mode 100644 index 000000000..dd6dbfc46 --- /dev/null +++ b/dmp-backend/src/main/java/models/components/commons/DefaultValue.java @@ -0,0 +1,21 @@ +package models.components.commons; + +public class DefaultValue { + private String type; + private String value; + + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + + +} diff --git a/dmp-backend/src/main/java/models/components/commons/Multiplicity.java b/dmp-backend/src/main/java/models/components/commons/Multiplicity.java new file mode 100644 index 000000000..cb81f37e7 --- /dev/null +++ b/dmp-backend/src/main/java/models/components/commons/Multiplicity.java @@ -0,0 +1,22 @@ +package models.components.commons; + +public class Multiplicity { + + private int min; + private int max; + + public int getMin() { + return min; + } + public void setMin(int min) { + this.min = min; + } + public int getMax() { + return max; + } + public void setMax(int max) { + this.max = max; + } + + +} diff --git a/dmp-backend/src/main/java/models/components/commons/ViewStyle.java b/dmp-backend/src/main/java/models/components/commons/ViewStyle.java new file mode 100644 index 000000000..1e1d72d09 --- /dev/null +++ b/dmp-backend/src/main/java/models/components/commons/ViewStyle.java @@ -0,0 +1,20 @@ +package models.components.commons; + +public class ViewStyle { + private String renderStyle; + private String cssClass; + + public String getRenderStyle() { + return renderStyle; + } + public void setRenderStyle(String renderStyle) { + this.renderStyle = renderStyle; + } + public String getCssClass() { + return cssClass; + } + public void setCssClass(String cssClass) { + this.cssClass = cssClass; + } + +} diff --git a/dmp-backend/src/main/java/models/components/commons/datafield/BooleanDecisionData.java b/dmp-backend/src/main/java/models/components/commons/datafield/BooleanDecisionData.java new file mode 100644 index 000000000..add064234 --- /dev/null +++ b/dmp-backend/src/main/java/models/components/commons/datafield/BooleanDecisionData.java @@ -0,0 +1,32 @@ +package models.components.commons.datafield; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import utilities.XmlSerializable; + +public class BooleanDecisionData extends FieldData{ + + @Override + public BooleanDecisionData fromData(Object data) { + return this; + } + + @Override + public Object toData() { + return null; + } + + @Override + public Element toXml(Document doc) { + + return doc.createElement("data"); + } + + @Override + public BooleanDecisionData fromXml(Element item) { + // TODO Auto-generated method stub + return this; + } + +} diff --git a/dmp-backend/src/main/java/models/components/commons/datafield/CheckBoxData.java b/dmp-backend/src/main/java/models/components/commons/datafield/CheckBoxData.java new file mode 100644 index 000000000..aea083a39 --- /dev/null +++ b/dmp-backend/src/main/java/models/components/commons/datafield/CheckBoxData.java @@ -0,0 +1,34 @@ +package models.components.commons.datafield; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import utilities.XmlSerializable; + +public class CheckBoxData extends FieldData{ + + @Override + public Element toXml(Document doc) { + // TODO Auto-generated method stub + return doc.createElement("data"); + } + + @Override + public CheckBoxData fromXml(Element item) { + // TODO Auto-generated method stub + return this; + } + + @Override + public CheckBoxData fromData(Object data) { + // TODO Auto-generated method stub + return this; + } + + @Override + public Object toData() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/dmp-backend/src/main/java/models/components/commons/datafield/ComboBoxData.java b/dmp-backend/src/main/java/models/components/commons/datafield/ComboBoxData.java new file mode 100644 index 000000000..8ba4a7c82 --- /dev/null +++ b/dmp-backend/src/main/java/models/components/commons/datafield/ComboBoxData.java @@ -0,0 +1,119 @@ +package models.components.commons.datafield; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import utilities.XmlSerializable; + +public class ComboBoxData extends FieldData{ + private class Option implements XmlSerializable