Package org.jpox.metadata

Examples of org.jpox.metadata.AbstractClassMetaData


            // This could be the owner table, element table, key table, value table etc
            DatastoreClass destinationTable = storeMgr.getDatastoreClass(javaType.getName(), clr);
            if (destinationTable == null)
            {
                // Maybe the owner hasn't got its own table (e.g "subclass-table" inheritance strategy)
                AbstractClassMetaData ownerCmd = storeMgr.getOMFContext().getMetaDataManager().getMetaDataForClass(javaType, clr);
                AbstractClassMetaData[] ownerCmds = storeMgr.getClassesManagingTableForClass(ownerCmd, clr);
                if (ownerCmds == null || ownerCmds.length == 0)
                {
                    throw new JPOXUserException(LOCALISER.msg("057023", javaType.getName())).setFatal();
                }
View Full Code Here


        }
        subqueryCandidateExpr = candExpr;

        ClassLoaderResolver clr = query.getObjectManager().getClassLoaderResolver();
        MetaDataManager mmgr = query.getObjectManager().getMetaDataManager();
        AbstractClassMetaData cmd = mmgr.getMetaDataForClass(cls, clr);
        for (int i=1;i<tokens.length;i++)
        {
            AbstractMemberMetaData mmd = cmd.getMetaDataForMember(tokens[i]);
            int relationType = mmd.getRelationType(clr);

            if (relationType == Relation.ONE_TO_ONE_BI ||
                relationType == Relation.ONE_TO_ONE_UNI ||
                relationType == Relation.MANY_TO_ONE_BI)
View Full Code Here

     */
    public FetchRequest(DatastoreClass classTable, AbstractMemberMetaData[] fieldMetaData, Class cls,
        ClassLoaderResolver clr)
    {
        super(classTable);
        AbstractClassMetaData cmd = classTable.getStoreManager().getOMFContext().getMetaDataManager().getMetaDataForClass(cls, clr);

        // Work out the real candidate table.
        // Instead of just taking the most derived table as the candidate we find the table closest to
        // the root table necessary to retrieve the requested fields
        boolean found = false;
        DatastoreClass candidateTable = classTable;
        while (candidateTable != null)
        {
            for (int i=0;i<fieldMetaData.length;i++)
            {
                JavaTypeMapping m = candidateTable.getFieldMappingInDatastoreClass(fieldMetaData[i]);
                if (m != null)
                {
                    found = true;
                    break;
                }
            }
            if (found)
            {
                break;
            }
            candidateTable = candidateTable.getSuperDatastoreClass();
        }
        if (candidateTable == null)
        {
            candidateTable = classTable;
        }
        this.table = candidateTable;
        this.key = ((AbstractClassTable)table).getPrimaryKey();

        mappingStatementIndex = new MappingStatementIndex();
        fetchStatement = new RDBMSFetchStatement(table);

        // Extract the fields to be retrieved
        consumer = new FetchMappingConsumer(fetchStatement, cmd, clr);

        // Include any datastore id mapping for the candidate table
        table.provideDatastoreIdMappings(consumer);

        // Add fields/discriminator in this table and any supertables
        DatastoreClass currentTable = table;
        while (currentTable != null)
        {
            // Add the required fields (and any discriminator) present in this table
            currentTable.provideMappingsForFields(consumer, fieldMetaData, true);
            currentTable.provideDiscriminatorMappings(consumer);
            VersionMetaData currentVermd = currentTable.getVersionMetaData();
            if (currentVermd != null)
            {
                if (currentVermd.getFieldName() == null)
                {
                    // Surrogate version is stored in this table, so fetch it
                    currentTable.provideVersionMappings(consumer);
                    fetchingSurrogateVersion = true;
                    versionMetaData = currentVermd;
                }
                else
                {
                    // Version field
                    versionFieldName = currentVermd.getFieldName();
                    versionMetaData = currentVermd;
                    AbstractMemberMetaData[] mmds = new AbstractMemberMetaData[1];
                    mmds[0] = cmd.getMetaDataForMember(currentVermd.getFieldName());
                    currentTable.provideMappingsForFields(consumer, mmds, true);
                }
            }

            currentTable = currentTable.getSuperDatastoreClass();
        }

        callbacks = (MappingCallbacks[]) consumer.getMappingCallbacks().toArray(
            new MappingCallbacks[consumer.getMappingCallbacks().size()]);

        // Generate string of fields being fetched
        StringBuffer str = new StringBuffer();
        int[] fieldNumbersToFetch = consumer.getNumbersOfFieldsToBeFetched();
        numberOfFieldsToFetch = (fieldNumbersToFetch != null ? fieldNumbersToFetch.length : 0);
        if (fieldNumbersToFetch != null && fieldNumbersToFetch.length > 0)
        {
            for (int i=0;i<fieldNumbersToFetch.length;i++)
            {
                AbstractMemberMetaData fmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumbersToFetch[i]);
                if (i > 0)
                {
                    str.append(",");
                }
                str.append(fmd.getName());
View Full Code Here

                                        mappingStatementIndex.getVersion().getExpressionIndex());
                                }
                                else if (versionFieldName != null)
                                {
                                    // Version field - already populated in the field in the object
                                    AbstractClassMetaData cmd = (AbstractClassMetaData)versionMetaData.getParent();
                                    datastoreVersion = sm.provideField(cmd.getAbsolutePositionOfMember(versionFieldName));
                                }
                                sm.setVersion(datastoreVersion);
                            }
                        }
                        finally
View Full Code Here

                        // Go through all possible subclasses to find one with this value
                        Iterator iterator = om.getStoreManager().getSubClassesForClass(table.getType(), true, om.getClassLoaderResolver()).iterator();
                        while (iterator.hasNext())
                        {
                            className = (String)iterator.next();
                            AbstractClassMetaData classCmd = om.getMetaDataManager().getMetaDataForClass(className, om.getClassLoaderResolver());
                            if (discriminatorValue.equals(classCmd.getInheritanceMetaData().getDiscriminatorMetaData().getValue()))
                            {
                                rowClassName = className;
                                break;
                            }
                        }
View Full Code Here

                                        discrimValues[valNo++] = fmd.getAbstractClassMetaData().getInheritanceMetaData().getDiscriminatorMetaData().getValue();
                                        Iterator subclassesIter = subclasses.iterator();
                                        while (subclassesIter.hasNext())
                                        {
                                            String subclass = (String)subclassesIter.next();
                                            AbstractClassMetaData subclassCmd = mmgr.getMetaDataForClass(subclass, clr);
                                            discrimValues[valNo++] = subclassCmd.getInheritanceMetaData().getDiscriminatorMetaData().getValue();
                                        }
                                    }
                                    else
                                    {
                                        discrimValues = new Object[1];
View Full Code Here

            ClassLoaderResolver clr = om.getClassLoaderResolver();
            MappedStoreManager storeMgr = (MappedStoreManager)om.getStoreManager();
            DatastoreAdapter dba = storeMgr.getDatastoreAdapter();

            // Create an index listing for ALL (fetchable) fields in the result class.
            final AbstractClassMetaData candidateCmd = om.getMetaDataManager().getMetaDataForClass(candidateClass, clr);
            int fieldCount = candidateCmd.getNoOfManagedMembers() + candidateCmd.getNoOfInheritedManagedMembers();
            Map columnFieldNumberMap = new HashMap(); // Map of field numbers keyed by the column name
            statementExpressionIndex = new StatementExpressionIndex[fieldCount];
            DatastoreClass tbl = storeMgr.getDatastoreClass(candidateClass.getName(), clr);
            for (int fieldNumber = 0; fieldNumber < fieldCount; ++fieldNumber)
            {
                statementExpressionIndex[fieldNumber] = new StatementExpressionIndex();
                AbstractMemberMetaData fmd = candidateCmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber);
                String fieldName = fmd.getName();
                Class fieldType = fmd.getType();

                if (fmd.getPersistenceModifier() != FieldPersistenceModifier.NONE)
                {
                    JavaTypeMapping m = null;
                    if (tbl != null)
                    {
                        // Get the field mapping from the candidate table
                        m = tbl.getFieldMapping(fmd);
                    }
                    else
                    {
                        // Fall back to generating a mapping for this type - does this ever happen?
                        m = dba.getMapping(fieldType, storeMgr, clr);
                    }
                    if (m.includeInFetchStatement())
                    {
                        // Set mapping for this field since it can potentially be returned from a fetch
                        statementExpressionIndex[fieldNumber].setMapping(m);

                        String columnName = null;
                        if (fmd.getColumnMetaData() != null && fmd.getColumnMetaData().length > 0)
                        {
                            for (int colNum = 0;colNum<fmd.getColumnMetaData().length;colNum++)
                            {
                                columnName = fmd.getColumnMetaData()[colNum].getName();
                                columnFieldNumberMap.put(columnName, new Integer(fieldNumber));
                            }
                        }
                        else
                        {
                            columnName = storeMgr.getIdentifierFactory().newDatastoreFieldIdentifier(
                                fieldName, om.getOMFContext().getTypeManager().isDefaultEmbeddedType(fieldType),
                                FieldRole.ROLE_NONE).getIdentifier();
                            columnFieldNumberMap.put(columnName, new Integer(fieldNumber));
                        }
                    }
                    else
                    {
                        // Dont put anything in this position (field has no col in the result set)
                    }
                }
                else
                {
                    // Dont put anything in this position (field has no col in the result set)
                }
            }
            if (columnFieldNumberMap.size() == 0)
            {
                // None of the fields in the class have columns in the datastore table!
                // TODO Localise the message
                throw new JPOXUserException("SQL query class has no persistent fields in the SELECT : " +
                    candidateClass.getName()).setFatal();
            }

            // Generate id column field information for later checking the id is present
            DatastoreClass table = storeMgr.getDatastoreClass(candidateClass.getName(), clr);
            PersistenceCapableMapping idMapping = (PersistenceCapableMapping)table.getIDMapping();
            String[] idColNames = new String[idMapping.getNumberOfDatastoreFields()];
            boolean[] idColMissing = new boolean[idMapping.getNumberOfDatastoreFields()];
            for (int i=0;i<idMapping.getNumberOfDatastoreFields();i++)
            {
                DatastoreMapping m = idMapping.getDataStoreMapping(i);
                idColNames[i] = m.getDatastoreField().getIdentifier().toString();
                idColMissing[i] = true;
            }

            // Generate discriminator/version information for later checking they are present
            String discriminatorColName = table.getDiscriminatorMapping(false) != null ?
                    table.getDiscriminatorMapping(false).getDataStoreMapping(0).getDatastoreField().getIdentifier().toString() : null;
            String versionColName = table.getVersionMapping(false) != null ?
                    table.getVersionMapping(false).getDataStoreMapping(0).getDatastoreField().getIdentifier().toString() : null;
            boolean discrimMissing = (discriminatorColName != null);
            boolean versionMissing = true;
            if (versionColName == null)
            {
                versionMissing = false;
            }

            // Go through the fields of the ResultSet and map to the required fields in the candidate
            // Note that we check the existence of the columns again here even though they were checked at compilation
            // TODO This could be removed from here since its now done at compile time
            ResultSetMetaData rsmd = rs.getMetaData();
            HashSet remainingColumnNames = new HashSet(columnFieldNumberMap.size());
            int colCount = rsmd.getColumnCount();
            int[] datastoreIndex = null;
            int[] versionIndex = null;

            int[] matchedFieldNumbers = new int[colCount];
            int fieldNumberPosition = 0;
            for (int colNum=1; colNum<=colCount; ++colNum)
            {
                String colName = rsmd.getColumnName(colNum);
                int fieldNumber = -1;
                Integer fieldNum = (Integer)columnFieldNumberMap.get(colName);
                if (fieldNum != null)
                {
                    fieldNumber = fieldNum.intValue();
                }
                if (fieldNumber >= 0)
                {
                    int[] exprIndices = null;
                    if (statementExpressionIndex[fieldNumber].getExpressionIndex() != null)
                    {
                        exprIndices = new int[statementExpressionIndex[fieldNumber].getExpressionIndex().length+1];
                        for (int i=0;i<statementExpressionIndex[fieldNumber].getExpressionIndex().length;i++)
                        {
                            exprIndices[i] = statementExpressionIndex[fieldNumber].getExpressionIndex()[i];
                        }
                        exprIndices[exprIndices.length-1] = colNum;
                    }
                    else
                    {
                        exprIndices = new int[] {colNum};
                    }
                    statementExpressionIndex[fieldNumber].setExpressionIndex(exprIndices);
                    remainingColumnNames.remove(colName);
                    matchedFieldNumbers[fieldNumberPosition++] = fieldNumber;
                }

                if (versionColName != null && colName.equals(versionColName))
                {
                    // Identify the location of the version column
                    versionIndex = new int[1];
                    versionIndex[0] = colNum;
                    versionMissing = false;
                }

                if (candidateCmd.getIdentityType() == IdentityType.DATASTORE)
                {
                    // Check for existence of id column, allowing for any RDBMS using quoted identifiers
                    if (columnNamesAreTheSame(dba, idColNames[0], colName))
                    {
                        datastoreIndex = new int[1];
                        datastoreIndex[0] = colNum;
                        idColMissing[0] = false;
                    }
                }
                else if (candidateCmd.getIdentityType() == IdentityType.APPLICATION)
                {
                    for (int j=0;j<idColNames.length;j++)
                    {
                        // Check for existence of id column, allowing for any RDBMS using quoted identifiers
                        if (columnNamesAreTheSame(dba, idColNames[j], colName))
View Full Code Here

     **/
    public InsertRequest(DatastoreClass table, Class cls, ClassLoaderResolver clr)
    {
        super(table);

        AbstractClassMetaData cmd = table.getStoreManager().getOMFContext().getMetaDataManager().getMetaDataForClass(cls, clr);

        InsertMappingConsumer consumer = new InsertMappingConsumer(clr, cmd, IDPARAMNUMBER);
        table.provideDatastoreIdMappings(consumer);
        table.provideNonPrimaryKeyMappings(consumer);
        table.providePrimaryKeyMappings(consumer);
        table.provideVersionMappings(consumer);
        table.provideDiscriminatorMappings(consumer);
        table.provideExternalMappings(consumer, MappingConsumer.MAPPING_TYPE_EXTERNAL_FK);
        table.provideExternalMappings(consumer, MappingConsumer.MAPPING_TYPE_EXTERNAL_FK_DISCRIM);
        table.provideExternalMappings(consumer, MappingConsumer.MAPPING_TYPE_EXTERNAL_INDEX);
        table.provideUnmappedDatastoreFields(consumer);
        callbacks = (MappingCallbacks[])consumer.getMappingCallbacks().toArray(new MappingCallbacks[consumer.getMappingCallbacks().size()]);

        statementExpressionIndex = consumer.getStatementExpressionIndex();
        versionStatementExpressionIndex = consumer.getVersionStatementExpressionIndex();
        discriminatorStatementExpressionIndex = consumer.getDiscriminatorStatementExpressionIndex();
        externalFKStatementExpressionIndex = consumer.getExternalFKStatementExpressionIndex();
        externalFKDiscrimStatementExpressionIndex = consumer.getExternalFKDiscrimStatementExpressionIndex();
        externalOrderStatementExpressionIndex = consumer.getExternalOrderStatementExpressionIndex();
        pkFieldNumbers = consumer.getPrimaryKeyFieldNumbers();
        if (table.getIdentityType() == IdentityType.APPLICATION && pkFieldNumbers.length < 1 && !hasAutoIncrementColumn)
        {
          throw new JPOXException(LOCALISER.msg("052200", cmd.getFullClassName())).setFatal();
        }
        insertFieldNumbers = consumer.getInsertFieldNumbers();
        retrievedStatementExpressionIndex = consumer.getReachableStatementIndex();
        reachableFieldNumbers = consumer.getReachableFieldNumbers();
        relationFieldNumbers = consumer.getRelationFieldNumbers();
View Full Code Here

                    FieldRole.ROLE_COLLECTION_ELEMENT, clr);
                elementInfo = new ElementInfo[implNames.length];
                for (int i=0;i<implNames.length;i++)
                {
                    DatastoreClass table = storeMgr.getDatastoreClass(implNames[i], clr);
                    AbstractClassMetaData cmd = storeMgr.getOMFContext().getMetaDataManager().getMetaDataForClass(implNames[i], clr);
                    elementInfo[i] = new ElementInfo(cmd, table);
                }
            }
            else
            {
View Full Code Here

                        createGetField(f.getName(), fieldMethod.getType(), f.isProperty());
                        //support for identifying relationships
                        //if the class has metadata, it is PersistenceCapable
                        //add JDOHelper.getObjectId(fieldXXXX);
                        MetaDataManager mgr = cmd.getMetaDataManager();
                        AbstractClassMetaData cmd = mgr.getMetaDataForClass(f.getType(),
                            enhancer.getClassLoaderResolver());
                        if (cmd != null)
                        {
                            il.append(
                                factory.createInvoke(
                                    ClassEnhancer.CN_JDOHelper,
                                    "getObjectId",
                                    Type.OBJECT,
                                    new Type[] { Type.OBJECT },
                                    Constants.INVOKESTATIC));
                       
                            ObjectType OT_objectidclass = new ObjectType(cmd.getObjectidClass());
                            il.append(factory.createCast(Type.OBJECT, OT_objectidclass));
                            createPutField(
                                objectIdClass,
                                f.getName(),
                                OT_objectidclass,
View Full Code Here

TOP

Related Classes of org.jpox.metadata.AbstractClassMetaData

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.