argos/dmp-backend/src/main/java/utilities/helpers/ModelBuilderCollector.java

155 lines
5.4 KiB
Java

package utilities.helpers;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import models.admin.components.datasetprofile.FieldSet;
import models.admin.components.datasetprofile.Group;
import models.admin.components.datasetprofile.Section;
import models.admin.composite.DatasetProfile;
import models.user.components.commons.Rule;
public class ModelBuilderCollector {
public static List<FieldSet> collectCompositeFields(List<Section> sections){
List<FieldSet> fieldGroups = new LinkedList();
for(Section section: sections){
if(!section.getSections().isEmpty()){
fieldGroups.addAll(collectCompositeFields(section.getSections()));
}
fieldGroups.addAll(
sections.stream()
.map(itemSection->itemSection.getFieldGroups())
.filter(x->x!=null)
.flatMap(List::stream)
.map(group->group.getCompositeFields())
.flatMap(List::stream)
.collect(Collectors.toList())
);
}
return fieldGroups;
}
public static void mapSections(List<models.admin.components.datasetprofile.Section> sections,List<entities.xmlmodels.modeldefinition.FieldSet> fieldGroups){
for(Section section: sections){
if(!section.getSections().isEmpty()){
mapSections(section.getSections(),fieldGroups);
}
for(Group group: section.getFieldGroups()){
if(!group.getCompositeFields().isEmpty()){
mapCompositeFields(group.getCompositeFields(),fieldGroups);
}
}
}
return;
}
private static void mapCompositeFields(List<models.admin.components.datasetprofile.FieldSet> fieldSets,List<entities.xmlmodels.modeldefinition.FieldSet> fieldGroups){
for(FieldSet fieldSet: fieldSets){
if(!fieldSet.getFields().isEmpty()){
mapFields(fieldSet.getFields(),fieldGroups);
}
for(entities.xmlmodels.modeldefinition.FieldSet fieldModelSet :fieldGroups){
if(fieldSet.getId()!=null&&fieldSet.getId().equals(fieldModelSet.getId())){
fieldSet.fromDatabaseDefinition(fieldModelSet);
}
}
}
return;
}
private static void mapFields(List<models.admin.components.datasetprofile.Field> fields,List<entities.xmlmodels.modeldefinition.FieldSet> fieldGroups){
for(models.admin.components.datasetprofile.Field fielditem: fields){
for(entities.xmlmodels.modeldefinition.FieldSet fieldSet:fieldGroups){
for(entities.xmlmodels.modeldefinition.Field fieldmodelitem : fieldSet.getFields()){
if(fielditem.getId()!=null&&fielditem.getId().equals(fieldmodelitem.getId())){
fielditem.fromDatabaseDefinition(fieldmodelitem);
break;
}
}
}
}
return;
}
public static void mapUserSections(List<models.user.components.datasetprofile.Section> sections,List<entities.xmlmodels.modeldefinition.FieldSet> fieldGroups){
for(models.user.components.datasetprofile.Section section: sections){
if(!section.getSections().isEmpty()){
mapUserSections(section.getSections(),fieldGroups);
}
for(models.user.components.datasetprofile.Group group: section.getFieldGroups()){
if(!group.getCompositeFields().isEmpty()){
mapUserCompositeFields(group.getCompositeFields(),fieldGroups);
}
}
}
return;
}
private static void mapUserCompositeFields(List<models.user.components.datasetprofile.FieldSet> fieldSets,List<entities.xmlmodels.modeldefinition.FieldSet> fieldGroups){
for(models.user.components.datasetprofile.FieldSet fieldSet: fieldSets){
if(!fieldSet.getFields().isEmpty()){
mapUserFields(fieldSet.getFields(),fieldGroups);
}
for(entities.xmlmodels.modeldefinition.FieldSet fieldModelSet :fieldGroups){
if(fieldSet.getId()!=null&&fieldSet.getId().equals(fieldModelSet.getId())){
fieldSet.fromDatabaseDefinition(fieldModelSet);
}
}
}
return;
}
private static void mapUserFields(List<models.user.components.datasetprofile.Field> fields,List<entities.xmlmodels.modeldefinition.FieldSet> fieldGroups){
for(models.user.components.datasetprofile.Field fielditem: fields){
for(entities.xmlmodels.modeldefinition.FieldSet fieldSet:fieldGroups){
for(entities.xmlmodels.modeldefinition.Field fieldmodelitem : fieldSet.getFields()){
if(fielditem.getId()!=null&&fielditem.getId().equals(fieldmodelitem.getId())){
fielditem.fromDatabaseDefinition(fieldmodelitem);
break;
}
}
}
}
return;
}
public static List<Rule> collectRules(List<entities.xmlmodels.viewstyledefinition.Section> sections){
List<Rule> rules = new LinkedList();
rules.addAll(
sections
.stream()
.map(section->section.getFieldGroups())
.flatMap(List::stream)
.map(group->group.getFieldSets())
.flatMap(List::stream)
.map(fieldset->fieldset.getFields())
.flatMap(List::stream)
.map(field->getRulesFromField(field.getId(),field.getVisible()
.getRules()))
.flatMap(List::stream)
.collect(Collectors.toList()));
return rules;
}
private static List<Rule> getRulesFromField(String id,List<models.components.commons.Rule> rules){
List<Rule> modelRules = new LinkedList();
for(models.components.commons.Rule rule : rules){
Rule modelRule = new Rule().fromDefinitionRule(rule);
modelRule.setSourceField(id);
modelRules.add(modelRule);
}
return modelRules;
}
}