acmd.addMember(propmd);
pushStack(propmd);
}
else if (parent instanceof EmbeddedMetaData)
{
EmbeddedMetaData emd = (EmbeddedMetaData)parent;
PropertyMetaData propmd = newPropertyObject(emd, attrs);
emd.addMember(propmd);
pushStack(propmd);
}
else if (parent instanceof ImplementsMetaData)
{
ImplementsMetaData implmd = (ImplementsMetaData)parent;
PropertyMetaData propmd = newPropertyObject(implmd, attrs);
implmd.addProperty(propmd);
pushStack(propmd);
}
else if (parent instanceof FetchGroupMetaData)
{
FetchGroupMetaData fgmd = (FetchGroupMetaData)parent;
PropertyMetaData propmd = newPropertyObject(fgmd, attrs);
fgmd.addMember(propmd);
pushStack(propmd);
}
}
else if (localName.equals("datastore-identity"))
{
AbstractClassMetaData acmd = (AbstractClassMetaData)getStack();
IdentityMetaData idmd = new IdentityMetaData();
idmd.setColumnName(getAttr(attrs,"column"));
idmd.setValueStrategy(IdentityStrategy.getIdentityStrategy(getAttr(attrs,"strategy")));
idmd.setSequence(getAttr(attrs,"sequence"));
acmd.setIdentityMetaData(idmd);
pushStack(idmd);
}
else if (localName.equals("inheritance"))
{
MetaData parent = getStack();
AbstractClassMetaData acmd = (AbstractClassMetaData)parent;
InheritanceMetaData inhmd = new InheritanceMetaData();
inhmd.setStrategy(getAttr(attrs,"strategy"));
acmd.setInheritanceMetaData(inhmd);
pushStack(inhmd);
}
else if (localName.equals("discriminator"))
{
InheritanceMetaData inhmd = (InheritanceMetaData)getStack();
DiscriminatorMetaData dismd = inhmd.newDiscriminatorMetadata();
dismd.setColumnName(getAttr(attrs,"column"));
dismd.setValue(getAttr(attrs,"value"));
dismd.setStrategy(getAttr(attrs,"strategy"));
dismd.setIndexed(getAttr(attrs,"indexed"));
pushStack(dismd);
}
else if (localName.equals("query"))
{
MetaData emd = getStack();
if (emd instanceof ClassMetaData)
{
ClassMetaData cmd = (ClassMetaData)emd;
QueryMetaData qmd = new QueryMetaData(getAttr(attrs, "name"));
qmd.setScope(cmd.getFullClassName());
qmd.setLanguage(getAttr(attrs, "language"));
qmd.setUnmodifiable(getAttr(attrs, "unmodifiable"));
qmd.setResultClass(getAttr(attrs, "result-class"));
qmd.setUnique(getAttr(attrs, "unique"));
qmd.setFetchPlanName(getAttr(attrs, "fetch-plan"));
cmd.addQuery(qmd);
pushStack(qmd);
}
else if (emd instanceof InterfaceMetaData)
{
InterfaceMetaData imd = (InterfaceMetaData)emd;
QueryMetaData qmd = new QueryMetaData(getAttr(attrs, "name"));
qmd.setScope(imd.getFullClassName());
qmd.setLanguage(getAttr(attrs, "language"));
qmd.setUnmodifiable(getAttr(attrs, "unmodifiable"));
qmd.setResultClass(getAttr(attrs, "result-class"));
qmd.setUnique(getAttr(attrs, "unique"));
qmd.setFetchPlanName(getAttr(attrs, "fetch-plan"));
imd.addQuery(qmd);
pushStack(qmd);
}
else if (emd instanceof FileMetaData)
{
FileMetaData filemd = (FileMetaData)emd;
QueryMetaData qmd = filemd.newQueryMetadata(getAttr(attrs, "name"));
qmd.setLanguage(getAttr(attrs, "language"));
qmd.setUnmodifiable(getAttr(attrs, "unmodifiable"));
qmd.setResultClass(getAttr(attrs, "result-class"));
qmd.setUnique(getAttr(attrs, "unique"));
qmd.setFetchPlanName(getAttr(attrs, "fetch-plan"));
pushStack(qmd);
}
}
else if (localName.equals("sequence"))
{
PackageMetaData pmd = (PackageMetaData)getStack();
SequenceMetaData seqmd =
pmd.newSequenceMetadata(getAttr(attrs,"name"), getAttr(attrs,"strategy"));
seqmd.setFactoryClass(getAttr(attrs,"factory-class"));
seqmd.setDatastoreSequence(getAttr(attrs,"datastore-sequence"));
String seqSize = getAttr(attrs, "allocation-size");
if (seqSize != null)
{
seqmd.setAllocationSize(seqSize);
}
String seqStart = getAttr(attrs, "initial-value");
if (seqStart != null)
{
seqmd.setInitialValue(seqStart);
}
pushStack(seqmd);
}
else if (localName.equals("field"))
{
MetaData md = getStack();
FieldMetaData fmd = newFieldObject(md,attrs);
if (md instanceof ClassMetaData)
{
ClassMetaData cmd = (ClassMetaData)md;
cmd.addMember(fmd);
}
else if (md instanceof FetchGroupMetaData)
{
FetchGroupMetaData fgmd = (FetchGroupMetaData)md;
fgmd.addMember(fmd);
}
else if (md instanceof EmbeddedMetaData)
{
EmbeddedMetaData emd = (EmbeddedMetaData)md;
emd.addMember(fmd);
}
else if (md instanceof ForeignKeyMetaData)
{
ForeignKeyMetaData fkmd = (ForeignKeyMetaData)md;
fkmd.addMember(fmd);
}
else if (md instanceof IndexMetaData)
{
IndexMetaData imd = (IndexMetaData)md;
imd.addMember(fmd);
}
else if (md instanceof UniqueMetaData)
{
UniqueMetaData umd = (UniqueMetaData)md;
umd.addMember(fmd);
}
pushStack(fmd);
}
else if (localName.equals("join"))
{
MetaData parent = getStack();
String tableName = getAttr(attrs, "table");
String columnName = getAttr(attrs, "column");
String outer = getAttr(attrs, "outer");
IndexedValue indexed = IndexedValue.getIndexedValue(getAttr(attrs, "indexed"));
String unique = getAttr(attrs, "unique");
String deleteAction = getAttr(attrs, "delete-action");
JoinMetaData joinmd = null;
if (parent instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)parent;
joinmd = fmd.newJoinMetadata();
}
else if (parent instanceof AbstractClassMetaData)
{
AbstractClassMetaData cmd = (AbstractClassMetaData)parent;
joinmd = new JoinMetaData();
cmd.addJoin(joinmd);
}
else if (parent instanceof InheritanceMetaData)
{
InheritanceMetaData inhmd = (InheritanceMetaData)parent;
joinmd = inhmd.newJoinMetadata();
}
joinmd.setTable(tableName);
joinmd.setColumnName(columnName);
joinmd.setOuter(outer);
joinmd.setIndexed(indexed);
joinmd.setUnique(unique);
joinmd.setDeleteAction(deleteAction);
pushStack(joinmd);
}
else if (localName.equals("map"))
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
MapMetaData mapmd = fmd.newMapMetaData();
mapmd.setKeyType(getAttr(attrs,"key-type"));
mapmd.setEmbeddedKey(getAttr(attrs,"embedded-key"));
mapmd.setSerializedKey(getAttr(attrs,"serialized-key"));
mapmd.setDependentKey(getAttr(attrs,"dependent-key"));
mapmd.setValueType(getAttr(attrs,"value-type"));
mapmd.setEmbeddedValue(getAttr(attrs,"embedded-value"));
mapmd.setSerializedValue(getAttr(attrs,"serialized-value"));
mapmd.setDependentValue(getAttr(attrs,"dependent-value"));
pushStack(mapmd);
}
else if (localName.equals("array"))
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
ArrayMetaData arrmd = fmd.newArrayMetaData();
arrmd.setElementType(getAttr(attrs, "element-type"));
arrmd.setEmbeddedElement(getAttr(attrs, "embedded-element"));
arrmd.setSerializedElement(getAttr(attrs, "serialized-element"));
arrmd.setDependentElement(getAttr(attrs, "dependent-element"));
pushStack(arrmd);
}
else if (localName.equals("collection"))
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
CollectionMetaData collmd = fmd.newCollectionMetaData();
collmd.setElementType(getAttr(attrs,"element-type"));
collmd.setEmbeddedElement(getAttr(attrs,"embedded-element"));
collmd.setSerializedElement(getAttr(attrs,"serialized-element"));
collmd.setDependentElement(getAttr(attrs,"dependent-element"));
pushStack(collmd);
}
else if (localName.equals("column"))
{
MetaData md = getStack();
ColumnMetaData colmd = new ColumnMetaData();
colmd.setName(getAttr(attrs,"name"));
colmd.setTarget(getAttr(attrs,"target"));
colmd.setTargetMember(getAttr(attrs,"target-field"));
colmd.setJdbcType(getAttr(attrs,"jdbc-type"));
colmd.setSqlType(getAttr(attrs,"sql-type"));
colmd.setLength(getAttr(attrs,"length"));
colmd.setScale(getAttr(attrs,"scale"));
colmd.setAllowsNull(getAttr(attrs,"allows-null"));
colmd.setDefaultValue(getAttr(attrs,"default-value"));
colmd.setInsertValue(getAttr(attrs,"insert-value"));
String pos = getAttr(attrs, "position"); // JDO 3.1+
if (pos != null)
{
colmd.setPosition(pos);
}
if (md instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)md;
fmd.addColumn(colmd);
}
else if (md instanceof AbstractElementMetaData)
{
AbstractElementMetaData elemd = (AbstractElementMetaData)md;
elemd.addColumn(colmd);
}
else if (md instanceof JoinMetaData)
{
JoinMetaData jnmd = (JoinMetaData)md;
jnmd.addColumn(colmd);
}
else if (md instanceof IdentityMetaData)
{
IdentityMetaData idmd = (IdentityMetaData)md;
idmd.addColumn(colmd);
}
else if (md instanceof ForeignKeyMetaData)
{
ForeignKeyMetaData fkmd = (ForeignKeyMetaData)md;
fkmd.addColumn(colmd);
}
else if (md instanceof IndexMetaData)
{
IndexMetaData idxmd = (IndexMetaData)md;
idxmd.addColumn(colmd);
}
else if (md instanceof UniqueMetaData)
{
UniqueMetaData unimd = (UniqueMetaData)md;
unimd.addColumn(colmd);
}
else if (md instanceof OrderMetaData)
{
OrderMetaData ormd = (OrderMetaData)md;
ormd.addColumn(colmd);
}
else if (md instanceof DiscriminatorMetaData)
{
DiscriminatorMetaData dismd = (DiscriminatorMetaData)md;
dismd.setColumnMetaData(colmd);
}
else if (md instanceof VersionMetaData)
{
VersionMetaData vermd = (VersionMetaData)md;
vermd.addColumn(colmd);
}
else if (md instanceof AbstractClassMetaData)
{
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
cmd.addUnmappedColumn(colmd);
}
else if (md instanceof PrimaryKeyMetaData)
{
PrimaryKeyMetaData pkmd = (PrimaryKeyMetaData)md;
pkmd.addColumn(colmd);
}
pushStack(colmd);
}
else if (localName.equals("element"))
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
ElementMetaData elemmd = new ElementMetaData();
elemmd.setColumnName(getAttr(attrs, "column"));
elemmd.setDeleteAction(getAttr(attrs, "delete-action"));
elemmd.setUpdateAction(getAttr(attrs, "update-action"));
elemmd.setIndexed(IndexedValue.getIndexedValue(getAttr(attrs, "indexed")));
elemmd.setUnique(getAttr(attrs, "unique"));
String mappedBy = getAttr(attrs, "mapped-by");
elemmd.setMappedBy(mappedBy);
if (!StringUtils.isWhitespace(mappedBy) && fmd.getMappedBy() == null)
{
// With collection/array this is the same as mapped-by on the field
fmd.setMappedBy(mappedBy);
}
fmd.setElementMetaData(elemmd);
pushStack(elemmd);
}
else if (localName.equals("key"))
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
KeyMetaData keymd = new KeyMetaData();
keymd.setColumnName(getAttr(attrs, "column"));
keymd.setDeleteAction(getAttr(attrs, "delete-action"));
keymd.setUpdateAction(getAttr(attrs, "update-action"));
keymd.setIndexed(IndexedValue.getIndexedValue(getAttr(attrs, "indexed")));
keymd.setUnique(getAttr(attrs, "unique"));
keymd.setMappedBy(getAttr(attrs, "mapped-by"));
fmd.setKeyMetaData(keymd);
pushStack(keymd);
}
// New value
else if (localName.equals("value"))
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
ValueMetaData valuemd = new ValueMetaData();
valuemd.setColumnName(getAttr(attrs, "column"));
valuemd.setDeleteAction(getAttr(attrs, "delete-action"));
valuemd.setUpdateAction(getAttr(attrs, "update-action"));
valuemd.setIndexed(IndexedValue.getIndexedValue(getAttr(attrs, "indexed")));
valuemd.setUnique(getAttr(attrs, "unique"));
valuemd.setMappedBy(getAttr(attrs, "mapped-by"));
fmd.setValueMetaData(valuemd);
pushStack(valuemd);
}
// New fetch-group
else if (localName.equals("fetch-group"))
{
MetaData md = getStack();
FetchGroupMetaData fgmd = new FetchGroupMetaData(getAttr(attrs,"name"));
fgmd.setPostLoad(getAttr(attrs,"post-load"));
if (md instanceof FetchGroupMetaData)
{
FetchGroupMetaData fgmdParent = (FetchGroupMetaData)md;
fgmdParent.addFetchGroup(fgmd);
}
else if (md instanceof AbstractClassMetaData)
{
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
cmd.addFetchGroup(fgmd);
}
else if (md instanceof FetchPlanMetaData)
{
FetchPlanMetaData fpmd = (FetchPlanMetaData)md;
fpmd.addFetchGroup(fgmd);
}
pushStack(fgmd);
}
else if (localName.equals("extension"))
{
MetaData md = getStack();
md.addExtension(getAttr(attrs,"vendor-name"), getAttr(attrs,"key"), getAttr(attrs,"value"));
}
else if (localName.equals("version"))
{
AbstractClassMetaData cmd = (AbstractClassMetaData)getStack();
VersionMetaData vermd = cmd.newVersionMetadata();
vermd.setStrategy(getAttr(attrs,"strategy")).setColumnName(getAttr(attrs,"column"));
vermd.setIndexed(IndexedValue.getIndexedValue(getAttr(attrs,"indexed")));
pushStack(vermd);
}
else if (localName.equals("index"))
{
MetaData md = getStack();
IndexMetaData idxmd = new IndexMetaData();
idxmd.setName(getAttr(attrs,"name"));
idxmd.setTable(getAttr(attrs,"table"));
idxmd.setUnique(getAttr(attrs,"unique"));
if (md instanceof AbstractClassMetaData)
{
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
cmd.addIndex(idxmd);
}
else if (md instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)md;
fmd.setIndexMetaData(idxmd);
}
else if (md instanceof JoinMetaData)
{
JoinMetaData jmd = (JoinMetaData)md;
jmd.setIndexMetaData(idxmd);
}
else if (md instanceof AbstractElementMetaData)
{
AbstractElementMetaData elmd = (AbstractElementMetaData)md;
elmd.setIndexMetaData(idxmd);
}
else if (md instanceof OrderMetaData)
{
OrderMetaData omd = (OrderMetaData)md;
omd.setIndexMetaData(idxmd);
}
else if (md instanceof VersionMetaData)
{
VersionMetaData vermd = (VersionMetaData)md;
vermd.setIndexMetaData(idxmd);
}
else if (md instanceof DiscriminatorMetaData)
{
DiscriminatorMetaData dismd = (DiscriminatorMetaData)md;
dismd.setIndexMetaData(idxmd);
}
pushStack(idxmd);
}
else if (localName.equals("unique"))
{
MetaData md = getStack();
UniqueMetaData unimd = new UniqueMetaData();
unimd.setName(getAttr(attrs,"name"));
unimd.setTable(getAttr(attrs,"table"));
unimd.setDeferred(getAttr(attrs,"deferred"));
if (md instanceof AbstractClassMetaData)
{
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
cmd.addUniqueConstraint(unimd);
}
else if (md instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)md;
fmd.setUniqueMetaData(unimd);
}
else if (md instanceof JoinMetaData)
{
JoinMetaData jmd = (JoinMetaData)md;
jmd.setUniqueMetaData(unimd);
}
else if (md instanceof AbstractElementMetaData)
{
AbstractElementMetaData elmd = (AbstractElementMetaData)md;
elmd.setUniqueMetaData(unimd);
}
pushStack(unimd);
}
else if (localName.equals("foreign-key"))
{
MetaData md = getStack();
ForeignKeyMetaData fkmd = new ForeignKeyMetaData();
fkmd.setName(getAttr(attrs,"name"));
fkmd.setTable(getAttr(attrs,"table"));
fkmd.setUnique(getAttr(attrs,"unique"));
fkmd.setDeferred(getAttr(attrs,"deferred"));
fkmd.setDeleteAction(ForeignKeyAction.getForeignKeyAction(getAttr(attrs,"delete-action")));
fkmd.setUpdateAction(ForeignKeyAction.getForeignKeyAction(getAttr(attrs,"update-action")));
if (md instanceof AbstractClassMetaData)
{
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
cmd.addForeignKey(fkmd);
}
else if (md instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)md;
fmd.setForeignKeyMetaData(fkmd);
}
else if (md instanceof JoinMetaData)
{
JoinMetaData jmd = (JoinMetaData)md;
jmd.setForeignKeyMetaData(fkmd);
}
else if (md instanceof AbstractElementMetaData)
{
AbstractElementMetaData elmd = (AbstractElementMetaData)md;
elmd.setForeignKeyMetaData(fkmd);
}
pushStack(fkmd);
}
else if (localName.equals("order"))
{
OrderMetaData ordmd = new OrderMetaData();
ordmd.setIndexed(IndexedValue.getIndexedValue(getAttr(attrs, "indexed")));
ordmd.setColumnName(getAttr(attrs, "column"));
ordmd.setMappedBy(getAttr(attrs, "mapped-by"));
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
fmd.setOrderMetaData(ordmd);
pushStack(ordmd);
}
else if (localName.equals("embedded"))
{
MetaData md = getStack();
EmbeddedMetaData embmd = new EmbeddedMetaData();
embmd.setOwnerMember(getAttr(attrs,"owner-field"));
embmd.setNullIndicatorColumn(getAttr(attrs,"null-indicator-column"));
embmd.setNullIndicatorValue(getAttr(attrs,"null-indicator-value"));
if (md instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)md;
fmd.setEmbeddedMetaData(embmd);
}