io.github.factoryfx.dom.rest.DynamicDataDictionary Maven / Gradle / Ivy
package io.github.factoryfx.dom.rest;
import io.github.factoryfx.factory.FactoryBase;
import io.github.factoryfx.factory.attribute.Attribute;
import io.github.factoryfx.factory.attribute.dependency.FactoryAttribute;
import io.github.factoryfx.factory.attribute.dependency.FactoryBaseAttribute;
import io.github.factoryfx.factory.attribute.dependency.FactoryListAttribute;
import io.github.factoryfx.factory.attribute.dependency.FactoryListBaseAttribute;
import io.github.factoryfx.factory.attribute.types.EnumAttribute;
import io.github.factoryfx.factory.attribute.types.EnumListAttribute;
import io.github.factoryfx.factory.attribute.types.ObjectValueAttribute;
import io.github.factoryfx.factory.metadata.FactoryMetadataManager;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
public class DynamicDataDictionary {
public HashMap classNameToItem = new HashMap<>();
public DynamicDataDictionary(FactoryBase,?> root){
HashSet> factoryClasses = new HashSet<>();
for (FactoryBase, ?> factoryBase : root.internal().collectChildrenDeep()) {
factoryClasses.add(factoryBase.getClass());
factoryBase.internal().visitAttributesFlat((attributeVariableName, attribute) -> {
if (attribute instanceof FactoryAttribute){
factoryClasses.add(((FactoryAttribute,?,?>)attribute).internal_getReferenceClass());
}
});
}
for (Class> factoryClass : factoryClasses) {
DynamicDataDictionaryItem item = new DynamicDataDictionaryItem();
classNameToItem.put(factoryClass.getName(), item);
FactoryBase factoryBase = FactoryMetadataManager.getMetadataUnsafe(factoryClass).newInstance();
factoryBase.internal().visitAttributesFlat((attributeVariableName, attribute) -> {
DynamicDataDictionaryAttributeItem attributeItem = new DynamicDataDictionaryAttributeItem(getAttributeType(attribute),
!attribute.internal_required(),
attribute.internal_getPreferredLabelText(Locale.ENGLISH),
attribute.internal_getPreferredLabelText(Locale.GERMAN),
getPossibleEnumValues(attribute)
);
if (!(attribute instanceof ObjectValueAttribute>)) {
item.attributeNameToItem.put(attributeVariableName, attributeItem);
}
});
}
}
private String getAttributeType(Attribute, ?> attribute) {
if (attribute instanceof FactoryBaseAttribute){
return FactoryAttribute.class.getSimpleName();
}
if (attribute instanceof FactoryListBaseAttribute){
return FactoryListAttribute.class.getSimpleName();
}
return attribute.getClass().getSimpleName();
}
private List getPossibleEnumValues(Attribute, ?> attribute) {
if (attribute instanceof EnumAttribute){
return ((EnumAttribute>)attribute).internal_possibleEnumValues().stream().map(Enum::toString).collect(Collectors.toList());
}
if (attribute instanceof EnumListAttribute){
return ((EnumListAttribute>)attribute).internal_possibleEnumValues().stream().map(Enum::toString).collect(Collectors.toList());
}
return List.of();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy