use of org.whole.lang.pojo.model.Property in project whole by wholeplatform.
the class PojoNormalizerVisitor method addReferenceTypeMappingDataType.
public static void addReferenceTypeMappingDataType(ReferenceType type, Library entity, IBindingManager bindings, FreshNameGenerator entityNameGenerator) {
Property property = (Property) bindings.wGet("property");
Declaration declaration = PojoUtils.findProductDeclaration(type, entity);
boolean hasDataTypeModifier = property.getAnnotations().wContainsValue(ModifierEnum.DATATYPE);
boolean needsDeclaration = declaration == null;
boolean needsModifier = property.equals(type.wGetParent()) && !hasDataTypeModifier && (needsDeclaration || Matcher.matchImpl(PojoEntityDescriptorEnum.DataTypeDeclaration, declaration));
if (needsModifier)
property.getAnnotations().wAdd(PojoEntityFactory.instance.createModifier(ModifierEnum.DATATYPE));
if (needsDeclaration)
PojoUtils.addDataTypeDeclaration(type, entityNameGenerator.nextFreshName(PojoUtils.calculateTypeName(type)), entity);
}
use of org.whole.lang.pojo.model.Property in project whole by wholeplatform.
the class PojoNormalizerVisitor method createDefaultTemplateInProperties.
public static void createDefaultTemplateInProperties(Library entity, IBindingManager bindings) {
Path findAllPropertiesWithoutTemplate = (Path) PojoTemplateManager.instance().create("findAllPropertiesWithoutTemplate");
bindings.wEnterScope();
for (Property property : BehaviorUtils.<Property>compileAndLazyEvaluate(findAllPropertiesWithoutTemplate, entity, bindings)) property.setTemplate((Name) EntityUtils.clone(bindings.wGet("name")));
bindings.wExitScope();
}
use of org.whole.lang.pojo.model.Property in project whole by wholeplatform.
the class PojoUtils method createInstanceUsingConstructor.
public static Object createInstanceUsingConstructor(IEntity fromEntity, PojoDeclaration pojoDeclaration, Library library) throws Exception {
ReferenceType referenceType = pojoDeclaration.getName();
Class<?> clazz = Class.forName(referenceType.getValue(), true, ReflectionFactory.getPlatformClassLoader());
Constructor constructor = findConstructor(pojoDeclaration);
int params = constructor.getParameters().wSize();
List<Class<?>> parameterTypes = new ArrayList<Class<?>>(params);
List<Object> initargs = new ArrayList<Object>(params);
IBindingManager bindings = BindingManagerFactory.instance.createArguments();
Expression findPropertyByTemplate = (Expression) PojoTemplateManager.instance().create("findPropertyByTemplate");
Expression findParameterByTemplate = (Expression) PojoTemplateManager.instance().create("findParameterByTemplate");
IEntityIterator<Parameter> iterator = BehaviorUtils.<Parameter>compileAndLazyEvaluate(findParameterByTemplate, constructor, bindings);
while (iterator.hasNext()) {
iterator.next();
Property property = BehaviorUtils.<Property>evaluateFirstResult(findPropertyByTemplate, pojoDeclaration, bindings);
Type type = property.getType();
Name template = property.getTemplate();
FeatureDescriptor fd = fromEntity.wGetEntityDescriptor().getFeatureDescriptorEnum().valueOf(template.wStringValue());
IEntity fieldEntity = fromEntity.wGet(fd);
parameterTypes.add(getClass(type));
initargs.add(Matcher.match(PrimitiveType, type) ? fieldEntity.wGetValue() : create(fieldEntity, library));
}
return clazz.getConstructor(parameterTypes.toArray(new Class<?>[0])).newInstance(initargs.toArray());
}
use of org.whole.lang.pojo.model.Property in project whole by wholeplatform.
the class PojoUtils method translate.
public static void translate(IEntity fromEntity, Object toObject, PojoDeclaration pojoDeclaration, Library library) {
// translate inherited properties
IEntityIterator<ReferenceType> superPojosIterator = IteratorFactory.<ReferenceType>childIterator();
superPojosIterator.reset(pojoDeclaration.getTypes());
for (ReferenceType superType : superPojosIterator) {
PojoDeclaration superDeclaration = (PojoDeclaration) findProductDeclaration(superType, library);
translate(fromEntity, toObject, superDeclaration, library);
}
// translate declared properties
IEntityIterator<Property> iterator = IteratorFactory.<Property>childIterator();
iterator.reset(pojoDeclaration.getProperties());
EntityDescriptor<?> ed = fromEntity.wGetEntityDescriptor();
Property property = null;
try {
while (iterator.hasNext()) {
property = iterator.next();
if (isReadOnly(property))
continue;
Type type = property.getType();
Name template = property.getTemplate();
FeatureDescriptor fd = ed.getFeatureDescriptorEnum().valueOf(template.wStringValue());
IEntity fieldEntity = fromEntity.wGet(fd);
if (!EntityUtils.isNotResolver(fieldEntity))
continue;
if (Matcher.match(PrimitiveType, type))
setPropertyValue(property, toObject, fieldEntity.wGetValue());
else
setPropertyValue(property, toObject, create(fieldEntity, library));
}
} catch (Exception e) {
throw new IllegalStateException("Cannot translate property: " + property, e);
}
}
use of org.whole.lang.pojo.model.Property in project whole by wholeplatform.
the class PropertyPart method getModelSpecificChildren.
protected List<IEntity> getModelSpecificChildren() {
Property property = getModelEntity();
List<IEntity> list = new ArrayList<IEntity>(4);
list.add(property.getAnnotations());
list.add(property.getType());
list.add(property.getName());
list.add(property.getTemplate());
return list;
}
Aggregations