org.jpox.metadata
Class ClassMetaData

java.lang.Object
  extended byorg.jpox.metadata.MetaData
      extended byorg.jpox.metadata.ExtendableMetaData
          extended byorg.jpox.metadata.AbstractClassMetaData
              extended byorg.jpox.metadata.ClassMetaData
All Implemented Interfaces:
java.io.Serializable

public class ClassMetaData
extends AbstractClassMetaData

Representation of the MetaData of a class. Extends the abstract definition to include implementations, fields, embedded-only tags. Has a parent PackageMetaData that can contain the metadata for several classes.

Lifecycle state

This object supports 3 lifecycle states. The first is the raw constructed object which represents pure MetaData (maybe from a MetaData file). The second is a "populated" object which represents MetaData for a Class with the metadata aligned to be appropriate for that Class. The third is "initialised" once the internal arrays are created. This object, once populated, will represent ALL fields in the class (including static, final and transient fields).

Fields

This object keeps a list of FieldMetaData objects for the fields of this class (stored as "fields"). In addition it has an array of FieldMetaData objects representing those that are actually managed by JDO ("managedFields"). This second set does not contain things like static, final or transient fields since JDO doesn't support those yet.

Fields are of 2 types. The first are normal fields of this class. These have their own "relative" field number, relative to this class. The second type are "overriding" fields which override the baseline field in a superclass. These fields have no "relative" field number since they are relative to this class (and such a relative field number would make no sense). Fields are all added through addField() during the parse process, and are updated during the populate/initialise process to define their relative field numbers. Please refer to FieldMetaData for more details of fields.

Numbering of fields

Fields of the class are numbered in 2 ways. The first way is the numbering within a class. In a class, the field 'id's will start at 0. If a class is inherited, it will also have a second numbering for its fields - the "absolute" numbering. With "absolute" numbering, the fields start at the first field in the root superclass which has absolute number 0, and they are numbered from there, navigating down the hierarchy. In terms of what is stored in the records, the FieldMetaData stores fieldId as the first method (relative to the class it is in). The "absolute" numbering is always derived from this and the inheritance hierarchy.

MetaData Element

The MetaData Element represented here is as follows
 <!ELEMENT class (datastore-identity?, implements*, inheritance?, version?, join*,
      foreign-key*, index*, unique*, field*, column*, query*, fetch-group*, extension*)>
 <!ATTLIST class name CDATA #REQUIRED>
 <!ATTLIST class identity-type (application|datastore|nondurable) #IMPLIED>
 <!ATTLIST class catalog CDATA #IMPLIED>
 <!ATTLIST class schema CDATA #IMPLIED>
 <!ATTLIST class table CDATA #IMPLIED>
 <!ATTLIST class persistence-capable-superclass CDATA #IMPLIED>
 <!ATTLIST class objectid-class CDATA #IMPLIED>
 <!ATTLIST class requires-extent (true|false) 'true'>
 <!ATTLIST class detachable (true|false) 'true'>
 <!ATTLIST class embedded-only (true|false) #IMPLIED>
 <!ATTLIST class persistence-modifier 
      (persistence-capable|persistence-aware|non-persistent) #IMPLIED>
 

Since:
1.1
Version:
$Revision: 1.94 $
See Also:
Serialized Form

Field Summary
protected  java.util.List implementations
          List of implements
protected  ImplementsMetaData[] implementsMetaData
          ImplementsMetaData
protected  boolean isAbstractPersistenceCapable
          is abstract the PersistenceCapable class
 
Fields inherited from class org.jpox.metadata.AbstractClassMetaData
allFieldNumbers, catalog, defaultFetchGroupFieldFlags, defaultFetchGroupFieldNumbers, detachable, embeddedOnly, fetchGroupMetaData, fetchGroupMetaDataByName, fetchGroups, fieldNumbersByName, foreignKeyMetaData, foreignKeys, fullName, identityMetaData, identitySpecified, identityType, indexes, indexMetaData, inheritanceMetaData, joinMetaData, joins, managedFields, name, nonPrimaryKeyFieldFlags, nonPrimaryKeyFieldNumbers, noOfInheritedManagedFields, objectidClass, overriddenFields, pcSuperclassMetaData, persistenceCapableFieldNumbers, persistenceCapableSuperclass, persistenceModifier, persistentInterfaceImplNeedingTableFromSubclass, persistentInterfaceImplNeedingTableFromSuperclass, primaryKeyFieldNumbers, primaryKeyMetaData, properties, propertyMetaData, queries, requiresExtent, schema, secondClassMutableFieldFlags, secondClassMutableFieldNumbers, table, uniqueConstraints, uniqueMetaData, unmappedColumns, usesSingleFieldIdentityClass, versionMetaData
 
Fields inherited from class org.jpox.metadata.ExtendableMetaData
extensions, JPOX_VENDOR_NAME
 
Fields inherited from class org.jpox.metadata.MetaData
LOCALISER, METADATA_CREATED_STATE, METADATA_INITIALISED_STATE, METADATA_POPULATED_STATE, METADATA_USED_STATE, metaDataState, parent
 
Constructor Summary
ClassMetaData(InterfaceMetaData imd, java.lang.String implClassName, boolean copyFields)
          Constructor for creating the ClassMetaData for an implementation of a "persistent-interface".
ClassMetaData(PackageMetaData parent, java.lang.String name, java.lang.String identityType, java.lang.String objectidClass, java.lang.String requiresExtent, java.lang.String detachable, java.lang.String embeddedOnly, java.lang.String modifier, java.lang.String persistenceCapableSuperclass, java.lang.String catalog, java.lang.String schema, java.lang.String table)
          Constructor.
 
Method Summary
 void addField(FieldMetaData fmd)
          Method to add a field to this class.
 void addImplements(ImplementsMetaData implmd)
          Method to add an implements to this class.
protected  void addPropertiesNotInMetaData(java.lang.Class cls)
          Add FieldMetaData of fields not declared in MetaData
 ImplementsMetaData[] getImplementsMetaData()
          Accessor for the implements MetaData
 boolean implementsInterface(java.lang.String interfaceName)
          Convenience accessor for whether this class implements a specified interface
 void initialise()
          Method to initialise the object, creating internal convenience arrays.
 boolean isAbstractPersistenceCapable()
          Whether the PersistenceCapable class is abstract
protected  AbstractPropertyMetaData newDefaultedField(java.lang.String name)
          Utility to add a defaulted FieldMetaData to the class.
 void populate(ClassLoaderResolver clr)
          Method to provide the details of the class being represented by this MetaData.
protected  void populatePropertyMetaData(ClassLoaderResolver clr, java.lang.Class cls)
          Populate FieldMetaData
 java.lang.String toString()
          Returns a string representation of the object.
 java.lang.String toString(java.lang.String prefix, java.lang.String indent)
          Returns a string representation of the object.
 
Methods inherited from class org.jpox.metadata.AbstractClassMetaData
addFetchGroup, addForeignKey, addIndex, addJoin, addProperty, addQuery, addUniqueConstraint, addUnmappedColumn, checkInitialised, checkPopulated, copyFieldsFromInterface, determineIdentity, determineInheritanceMetaData, determineObjectIdClass, determineSuperClassName, getAbsoluteFieldNumberForRelativeFieldNumber, getAllFieldNumbers, getBaseAbstractClassMetaData, getCatalog, getDefaultFetchGroupFieldFlags, getDefaultFetchGroupFieldNumbers, getDiscriminatorStrategy, getFetchGroupMetaData, getFetchGroupMetaData, getFetchGroupMetaData, getField, getField, getFieldNumber, getFieldNumberAbsolute, getFieldNumberAbsolute, getForeignKeyMetaData, getFullClassName, getIdentityMetaData, getIdentityType, getIndexMetaData, getInheritanceMetaData, getJoinMetaData, getManagedField, getManagedFieldAbsolute, getManagedFieldAbsoluteInternal, getManagedFields, getMetaDataManager, getName, getNonPrimaryKeyFieldFlags, getNonPrimaryKeyFieldNumbers, getNoOfFields, getNoOfInheritedManagedFields, getNoOfManagedFields, getNoOfOverriddenFields, getNoOfPrimaryKeyFields, getNoOfProperties, getNoOfQueries, getObjectidClass, getOverriddenField, getOverriddenField, getOverriddenFields, getPackageMetaData, getPackageName, getPersistenceCapableFieldNumbers, getPersistenceCapableSuperclass, getPersistenceModifier, getPrimaryKeyFieldNumbers, getPrimaryKeyMetaData, getQuery, getSchema, getSecondClassMutableFieldFlags, getSecondClassMutableFieldNumbers, getSuperAbstractClassMetaData, getTable, getUniqueMetaData, getUnmappedColumns, getVersionMetaData, hasField, inheritDetachableSettings, inheritIdentity, isDetachable, isEmbeddedOnly, isRequiresExtent, isSameOrAncestorOf, loadClass, mergeORMData, newDefaultedProperty, setIdentityMetaData, setInheritanceMetaData, setPrimaryKeyMetaData, setTable, setVersionMetaData, usesSingleFieldIdentityClass, validateDeprecatedMetaData, validateUserInputForIdentity, validateUserInputForInheritanceMetaData
 
Methods inherited from class org.jpox.metadata.ExtendableMetaData
addExtension, addExtension, getExtension, getExtensions, getNoOfExtensions, getValueForExtension, getValuesForExtension, getValuesForExtensionStartingWith, hasExtension, removeExtension
 
Methods inherited from class org.jpox.metadata.MetaData
getParent, isCreated, isInitialised, isPopulated, isUsed, populate, setInitialised, setPopulated, setUsed
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

implementations

protected java.util.List implementations
List of implements


implementsMetaData

protected ImplementsMetaData[] implementsMetaData
ImplementsMetaData


isAbstractPersistenceCapable

protected boolean isAbstractPersistenceCapable
is abstract the PersistenceCapable class

Constructor Detail

ClassMetaData

public ClassMetaData(PackageMetaData parent,
                     java.lang.String name,
                     java.lang.String identityType,
                     java.lang.String objectidClass,
                     java.lang.String requiresExtent,
                     java.lang.String detachable,
                     java.lang.String embeddedOnly,
                     java.lang.String modifier,
                     java.lang.String persistenceCapableSuperclass,
                     java.lang.String catalog,
                     java.lang.String schema,
                     java.lang.String table)
Constructor. Takes the basic string information found in the MetaData file.

Parameters:
parent - The package to which this class belongs
name - Name of class
identityType - identity-type flag
objectidClass - Primary key class name
requiresExtent - Whether the class requires an extent
detachable - Whether the class can be detached
modifier - persistence-modifier tag
embeddedOnly - embedded-only tag
persistenceCapableSuperclass - Name of PC superclass
catalog - Name for catalog
schema - Name for schema
table - RDBMS table to store the class in

ClassMetaData

public ClassMetaData(InterfaceMetaData imd,
                     java.lang.String implClassName,
                     boolean copyFields)
Constructor for creating the ClassMetaData for an implementation of a "persistent-interface".

Parameters:
imd - MetaData for the "persistent-interface"
implClassName - Name of the implementation class
copyFields - Whether to copy the fields of the interface too
Method Detail

populate

public void populate(ClassLoaderResolver clr)
Method to provide the details of the class being represented by this MetaData. This can be used to firstly provide defaults for attributes that aren't specified in the MetaData, and secondly to report any errors with attributes that have been specifed that are inconsistent with the class being represented.

One possible use of this method would be to take a basic ClassMetaData for a class and call this, passing in the users class. This would then add FieldMetaData for all fields in this class providing defaults for all of these.

Specified by:
populate in class AbstractClassMetaData
Parameters:
clr - ClassLoaderResolver to use in loading any classes

addPropertiesNotInMetaData

protected void addPropertiesNotInMetaData(java.lang.Class cls)
Add FieldMetaData of fields not declared in MetaData

Overrides:
addPropertiesNotInMetaData in class AbstractClassMetaData
Parameters:
cls - This class

populatePropertyMetaData

protected void populatePropertyMetaData(ClassLoaderResolver clr,
                                        java.lang.Class cls)
Populate FieldMetaData

Overrides:
populatePropertyMetaData in class AbstractClassMetaData
Parameters:
clr - The ClassLoaderResolver
cls - This class
Throws:
InvalidMetaDataException - if the Class for a declared type in a field cannot be loaded by the clr
InvalidMetaDataException - if a field declared in the MetaData does not exist in the Class

initialise

public void initialise()
Method to initialise the object, creating internal convenience arrays. Initialises all sub-objects. populate() should be called BEFORE calling this.

Overrides:
initialise in class AbstractClassMetaData

newDefaultedField

protected AbstractPropertyMetaData newDefaultedField(java.lang.String name)
Utility to add a defaulted FieldMetaData to the class. Provided as a method since then any derived classes can override it (e.g JDOConfigClass can create a JDOConfigField)

Parameters:
name - name of field
Returns:
the new FieldMetaData

getImplementsMetaData

public final ImplementsMetaData[] getImplementsMetaData()
Accessor for the implements MetaData

Returns:
Returns the implements MetaData.

implementsInterface

public boolean implementsInterface(java.lang.String interfaceName)
Convenience accessor for whether this class implements a specified interface

Parameters:
interfaceName - The name of the interface
Returns:
Whether it implements the interface

isAbstractPersistenceCapable

public boolean isAbstractPersistenceCapable()
Whether the PersistenceCapable class is abstract

Returns:
true if the PersistenceCapable class is abstract

addField

public void addField(FieldMetaData fmd)
Method to add a field to this class. Rejects the addition of duplicate named fields.

Parameters:
fmd - Meta-Data for the field.

addImplements

public void addImplements(ImplementsMetaData implmd)
Method to add an implements to this class.

Parameters:
implmd - Meta-Data for the implements

toString

public java.lang.String toString()
Returns a string representation of the object.

Overrides:
toString in class ExtendableMetaData
Returns:
a string representation of the object.

toString

public java.lang.String toString(java.lang.String prefix,
                                 java.lang.String indent)
Returns a string representation of the object. This can be used as part of a facility to output a MetaData file.

Overrides:
toString in class ExtendableMetaData
Parameters:
prefix - prefix string
indent - indent string
Returns:
a string representation of the object.


Copyright © -2007 . All Rights Reserved.