Beispiel #1
0
  /**
   * Constructs a new descriptor for the specified class. When describing inheritence, the
   * descriptor of the parent class should be used and only the fields added in this object must be
   * supplied here.
   *
   * @param javaClass The Java type of this class
   * @param fields The fields described for this class
   * @param identity The field of the identity (key) of this class, may be null
   * @param extend The descriptor of the class which this class extends,
   * @param accessMode The access mode for this class (null is shared) or null if this is a
   *     top-level class
   * @throws MappingException The extended descriptor does not match a parent class of this type
   */
  public ClassDescriptorImpl(
      Class javaClass,
      FieldDescriptor[] fields,
      FieldDescriptor identity,
      ClassDescriptor extend,
      AccessMode accessMode)
      throws MappingException {
    if (!Types.isConstructable(javaClass))
      throw new MappingException("mapping.classNotConstructable", javaClass.getName());
    _javaClass = javaClass;
    if (fields == null) throw new IllegalArgumentException("Argument 'fields' is null");
    _fields = (FieldDescriptor[]) fields.clone();

    if (extend != null) {
      if (!extend.getJavaClass().isAssignableFrom(javaClass))
        throw new MappingException(
            "mapping.classDoesNotExtend", _javaClass.getName(), extend.getJavaClass().getName());
      _extends = extend;
      _identity = (identity == null ? _extends.getIdentity() : identity);
    } else {
      _extends = null;
      _identity = identity;
    }
    _accessMode = accessMode;
  }
Beispiel #2
0
  protected ClassDescriptor createDescriptor(ClassMapping clsMap) throws MappingException {
    ClassDescriptor clsDesc;
    FieldDescriptor[] fields;
    Vector jdoFields;

    // If no LDAP information for class, ignore it. DAX only
    // supports DAX class descriptors.
    if (clsMap.getMapTo() == null || clsMap.getMapTo().getLdapOc() == null) return NoDescriptor;

    // See if we have a compiled descriptor.
    clsDesc = loadClassDescriptor(clsMap.getName());
    if (clsDesc != null && clsDesc instanceof DAXClassDescriptor) return clsDesc;

    // Use super class to create class descriptor. Field descriptors will be
    // generated only for supported fields, see createFieldDesc later on.
    // This class may only extend a DAX class, otherwise no mapping will be
    // found for the parent.
    clsDesc = super.createDescriptor(clsMap);

    // DAX descriptor must include an identity field, the identity field
    // is either a field, or a container field containing only DAX fields.
    // If the identity field is not a JDO field, it will be cleaned later
    // on (we need the descriptor for relations mapping).
    if (clsDesc.getIdentity() == null)
      throw new MappingException("mapping.noIdentity", clsDesc.getJavaClass().getName());
    /*
    if ( clsDesc.getIdentity() instanceof ContainerFieldDesc ) {
        FieldDescriptor[] idFields;

        idFields = ( (ContainerFieldDesc) clsDesc.getIdentity() ).getFields();
        for ( int i = 0 ; i < idFields.length ; ++i )
            if ( ! ( idFields[ i ] instanceof DAXFieldDesc ) )
                throw new MappingException( "dax.identityNotDAX", idFields[ i ] );
    }
    */

    return new DAXClassDescriptor(clsDesc, clsMap.getMapTo().getLdapOc(), null);
  }