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);
}