Package org.exolab.castor.mapping.xml

Examples of org.exolab.castor.mapping.xml.ClassMapping


     * @param clsMap The ClassMapping to get the origin for.
     * @return The top-most extends of the given ClassMapping or the ClassMapping itself
     *         if it does not extend any other ClassMapping.
     */
    protected final ClassMapping getOrigin(final ClassMapping clsMap) {
        ClassMapping result = clsMap;

        while (result.getExtends() != null) {
            result = (ClassMapping) result.getExtends();
        }

        return result;
    }
View Full Code Here


        }

        // Create tables.
        Enumeration ec = root.enumerateClassMapping();
        while (ec.hasMoreElements()) {
            ClassMapping cm = (ClassMapping) ec.nextElement();
            Table table = createTable(cm);
            if (table != null) { _schema.addTable(table); }
        }
       
        // Create N:M relation tables.
        Iterator i = _resolveTable.keySet().iterator();
        while (i.hasNext()) {
            ClassMapping cm = (ClassMapping) _resolveTable.get(i.next());
            Table table = createTable(cm);
            if (table != null) { _schema.addTable(table); }
        }
    }
View Full Code Here

                    && (fm.getSql().getManyTable() == null)) {
                // Normal case, using sql name as column name.
                String sqltype = fm.getSql().getType();

                TypeInfo typeInfo = null;
                ClassMapping cmRef = null;
                String[] refIdTypes = null;
                boolean isUseReferenceType = false;

                // Get type info.
                if (sqltype != null) {
View Full Code Here

    private void processExtendedClass(final Table table, final ClassMapping cm)
    throws GeneratorException {
        Object extendClass = cm.getExtends();
        if (extendClass == null) { return; }
       
        ClassMapping extendCm = (ClassMapping) extendClass;
        String[] childIds = _mappingHelper.getClassMappingSqlIdentity(cm, false);
       
        if (childIds.length != 0) {
            // Check consistency.
            String[] childTypes = _mappingHelper.resolveTypeReferenceForIds(cm);
            String[] parentTypes = _mappingHelper.resolveTypeReferenceForIds(extendCm);
           
            if (childTypes.length != parentTypes.length) {
                throw new GeneratorException("Cannot resolve type for class '"
                        + cm.getName() + "' from extend class '"
                        + extendCm.getName() + "'");
            }
            for (int i = 0; i < childTypes.length; i++) {
                if (!childTypes[i].equalsIgnoreCase(parentTypes[i])) {
                    throw new GeneratorException("Cannot resolve type for class '"
                            + cm.getName() + "' from extend class '"
                            + extendCm.getName() + "'");
                }
            }
            return;
        }
       
        boolean isUseFieldIdentity = _mappingHelper.isUseFieldIdentity(extendCm);
        Enumeration extendEf = extendCm.getClassChoice().enumerateFieldMapping();

        // Process key generator.
        String keygenerator = extendCm.getKeyGenerator();
        KeyGenerator keyGen = null;
        if (keygenerator != null) {
            keyGen = _keyGenRegistry.getKeyGenerator(keygenerator.toUpperCase());
        }
        table.setKeyGenerator(keyGen);

        while (extendEf.hasMoreElements()) {
            FieldMapping extendFm = (FieldMapping) extendEf.nextElement();

            // Skip if <sql> tag is not defined.
            if (extendFm.getSql() == null) { continue; }

            boolean isFieldIdentity = extendFm.getIdentity();
            if (!isUseFieldIdentity) {
                isFieldIdentity = _mappingHelper.isIdentity(extendCm, extendFm);
            }
           
            // Checke for many-key, many-table definition.
            if (isFieldIdentity && extendFm.getSql().getManyKeyCount() <= 0) {
                // Column is defiend as normal column in child, but it is id which is
                // inherited from parent.
                if (mergeIfDefInBothClasses(table, cm, extendFm)) { continue; }
               
                String[] sqlnames = extendFm.getSql().getName();
                String sqltype = extendFm.getSql().getType();

                TypeInfo typeInfo = null;
                ClassMapping cmRef = null;
                String[] refIdTypes = null;
                boolean isUseReferenceType = false;
               
                if (sqltype != null) {
                    typeInfo = _typeMapper.getType(sqltype);
View Full Code Here

                Field field = table.getField(j);
                if (fieldNames[i].equals(field.getName())) { fk.addField(field); }
            }
        }

        ClassMapping cm = _mappingHelper.getClassMappingByName(fm.getType());

        if (cm == null) {
            throw new GeneratorException("can not find class " + fm.getType());
        }
       
        String referenceTableName = cm.getMapTo().getTable();
        Table referenceTable = null;
        referenceTable = table.getSchema().getTable(referenceTableName);
        fk.setReferenceTable(referenceTable);
       
        String[] manykeys = fm.getSql().getManyKey();
View Full Code Here

     * @param fm FieldMapping.
     * @param cm ClassMapping.
     */
    private void addResolveField(final FieldMapping fm, final ClassMapping cm) {
        String keyGen = cm.getKeyGenerator();
        ClassMapping resolveCm = null;
       
        // Get table, if not existe, create one.
        if (_resolveTable.containsKey(fm.getSql().getManyTable())) {
            resolveCm = (ClassMapping) _resolveTable.get(fm.getSql().getManyTable());
        } else {
            resolveCm = new ClassMapping();
            resolveCm.setName(fm.getSql().getManyTable());
            resolveCm.setKeyGenerator(keyGen);

            MapTo mapto = new MapTo();
            mapto.setTable(fm.getSql().getManyTable());
            resolveCm.setMapTo(mapto);
            _resolveTable.put(fm.getSql().getManyTable(), resolveCm);
        }

        FieldMapping resolveFm = new FieldMapping();
        resolveFm.setIdentity(true);
        resolveFm.setName(cm.getMapTo().getTable());
        resolveFm.setType(cm.getName());

        ClassChoice cc = resolveCm.getClassChoice();
        if (cc == null) {
            cc = new ClassChoice();
            resolveCm.setClassChoice(cc);
        }
        cc.addFieldMapping(resolveFm);

        Sql sql = new Sql();
        String[] sqlname = fm.getSql().getManyKey();
View Full Code Here

     *         ClassMapping was found.
     */
    public ClassMapping getClassMappingByName(final String name) {
        Enumeration ec = _mapping.getRoot().enumerateClassMapping();
        while (ec.hasMoreElements()) {
            ClassMapping cm = (ClassMapping) ec.nextElement();
            String cmName = cm.getName();
            if ((cmName != null) && cmName.equals(name)) { return cm; }
        }
        return null;
    }
View Full Code Here

     * @return Array of sql types of all identities.
     * @throws GeneratorException If failed to resolve sql type of identities.
     */
    public synchronized String[] resolveTypeReferenceForIds(final String className)
    throws GeneratorException {
        ClassMapping cm = getClassMappingByName(className);
        if (cm != null) { return resolveTypeReferenceForIds(cm); }
        throw new GeneratorException("can not find class " + className);
    }
View Full Code Here

                        if (sqltype != null) {
                            typeinfo = _typeMapper.getType(sqltype);
                        }

                        if (typeinfo == null) {
                            ClassMapping cmRef = getClassMappingByName(fm.getType());
                            // If cmRef is null, the reference class could not be found
                            // so we need to use field type.
                            if (cmRef == null) {                       
                                typeinfo = _typeMapper.getType(fm.getType());
                               
                                if (typeinfo == null) {
                                    throw new TypeNotFoundException(
                                            "Can't resolve type " + fm.getType());
                                }
                                int count = fm.getSql().getNameCount();
                                if (count == 0) { count = fm.getSql().getManyKeyCount(); }
                               
                                for (int l = 0; l < count; l++) {
                                    types.add(fm.getType());
                                    isFoundKey = true;
                                }
                               
                            } else {
                                // Resolve type for reference class.
                                String[] refRefType = resolveTypeReferenceForIds(
                                        fm.getType());
                                for (int l = 0; l < refRefType.length; l++) {
                                    types.add(refRefType[l]);
                                    isFoundKey = true;
                                }
                            }
                        } else {
                            types.add(fm.getSql().getType());
                            isFoundKey = true;
                        }
                    }
                }
            }
        }

        // If there is no identity found, looking in the extend class.
        if (!isFoundKey && (cm.getExtends() != null)) {
           ClassMapping extendClass = (ClassMapping) cm.getExtends();
           String[] refRefType = resolveTypeReferenceForIds(extendClass);
           for (int l = 0; l < refRefType.length; l++) {
               types.add(refRefType[l]);
           }              
        }
View Full Code Here

        _debug = Boolean.getBoolean("org.exolab.castor.debug");
        _engine = lock;
        _persistence = persist;
        _clsDesc = clsDesc;
       
        ClassMapping clsMap = ((ClassDescriptorImpl) clsDesc).getMapping();
        _name = clsMap.getName();
        _accessMode = AccessMode.valueOf(clsMap.getAccess().toString());

        _timeStampable = TimeStampable.class.isAssignableFrom(clsDesc.getJavaClass());

        ds.register(_name, this);

        ClassMapping dependClassMapping = (ClassMapping) clsMap.getDepends();
        ClassMapping extendsClassMapping = (ClassMapping) clsMap.getExtends();

        //if ( dep != null && ext != null )
        //    throw new MappingException("A JDO cannot both extends and depends on other objects");

        if (dependClassMapping != null) {
            ds.pairDepends(this, dependClassMapping.getName());
        }

        if (extendsClassMapping != null) {
            ds.pairExtends(this, extendsClassMapping.getName());
        }

        if (clsDesc.hasNature(ClassDescriptorJDONature.class.getName())) {
            ClassDescriptorJDONature nature;
            nature = new ClassDescriptorJDONature(clsDesc);
View Full Code Here

TOP

Related Classes of org.exolab.castor.mapping.xml.ClassMapping

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.