Package org.apache.ojb.broker.metadata.fieldaccess

Examples of org.apache.ojb.broker.metadata.fieldaccess.PersistentField


        Object freshInstance = getDBObject(oid);

        // update all primitive typed attributes
        FieldDescriptor[] fields = cld.getFieldDescriptions();
        FieldDescriptor fmd;
        PersistentField fld;
        for (int i = 0; i < fields.length; i++)
        {
            fmd = fields[i];
            fld = fmd.getPersistentField();
            fld.set(cachedInstance, fld.get(freshInstance));
        }
    }
View Full Code Here


     * The conversion of the keys of the mToNImplementor should solve this problem.
     */
    protected void associateBatched(Collection owners, Collection children, Collection mToNImplementors)
    {
        CollectionDescriptor cds = getCollectionDescriptor();
        PersistentField field = cds.getPersistentField();
        PersistenceBroker pb = getBroker();
        Class ownerTopLevelClass = pb.getTopLevelClass(getOwnerClassDescriptor().getClassOfObject());
        Class childTopLevelClass = pb.getTopLevelClass(getItemClassDescriptor().getClassOfObject());
        Class collectionClass = cds.getCollectionClass(); // this collection type will be used:
        HashMap childMap = new HashMap();
        HashMap ownerIdsToLists = new HashMap();
        FieldConversion[] ownerFc = getPkFieldConversion(getOwnerClassDescriptor());
        FieldConversion[] childFc = getPkFieldConversion(getItemClassDescriptor())

        // initialize the owner list map
        for (Iterator it = owners.iterator(); it.hasNext();)
        {
            Object owner = it.next();
            ownerIdsToLists.put(new Identity(owner, pb), new ArrayList());
        }

        // build the children map
        for (Iterator it = children.iterator(); it.hasNext();)
        {
            Object child = it.next();
            childMap.put(new Identity(child, pb), child);
        }

        int ownerPkLen = getOwnerClassDescriptor().getPkFields().length;
        int childPkLen = getItemClassDescriptor().getPkFields().length;
        Object[] ownerPk = new Object[ownerPkLen];
        Object[] childPk = new Object[childPkLen];

        // build list of children based on m:n implementors
        for (Iterator it = mToNImplementors.iterator(); it.hasNext();)
        {
            Object[] mToN = (Object[]) it.next();
            System.arraycopy(mToN, 0, ownerPk, 0, ownerPkLen);
            System.arraycopy(mToN, ownerPkLen, childPk, 0, childPkLen);

            // BRJ: apply the FieldConversions, OJB296
            ownerPk = convert(ownerFc, ownerPk);
            childPk = convert(childFc, childPk);

            Identity ownerId = new Identity(null, ownerTopLevelClass, ownerPk);
            Identity childId = new Identity(null, childTopLevelClass, childPk);

            // Identities may not be equal due to type-mismatch
            Collection list = (Collection) ownerIdsToLists.get(ownerId);
            Object child = childMap.get(childId);
            list.add(child);
        }

        // connect children list to owners
        for (Iterator it = owners.iterator(); it.hasNext();)
        {
            Object result;
            Object owner = it.next();
            Identity ownerId = new Identity(owner, pb);

            List list = (List) ownerIdsToLists.get(ownerId);

            if ((collectionClass == null) && field.getType().isArray())
            {
                int length = list.size();
                Class itemtype = field.getType().getComponentType();

                result = Array.newInstance(itemtype, length);

                for (int j = 0; j < length; j++)
                {
                    Array.set(result, j, list.get(j));
                }
            }
            else
            {
                ManageableCollection col = createCollection(collectionClass);

                for (Iterator it2 = list.iterator(); it2.hasNext();)
                {
                    col.ojbAdd(it2.next());
                }
                result = col;
            }

            Object value = field.get(owner);
            if ((value instanceof CollectionProxyDefaultImpl) && (result instanceof Collection))
            {
                ((CollectionProxyDefaultImpl) value).setData((Collection) result);
            }
            else
            {
                field.set(owner, result);
            }
        }

    }
View Full Code Here

    private void setFieldValue(Object obj, FieldDescriptor field, Long identifier) throws SequenceManagerException
    {
        Object result = field.getJdbcType().sequenceKeyConversion(identifier);
        result = field.getFieldConversion().sqlToJava(result);
        PersistentField pf = field.getPersistentField();
        pf.set(obj, result);
    }
View Full Code Here

        Object owner;
        Object relatedObject;
        Object fkValues[];
        Identity id;
        PersistenceBroker pb = getBroker();
        PersistentField field = ord.getPersistentField();
        Class topLevelClass = pb.getTopLevelClass(ord.getItemClass());
        HashMap childrenMap = new HashMap(children.size());


        for (Iterator it = children.iterator(); it.hasNext(); )
        {
            relatedObject = it.next();
            childrenMap.put(new Identity(relatedObject, pb), relatedObject);
        }

        for (Iterator it = owners.iterator(); it.hasNext(); )
        {
            owner = it.next();
            fkValues = ord.getForeignKeyValues(owner,cld);
            if (isNull(fkValues))
            {
                field.set(owner, null);
                continue;
            }
            id = new Identity(null, topLevelClass, fkValues);
            relatedObject = childrenMap.get(id);
            field.set(owner, relatedObject);
        }
    }
View Full Code Here

     * @return the autoincremented value set on given object
     * @throws PersistenceBrokerException if there is an erros accessing obj field values
     */
    private Object setAutoIncrementValue(FieldDescriptor fd, Object obj)
    {
        PersistentField f = fd.getPersistentField();
        try
        {
            // lookup SeqMan for a value matching db column an
            Object result = m_broker.serviceSequenceManager().getUniqueValue(fd);
            // reflect autoincrement value back into object
            f.set(obj, result);
            return result;
        }
        catch(MetadataException e)
        {
            throw new PersistenceBrokerException(
                    "Error while trying to autoincrement field " + f.getDeclaringClass() + "#" + f.getName(),
                    e);
        }
        catch(SequenceManagerException e)
        {
            throw new PersistenceBrokerException("Could not get key value", e);
View Full Code Here

        FieldDescriptor[] fks = getForeignKeyFieldDescriptors(mif);
        Object[] result = new Object[fks.length];
        for (int i = 0; i < result.length; i++)
        {
            FieldDescriptor fmd = fks[i];
            PersistentField f = fmd.getPersistentField();

            // BRJ: do NOT convert.
            // conversion is done when binding the sql-statement
            //
            // FieldConversion fc = fmd.getFieldConversion();
            // Object val = fc.javaToSql(f.get(obj));

            Object val = f.get(obj);
            result[i] = val;
        }
        return result;
    }
View Full Code Here

        for (int i = 0; i < fields.length; i++)
        {
            FieldDescriptor fmd = fields[i];
            if (fmd.isUpdateLock())
            {
                PersistentField f = fmd.getPersistentField();
                Object cv = null;
                cv = f.get(obj);

                // int
                if ((f.getType() == int.class) || (f.getType() == Integer.class))
                {
                    int newCv = 0;
                    if (cv != null)
                    {
                        newCv = ((Number) cv).intValue();
                    }
                    newCv++;
                    f.set(obj, new Integer(newCv));
                }
                // long
                else if ((f.getType() == long.class) || (f.getType() == Long.class))
                {
                    long newCv = 0;
                    if (cv != null)
                    {
                        newCv = ((Number) cv).longValue();
                    }
                    newCv++;
                    f.set(obj, new Long(newCv));
                }
                // Timestamp
                else if (f.getType() == Timestamp.class)
                {
                    long newCv = System.currentTimeMillis();
                    f.set(obj, new Timestamp(newCv));
                }
            }
        }
    }
View Full Code Here

    private void runFieldTestsFor(Class targetClass, boolean supportJavaBeanNames) throws Exception
    {
        ((OjbConfiguration) OjbConfigurator.getInstance().getConfigurationFor(null)).setPersistentFieldClass(targetClass);

        PersistentField pfNM_Name = newInstance(targetClass, NestedMain.class, NESTED_MAIN_NAME);
        PersistentField pfNDD_RD = newInstance(targetClass, NestedMain.class, NESTED_DETAIL_DETAIL_REAL_DETAIL);
        PersistentField pfNDD_RDD = newInstance(targetClass, NestedMain.class, NESTED_DETAIL_DETAIL_REAL_DESCRIPTION);
        PersistentField pfND_MJB = null;
        PersistentField pfNE_Name = null;
        if (supportJavaBeanNames)
        {
            pfND_MJB = newInstance(targetClass, NestedMain.class, NESTED_DETAIL_MORE_JAVA_BEAN);
            pfNE_Name = newInstance(targetClass, NestedMain.class, NESTED_ENTRY_NAME);
        }

        // test getter
        NestedMain nm = createNestedObject();
        Object result = pfNM_Name.get(nm);
        assertEquals(NESTED_MAIN_NAME_VALUE, result);
        result = pfNDD_RD.get(nm);
        assertEquals(NESTED_DETAIL_DETAIL_REAL_DETAIL_VALUE, result);
        result = pfNDD_RDD.get(nm);
        assertEquals(NESTED_DETAIL_DETAIL_REAL_DESCRIPTION_VALUE, result);

        if (supportJavaBeanNames)
        {
            result = pfND_MJB.get(nm);
            assertEquals(NESTED_DETAIL_MORE_JAVA_BEAN_VALUE, result);
            result = pfNE_Name.get(nm);
            assertEquals(NESTED_ENTRY_NAME_VALUE, result);
        }

        NestedMain newNM = new NestedMain();
        // test setter
        pfNM_Name.set(newNM, NESTED_MAIN_NAME_VALUE);
        pfNDD_RD.set(newNM, NESTED_DETAIL_DETAIL_REAL_DETAIL_VALUE);
        result = pfNDD_RDD.get(newNM);
        assertEquals(NESTED_DETAIL_DETAIL_REAL_DESCRIPTION_VALUE, result);

        result = pfNM_Name.get(newNM);
        assertEquals(NESTED_MAIN_NAME_VALUE, result);
        result = pfNDD_RD.get(newNM);
        assertEquals(NESTED_DETAIL_DETAIL_REAL_DETAIL_VALUE, result);

        if (supportJavaBeanNames)
        {
            pfND_MJB.set(newNM, NESTED_DETAIL_MORE_JAVA_BEAN_VALUE);
            pfNE_Name.set(newNM, NESTED_ENTRY_NAME_VALUE);
            result = pfND_MJB.get(newNM);
            assertEquals(NESTED_DETAIL_MORE_JAVA_BEAN_VALUE, result);
            result = pfNE_Name.get(newNM);
            assertEquals(NESTED_ENTRY_NAME_VALUE, result);
        }

        // serialize fields and test again
        pfNM_Name = (PersistentField) SerializationUtils.deserialize(SerializationUtils.serialize(pfNM_Name));
        pfNDD_RD = (PersistentField) SerializationUtils.deserialize(SerializationUtils.serialize(pfNDD_RD));
        pfNDD_RDD = (PersistentField) SerializationUtils.deserialize(SerializationUtils.serialize(pfNDD_RDD));
        if (supportJavaBeanNames)
        {
            pfND_MJB = (PersistentField) SerializationUtils.deserialize(SerializationUtils.serialize(pfND_MJB));
            pfNE_Name = (PersistentField) SerializationUtils.deserialize(SerializationUtils.serialize(pfNE_Name));
        }

        // test getter
        nm = createNestedObject();
        result = pfNM_Name.get(nm);
        assertEquals(NESTED_MAIN_NAME_VALUE, result);
        result = pfNDD_RD.get(nm);
        assertEquals(NESTED_DETAIL_DETAIL_REAL_DETAIL_VALUE, result);
        result = pfNDD_RDD.get(nm);
        assertEquals(NESTED_DETAIL_DETAIL_REAL_DESCRIPTION_VALUE, result);

        if (supportJavaBeanNames)
        {
            result = pfND_MJB.get(nm);
            assertEquals(NESTED_DETAIL_MORE_JAVA_BEAN_VALUE, result);
            result = pfNE_Name.get(nm);
            assertEquals(NESTED_ENTRY_NAME_VALUE, result);
        }

        newNM = new NestedMain();
        // test setter
        pfNM_Name.set(newNM, NESTED_MAIN_NAME_VALUE);
        pfNDD_RD.set(newNM, NESTED_DETAIL_DETAIL_REAL_DETAIL_VALUE);
        result = pfNDD_RDD.get(newNM);
        assertEquals(NESTED_DETAIL_DETAIL_REAL_DESCRIPTION_VALUE, result);

        result = pfNM_Name.get(newNM);
        assertEquals(NESTED_MAIN_NAME_VALUE, result);
        result = pfNDD_RD.get(newNM);
        assertEquals(NESTED_DETAIL_DETAIL_REAL_DETAIL_VALUE, result);

        if (supportJavaBeanNames)
        {
            pfND_MJB.set(newNM, NESTED_DETAIL_MORE_JAVA_BEAN_VALUE);
            pfNE_Name.set(newNM, NESTED_ENTRY_NAME_VALUE);
            result = pfND_MJB.get(newNM);
            assertEquals(NESTED_DETAIL_MORE_JAVA_BEAN_VALUE, result);
            result = pfNE_Name.get(newNM);
            assertEquals(NESTED_ENTRY_NAME_VALUE, result);
        }
    }
View Full Code Here

        checkBoundaryConditions(targetClass, true);
    }

    private void checkBoundaryConditions(Class targetClass, boolean withNested) throws Exception
    {
        PersistentField pf = newInstance(targetClass, NestedMain.class, NESTED_MAIN_NAME);
        pf.get(null);
        pf.set(null, null);
        pf = newInstance(targetClass, NestedMain.class, NESTED_MAIN_NAME);
        pf.get(null);
        pf.set(null, "kkddk");
        if(withNested)
        {
            PersistentField pf_2 = newInstance(targetClass, NestedMain.class, NESTED_DETAIL_DETAIL_REAL_DETAIL);
            pf_2.get(null);
            pf_2.set(null, null);
            pf_2 = newInstance(targetClass, NestedMain.class, NESTED_DETAIL_DETAIL_REAL_DETAIL);
            pf_2.get(null);
            pf_2.set(null, "gkfgfg");
        }
    }
View Full Code Here

        DynaClass dynaClass = createDynaClass();
        DynaBean bean = dynaClass.newInstance();
        bean.set("name", "testDynaBean");

        PersistentField pf = new PersistentFieldDynaBeanAccessImpl(String.class, "name");
        String result = (String) pf.get(bean);
        assertNotNull(result);
        assertEquals("testDynaBean", result);

        pf.set(bean, "XXXX");
        result = (String) pf.get(bean);
        assertNotNull(result);
        assertEquals("XXXX", result);
    }
View Full Code Here

TOP

Related Classes of org.apache.ojb.broker.metadata.fieldaccess.PersistentField

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.