> Is it correct to assume that the code from r886691 is neither your own nor
Apache-licensed? 

No. The code as it exists in SVN is primarily developed by me. Sergio's code
contribution is based on original Fluid code and I had taken effort to
integrate/refactor his contribution (with his permission) back to Fluid.   
The change made to Abe's original code is somewhat different. It is singular
change that should ideally be integrated to serp [1]. But till that happens
we are using an implementation inside Fluid. Once the change is incorporated
in original serp library -- I will remove the Fluid's *transient*
implementation. 

> If yes, it might be better to remove the code from ASF's svn until this is
> all resolved.
I had added ASL header wherever missing. Removed Sergio/Abe's authorship 
temporarily till this issue is resolved to everyone's satisfaction.

[1] http://serp.sourceforge.net/



Bernd Fondermann wrote:
> 
> Hi Pinaki,
> 
>>
>> PS: it is Pinaki, but I have seen lot of variations on that moniker :)
> 
> First and foremost: Sorry, don't know how I came around with other
> spellings of your name. I apologize.
> 
> Pinaki Poddar wrote:
>> Hi,
>>   This is a patch on Serp -- originally written by my erstwhile colleague
>> Abe White. 
> 
> What is Serp?
> 
>> A singular change was necessary to get it working for some
>> annotation arrays. I had written to Abe to integrate this change into
>> Serp 
>> -- but so far it has not happened. That is why the code appears in here
>> --
>> but this is a transient.
> 
> I'm not sure I'm satisfied with these explanations for this commit.
> And I'm confused.
> 
> Where has the code been contributed, physically? Is there a JIRA
> attachement somewhere or something equivalent?
> What code has been contributed by Sergio, what by Abe?
> 
> Many of the committed files lack a proper license header.
> 
> Is it correct to assume that the code from r886691 is neither your own
> nor Apache-licensed? If yes, it might be better to remove the code from
> ASF's svn until this is all resolved.
> 
>> That is why the code appears in here --
>> but this is a transient.
> 
> What does that mean?
> 
>   Bernd
> 
>> 
>> 
>> Bernd Fondermann wrote:
>>> Hi Pina,
>>>
>>> please could you clarify the origins of the code below?
>>>
>>> Thanks,
>>>
>>>   Bernd
>>>
>>> [email protected] wrote:
>>>> Added: labs/fluid/src/main/java/serp/bytecode/Annotation.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/main/java/serp/bytecode/Annotation.java?rev=886691&view=auto
>>>> ==============================================================================
>>>> --- labs/fluid/src/main/java/serp/bytecode/Annotation.java (added)
>>>> +++ labs/fluid/src/main/java/serp/bytecode/Annotation.java Thu Dec  3
>>>> 07:41:56 2009
>>>> @@ -0,0 +1,1010 @@
>>>> +package serp.bytecode;
>>>> +
>>>> +import java.io.*;
>>>> +import java.lang.reflect.*;
>>>> +import java.util.*;
>>>> +
>>>> +import serp.bytecode.lowlevel.*;
>>>> +import serp.bytecode.visitor.*;
>>>> +import serp.util.*;
>>>> +
>>>> +/**
>>>> + * A declared annotation.
>>>> + *
>>>> + * @author Abe White
>>>> + */
>>>> +public class Annotation implements BCEntity, VisitAcceptor {
>>>> +    private static Method ENUM_VALUEOF = null;
>>>> +    private static Method ENUM_NAME = null;
>>>> +    static {
>>>> +        try {
>>>> +            Class c = Class.forName("java.lang.Enum");
>>>> +            ENUM_VALUEOF = c.getMethod("valueOf", new Class[] {
>>>> +                Class.class, String.class });
>>>> +            ENUM_NAME = c.getMethod("name", (Class[]) null);
>>>> +        } catch (Throwable t) {
>>>> +            // pre-1.5 JDK
>>>> +        }
>>>> +    }
>>>> + 
>>>> +    private BCEntity _owner = null;
>>>> +    private int _typeIndex = 0;
>>>> +    private List _properties = null;
>>>> +
>>>> +    Annotation(BCEntity owner) {
>>>> +        _owner = owner;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * Annotations are stored in an {...@link Annotations} table or as
>>>> +     * part of an {...@link Annotation} property value.
>>>> +     */
>>>> +    public BCEntity getOwner() {
>>>> +        return _owner;
>>>> +    }
>>>> +
>>>> +    void invalidate() {
>>>> +        _owner = null;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * The index in the class {...@link ConstantPool} of the
>>>> +     * {...@link UTF8Entry} holding the type of this annotation.
>>>> +     */
>>>> +    public int getTypeIndex() {
>>>> +        return _typeIndex;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * The index in the class {...@link ConstantPool} of the
>>>> +     * {...@link UTF8Entry} holding the type of this annotation.
>>>> +     */
>>>> +    public void setTypeIndex(int index) {
>>>> +        _typeIndex = index;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * The name of this annotation's type.
>>>> +     */
>>>> +    public String getTypeName() {
>>>> +        String desc = ((UTF8Entry)
>>>> getPool().getEntry(_typeIndex)).getValue();
>>>> +        return getProject().getNameCache().getExternalForm(desc,
>>>> false);
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * The {...@link Class} object for this annotation's type.
>>>> +     */
>>>> +    public Class getType() {
>>>> +        return Strings.toClass(getTypeName(), getClassLoader());
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * The bytecode for the type of this annotation.
>>>> +     */
>>>> +    public BCClass getTypeBC() {
>>>> +        return getProject().loadClass(getTypeName(),
>>>> getClassLoader());
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * This annotation's type.
>>>> +     */
>>>> +    public void setType(String type) {
>>>> +        type = getProject().getNameCache().getInternalForm(type,
>>>> true);
>>>> +        _typeIndex = getPool().findUTF8Entry(type, true);
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * This annotation's type.
>>>> +     */
>>>> +    public void setType(Class type) {
>>>> +        setType(type.getName());
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * This annotation's type.
>>>> +     */
>>>> +    public void setType(BCClass type) {
>>>> +        setType(type.getName());
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * All declared properties.
>>>> +     */
>>>> +    public Property[] getProperties() {
>>>> +        if (_properties == null)
>>>> +            return new Property[0];
>>>> +        return (Property[]) _properties.toArray
>>>> +            (new Property[_properties.size()]);
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * Set the annotation properties.  This method is useful when
>>>> +     * importing properties from another instance.
>>>> +     */
>>>> +    public void setProperties(Property[] props) {
>>>> +        clearProperties();
>>>> +        if (props != null)
>>>> +            for (int i = 0; i < props.length; i++)
>>>> +                addProperty(props[i]);
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * Return the property with the given name, or null if none.
>>>> +     */
>>>> +    public Property getProperty(String name) {
>>>> +        if (_properties == null)
>>>> +            return null;
>>>> +        Property prop;
>>>> +        for (int i = 0; i < _properties.size(); i++) {
>>>> +            prop = (Property) _properties.get(i);
>>>> +            if (prop.getName().equals(name))
>>>> +                return prop;
>>>> +        }
>>>> +        return null;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * Import a property from another instance.
>>>> +     *
>>>> +     * @return the newly added property
>>>> +     */
>>>> +    public Property addProperty(Property p) {
>>>> +        Property prop = addProperty(p.getName());
>>>> +        prop.setValue(p.getValue());
>>>> +        return prop;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * Add a new property.
>>>> +     */
>>>> +    public Property addProperty(String name) {
>>>> +        Property prop = new Property(this);
>>>> +        prop.setName(name);
>>>> +        if (_properties == null)
>>>> +            _properties = new ArrayList();
>>>> +        _properties.add(prop);
>>>> +        return prop;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * Clear all annotation properties.
>>>> +     */
>>>> +    public void clearProperties() {
>>>> +        if (_properties == null)
>>>> +            return;
>>>> +        for (int i = 0; i < _properties.size(); i++)
>>>> +            ((Property) _properties.get(i)).invalidate();
>>>> +        _properties.clear();
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * Remove the given property.
>>>> +     *
>>>> +     * @return true if an property was removed, false otherwise
>>>> +     */
>>>> +    public boolean removeProperty(Property prop) {
>>>> +        return prop != null && removeProperty(prop.getName());
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * Remove the property with the given name.
>>>> +     *
>>>> +     * @return true if a property was removed, false otherwise
>>>> +     */
>>>> +    public boolean removeProperty(String name) {
>>>> +        if (name == null || _properties == null)
>>>> +            return false;
>>>> +        Property prop;
>>>> +        for (int i = 0; i < _properties.size(); i++) {
>>>> +            prop = (Property) _properties.get(i);
>>>> +            if (prop.getName().equals(name)) {
>>>> +                prop.invalidate();
>>>> +                _properties.remove(i);
>>>> +                return true;
>>>> +            }
>>>> +        }
>>>> +        return false;
>>>> +    }
>>>> +
>>>> +    public Project getProject() {
>>>> +        return _owner.getProject();
>>>> +    }
>>>> +
>>>> +    public ConstantPool getPool() {
>>>> +        return _owner.getPool();
>>>> +    }
>>>> +
>>>> +    public ClassLoader getClassLoader() {
>>>> +        return _owner.getClassLoader();
>>>> +    }
>>>> +
>>>> +    public boolean isValid() {
>>>> +        return _owner != null;
>>>> +    }
>>>> +
>>>> +    public void acceptVisit(BCVisitor visit) {
>>>> +        visit.enterAnnotation(this);
>>>> +        if (_properties != null)
>>>> +            for (int i = 0; i < _properties.size(); i++)
>>>> +                ((Property) _properties.get(i)).acceptVisit(visit);
>>>> +        visit.exitAnnotation(this);
>>>> +    }
>>>> +
>>>> +    int getLength() {
>>>> +        int len = 4;
>>>> +        if (_properties != null)
>>>> +            for (int i = 0; i < _properties.size(); i++)
>>>> +                len += ((Property) _properties.get(i)).getLength();
>>>> +        return len;
>>>> +    }
>>>> +
>>>> +    void read(DataInput in) throws IOException {
>>>> +        _typeIndex = in.readUnsignedShort();
>>>> +        clearProperties();
>>>> +        int props = in.readUnsignedShort();
>>>> +        if (props > 0) {
>>>> +            if (_properties == null)
>>>> +                _properties = new ArrayList(props);
>>>> +            Property prop;
>>>> +            for (int i = 0; i < props; i++) {
>>>> +                prop = new Property(this);
>>>> +                prop.read(in);
>>>> +                _properties.add(prop); 
>>>> +            }
>>>> +        }
>>>> +    }
>>>> +
>>>> +    void write(DataOutput out) throws IOException {
>>>> +        out.writeShort(_typeIndex); 
>>>> +        out.writeShort((_properties == null) ? 0 :
>>>> _properties.size());
>>>> +        if (_properties != null) {
>>>> +            for (int i = 0; i < _properties.size(); i++)
>>>> +                ((Property) _properties.get(i)).write(out);
>>>> +        }
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * An annotation property.
>>>> +     */
>>>> +    public static class Property implements BCEntity, VisitAcceptor {
>>>> +        private Annotation _owner = null;
>>>> +        private int _nameIndex = 0;
>>>> +        private final Value _value = new Value();
>>>> +        private Value[] _values = null;
>>>> +
>>>> +        Property(Annotation owner) {
>>>> +            _owner = owner;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * The owning annotation.
>>>> +         */
>>>> +        public Annotation getAnnotation() {
>>>> +            return _owner;
>>>> +        }
>>>> +
>>>> +        void invalidate() {
>>>> +            _owner = null;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the index in the class {...@link ConstantPool} of the
>>>> +         * {...@link UTF8Entry} holding the name of this property.
>>>> +         */
>>>> +        public int getNameIndex() {
>>>> +            return _nameIndex;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the index in the class {...@link ConstantPool} of the
>>>> +         * {...@link UTF8Entry} holding the name of this property.
>>>> +         */
>>>> +        public void setNameIndex(int index) {
>>>> +            _nameIndex = index;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the name of this property.
>>>> +         */
>>>> +        public String getName() {
>>>> +            return ((UTF8Entry)
>>>> getPool().getEntry(_nameIndex)).getValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the name of this property.
>>>> +         */
>>>> +        public void setName(String name) {
>>>> +            _nameIndex = getPool().findUTF8Entry(name, true);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the value of the property as its wrapper type.
>>>> +         * Returns class values as the class name.
>>>> +         */
>>>> +        public Object getValue() {
>>>> +            if (_values == null)
>>>> +                return getValue(_value);
>>>> +            Object[] vals = new Object[_values.length];
>>>> +            for (int i = 0; i < vals.length; i++)
>>>> +                vals[i] = getValue(_values[i]);
>>>> +            return vals;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Extract the Java value.
>>>> +         */
>>>> +        private Object getValue(Value val) {
>>>> +            if (val.index == -1)
>>>> +                return val.value;
>>>> +
>>>> +            Object o = ((ConstantEntry)
>>>> getPool().getEntry(val.index)).
>>>> +                getConstant();
>>>> +            if (val.index2 != -1) {
>>>> +                // enum value
>>>> +                String e = getProject().getNameCache().
>>>> +                    getExternalForm((String) o, false);
>>>> +                String name = ((UTF8Entry)
>>>> getPool().getEntry(val.index2)).
>>>> +                    getValue();
>>>> +                try {
>>>> +                    Class cls = Class.forName(e, true,
>>>> getClassLoader());  
>>>> +                    return ENUM_VALUEOF.invoke(null, new Object[]
>>>> {cls,
>>>> name});
>>>> +                } catch (Throwable t) {
>>>> +                    return e + "." + name;
>>>> +                } 
>>>> +            }
>>>> +            if (val.type == null)
>>>> +                return o;
>>>> +
>>>> +            switch (val.type.getName().charAt(0)) {
>>>> +            case 'b': 
>>>> +                if (val.type == boolean.class)
>>>> +                    return (((Number) o).intValue() != 0) ?
>>>> Boolean.TRUE
>>>> +                        : Boolean.FALSE;
>>>> +                return new Byte(((Number) o).byteValue());
>>>> +            case 'c':
>>>> +                return new Character((char) ((Number) o).intValue());
>>>> +            case 'j': // java.lang.Class
>>>> +                return
>>>> getProject().getNameCache().getExternalForm((String) o, 
>>>> +                    false);
>>>> +            case 's':
>>>> +                return new Short(((Number) o).shortValue());
>>>> +            default:
>>>> +                return o;
>>>> +            }
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set value of this property. The value should be an instance
>>>> of any
>>>> +         * primitive wrapper type, String, Class, BCClass, an enum
>>>> constant,
>>>> +         * an annotation, or an array of any of these types.
>>>> +         */
>>>> +        public void setValue(Object value) {
>>>> +            if (!value.getClass().isArray()) {
>>>> +                _values = null;
>>>> +                setValue(_value, value);
>>>> +            } else {
>>>> +                _value.value = null;
>>>> +                _values = new Value[Array.getLength(value)];
>>>> +                for (int i = 0; i < _values.length; i++) {
>>>> +                    _values[i] = new Value();
>>>> +                    setValue(_values[i], Array.get(value, i));
>>>> +                } 
>>>> +            }
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the given value.
>>>> +         */
>>>> +        private void setValue(Value val, Object o) {
>>>> +            if (o instanceof String) 
>>>> +                setValue(val, (String) o);
>>>> +            else if (o instanceof Boolean)
>>>> +                setValue(val, ((Boolean) o).booleanValue());
>>>> +            else if (o instanceof Byte)
>>>> +                setValue(val, ((Byte) o).byteValue());
>>>> +            else if (o instanceof Character)
>>>> +                setValue(val, ((Character) o).charValue());
>>>> +            else if (o instanceof Double)
>>>> +                setValue(val, ((Double) o).doubleValue());
>>>> +            else if (o instanceof Float)
>>>> +                setValue(val, ((Float) o).floatValue());
>>>> +            else if (o instanceof Integer)
>>>> +                setValue(val, ((Integer) o).intValue());
>>>> +            else if (o instanceof Long)
>>>> +                setValue(val, ((Long) o).longValue());
>>>> +            else if (o instanceof Short)
>>>> +                setValue(val, ((Short) o).shortValue());
>>>> +            else if (o instanceof Class)
>>>> +                setClassNameValue(val, ((Class) o).getName());
>>>> +            else if (o instanceof BCClass)
>>>> +                setClassNameValue(val, ((BCClass) o).getName());
>>>> +            else if (o instanceof Annotation)
>>>> +                setValue(val, (Annotation) o);
>>>> +            else {
>>>> +                String name = getEnumName(o);
>>>> +                if (name != null) {
>>>> +                    String type = getProject().getNameCache().
>>>> +                        getInternalForm(o.getClass().getName(), true);
>>>> +                    val.index = getPool().findUTF8Entry(type, true);
>>>> +                    val.index2 = getPool().findUTF8Entry(name, true);
>>>> +                    val.value = null;
>>>> +                    val.type = null;
>>>> +                } else {
>>>> +                    val.index = -1;
>>>> +                    val.index2 = -1;
>>>> +                    val.value = o;
>>>> +                    val.type = o.getClass();
>>>> +                }
>>>> +            }
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the name of this enum value, or null if not an enum.
>>>> +         */
>>>> +        private static String getEnumName(Object o) {
>>>> +            for (Class c = o.getClass(); true; c = c.getSuperclass())
>>>> {
>>>> +                if (c == Object.class || c == null)
>>>> +                    return null;
>>>> +                if ("java.lang.Enum".equals(c.getName()))
>>>> +                    break;
>>>> +            }
>>>> +            try {
>>>> +                return (String) ENUM_NAME.invoke(o, (Object[]) null);
>>>> +            } catch (Throwable t) {
>>>> +                return o.toString();
>>>> +            }
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the string value of this property, or null if not
>>>> set.
>>>> +         */
>>>> +        public String getStringValue() {
>>>> +            return (String) getValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the boolean value of this property, or false if not
>>>> set.
>>>> +         */
>>>> +        public boolean getBooleanValue() {
>>>> +            Object value = getValue();
>>>> +            return (value == null) ? false : ((Boolean)
>>>> value).booleanValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the byte value of this property, or false if not
>>>> set.
>>>> +         */
>>>> +        public byte getByteValue() {
>>>> +            Object value = getValue();
>>>> +            return (value == null) ? (byte) 0 : ((Number)
>>>> value).byteValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the int value of this property, or 0 if not set.
>>>> +         */
>>>> +        public int getIntValue() {
>>>> +            Object value = getValue();
>>>> +            return (value == null) ? 0 : ((Number) value).intValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the long value of this property, or 0 if not set.
>>>> +         */
>>>> +        public long getLongValue() {
>>>> +            Object value = getValue();
>>>> +            return (value == null) ? 0L : ((Number)
>>>> value).longValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the float value of this property, or 0 if not set.
>>>> +         */
>>>> +        public float getFloatValue() {
>>>> +            Object value = getValue();
>>>> +            return (value == null) ? 0F : ((Number)
>>>> value).floatValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the double value of this property, or 0 if not set.
>>>> +         */
>>>> +        public double getDoubleValue() {
>>>> +            Object value = getValue();
>>>> +            return (value == null) ? 0D : ((Number)
>>>> value).doubleValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the short value of this property, or 0 if not set.
>>>> +         */
>>>> +        public short getShortValue() {
>>>> +            Object value = getValue();
>>>> +            return (value == null) ? (short) 0 : ((Number)
>>>> value).shortValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the class value of this property, or null if not
>>>> set.
>>>> +         */
>>>> +        public String getClassNameValue() {
>>>> +            return (String) getValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the annotation value of this property, or null if
>>>> not
>>>> set.
>>>> +         */
>>>> +        public Annotation getAnnotationValue() {
>>>> +            return (Annotation) getValue();
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the string value of this property.
>>>> +         */
>>>> +        public void setValue(String value) {
>>>> +            _values = null;
>>>> +            setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the string value of this property.
>>>> +         */
>>>> +        private void setValue(Value val, String o) {
>>>> +            val.index = getPool().findUTF8Entry(o, true);
>>>> +            val.index2 = -1;
>>>> +            val.value = null;
>>>> +            val.type = null;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the boolean value of this property.
>>>> +         */
>>>> +        public void setValue(boolean value) {
>>>> +            _values = null;
>>>> +            setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the boolean value of this property.
>>>> +         */
>>>> +        private void setValue(Value val, boolean o) {
>>>> +            setValue(val, (o) ? 1 : 0);
>>>> +            val.type = boolean.class;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the byte value of this property.
>>>> +         */
>>>> +        public void setValue(byte value) {
>>>> +            _values = null;
>>>> +            setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the byte value of this property.
>>>> +         */
>>>> +        private void setValue(Value val, byte o) {
>>>> +            setValue(val, (int) o);
>>>> +            val.type = byte.class;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the int value of this property.
>>>> +         */
>>>> +        public void setValue(int value) {
>>>> +            _values = null;
>>>> +            setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the int value of this property.
>>>> +         */
>>>> +        private void setValue(Value val, int o) {
>>>> +            val.index = getPool().findIntEntry(o, true);
>>>> +            val.index2 = -1;
>>>> +            val.value = null;
>>>> +            val.type = null;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the long value of this property.
>>>> +         */
>>>> +        public void setValue(long value) {
>>>> +            _values = null;
>>>> +            setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the long value of this property.
>>>> +         */
>>>> +        private void setValue(Value val, long o) {
>>>> +            val.index = getPool().findLongEntry(o, true);
>>>> +            val.index2 = -1;
>>>> +            val.value = null;
>>>> +            val.type = null;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the float value of this property.
>>>> +         */
>>>> +        public void setValue(float value) {
>>>> +            _values = null;
>>>> +            setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the float value of this property.
>>>> +         */
>>>> +        private void setValue(Value val, float o) {
>>>> +            val.index = getPool().findFloatEntry(o, true);
>>>> +            val.index2 = -1;
>>>> +            val.value = null;
>>>> +            val.type = null;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the double value of this property.
>>>> +         */
>>>> +        public void setValue(double value) {
>>>> +            _values = null;
>>>> +            setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the double value of this property.
>>>> +         */
>>>> +        private void setValue(Value val, double o) {
>>>> +            val.index = getPool().findDoubleEntry(o, true);
>>>> +            val.index2 = -1;
>>>> +            val.value = null;
>>>> +            val.type = null;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the short value of this property.
>>>> +         */
>>>> +        public void setValue(short value) {
>>>> +            _values = null;
>>>> +            setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the short value of this property.
>>>> +         */
>>>> +        private void setValue(Value val, short o) {
>>>> +            setValue(val, (int) o);
>>>> +            val.type = short.class;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the class value of this property.
>>>> +         */
>>>> +        public void setValue(Class value) {
>>>> +            setClassNameValue(value.getName());
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the class value of this property.
>>>> +         */
>>>> +        public void setValue(BCClass value) {
>>>> +            setClassNameValue(value.getName());
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the class value of this property.
>>>> +         */
>>>> +        public void setClassNameValue(String value) {
>>>> +            _values = null;
>>>> +            setClassNameValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the class value of this property.
>>>> +         */
>>>> +        private void setClassNameValue(Value val, String o) {
>>>> +            o = getProject().getNameCache().getInternalForm(o, true);
>>>> +            val.index = getPool().findUTF8Entry(o, true);
>>>> +            val.index2 = -1;
>>>> +            val.value = null;
>>>> +            val.type = Class.class;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the annotation value of this property by importing the
>>>> given
>>>> +         * annotation from another instance.
>>>> +         */
>>>> +        public Annotation setValue(Annotation value) {
>>>> +            _values = null;
>>>> +            return setValue(_value, value);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the annotation value of this property by importing the
>>>> given
>>>> +         * annotation from another instance.
>>>> +         */
>>>> +        private Annotation setValue(Value val, Annotation o) {
>>>> +            Annotation anno = new Annotation(this);
>>>> +            anno.setType(o.getTypeName());
>>>> +            anno.setProperties(o.getProperties());
>>>> +            val.index = -1;
>>>> +            val.index2 = -1;
>>>> +            val.value = anno;
>>>> +            val.type = null;
>>>> +            return anno;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set the annotation value of this property by importing the
>>>> given
>>>> +         * annotation from another instance.
>>>> +         */
>>>> +        public Annotation[] setValue(Annotation[] value) {
>>>> +            _value.value = null;
>>>> +            _values = new Value[value.length];
>>>> +            Annotation[] ret = new Annotation[value.length];
>>>> +            for (int i = 0; i < _values.length; i++) {
>>>> +                _values[i] = new Value();
>>>> +                ret[i] = setValue(_values[i], value[i]);
>>>> +            }
>>>> +            return ret;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set this property value to a new annotation of the given
>>>> type, 
>>>> +         * returning the annotation for manipulation.
>>>> +         */
>>>> +        public Annotation newAnnotationValue(Class type) {
>>>> +            return newAnnotationValue(type.getName());
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set this property value to a new annotation of the given
>>>> type, 
>>>> +         * returning the annotation for manipulation.
>>>> +         */
>>>> +        public Annotation newAnnotationValue(BCClass type) {
>>>> +            return newAnnotationValue(type.getName());
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set this property value to a new annotation of the given
>>>> type, 
>>>> +         * returning the annotation for manipulation.
>>>> +         */
>>>> +        public Annotation newAnnotationValue(String type) {
>>>> +            Annotation anno = new Annotation(this);
>>>> +            anno.setType(type);
>>>> +            _values = null;
>>>> +            _value.index = -1;
>>>> +            _value.index2 = -1;
>>>> +            _value.value = anno;
>>>> +            _value.type = null;
>>>> +            return anno;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set this property value to a new annotation array of the
>>>> given type
>>>> +         * and length, returning the annotations for manipulation.
>>>> +         */
>>>> +        public Annotation[] newAnnotationArrayValue(Class type, int
>>>> length) {
>>>> +            return newAnnotationArrayValue(type.getName(), length);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set this property value to a new annotation array of the
>>>> given type
>>>> +         * and length, returning the annotations for manipulation.
>>>> +         */
>>>> +        public Annotation[] newAnnotationArrayValue(BCClass type, int
>>>> length) {
>>>> +            return newAnnotationArrayValue(type.getName(), length);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Set this property value to a new annotation array of the
>>>> given type
>>>> +         * and length, returning the annotations for manipulation.
>>>> +         */
>>>> +        public Annotation[] newAnnotationArrayValue(String type, int
>>>> length) {
>>>> +            _value.value = null;
>>>> +            _values = new Value[length]; 
>>>> +            Annotation[] ret = new Annotation[length];
>>>> +            for (int i = 0; i < length; i++) {
>>>> +                ret[i] = new Annotation(this);
>>>> +                ret[i].setType(type);
>>>> +                _values[i] = new Value();
>>>> +                _values[i].index = -1;
>>>> +                _values[i].index2 = -1;
>>>> +                _values[i].value = ret[i];
>>>> +                _values[i].type = null;
>>>> +            }
>>>> +            return ret;
>>>> +        }
>>>> +
>>>> +        public Project getProject() {
>>>> +            return _owner.getProject();
>>>> +        }
>>>> +
>>>> +        public ConstantPool getPool() {
>>>> +            return _owner.getPool();
>>>> +        }
>>>> +
>>>> +        public ClassLoader getClassLoader() {
>>>> +            return _owner.getClassLoader();
>>>> +        }
>>>> +
>>>> +        public boolean isValid() {
>>>> +            return _owner != null && (_values != null || _value.index
>>>> !=
>>>> -1
>>>> +                || _value.value != null);
>>>> +        }
>>>> +
>>>> +        public void acceptVisit(BCVisitor visit) {
>>>> +            visit.enterAnnotationProperty(this);
>>>> +            visit.exitAnnotationProperty(this);
>>>> +        }
>>>> +
>>>> +        int getLength() {
>>>> +            if (!isValid())
>>>> +                throw new IllegalStateException();
>>>> +
>>>> +            int len = 2; // name
>>>> +            if (_values == null)
>>>> +                len += getLength(_value);
>>>> +            else {
>>>> +                len += 3; // arr length + tag
>>>> +                for (int i = 0; i < _values.length; i++)
>>>> +                    len += getLength(_values[i]);
>>>> +            }
>>>> +            return len;
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Return the length of the given value.
>>>> +         */
>>>> +        private int getLength(Value val) {
>>>> +            if (val.index2 != -1)
>>>> +                return 5; // tag + enum type + enum name
>>>> +            if (val.index != -1)
>>>> +                return 3; // tag + constant or class
>>>> +            return 1 + ((Annotation) val.value).getLength(); // tag +
>>>> anno
>>>> +        }
>>>> +
>>>> +        void read(DataInput in) throws IOException {
>>>> +            _nameIndex = in.readUnsignedShort(); 
>>>> +            int tag = in.readByte();
>>>> +            if (tag == '[') {
>>>> +                int len = in.readUnsignedShort();
>>>> +                _values = new Value[len];
>>>> +                for (int i = 0; i < len; i++) {
>>>> +                    _values[i] = new Value();
>>>> +                    read(_values[i], in.readByte(), in); 
>>>> +                }
>>>> +            } else
>>>> +                read(_value, tag, in);
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Read data into the given value.
>>>> +         */
>>>> +        private void read(Value val, int tag, DataInput in) throws
>>>> IOException {
>>>> +            switch (tag) {
>>>> +            case 'B':
>>>> +                val.index = in.readUnsignedShort();
>>>> +                val.index2 = -1;
>>>> +                val.value = null;
>>>> +                val.type = byte.class;
>>>> +                break;
>>>> +            case 'C':
>>>> +                val.index = in.readUnsignedShort();
>>>> +                val.index2 = -1;
>>>> +                val.value = null;
>>>> +                val.type = char.class;
>>>> +                break;
>>>> +            case 'D':
>>>> +            case 'F':
>>>> +            case 'I':
>>>> +            case 'J':
>>>> +            case 'S':
>>>> +            case 's':
>>>> +                val.index = in.readUnsignedShort();
>>>> +                val.index2 = -1;
>>>> +                val.value = null;
>>>> +                val.type = null;
>>>> +                break;
>>>> +            case 'Z':
>>>> +                val.index = in.readUnsignedShort();
>>>> +                val.index2 = -1;
>>>> +                val.value = null;
>>>> +                val.type = boolean.class;
>>>> +                break;
>>>> +            case 'c':
>>>> +                val.index = in.readUnsignedShort();
>>>> +                val.index2 = -1;
>>>> +                val.value = null;
>>>> +                val.type = Class.class;
>>>> +                break;
>>>> +            case 'e':
>>>> +                val.index = in.readUnsignedShort();
>>>> +                val.index2 = in.readUnsignedShort();
>>>> +                val.value = null;
>>>> +                val.type = null;
>>>> +                break;
>>>> +            case '@':
>>>> +                Annotation anno = new Annotation(this);
>>>> +                anno.read(in);
>>>> +                val.index = -1;
>>>> +                val.index2 = -1;
>>>> +                val.value = anno;
>>>> +                val.type = null;
>>>> +                break;
>>>> +            default:
>>>> +                throw new IllegalStateException(String.valueOf(tag));
>>>> +            }
>>>> +        }
>>>> +
>>>> +        void write(DataOutput out) throws IOException {
>>>> +            if (!isValid())
>>>> +                throw new IllegalStateException();
>>>> +
>>>> +            out.writeShort(_nameIndex);
>>>> +            if (_values == null)
>>>> +                write(_value, out);
>>>> +            else {
>>>> +                out.writeByte('[');
>>>> +                out.writeShort(_values.length);
>>>> +                for (int i = 0; i < _values.length; i++)
>>>> +                    write(_values[i], out);
>>>> +            }
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Write the data for the given value to the stream.
>>>> +         */
>>>> +        private void write(Value val, DataOutput out) throws
>>>> IOException
>>>> {
>>>> +            if (val.index2 != -1) {
>>>> +                out.writeByte('e');
>>>> +                out.writeShort(val.index);
>>>> +                out.writeShort(val.index2);
>>>> +            } else if (val.index != -1) {
>>>> +                if (val.type != null) {
>>>> +                    switch (val.type.getName().charAt(0)) {
>>>> +                    case 'b':
>>>> +                        if (val.type == byte.class)
>>>> +                            out.writeByte('B');
>>>> +                        else 
>>>> +                            out.writeByte('Z');
>>>> +                        break;
>>>> +                    case 'c':
>>>> +                        out.writeByte('C');
>>>> +                        break;
>>>> +                    case 'j': // java.lang.Class
>>>> +                        out.writeByte('c');
>>>> +                        break;
>>>> +                    case 's':
>>>> +                        out.writeByte('S');
>>>> +                        break;
>>>> +                    default:
>>>> +                        throw new
>>>> IllegalStateException(val.type.getName());
>>>> +                    }
>>>> +                } else {
>>>> +                    Entry entry = getPool().getEntry(val.index);
>>>> +                    if (entry instanceof DoubleEntry) 
>>>> +                        out.writeByte('D');
>>>> +                    else if (entry instanceof FloatEntry)
>>>> +                        out.writeByte('F');
>>>> +                    else if (entry instanceof IntEntry)
>>>> +                        out.writeByte('I');
>>>> +                    else if (entry instanceof LongEntry)
>>>> +                        out.writeByte('J');
>>>> +                    else if (entry instanceof UTF8Entry)
>>>> +                        out.writeByte('s');
>>>> +                    else
>>>> +                        throw new
>>>> IllegalStateException(entry.getClass().
>>>> +                            getName());
>>>> +                }
>>>> +                out.writeShort(val.index);
>>>> +            } else {
>>>> +                out.writeByte('@');
>>>> +                ((Annotation) val.value).write(out);
>>>> +            }
>>>> +        }
>>>> +
>>>> +        /**
>>>> +         * Property value struct.
>>>> +         */ 
>>>> +        private static class Value {
>>>> +            public int index = -1;
>>>> +            public int index2 = -1;
>>>> +            public Class type = null;
>>>> +            public Object value = null;
>>>> +        }
>>>> +    }
>>>> +}
>>>>
>>>> Propchange: labs/fluid/src/main/java/serp/bytecode/Annotation.java
>>>> ------------------------------------------------------------------------------
>>>>     svn:eol-style = native
>>>>
>>>> Modified:
>>>> labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties?rev=886691&r1=886690&r2=886691&view=diff
>>>> ==============================================================================
>>>> ---
>>>> labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties
>>>> (original)
>>>> +++
>>>> labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties
>>>> Thu Dec  3 07:41:56 2009
>>>> @@ -1,3 +1,8 @@
>>>> +generate-unenhanced: Generating dynamic Java class {0} using
>>>> classloader
>>>> {1} child of {2}.
>>>> +generate-enhanced: Enhancing dynamic Java class {0} using classloader
>>>> {1} child of {2}.
>>>> +load-enhanced: Loaded dynamic, enhanced Java class {0} into JVM using
>>>> classloader {1} child of {2}.
>>>> +load-enhanced-error: Error while loading dynamic, enhanced Java class
>>>> {0} into JVM using classloader {1} child of {2}.
>>>> +
>>>>  type-mapping-new: Creating new SDO Type Mapping for "{0}" mapped to
>>>> "{1}"
>>>>  type-mapping-resolve: Resolving SDO Type Mapping for "{0}" mapped to
>>>> "{1}"
>>>>  resolve-mapping-failed: No cached metadata found for "{0}" in "{1}"
>>>>
>>>> Modified: labs/fluid/src/test/java/example/basic/TestCRUD.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/test/java/example/basic/TestCRUD.java?rev=886691&r1=886690&r2=886691&view=diff
>>>> ==============================================================================
>>>> --- labs/fluid/src/test/java/example/basic/TestCRUD.java (original)
>>>> +++ labs/fluid/src/test/java/example/basic/TestCRUD.java Thu Dec  3
>>>> 07:41:56 2009
>>>> @@ -13,8 +13,7 @@
>>>>  import test.common.AbstractSDOTest;
>>>>  
>>>>  /**
>>>> - * Test basic CRUD operation with a simpleton Type that has no
>>>> relation
>>>> but
>>>> - * primitive properties.
>>>> + * Test basic CRUD operation with a simpleton SDO Type that has no
>>>> relation but primitive properties.
>>>>   *  
>>>>   * @author Pinaki Poddar
>>>>   *
>>>> @@ -99,9 +98,10 @@
>>>>                    dataObject.setString("firstName", "Ron");
>>>>                    em.getTransaction().begin();
>>>>                    DataObject merged = em.merge(dataObject);
>>>> -                  int v1 = ImplHelper.getVersion(merged);
>>>> -                  assertTrue(v1>v0);
>>>> +                  assertNotSame(merged, dataObject);
>>>>                    em.getTransaction().commit();
>>>> +            int v1 = ImplHelper.getVersion(merged);
>>>> +            assertTrue(v1>v0);
>>>>                    assertEquals("Ron", merged.getString("firstName"));
>>>>                    int after = count("Person");
>>>>                    assertEquals(before, after);
>>>> @@ -138,7 +138,7 @@
>>>>     */
>>>>    // START SNIPPET:createPerson
>>>>    DataObject createPerson(String ssn, String first, String last, int
>>>> age)
>>>> {
>>>> -          Type type = getType("Person");
>>>> +          Type type = getSDOType("Person");
>>>>            DataObject data = DataFactory.INSTANCE.create(type);
>>>>            data.set("ssn", ssn);
>>>>            data.setString("firstName", first);
>>>>
>>>> Added: labs/fluid/src/test/java/example/basic/TestConfiguration.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/test/java/example/basic/TestConfiguration.java?rev=886691&view=auto
>>>> ==============================================================================
>>>> --- labs/fluid/src/test/java/example/basic/TestConfiguration.java
>>>> (added)
>>>> +++ labs/fluid/src/test/java/example/basic/TestConfiguration.java Thu
>>>> Dec 
>>>> 3 07:41:56 2009
>>>> @@ -0,0 +1,27 @@
>>>> +package example.basic;
>>>> +
>>>> +import javax.persistence.EntityManager;
>>>> +
>>>> +import org.apache.openjpa.persistence.test.SingleEMFTestCase;
>>>> +import org.apache.openjpa.sdo.SDODynamicClassResolver;
>>>> +import org.apache.openjpa.sdo.SDOEntityManager;
>>>> +import org.apache.openjpa.sdo.SDOEntityManagerFactory;
>>>> +
>>>> +import test.common.AbstractSDOTest;
>>>> +
>>>> +public class TestConfiguration extends AbstractSDOTest {
>>>> +    public void testEntityManagerFactory() {
>>>> +        assertNotNull(emf);
>>>> +        assertTrue(emf instanceof SDOEntityManagerFactory);
>>>> +    }
>>>> +    
>>>> +    public void testEntityManager() {
>>>> +        EntityManager em = emf.createEntityManager();
>>>> +        assertNotNull(em);
>>>> +        assertTrue(em instanceof SDOEntityManager);
>>>> +    }
>>>> +    
>>>> +    public void testClassResolver() {
>>>> +      assertTrue(emf.getConfiguration().getClassResolverInstance()
>>>> instanceof SDODynamicClassResolver);
>>>> +    }
>>>> +}
>>>>
>>>> Propchange:
>>>> labs/fluid/src/test/java/example/basic/TestConfiguration.java
>>>> ------------------------------------------------------------------------------
>>>>     svn:eol-style = native
>>>>
>>>> Modified: labs/fluid/src/test/java/example/basic/TestRelation.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/test/java/example/basic/TestRelation.java?rev=886691&r1=886690&r2=886691&view=diff
>>>> ==============================================================================
>>>> --- labs/fluid/src/test/java/example/basic/TestRelation.java (original)
>>>> +++ labs/fluid/src/test/java/example/basic/TestRelation.java Thu Dec  3
>>>> 07:41:56 2009
>>>> @@ -149,8 +149,7 @@
>>>>     * 
>>>>     */
>>>>    DataObject createPurchaseOrder() {
>>>> -          DataObject purchaseOrder = DataFactory.INSTANCE.create(
>>>> -                          getType("PurchaseOrderType"));
>>>> +          DataObject purchaseOrder =
>>>> DataFactory.INSTANCE.create(getSDOType("PurchaseOrderType"));
>>>>  
>>>>            purchaseOrder.setString("orderDate", "1999-10-20");
>>>>  
>>>>
>>>> Modified: labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java?rev=886691&r1=886690&r2=886691&view=diff
>>>> ==============================================================================
>>>> --- labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java
>>>> (original)
>>>> +++ labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java Thu
>>>> Dec 
>>>> 3 07:41:56 2009
>>>> @@ -37,20 +37,20 @@
>>>>  public class TestSDO extends AbstractSDOTest {
>>>>    
>>>>    public void testPackage() {
>>>> -          Type addressType = getType("USAddress");
>>>> +          Type addressType = getSDOType("USAddress");
>>>>            assertNotNull(addressType);
>>>>            String pkg = ImplHelper.getPackageName(addressType);
>>>>            assertEquals("example.domain",pkg);
>>>>    }
>>>>    
>>>>    public void testInstanceClassIsNullForUserType() {
>>>> -          Type addressType = getType("USAddress");
>>>> +          Type addressType = getSDOType("USAddress");
>>>>            assertFalse(addressType.isDataType());
>>>>            assertNull(addressType.getInstanceClass());
>>>>    }
>>>>    
>>>>    public void testIdentityType() {
>>>> -          Type poType = getType("PurchaseOrderType");
>>>> +          Type poType = getSDOType("PurchaseOrderType");
>>>>            assertNotNull(poType);
>>>>            Property id2 = ImplHelper.getIdentityProperty(poType);
>>>>            assertNotNull(id2);
>>>> @@ -64,8 +64,7 @@
>>>>     * 
>>>>     */
>>>>    public void testCreateModel() {
>>>> -          DataObject purchaseOrder = DataFactory.INSTANCE.create(
>>>> -                          getType("PurchaseOrderType"));
>>>> +          DataObject purchaseOrder =
>>>> DataFactory.INSTANCE.create(getSDOType("PurchaseOrderType"));
>>>>  
>>>>            purchaseOrder.setString("orderDate", "1999-10-20");
>>>>  
>>>>
>>>> Modified:
>>>> labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSourceCode.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSourceCode.java?rev=886691&r1=886690&r2=886691&view=diff
>>>> ==============================================================================
>>>> --- labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSourceCode.java
>>>> (original)
>>>> +++ labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSourceCode.java
>>>> Thu Dec  3 07:41:56 2009
>>>> @@ -90,20 +90,20 @@
>>>>            }
>>>>    }
>>>>    
>>>> -  public void testDuplicateMethod() {
>>>> -          SourceCode code = new SourceCode("some.pkg", "SomeClass");
>>>> -          try {
>>>> -                  code.addMethod("add", "int")
>>>> -                      .makePublic()
>>>> -                      .makeStatic()
>>>> -                      .addArgument("int", "a")
>>>> -                      .addArgument("int", "b");
>>>> -                  code.addMethod("add", "float")
>>>> -                      .addArgument("int", "a")
>>>> -                      .addArgument("int", "b");
>>>> -                  fail("Expected DuplicateField exception");
>>>> -          } catch (IllegalArgumentException e) {
>>>> -                  //good
>>>> -          }
>>>> -  }
>>>> +//        public void testDuplicateMethod() {
>>>> +//                SourceCode code = new SourceCode("some.pkg", 
>>>> "SomeClass");
>>>> +//                try {
>>>> +//                        code.addMethod("add", "int")
>>>> +//                            .makePublic()
>>>> +//                            .makeStatic()
>>>> +//                            .addArgument("int", "a")
>>>> +//                            .addArgument("int", "b");
>>>> +//                        code.addMethod("add", "float")
>>>> +//                            .addArgument("int", "a")
>>>> +//                            .addArgument("int", "b");
>>>> +//                        fail("Expected DuplicateField exception");
>>>> +//                } catch (IllegalArgumentException e) {
>>>> +//                        //good
>>>> +//                }
>>>> +//        }
>>>>  }
>>>>
>>>> Modified: labs/fluid/src/test/java/test/common/AbstractSDOTest.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/test/java/test/common/AbstractSDOTest.java?rev=886691&r1=886690&r2=886691&view=diff
>>>> ==============================================================================
>>>> --- labs/fluid/src/test/java/test/common/AbstractSDOTest.java
>>>> (original)
>>>> +++ labs/fluid/src/test/java/test/common/AbstractSDOTest.java Thu Dec 
>>>> 3
>>>> 07:41:56 2009
>>>> @@ -25,16 +25,15 @@
>>>>  import junit.framework.TestCase;
>>>>  
>>>>  import org.apache.openjpa.meta.MetaDataFactory;
>>>> -import org.apache.openjpa.meta.MetaDataRepository;
>>>>  import org.apache.openjpa.persistence.OpenJPAEntityManager;
>>>>  import org.apache.openjpa.sdo.SDOEntityManagerFactory;
>>>> -import org.apache.openjpa.sdo.SDOMappingRepository;
>>>>  import org.apache.openjpa.sdo.SDOMetaDataFactory;
>>>> +import org.apache.openjpa.sdo.SDOTypeParser;
>>>>  
>>>>  import commonj.sdo.Type;
>>>>  
>>>>  /**
>>>> - * Abstract Test case sets up JPA persitence unt and SDO metadata from
>>>> XML
>>>> + * Abstract Test case sets up JPA persistence unit and SDO meta data
>>>> from XML
>>>>   * schema.
>>>>   * 
>>>>   * @author Pinaki Poddar
>>>> @@ -42,7 +41,7 @@
>>>>   */
>>>>  public abstract class AbstractSDOTest extends TestCase {
>>>>    protected static SDOEntityManagerFactory emf;
>>>> -  protected static SDOMappingRepository repos;
>>>> +  protected static SDOMetaDataFactory repos;
>>>>    
>>>>    /**
>>>>     * Obtain a EntityManagerFactory and initialize SDO Types.
>>>> @@ -54,26 +53,24 @@
>>>>                    assertNotNull(tmp);
>>>>                    assertTrue(tmp instanceof SDOEntityManagerFactory);
>>>>                    emf = (SDOEntityManagerFactory)tmp;
>>>> +                  emf.createEntityManager();
>>>>            }
>>>>    }
>>>>    
>>>> -  SDOMappingRepository getRepos() {
>>>> +  SDOMetaDataFactory getRepos() {
>>>>            if (repos == null) {
>>>>                    MetaDataFactory mdf = emf.getConfiguration()
>>>>                    .getMetaDataRepositoryInstance().getMetaDataFactory();
>>>>                    assertTrue(mdf instanceof SDOMetaDataFactory);
>>>> -                  repos = 
>>>> ((SDOMetaDataFactory)mdf).getSDOMappingRepository();
>>>> +                  repos = (SDOMetaDataFactory)mdf;
>>>>            }
>>>>            return repos;
>>>>    }
>>>>  
>>>>    
>>>> -  /**
>>>> -   * Gets the type of given name.
>>>> -   */
>>>> -  protected Type getType(String name) {
>>>> -          return getRepos().getType(name);
>>>> -  }
>>>> +    protected Type getSDOType(String name) {
>>>> +        return SDOTypeParser.findType(name);
>>>> +    }
>>>>    
>>>>    /**
>>>>     * Count number of persistent instances of the given alias.
>>>> @@ -88,6 +85,6 @@
>>>>     * Get the name of the persistence unit to be used by this receiver.
>>>>     */
>>>>    protected String getPersistenceUnitName() {
>>>> -          return System.getProperty("persistence.unit", "test");
>>>> +          return System.getProperty("persistence.unit", "sdo");
>>>>    }
>>>>  }
>>>>
>>>> Modified: labs/fluid/src/test/resources/META-INF/persistence.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/labs/fluid/src/test/resources/META-INF/persistence.xml?rev=886691&r1=886690&r2=886691&view=diff
>>>> ==============================================================================
>>>> --- labs/fluid/src/test/resources/META-INF/persistence.xml (original)
>>>> +++ labs/fluid/src/test/resources/META-INF/persistence.xml Thu Dec  3
>>>> 07:41:56 2009
>>>> @@ -1,19 +1,29 @@
>>>>  <?xml version="1.0" encoding="UTF-8"?>
>>>>  <persistence xmlns="http://java.sun.com/xml/ns/persistence";
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; version="1.0"
>>>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>>> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd";>
>>>> -   <persistence-unit name="test">
>>>>  
>>>> +   <persistence-unit name="sdo">
>>>> +                  <description>
>>>> +                     Persistence unit for testing Fluid.
>>>> +                     The configuration properties are essentially same as 
>>>> any other
>>>> JPA application except
>>>> +                          i) openjpa.EntityManagerFactory must be set to 
>>>> "sdo" 
>>>> +                     and ii) openjpa.MetaDataFactory must be set as shown 
>>>> with XML
>>>> schema definitions.
>>>> +                     
>>>> +                     Also set openjpa.DynamicEnhancementAgent to "false" 
>>>> because
>>>> Fluid generates the 
>>>> +                     enhanced bytecode for SDO Types dynamically.
>>>> +                  </description>
>>>>            <properties>
>>>> -                  <property name="openjpa.EntityManagerFactory" 
>>>> value="sdo"/>
>>>> -                  <property name="openjpa.MetaDataFactory"
>>>> value="sdo(Resources=META-INF/person.xsd)"/>
>>>> +                  <property name="openjpa.EntityManagerFactory"    
>>>> value="sdo"/>
>>>> +                  <property name="openjpa.MetaDataFactory"        
>>>> value="sdo(Resources=META-INF/person.xsd;META-INF/po.xsd)"/>
>>>> +                          <property 
>>>> name="openjpa.DynamicEnhancementAgent" value="false"/>
>>>> +                  
>>>>                    <property name="openjpa.ConnectionDriverName"
>>>> value="com.mysql.jdbc.Driver"/>
>>>> -                  <property name="openjpa.ConnectionURL"
>>>> value="jdbc:mysql://localhost/SDO2"/>
>>>> -                  <property name="openjpa.ConnectionUserName" 
>>>> value="root"/>
>>>> -                  <property name="openjpa.ConnectionPassword" 
>>>> value="hello"/>
>>>> +                  <property name="openjpa.ConnectionURL"       
>>>> value="jdbc:mysql://localhost/fluid"/>
>>>> +                  <property name="openjpa.ConnectionUserName"   
>>>> value="root"/>
>>>> +                  <property name="openjpa.ConnectionPassword"   value=""/>
>>>> +                  
>>>>                    <property name="openjpa.jdbc.SynchronizeMappings"
>>>> value="buildSchema"/>
>>>> -                          <property name="openjpa.QueryCompilationCache" 
>>>> value="false"/>
>>>> -                          <property name="openjpa.Log" 
>>>> value="DefaultLevel=TRACE,
>>>> SQL=TRACE,
>>>> Query=TRACE"/>
>>>> -                          <property name="openjpa.BrokerImpl" 
>>>> value="non-finalizing"/>
>>>> -                          
>>>> +                          <property name="openjpa.QueryCompilationCache"  
>>>>  
>>>> value="false"/>
>>>> +                          <property name="openjpa.Log"                    
>>>>  
>>>> value="DefaultLevel=WARN, SQL=TRACE, Query=TRACE"/>
>>>>            </properties>
>>>>     </persistence-unit>
>>>>  </persistence>
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>>
>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Re%3A-svn-commit%3A-r886691--3-3----in--labs-fluid%3A-example--example-domain--src-main-java-org-apache-openjpa-sdo--src-main-java-org-apache-openjpa-sdo-mapping--src-main-java-serp--src-main-java-serp-bytecode--src-main-resources-org-apache-openjpa-sdo--src-tes...-tp26682324p26717991.html
Sent from the Apache Labs mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to