@Override public void applyTo(Visitable visitable){ FieldDependencyResolver fieldDependencyResolver = new FieldDependencyResolver(); fieldDependencyResolver.applyTo(visitable); setFieldDependencyResolver(fieldDependencyResolver); super.applyTo(visitable); }
public Set<Field<?>> getDependencies(Field<?> field){ Map<Field<?>, Set<Field<?>>> dependencies = getDependencies(); if(!dependencies.containsKey(field)){ throw new IllegalArgumentException(); } return dependencies.get(field); }
private Set<DataField> getUsedDataFields(){ FieldDependencyResolver fieldDependencyResolver = getFieldDependencyResolver(); Set<Field<?>> usedFields = new HashSet<>(getActiveFields()); usedFields.addAll(getTargetFields()); fieldDependencyResolver.expand(usedFields, fieldDependencyResolver.getLocalDerivedFields()); fieldDependencyResolver.expand(usedFields, fieldDependencyResolver.getGlobalDerivedFields()); return (Set)usedFields; }
PMML pmml = ResourceUtil.unmarshal(NestedSegmentationTest.class); FieldDependencyResolver resolver = new FieldDependencyResolver(); resolver.applyTo(pmml); Map<Field<?>, Set<Field<?>>> dependencies = resolver.getDependencies();
private void expandDerivedFields(Model model, Set<Field<?>> fields){ FieldDependencyResolver fieldDependencyResolver = getFieldDependencyResolver(); fieldDependencyResolver.expand(fields, fieldDependencyResolver.getGlobalDerivedFields()); LocalTransformations localTransformations = model.getLocalTransformations(); if(localTransformations != null && localTransformations.hasDerivedFields()){ fieldDependencyResolver.expand(fields, new HashSet<>(localTransformations.getDerivedFields())); } }
@Override public VisitorAction visit(OutputField outputField){ process(outputField); return super.visit(outputField); }
private void process(Field<?> field){ FieldReferenceFinder fieldReferenceFinder = new FieldReferenceFinder(); fieldReferenceFinder.applyTo(field); Set<Field<?>> activeFields = FieldUtil.selectAll(getFields(), fieldReferenceFinder.getFieldNames()); this.dependencies.put(field, activeFields); } }
private Set<DerivedField> getActiveDerivedFields(Set<DerivedField> derivedFields){ FieldDependencyResolver fieldDependencyResolver = getFieldDependencyResolver(); Set<Field<?>> activeFields = getActiveFields(); Set<DerivedField> activeDerivedFields = new HashSet<>(derivedFields); activeDerivedFields.retainAll(activeFields); while(true){ Set<Field<?>> fields = new LinkedHashSet<>(activeDerivedFields); fieldDependencyResolver.expand(fields, activeDerivedFields); activeFields.addAll(fields); // Removes all fields that are not derived fields fields.retainAll(derivedFields); if(fields.isEmpty()){ break; } activeDerivedFields.addAll((Set)fields); } return activeDerivedFields; } }
PMML pmml = ResourceUtil.unmarshal(ChainedSegmentationTest.class); FieldDependencyResolver resolver = new FieldDependencyResolver(); resolver.applyTo(pmml); Map<Field<?>, Set<Field<?>>> dependencies = resolver.getDependencies();
private void expandDerivedFields(Model model, Set<Field<?>> fields){ FieldDependencyResolver fieldDependencyResolver = getFieldDependencyResolver(); fieldDependencyResolver.expand(fields, fieldDependencyResolver.getGlobalDerivedFields()); LocalTransformations localTransformations = model.getLocalTransformations(); if(localTransformations != null && localTransformations.hasDerivedFields()){ fieldDependencyResolver.expand(fields, new HashSet<>(localTransformations.getDerivedFields())); } }
@Override public VisitorAction visit(DataField dataField){ process(dataField); return super.visit(dataField); }
private void process(Field<?> field){ FieldReferenceFinder fieldReferenceFinder = new FieldReferenceFinder(); fieldReferenceFinder.applyTo(field); Set<Field<?>> activeFields = FieldUtil.selectAll(getFields(), fieldReferenceFinder.getFieldNames()); this.dependencies.put(field, activeFields); } }
private Set<DerivedField> getActiveDerivedFields(Set<DerivedField> derivedFields){ FieldDependencyResolver fieldDependencyResolver = getFieldDependencyResolver(); Set<Field<?>> activeFields = getActiveFields(); Set<DerivedField> activeDerivedFields = new HashSet<>(derivedFields); activeDerivedFields.retainAll(activeFields); while(true){ Set<Field<?>> fields = new LinkedHashSet<>(activeDerivedFields); fieldDependencyResolver.expand(fields, activeDerivedFields); activeFields.addAll(fields); // Removes all fields that are not derived fields fields.retainAll(derivedFields); if(fields.isEmpty()){ break; } activeDerivedFields.addAll((Set)fields); } return activeDerivedFields; } }
@Override public void applyTo(Visitable visitable){ FieldDependencyResolver fieldDependencyResolver = new FieldDependencyResolver(); fieldDependencyResolver.applyTo(visitable); setFieldDependencyResolver(fieldDependencyResolver); super.applyTo(visitable); }
private Set<DataField> getUsedDataFields(){ FieldDependencyResolver fieldDependencyResolver = getFieldDependencyResolver(); Set<Field<?>> usedFields = new HashSet<>(getActiveFields()); usedFields.addAll(getTargetFields()); fieldDependencyResolver.expand(usedFields, fieldDependencyResolver.getLocalDerivedFields()); fieldDependencyResolver.expand(usedFields, fieldDependencyResolver.getGlobalDerivedFields()); return (Set)usedFields; }
public Set<Field<?>> getDependencies(Field<?> field){ Map<Field<?>, Set<Field<?>>> dependencies = getDependencies(); if(!dependencies.containsKey(field)){ throw new IllegalArgumentException(); } return dependencies.get(field); }
@Override public VisitorAction visit(DataField dataField){ process(dataField); return super.visit(dataField); }
public void expand(Set<Field<?>> fields, Set<? extends Field<?>> expandableFields){ Set<Field<?>> removableFields = new LinkedHashSet<>(); for(int i = 0; true; i++){ if(i > 1000){ throw new IllegalStateException(); } removableFields.clear(); for(Field<?> field : fields){ if(expandableFields.contains(field)){ removableFields.add(field); } } if(removableFields.isEmpty()){ break; } for(Field<?> removableField : removableFields){ fields.addAll(getDependencies(removableField)); } fields.removeAll(removableFields); } }