Package org.exolab.castor.mapping.xml

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


            ClassDescriptor clsDesc, Persistence persist )
            throws ClassNotFoundException, MappingException {

        _debug = Boolean.getBoolean("org.exolab.castor.debug");

        ClassMapping clsMap = ((ClassDescriptorImpl) clsDesc).getMapping();

        _engine = lock;

        _persistence = persist;

        _name = clsMap.getName();

        _accessMode = AccessMode.getAccessMode( clsMap.getAccess().toString() );

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

        ds.register( _name, this );

        ClassMapping dep = (ClassMapping) clsMap.getDepends();
        ClassMapping ext = (ClassMapping) clsMap.getExtends();

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

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

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

        if ( clsDesc instanceof JDOClassDescriptor ) {
            if ( ((JDOClassDescriptor) clsDesc).getCacheType() != null ) {
                _cachetype = LRU.mapType( ((JDOClassDescriptor) clsDesc).getCacheType() );
View Full Code Here


     * If the class is an extended class, the id
     * fields of the extended class will be returned.
     */
    private FieldMapping[] getIdFields( ClassMapping clsMap )
            throws MappingException {
        ClassMapping base;
        FieldMapping[] fmDepended;
        FieldMapping[] fmResult;
        FieldMapping[] fmBase;
        FieldMapping[] fmIds;
        String[] identities;

        // start with the extended class
        base = clsMap;
        while ( base.getExtends() != null ) {
            base = (ClassMapping) base.getExtends();
        }
        fmDepended = null;

        identities = base.getIdentity();

        if ( identities == null || identities.length == 0 )
            throw new MappingException("Identity is null!");


        fmIds = new FieldMapping[identities.length];
        fmBase = base.getFieldMapping();
        for ( int i=0,j=0; i<fmBase.length; i++ ) {
            for ( int k=0; k<identities.length; k++ ) {
                if ( fmBase[i].getName().equals( identities[k] ) ) {
                    fmIds[k] = fmBase[i];
                    break;
View Full Code Here

        FieldMapping[] extendFields;
        FieldMapping[] thisFields;
        FieldMapping[] fields = null;
        String[] identities;
        boolean idfield;
        ClassMapping extend = (ClassMapping) clsMap.getExtends();
        ClassMapping origin;
        ArrayList fieldList;

        if ( extend != null ) {
            origin = extend;
            while (origin.getExtends() != null) {
                origin = (ClassMapping) origin.getExtends();
            }
            identities = origin.getIdentity();
            extendFields = getFullFields( extend );
            thisFields = clsMap.getFieldMapping();

            fieldList = new ArrayList(extendFields.length + thisFields.length);
            for (int i = 0; i < extendFields.length; i++) {
View Full Code Here

         * @return the Object whose id matches the given IDREF.
        **/
        public Object resolve(String idref) {
            if (_mapping == null) return null;
            for (int i = 0; i < _mapping.getClassMappingCount(); i++) {
                ClassMapping clsMap = _mapping.getClassMapping(i);
                if (idref.equals(clsMap.getName()))
                    return clsMap;
            }
            return null;
        } //-- resolve
View Full Code Here

        throws MappingException
    {
        if (cls == null)
            throw new MappingException("Cannot introspect a null class.");
           
        ClassMapping clsMap;
        Method[]     methods;

        if ( _mappings.get( cls ) != null )
            return;
           
        if ( cls.isArray() ) {
           
            Class cType = cls.getComponentType();
            if ( _mappings.get(cType) != null) return;
            if (Types.isSimpleType(cType)) return;               
            //-- handle component type
            addClass( cType );
        }
           
        if ( _forceIntrospection && (!Types.isConstructable( cls )))
            throw new MappingException( "mapping.classNotConstructable", cls.getName() );

        XMLClassDescriptor xmlClass;
        FieldDescriptor[]  fields;
        ClassMapping       classMap;
        FieldMapping       fieldMap;

        boolean introspected = false;
        try {
            if (_forceIntrospection) {
                xmlClass = _introspector.generateClassDescriptor( cls );
                introspected = true;
            }
            else {
                xmlClass = _resolver.resolve( cls );
                introspected = _introspector.introspected(xmlClass);
            }
        }
        catch ( MarshalException except ) {
            throw new MappingException( except );
        }
        classMap = new ClassMapping();
        classMap.setName( cls.getName() );
        classMap.setDescription( "Default mapping for class " + cls.getName() );
       
        //-- prevent default access from showing up in the mapping
        classMap.setAccess(null);
       
        //-- map-to
        MapTo mapTo = new MapTo();
        mapTo.setXml( xmlClass.getXMLName() );
        mapTo.setNsUri( xmlClass.getNameSpaceURI() );
        mapTo.setNsPrefix( xmlClass.getNameSpacePrefix() );
        classMap.setMapTo( mapTo );
       
        //-- add mapping to hashtable before processing
        //-- fields so we can do recursive processing
        _mappings.put( cls, classMap );
       
        fields = xmlClass.getFields();
        for ( int i = 0 ; i < fields.length ; ++i ) {
           
            FieldDescriptor fdesc = fields[ i ];
           
            String fieldName = fdesc.getFieldName();
           
            boolean isContainer = false;
            //-- check for collection wrapper
            if (introspected && fieldName.startsWith("##container")) {
                fdesc = fdesc.getClassDescriptor().getFields()[0];
                fieldName = fdesc.getFieldName();
                isContainer = true;
            }
           
           
            Class fieldType = fdesc.getFieldType();
           
           
            //-- check to make sure we can find the accessors...
            //-- if we used introspection we don't need to
            //-- enter this block...only when descriptors
            //-- were generated using the source code generator
            //-- or by hand.
            if ((!introspected) && fieldName.startsWith(UNDERSCORE)) {
               
                //-- check to see if we need to remove underscore
                if (!_mappingLoader.canFindAccessors(cls, fieldName, fieldType))
                    fieldName = fieldName.substring(1);
               
                //-- check to see if we need to remove "List" prefix
                //-- used by generated source code
                if (!_mappingLoader.canFindAccessors(cls, fieldName, fieldType))
                {
                    if (fieldName.endsWith("List")) {
                        int len = fieldName.length()-4;
                        String tmpName = fieldName.substring(0, len);
                        if (_mappingLoader.canFindAccessors(cls, tmpName, fieldType))
                            fieldName = tmpName;                           
                    }
                }
            }
           
            fieldMap = new FieldMapping();
            fieldMap.setName( fieldName );
           
           
            //-- unwrap arrays of objects
            boolean isArray = fieldType.isArray();
            while (fieldType.isArray())
                fieldType = fieldType.getComponentType();
               
           
            //-- To prevent outputing of optional fields...check
            //-- for value first before setting
            if (fdesc.isRequired())  fieldMap.setRequired( true );
            if (fdesc.isTransient()) fieldMap.setTransient( true );
            if ( fdesc.isMultivalued() ) {
               
                //-- special case for collections
                if (isContainer) {
                    //-- backwards than what you'd expect, but
                    //-- if the collection had a "container" wrapper
                    //-- then we specify container="false" in the
                    //-- mapping file.
                    fieldMap.setContainer(false);
                }
               
                //-- try to guess collection type
                if (isArray) {
                    fieldMap.setCollection(CollectionType.ARRAY);
                }
                else {
                    //-- if the fieldType is the collection, then set appropriate
                    //-- collection type
                    String colName = CollectionHandlers.getCollectionName(fieldType);
                    if (colName != null) {
                        fieldMap.setCollection(CollectionType.valueOf(colName));
                        fieldType = Object.class;
                    }
                    //-- help maintain compatibility with generated
                    //-- descriptors
                    else if (_mappingLoader.returnsArray(cls, fieldName, fieldType)) {
                        fieldMap.setCollection( CollectionType.ARRAY );
                    }
                    else {
                        fieldMap.setCollection( CollectionType.ENUMERATE );
                    }
                }
            }
           
            //-- fieldType
            fieldMap.setType( fieldType.getName() );
           
               
            //-- handle XML Specific information
            fieldMap.setBindXml( new BindXml() );
            fieldMap.getBindXml().setName( ( (XMLFieldDescriptor) fdesc ).getXMLName() );
            fieldMap.getBindXml().setNode( BindXmlNodeType.valueOf( ((XMLFieldDescriptor) fields[ i ]).getNodeType().toString() ) );
            classMap.addFieldMapping( fieldMap );
           
            if (deep) {
                if ( _mappings.get(fieldType) != null) continue;
                if (Types.isSimpleType(fieldType)) continue;               
                //-- recursive add needed classes
View Full Code Here

      String idCol = (String) _ids.get(idIndex);
      Integer idColNum = (Integer) _cols.get(idCol);

      DTXClassDescriptor desc = (DTXClassDescriptor) _classes.get(idCol);
      ClassMapping clsMapping = desc.getClassMapping();
      String elementName = null;

      if (clsMapping.getMapTo() == null ||
    clsMapping.getMapTo().getXml() == null) {
    elementName = clsMapping.getName();
      } else {
    elementName = clsMapping.getMapTo().getXml();
      }

      String[] attrCols = desc.getAttrCols();
      String[] simpleElementCols = desc.getSimpleElementCols();
      String textCol = desc.getTextCol();
View Full Code Here

    */

    protected void initQuery(ClassMapping clsMapping, QueryExpression expr)
        throws DTXException
    {
        ClassMapping extend;
  MapTo mapTo = clsMapping.getMapTo();

  if (mapTo == null) {
      throw new DTXException("no table mapping for: " + clsMapping.getName());
  }

  String table = mapTo.getTable();

        FieldMapping[] fields = clsMapping.getFieldMapping();
  FieldMapping identity = null;

        String identityName = clsMapping.getIdentity(0);

  for (int j = 0; j < fields.length; j++) {
      if (fields[j].getName().equals(identityName)) {
    identity = fields[j];
    break;
      }
  }

  if (identity == null) {
      throw new DTXException("no identity field in class: " + clsMapping.getName());
  }

  Sql identitySQLElement = identity.getSql();

  if (identitySQLElement == null) {
      throw new DTXException("no identity SQL info in class: " + clsMapping.getName());
  }

  String identitySQL = identitySQLElement.getName()[0];

  _ids.add(table + "." + identitySQL);

  DTXClassDescriptor desc = new DTXClassDescriptor(clsMapping);

  _classes.put(table + "." + identitySQL, desc);

        // If this class extends another class, create a join with the parent table and
        // add the load fields of the parent class (but not the store fields)
        if (clsMapping.getExtends() != null) {

        /**
          * TODO : Needs to be resolved by Hand
          */

        MapTo extendsTo = new MapTo();//(ClassMapping) clsMapping.getExtends()).getMapTo();
      if (extendsTo == null) {
    throw new DTXException("no mapping info for extends table.");
      }
      String extendsTable = extendsTo.getTable();
            expr.addInnerJoin(table, identitySQL, extendsTable, identitySQL);
            /**
             * needs to be resolved by hand
             */
            initQuery(new ClassMapping(), expr);
            //(ClassMapping) clsMapping.getExtends(), expr);
        }

        for (int i = 0; i < fields.length; ++i) {
      FieldMapping field = fields[i];
      Sql fieldSql = field.getSql();
      ClassMapping relMapping = _eng.getClassMapping(field.getType());

      if (fieldSql == null) {
    if (relMapping != null) {

        // We have a one-to-many relationship with a sub object.
        // get those objects, too.

                    FieldMapping[] relFields = relMapping.getFieldMapping();
        MapTo relMapTo = relMapping.getMapTo();

        if (relMapTo == null) {
      throw new DTXException("dtx.NoRelatedMapTo");
        }

        String relTable = relMapTo.getTable();

        String relId = null;
                    String foreKey = null;

                    for (int k = 0; k < relFields.length; k++ ) {
      Sql relSql = relFields[k].getSql();
                        if (relSql != null) {
          String type = relFields[k].getType();
          if (type != null && type.equals(clsMapping.getName())) {
        foreKey = relSql.getName()[0];
          }
      }
                    }

                    if (foreKey != null) {
                        expr.addOuterJoin(table, identitySQL, relTable, foreKey);
      DTXClassDescriptor relDesc = new DTXClassDescriptor(relMapping);

      for (int n = 0; n < relFields.length; n++ ) {
          FieldMapping relField = relFields[n];
          Sql relSql = relFields[n].getSql();
          if (relSql != null) {
        String relFieldName = relSql.getName()[0];
        if (relFieldName == null) {
            relFieldName = relFields[n].getName();
        }
        String relFullName = relTable + "." + relFieldName;

        BindXml relFieldXml = relFields[n].getBindXml();
        String node = "element";
        if (relFieldXml != null) {
            node = relFieldXml.getNode().toString();
        }

        if (!relFieldName.equals(foreKey)) {
            expr.addColumn(relTable, relFieldName);
            _cols.put(relTable + "." + relFieldName, new Integer(++_lastCol));

            if (node.equalsIgnoreCase("attribute")) {
          relDesc.addAttr(relFullName, relField);
            } else if (node.equalsIgnoreCase("element")) {
          relDesc.addSimpleElement(relFullName, relField);
            } else if (node.equalsIgnoreCase("text")) {
          relDesc.setTextCol(relFullName, relField);
            }
        }
        if (relField.getName().equals(relMapping.getIdentity())) {
            _ids.add(relTable + "." + relFieldName);
            desc.addContained(relTable + "." + relFieldName, relMapping);
            _classes.put(relTable + "." + relFieldName, relDesc);
        }
          }
View Full Code Here

        // --------------------------------------------------------------------
        LOG.info( "Begin: Walking the mapping descriptor via objects" );

        MappingRoot mappingRoot = _mapping.getRoot();
        ClassMapping classMap;
        FieldMapping fieldMap;
        FieldMapping[] fieldMaps;

        int mappingCount = mappingRoot.getClassMappingCount();

        // loop over the classes
        for ( int i = 0; i < mappingCount; ++i )
        {
            classMap = mappingRoot.getClassMapping( i );
            LOG.debug( "Class name: " + classMap.getName() );

            int fieldCount = classMap.getClassChoice().getFieldMappingCount();
            fieldMaps = classMap.getClassChoice().getFieldMapping();

            LOG.debug( "fieldMaps.length: " + fieldMaps.length );

            // loop over the fields in each class
            for ( int j = 0; j < fieldMaps.length; ++j )
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.