Search in sources :

Example 1 with PrimitiveType

use of org.whole.lang.pojo.model.PrimitiveType 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());
}
Also used : IEntity(org.whole.lang.model.IEntity) Constructor(org.whole.lang.pojo.model.Constructor) ArrayList(java.util.ArrayList) ReferenceType(org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.ReferenceType) ReferenceType(org.whole.lang.pojo.model.ReferenceType) Name(org.whole.lang.pojo.model.Name) PrimitiveType(org.whole.lang.pojo.model.PrimitiveType) PrimitiveType(org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.PrimitiveType) Type(org.whole.lang.pojo.model.Type) MapType(org.whole.lang.pojo.model.MapType) ArrayType(org.whole.lang.pojo.model.ArrayType) ReferenceType(org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.ReferenceType) CollectionType(org.whole.lang.pojo.model.CollectionType) ReferenceType(org.whole.lang.pojo.model.ReferenceType) Expression(org.whole.lang.queries.model.Expression) PathExpression(org.whole.lang.queries.model.PathExpression) FeatureDescriptor(org.whole.lang.reflect.FeatureDescriptor) IBindingManager(org.whole.lang.bindings.IBindingManager) Parameter(org.whole.lang.pojo.model.Parameter) Property(org.whole.lang.pojo.model.Property)

Example 2 with PrimitiveType

use of org.whole.lang.pojo.model.PrimitiveType 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);
    }
}
Also used : PojoDeclaration(org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.PojoDeclaration) PojoDeclaration(org.whole.lang.pojo.model.PojoDeclaration) PrimitiveType(org.whole.lang.pojo.model.PrimitiveType) PrimitiveType(org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.PrimitiveType) Type(org.whole.lang.pojo.model.Type) MapType(org.whole.lang.pojo.model.MapType) ArrayType(org.whole.lang.pojo.model.ArrayType) ReferenceType(org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.ReferenceType) CollectionType(org.whole.lang.pojo.model.CollectionType) ReferenceType(org.whole.lang.pojo.model.ReferenceType) FeatureDescriptor(org.whole.lang.reflect.FeatureDescriptor) IEntity(org.whole.lang.model.IEntity) Property(org.whole.lang.pojo.model.Property) ReferenceType(org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.ReferenceType) ReferenceType(org.whole.lang.pojo.model.ReferenceType) InvocationTargetException(java.lang.reflect.InvocationTargetException) Name(org.whole.lang.pojo.model.Name)

Aggregations

IEntity (org.whole.lang.model.IEntity)2 ArrayType (org.whole.lang.pojo.model.ArrayType)2 CollectionType (org.whole.lang.pojo.model.CollectionType)2 MapType (org.whole.lang.pojo.model.MapType)2 Name (org.whole.lang.pojo.model.Name)2 PrimitiveType (org.whole.lang.pojo.model.PrimitiveType)2 Property (org.whole.lang.pojo.model.Property)2 ReferenceType (org.whole.lang.pojo.model.ReferenceType)2 Type (org.whole.lang.pojo.model.Type)2 PrimitiveType (org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.PrimitiveType)2 ReferenceType (org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.ReferenceType)2 FeatureDescriptor (org.whole.lang.reflect.FeatureDescriptor)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 ArrayList (java.util.ArrayList)1 IBindingManager (org.whole.lang.bindings.IBindingManager)1 Constructor (org.whole.lang.pojo.model.Constructor)1 Parameter (org.whole.lang.pojo.model.Parameter)1 PojoDeclaration (org.whole.lang.pojo.model.PojoDeclaration)1 PojoDeclaration (org.whole.lang.pojo.reflect.PojoEntityDescriptorEnum.PojoDeclaration)1 Expression (org.whole.lang.queries.model.Expression)1