Search in sources :

Example 6 with SimpleProperty

use of jp.ossc.nimbus.beans.SimpleProperty in project nimbus by nimbus-org.

the class SimplePropertyTest method testParse3.

public void testParse3() throws Exception {
    SimpleProperty prop = new SimpleProperty();
    prop.parse("simple2");
    Test test = new Test();
    try {
        prop.getProperty(test);
        fail();
    } catch (NoSuchPropertyException e) {
    }
}
Also used : NoSuchPropertyException(jp.ossc.nimbus.beans.NoSuchPropertyException) SimpleProperty(jp.ossc.nimbus.beans.SimpleProperty)

Example 7 with SimpleProperty

use of jp.ossc.nimbus.beans.SimpleProperty in project nimbus by nimbus-org.

the class SimplePropertyTest method testParse5.

public void testParse5() throws Exception {
    SimpleProperty prop = new SimpleProperty();
    prop.parse("simple");
    Test2 test = new Test2();
    prop.setProperty(test, "hoge");
    assertEquals("hoge", prop.getProperty(test));
}
Also used : SimpleProperty(jp.ossc.nimbus.beans.SimpleProperty)

Example 8 with SimpleProperty

use of jp.ossc.nimbus.beans.SimpleProperty in project nimbus by nimbus-org.

the class SimplePropertyTest method testNew1.

public void testNew1() throws Exception {
    SimpleProperty prop = new SimpleProperty("simple");
    Test test = new Test();
    prop.setProperty(test, "hoge");
    assertEquals("hoge", prop.getProperty(test));
}
Also used : SimpleProperty(jp.ossc.nimbus.beans.SimpleProperty)

Example 9 with SimpleProperty

use of jp.ossc.nimbus.beans.SimpleProperty in project nimbus by nimbus-org.

the class BeanExchangeConverter method convert.

private Object convert(Object input, Object output, boolean isClone) throws ConvertException {
    if (output == null) {
        throw new ConvertException("Output is null.");
    }
    if (isClone) {
        if (!(output instanceof Cloneable)) {
            throw new ConvertException("Output is not cloneable.");
        }
        if (output instanceof DataSet) {
            output = ((DataSet) output).cloneSchema();
        } else if (output instanceof RecordList) {
            output = ((RecordList) output).cloneSchema();
        } else if (output instanceof Record) {
            output = ((Record) output).cloneSchema();
        } else {
            try {
                output = output.getClass().getMethod("clone", (Class[]) null).invoke(output, (Object[]) null);
            } catch (NoSuchMethodException e) {
                throw new ConvertException(e);
            } catch (IllegalAccessException e) {
                throw new ConvertException(e);
            } catch (InvocationTargetException e) {
                throw new ConvertException(e);
            }
        }
    }
    if (input == null) {
        return output;
    }
    Object[] inputs = null;
    if (input instanceof Collection) {
        inputs = ((Collection) input).toArray();
    } else if (input.getClass().isArray()) {
        inputs = (Object[]) input;
    }
    if (inputs != null) {
        if (inputs.length == 0) {
            return output;
        }
        if (output instanceof RecordList) {
            RecordList list = (RecordList) output;
            for (int i = 0; i < inputs.length; i++) {
                Record record = list.createRecord();
                list.add(convert(inputs[i], record, false));
            }
            return list;
        } else if (output instanceof Collection) {
            Object[] outputs = ((Collection) output).toArray();
            if (outputs.length == 0) {
                throw new ConvertException("Size of collection is 0.");
            }
            for (int i = 0, imax = Math.min(inputs.length, outputs.length); i < imax; i++) {
                outputs[i] = convert(inputs[i], outputs[i], false);
            }
            return outputs;
        } else if (output.getClass().isArray()) {
            Object[] outputs = (Object[]) output;
            final Class componentType = output.getClass().getComponentType();
            if (outputs.length == 0) {
                if (componentType.isInterface() || componentType.isPrimitive()) {
                    throw new ConvertException("Length of array is 0.");
                }
                outputs = (Object[]) Array.newInstance(componentType, inputs.length);
                try {
                    for (int i = 0; i < outputs.length; i++) {
                        outputs[i] = componentType.newInstance();
                    }
                } catch (IllegalAccessException e) {
                    throw new ConvertException("Length of array is 0.", e);
                } catch (InstantiationException e) {
                    throw new ConvertException("Length of array is 0.", e);
                }
            }
            for (int i = 0, imax = Math.min(inputs.length, outputs.length); i < imax; i++) {
                if (outputs[i] == null) {
                    if (componentType.isInterface() || componentType.isPrimitive()) {
                        throw new ConvertException("Element of array is null.");
                    }
                    try {
                        outputs[i] = componentType.newInstance();
                    } catch (IllegalAccessException e) {
                        throw new ConvertException("Element of array is null.", e);
                    } catch (InstantiationException e) {
                        throw new ConvertException("Element of array is null.", e);
                    }
                }
                outputs[i] = convert(inputs[i], outputs[i], false);
            }
            return outputs;
        }
    }
    Map propMapping = propertyMapping;
    boolean isOutputAutoMapping = false;
    boolean isInputAutoMapping = false;
    if (propMapping == null || propMapping.size() == 0) {
        if (propMapping == null) {
            propMapping = new HashMap();
        }
        if (output instanceof Record) {
            Record record = (Record) output;
            RecordSchema schema = record.getRecordSchema();
            if (schema != null) {
                for (int i = 0, imax = schema.getPropertySize(); i < imax; i++) {
                    propMapping.put(schema.getPropertyName(i), schema.getPropertyName(i));
                }
            }
            if (propMapping.size() != 0) {
                isOutputAutoMapping = true;
            }
        } else {
            final SimpleProperty[] props = isFieldOnly(output.getClass()) ? SimpleProperty.getFieldProperties(output) : SimpleProperty.getProperties(output, !isAccessorOnly(output.getClass()));
            for (int i = 0; i < props.length; i++) {
                if (isEnabledPropertyName(output.getClass(), props[i].getPropertyName()) && props[i].isWritable(output.getClass())) {
                    propMapping.put(props[i].getPropertyName(), props[i].getPropertyName());
                }
            }
            if (propMapping.size() != 0) {
                isOutputAutoMapping = true;
            }
        }
        if (!isOutputAutoMapping) {
            if (input instanceof Record) {
                Record record = (Record) input;
                RecordSchema schema = record.getRecordSchema();
                if (schema != null) {
                    for (int i = 0, imax = schema.getPropertySize(); i < imax; i++) {
                        propMapping.put(schema.getPropertyName(i), schema.getPropertyName(i));
                    }
                }
                if (propMapping.size() != 0) {
                    isInputAutoMapping = true;
                }
            } else {
                final SimpleProperty[] props = isFieldOnly(output.getClass()) ? SimpleProperty.getFieldProperties(input) : SimpleProperty.getProperties(input, !isAccessorOnly(output.getClass()));
                for (int i = 0; i < props.length; i++) {
                    if (isEnabledPropertyName(output.getClass(), props[i].getPropertyName()) && props[i].isReadable(input.getClass())) {
                        propMapping.put(props[i].getPropertyName(), props[i].getPropertyName());
                    }
                }
                if (propMapping.size() != 0) {
                    isInputAutoMapping = true;
                }
            }
        }
        if (propMapping.size() == 0) {
            throw new ConvertException("PropertyMapping is null.");
        }
    }
    if (isMakeSchema && (output instanceof Record) && ((Record) output).getRecordSchema() == null) {
        StringBuilder buf = new StringBuilder();
        final Iterator entries = propMapping.entrySet().iterator();
        while (entries.hasNext()) {
            Map.Entry entry = (Map.Entry) entries.next();
            String inputProp = (String) entry.getKey();
            Object outputProp = entry.getValue();
            try {
                Property prop = propertyAccess.getProperty(inputProp);
                Class propType = prop.getPropertyType(input);
                if (outputProp instanceof String) {
                    buf.append(':').append(outputProp);
                    buf.append(',').append(propType.getName()).append('\n');
                } else {
                    List outputProps = (List) outputProp;
                    for (int i = 0, imax = outputProps.size(); i < imax; i++) {
                        buf.append(':').append((String) outputProps.get(i));
                        buf.append(',').append(propType.getName()).append('\n');
                    }
                }
            } catch (IllegalArgumentException e) {
                throw new ConvertException("Input property parse error. property=" + inputProp, e);
            } catch (NoSuchPropertyException e) {
                if (isOutputAutoMapping) {
                    continue;
                }
                throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
            } catch (InvocationTargetException e) {
                throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
            }
        }
        if (buf.length() != 0) {
            try {
                ((Record) output).setSchema(buf.toString());
            } catch (PropertySchemaDefineException e) {
            // 起こらない
            }
        }
    }
    final Iterator entries = propMapping.entrySet().iterator();
    while (entries.hasNext()) {
        Map.Entry entry = (Map.Entry) entries.next();
        String inputProp = (String) entry.getKey();
        Object value = null;
        try {
            value = propertyAccess.get(input, inputProp);
        } catch (IllegalArgumentException e) {
            throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
        } catch (NoSuchPropertyException e) {
            if (isOutputAutoMapping) {
                continue;
            }
            throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
        } catch (InvocationTargetException e) {
            throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
        }
        Object outputProp = entry.getValue();
        if (outputProp instanceof String) {
            try {
                propertyAccess.set(output, (String) outputProp, value);
            } catch (IllegalArgumentException e) {
                throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
            } catch (NoSuchPropertyException e) {
                if (isInputAutoMapping) {
                    continue;
                }
                throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
            } catch (InvocationTargetException e) {
                throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
            }
        } else {
            List outputProps = (List) outputProp;
            try {
                for (int i = 0, imax = outputProps.size(); i < imax; i++) {
                    propertyAccess.set(output, (String) outputProps.get(i), value);
                }
            } catch (IllegalArgumentException e) {
                throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
            } catch (NoSuchPropertyException e) {
                if (isInputAutoMapping) {
                    continue;
                }
                throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
            } catch (InvocationTargetException e) {
                throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
            }
        }
    }
    return output;
}
Also used : DataSet(jp.ossc.nimbus.beans.dataset.DataSet) HashMap(java.util.HashMap) Iterator(java.util.Iterator) Record(jp.ossc.nimbus.beans.dataset.Record) RecordList(jp.ossc.nimbus.beans.dataset.RecordList) ArrayList(java.util.ArrayList) List(java.util.List) RecordSchema(jp.ossc.nimbus.beans.dataset.RecordSchema) SimpleProperty(jp.ossc.nimbus.beans.SimpleProperty) Property(jp.ossc.nimbus.beans.Property) PropertySchemaDefineException(jp.ossc.nimbus.beans.dataset.PropertySchemaDefineException) InvocationTargetException(java.lang.reflect.InvocationTargetException) RecordList(jp.ossc.nimbus.beans.dataset.RecordList) NoSuchPropertyException(jp.ossc.nimbus.beans.NoSuchPropertyException) Collection(java.util.Collection) SimpleProperty(jp.ossc.nimbus.beans.SimpleProperty) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

SimpleProperty (jp.ossc.nimbus.beans.SimpleProperty)9 NoSuchPropertyException (jp.ossc.nimbus.beans.NoSuchPropertyException)4 NestedProperty (jp.ossc.nimbus.beans.NestedProperty)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Map (java.util.Map)1 Property (jp.ossc.nimbus.beans.Property)1 DataSet (jp.ossc.nimbus.beans.dataset.DataSet)1 PropertySchemaDefineException (jp.ossc.nimbus.beans.dataset.PropertySchemaDefineException)1 Record (jp.ossc.nimbus.beans.dataset.Record)1 RecordList (jp.ossc.nimbus.beans.dataset.RecordList)1 RecordSchema (jp.ossc.nimbus.beans.dataset.RecordSchema)1