pushStack(mmd);
}
else if (localName.equals("basic"))
{
// Basic field
AbstractClassMetaData cmd = (AbstractClassMetaData)getStack();
AbstractMemberMetaData mmd = newFieldObject(cmd, attrs);
pushStack(mmd);
}
else if (localName.equals("lob"))
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
fmd.setStoreInLob(); // Just mark it as to be stored in a "lob" and let the MetaData sort it out
}
else if (localName.equals("enumerated"))
{
// Processed elsewhere
}
else if (localName.equals("temporal"))
{
// Processed elsewhere
}
else if (localName.equals("transient"))
{
// Transient field
ClassMetaData cmd = (ClassMetaData)getStack();
AbstractMemberMetaData mmd = newTransientFieldObject(cmd, getAttr(attrs, "name"));
cmd.addMember(mmd);
pushStack(mmd);
}
else if (localName.equals("embedded"))
{
// Embedded field
AbstractClassMetaData cmd = (AbstractClassMetaData)getStack();
AbstractMemberMetaData mmd = newEmbeddedFieldObject(cmd, getAttr(attrs, "name"));
cmd.addMember(mmd);
mmd.setEmbedded(true);
pushStack(mmd);
}
else if (localName.equals("one-to-many"))
{
// 1-N field
ClassMetaData cmd = (ClassMetaData)getStack();
AbstractMemberMetaData mmd = newFieldObject(cmd, attrs);
String targetEntityName = getAttr(attrs, "target-entity");
if (!StringUtils.isWhitespace(targetEntityName))
{
mmd.setTargetClassName(targetEntityName);
}
mmd.setOrdered(); // Mark as ordered so we know we're using JPA
String jpaLevel = mgr.getNucleusContext().getPersistenceConfiguration().getStringProperty("datanucleus.jpa.level");
if (mmd.getMappedBy() == null && mmd.getJoinMetaData() == null &&
jpaLevel.equalsIgnoreCase("JPA1"))
{
// JPA1 : 1-N uni with no join specified (yet) so add one (see JPA1 spec [9.1.24])
mmd.setJoinMetaData(new JoinMetaData());
}
pushStack(mmd);
}
else if (localName.equals("one-to-one"))
{
// 1-1 field
ClassMetaData cmd = (ClassMetaData)getStack();
AbstractMemberMetaData mmd = newFieldObject(cmd, attrs);
String targetEntityName = getAttr(attrs, "target-entity");
if (!StringUtils.isWhitespace(targetEntityName))
{
mmd.setTargetClassName(targetEntityName);
}
pushStack(mmd);
}
else if (localName.equals("many-to-one"))
{
// N-1 field
ClassMetaData cmd = (ClassMetaData)getStack();
AbstractMemberMetaData mmd = newFieldObject(cmd, attrs);
String targetEntityName = getAttr(attrs, "target-entity");
if (!StringUtils.isWhitespace(targetEntityName))
{
mmd.setTargetClassName(targetEntityName);
}
pushStack(mmd);
}
else if (localName.equals("many-to-many"))
{
// M-N field
ClassMetaData cmd = (ClassMetaData)getStack();
AbstractMemberMetaData mmd = newFieldObject(cmd, attrs);
String targetEntityName = getAttr(attrs, "target-entity");
if (!StringUtils.isWhitespace(targetEntityName))
{
mmd.setTargetClassName(targetEntityName);
}
mmd.setOrdered(); // Mark as ordered so we know we're using JPA
if (mmd.getMappedBy() == null && mmd.getJoinMetaData() == null)
{
// M-N and no join specified (yet) so add one
mmd.setJoinMetaData(new JoinMetaData());
}
pushStack(mmd);
}
else if (localName.equals("element-collection"))
{
// Element collection for this field (1-N using non-PC elements)
ClassMetaData cmd = (ClassMetaData)getStack();
AbstractMemberMetaData mmd = newFieldObject(cmd, attrs);
JoinMetaData joinmd = new JoinMetaData();
mmd.setJoinMetaData(joinmd);
pushStack(joinmd); // Use join so we can distinguish "element-collection"
}
else if (localName.equals("collection-table"))
{
// Collection table for this field (1-N using non-PC elements)
JoinMetaData joinmd = (JoinMetaData)getStack();
joinmd.setTable(getAttr(attrs, "name"));
joinmd.setCatalog(getAttr(attrs, "catalog"));
joinmd.setSchema(getAttr(attrs, "schema"));
}
else if (localName.equals("map-key"))
{
// Key of a Map (field/property of the value class)
MetaData md = getStack();
if (md instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
String mappedByFieldName = getAttr(attrs, "name");
if (StringUtils.isWhitespace(mappedByFieldName))
{
mappedByFieldName = "#PK"; // Special value understood by MapMetaData.populate()
}
KeyMetaData keymd = fmd.getKeyMetaData();
if (keymd == null)
{
keymd = new KeyMetaData();
fmd.setKeyMetaData(keymd);
}
keymd.setMappedBy(mappedByFieldName);
}
else if (md instanceof JoinMetaData)
{
// Map<NonPC, NonPC> defining the key
JoinMetaData joinmd = (JoinMetaData)md;
AbstractMemberMetaData mmd = (AbstractMemberMetaData)joinmd.getParent();
String mappedByFieldName = getAttr(attrs, "name");
if (StringUtils.isWhitespace(mappedByFieldName))
{
mappedByFieldName = "#PK"; // Special value understood by MapMetaData.populate()
}
KeyMetaData keymd = mmd.getKeyMetaData();
if (keymd == null)
{
keymd = new KeyMetaData();
mmd.setKeyMetaData(keymd);
}
keymd.setMappedBy(mappedByFieldName);
}
}
else if (localName.equals("order-by"))
{
// Processed in endElement()
}
else if (localName.equals("order-column"))
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
String columnName = getAttr(attrs, "name");
OrderMetaData ordermd = new OrderMetaData();
ordermd.setColumnName(columnName);
ColumnMetaData colmd = new ColumnMetaData();
colmd.setName(getAttr(attrs, "name"));
colmd.setAllowsNull(getAttr(attrs, "nullable"));
colmd.setInsertable(getAttr(attrs, "insertable"));
colmd.setUpdateable(getAttr(attrs, "updatable"));
String columnDdl = getAttr(attrs, "column-definition");
if (columnDdl != null)
{
colmd.setColumnDdl(columnDdl);
}
ordermd.addColumn(colmd);
fmd.setOrderMetaData(ordermd);
}
else if (localName.equals("cascade"))
{
// Do nothing
}
else if (localName.equals("cascade-type"))
{
// Handled in elements below
}
else if (localName.equals("cascade-all"))
{
AbstractMemberMetaData mmd = (AbstractMemberMetaData)getStack();
mmd.setCascadePersist(true);
mmd.setCascadeUpdate(true);
mmd.setCascadeDelete(true);
mmd.setCascadeRefresh(true);
}
else if (localName.equals("cascade-persist"))
{
MetaData md = getStack();
if (md instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData mmd = (AbstractMemberMetaData)md;
mmd.setCascadePersist(true);
}
else if (md instanceof FileMetaData)
{
// Specified at <persistence-unit-defaults>
defaultCascadePersist = true;
}
}
else if (localName.equals("cascade-merge"))
{
AbstractMemberMetaData mmd = (AbstractMemberMetaData)getStack();
mmd.setCascadeUpdate(true);
}
else if (localName.equals("cascade-remove"))
{
AbstractMemberMetaData mmd = (AbstractMemberMetaData)getStack();
mmd.setCascadeDelete(true);
}
else if (localName.equals("cascade-refresh"))
{
AbstractMemberMetaData mmd = (AbstractMemberMetaData)getStack();
mmd.setCascadeRefresh(true);
}
else if (localName.equals("version"))
{
if (getStack() instanceof ClassMetaData)
{
// Version field
ClassMetaData cmd = (ClassMetaData)getStack();
AbstractMemberMetaData mmd = newFieldObject(cmd, attrs);
// Tag this field as the version field
VersionMetaData vermd = cmd.newVersionMetadata();
vermd.setStrategy(VersionStrategy.VERSION_NUMBER).setFieldName(mmd.getName());
pushStack(mmd);
}
}
else if (localName.equals("discriminator-value"))
{
// Processed in endElement()
}
else if (localName.equals("discriminator-column"))
{
ClassMetaData cmd = (ClassMetaData)getStack();
InheritanceMetaData inhmd = cmd.getInheritanceMetaData();
if (inhmd == null)
{
// Add an empty inheritance specification
inhmd = new InheritanceMetaData();
cmd.setInheritanceMetaData(inhmd);
}
DiscriminatorMetaData dismd = inhmd.getDiscriminatorMetaData();
if (dismd == null)
{
// User hasn't specified discriminator value so use "provider-specific function" (JPA 9.1.3.1) - what a joke spec
dismd = inhmd.newDiscriminatorMetadata();
dismd.setStrategy(DiscriminatorStrategy.VALUE_MAP);
dismd.setValue(cmd.getFullClassName()); // Default to class name as value unless set
dismd.setIndexed("true");
}
String jdbcType = null;
String discType = getAttr(attrs, "discriminator-type");
if (discType != null)
{
if (discType.equalsIgnoreCase("STRING"))
{
jdbcType = "VARCHAR";
}
else if (discType.equalsIgnoreCase("CHAR"))
{
jdbcType = "CHAR";
}
else if (discType.equalsIgnoreCase("INTEGER"))
{
jdbcType = "INTEGER";
}
}
ColumnMetaData colmd = new ColumnMetaData();
colmd.setName(getAttr(attrs, "name"));
colmd.setJdbcType(jdbcType);
colmd.setLength(getAttr(attrs, "length"));
String columnDdl = getAttr(attrs, "column-definition");
if (columnDdl != null)
{
colmd.setColumnDdl(columnDdl);
}
dismd.setColumnMetaData(colmd);
}
else if (localName.equals("generated-value"))
{
// generated value for this field
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
String strategy = getAttr(attrs, "strategy");
if (strategy != null)
{
if (strategy.equalsIgnoreCase("auto"))
{
fmd.setValueStrategy(IdentityStrategy.NATIVE);
}
else if (strategy.equalsIgnoreCase("table"))
{
fmd.setValueStrategy(IdentityStrategy.INCREMENT);
}
else if (strategy.equalsIgnoreCase("sequence"))
{
fmd.setValueStrategy(IdentityStrategy.SEQUENCE);
}
else if (strategy.equalsIgnoreCase("identity"))
{
fmd.setValueStrategy(IdentityStrategy.IDENTITY);
}
}
fmd.setValueGeneratorName(getAttr(attrs, "generator"));
}
else if (localName.equals("join-table"))
{
// Join table for this field
AbstractMemberMetaData fmd = (AbstractMemberMetaData)getStack();
JoinMetaData joinmd = new JoinMetaData();
String tableName = getAttr(attrs, "name");
String schemaName = getAttr(attrs, "schema");
String catalogName = getAttr(attrs, "catalog");
fmd.setJoinMetaData(joinmd);
if (!StringUtils.isWhitespace(tableName))
{
fmd.setTable(tableName);
}
if (!StringUtils.isWhitespace(schemaName))
{
fmd.setSchema(schemaName);
}
if (!StringUtils.isWhitespace(catalogName))
{
fmd.setSchema(catalogName);
}
pushStack(joinmd);
}
else if (localName.equals("column"))
{
// Column for the current field
MetaData md = getStack();
ColumnMetaData colmd = new ColumnMetaData();
colmd.setName(getAttr(attrs, "name"));
colmd.setLength(getAttr(attrs, "length"));
colmd.setScale(getAttr(attrs, "scale"));
colmd.setAllowsNull(getAttr(attrs, "nullable"));
colmd.setInsertable(getAttr(attrs, "insertable"));
colmd.setUpdateable(getAttr(attrs, "updatable"));
colmd.setUnique(getAttr(attrs, "unique"));
String columnDdl = getAttr(attrs, "column-definition");
if (columnDdl != null)
{
colmd.setColumnDdl(columnDdl);
}
if (md instanceof AbstractMemberMetaData)
{
AbstractMemberMetaData fmd = (AbstractMemberMetaData)md;
if (overrideMmd != null)
{
// Actually the column of an [attribute/association]-override
fmd = overrideMmd;
}
fmd.addColumn(colmd);
String table = getAttr(attrs, "table");
if (!StringUtils.isWhitespace(table))
{
// Using secondary table
fmd.setTable(table);
}
}
else if (md instanceof JoinMetaData)
{
// <element-collection>
// <column .../>
// </element-collection>
JoinMetaData joinmd = (JoinMetaData)md;
AbstractMemberMetaData mmd = (AbstractMemberMetaData)joinmd.getParent();
ElementMetaData elemmd = mmd.getElementMetaData();
if (elemmd == null)
{
elemmd = new ElementMetaData();
mmd.setElementMetaData(elemmd);
}
elemmd.addColumn(colmd);
}
}
else if (localName.equals("map-key-column"))
{
// Column for the current field
MetaData md = getStack();
ColumnMetaData colmd = new ColumnMetaData();
colmd.setName(getAttr(attrs, "name"));
if (getAttr(attrs, "precision")!=null)
{
colmd.setLength(getAttr(attrs, "precision"));
}
else
{
colmd.setLength(getAttr(attrs, "length"));
}
colmd.setScale(getAttr(attrs, "scale"));
colmd.setAllowsNull(getAttr(attrs, "nullable"));
colmd.setInsertable(getAttr(attrs, "insertable"));
colmd.setUpdateable(getAttr(attrs, "updatable"));
colmd.setUnique(getAttr(attrs, "unique"));
String columnDdl = getAttr(attrs, "column-definition");
if (columnDdl != null)
{
colmd.setColumnDdl(columnDdl);
}
AbstractMemberMetaData mmd = (AbstractMemberMetaData)md;
KeyMetaData keymd = mmd.getKeyMetaData();
if (keymd == null)
{
keymd = new KeyMetaData();
mmd.setKeyMetaData(keymd);
}
keymd.addColumn(colmd);
}
else if (localName.equals("join-column"))
{
MetaData md = getStack();
if (md instanceof JoinMetaData)
{
JoinMetaData joinmd = (JoinMetaData)md;
ColumnMetaData colmd = new ColumnMetaData();
colmd.setName(getAttr(attrs, "name"));
colmd.setTarget(getAttr(attrs, "referenced-column-name"));
colmd.setAllowsNull(getAttr(attrs, "nullable"));
colmd.setInsertable(getAttr(attrs, "insertable"));
colmd.setUpdateable(getAttr(attrs, "updatable"));
colmd.setUnique(getAttr(attrs, "unique"));
String columnDdl = getAttr(attrs, "column-definition");
if (columnDdl != null)
{
colmd.setColumnDdl(columnDdl);
}
joinmd.addColumn(colmd);
}
else if (md instanceof AbstractMemberMetaData)
{
// N-1, 1-1, 1-N (FK). Just set <column> for the field. Is this correct for 1-N FK ?
AbstractMemberMetaData fmd = (AbstractMemberMetaData)md;
ColumnMetaData colmd = new ColumnMetaData();
colmd.setName(getAttr(attrs, "name"));
colmd.setTarget(getAttr(attrs, "referenced-column-name"));
colmd.setAllowsNull(getAttr(attrs, "nullable"));
colmd.setInsertable(getAttr(attrs, "insertable"));
colmd.setUpdateable(getAttr(attrs, "updatable"));
colmd.setUnique(getAttr(attrs, "unique"));
fmd.addColumn(colmd);
}
}
else if (localName.equals("inverse-join-column"))
{
MetaData md = getStack();
if (md instanceof JoinMetaData)
{
// Join table column that is FK to the element table
JoinMetaData joinmd = (JoinMetaData)md;
ElementMetaData elemmd = null;
AbstractMemberMetaData fmd = (AbstractMemberMetaData)joinmd.getParent();
if (fmd.getElementMetaData() != null)
{
elemmd = fmd.getElementMetaData();
}
else
{
elemmd = new ElementMetaData();
fmd.setElementMetaData(elemmd);
}
ColumnMetaData colmd = new ColumnMetaData();
colmd.setName(getAttr(attrs, "name"));
colmd.setTarget(getAttr(attrs, "referenced-column-name"));
colmd.setAllowsNull(getAttr(attrs, "nullable"));
colmd.setInsertable(getAttr(attrs, "insertable"));
colmd.setUpdateable(getAttr(attrs, "updatable"));
colmd.setUnique(getAttr(attrs, "unique"));
elemmd.addColumn(colmd);
}
}
else if (localName.equals("unique-constraint"))
{
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Unique constraint on primary table
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
UniqueMetaData unimd = new UniqueMetaData();
unimd.setTable(cmd.getTable()); // Columns are in subelement
cmd.addUniqueConstraint(unimd);
pushStack(unimd);
}
else if (md instanceof JoinMetaData)
{
// Unique constraint on secondary table or join table
JoinMetaData joinmd = (JoinMetaData)md;
UniqueMetaData unimd = new UniqueMetaData();
joinmd.setUniqueMetaData(unimd);
pushStack(unimd);
}
}
else if (localName.equals("entity-listeners"))
{
// Nothing to add at this point
}
else if (localName.equals("entity-listener"))
{
MetaData md = getStack();
EventListenerMetaData elmd = new EventListenerMetaData(getAttr(attrs, "class"));
if (md instanceof AbstractClassMetaData)
{
// Specified at <entity> or <mapped-superclass>
((AbstractClassMetaData)md).addListener(elmd);
}
else if (md instanceof FileMetaData)
{
// Specified at <persistence-unit-defaults>
((FileMetaData)md).addListener(elmd);
}
pushStack(elmd);
}
else if (localName.equals("pre-persist"))
{
// Pre-create callback
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Specified at <entity> or <mapped-superclass>
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
EventListenerMetaData elmd = cmd.getListenerForClass(cmd.getFullClassName());
if (elmd == null)
{
elmd = new EventListenerMetaData(cmd.getFullClassName());
cmd.addListener(elmd);
}
elmd.addCallback("javax.persistence.PrePersist", getAttr(attrs, "method-name"));
}
else
{
// Specified at <entity-listener>
EventListenerMetaData elmd = (EventListenerMetaData)md;
elmd.addCallback("javax.persistence.PrePersist", getAttr(attrs, "method-name"));
}
}
else if (localName.equals("post-persist"))
{
// Post-create callback
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Specified at <entity> or <mapped-superclass>
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
EventListenerMetaData elmd = cmd.getListenerForClass(cmd.getFullClassName());
if (elmd == null)
{
elmd = new EventListenerMetaData(cmd.getFullClassName());
cmd.addListener(elmd);
}
elmd.addCallback("javax.persistence.PostPersist", getAttr(attrs, "method-name"));
}
else
{
// Specified at <entity-listener>
EventListenerMetaData elmd = (EventListenerMetaData)md;
elmd.addCallback("javax.persistence.PostPersist", getAttr(attrs, "method-name"));
}
}
else if (localName.equals("pre-remove"))
{
// Pre-delete callback
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Specified at <entity> or <mapped-superclass>
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
EventListenerMetaData elmd = cmd.getListenerForClass(cmd.getFullClassName());
if (elmd == null)
{
elmd = new EventListenerMetaData(cmd.getFullClassName());
cmd.addListener(elmd);
}
elmd.addCallback("javax.persistence.PreRemove", getAttr(attrs, "method-name"));
}
else
{
// Specified at <entity-listener>
EventListenerMetaData elmd = (EventListenerMetaData)md;
elmd.addCallback("javax.persistence.PreRemove", getAttr(attrs, "method-name"));
}
}
else if (localName.equals("post-remove"))
{
// Post-delete callback
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Specified at <entity> or <mapped-superclass>
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
EventListenerMetaData elmd = cmd.getListenerForClass(cmd.getFullClassName());
if (elmd == null)
{
elmd = new EventListenerMetaData(cmd.getFullClassName());
cmd.addListener(elmd);
}
elmd.addCallback("javax.persistence.PostRemove", getAttr(attrs, "method-name"));
}
else
{
// Specified at <entity-listener>
EventListenerMetaData elmd = (EventListenerMetaData)md;
elmd.addCallback("javax.persistence.PostRemove", getAttr(attrs, "method-name"));
}
}
else if (localName.equals("pre-update"))
{
// Pre-store callback
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Specified at <entity> or <mapped-superclass>
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
EventListenerMetaData elmd = cmd.getListenerForClass(cmd.getFullClassName());
if (elmd == null)
{
elmd = new EventListenerMetaData(cmd.getFullClassName());
cmd.addListener(elmd);
}
elmd.addCallback("javax.persistence.PreUpdate", getAttr(attrs, "method-name"));
}
else
{
// Specified at <entity-listener>
EventListenerMetaData elmd = (EventListenerMetaData)md;
elmd.addCallback("javax.persistence.PreUpdate", getAttr(attrs, "method-name"));
}
}
else if (localName.equals("post-update"))
{
// Post-store callback
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Specified at <entity> or <mapped-superclass>
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
EventListenerMetaData elmd = cmd.getListenerForClass(cmd.getFullClassName());
if (elmd == null)
{
elmd = new EventListenerMetaData(cmd.getFullClassName());
cmd.addListener(elmd);
}
elmd.addCallback("javax.persistence.PostUpdate", getAttr(attrs, "method-name"));
}
else
{
// Specified at <entity-listener>
EventListenerMetaData elmd = (EventListenerMetaData)md;
elmd.addCallback("javax.persistence.PostUpdate", getAttr(attrs, "method-name"));
}
}
else if (localName.equals("post-load"))
{
// Post-load callback
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Specified at <entity> or <mapped-superclass>
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
EventListenerMetaData elmd = cmd.getListenerForClass(cmd.getFullClassName());
if (elmd == null)
{
elmd = new EventListenerMetaData(cmd.getFullClassName());
cmd.addListener(elmd);
}
elmd.addCallback("javax.persistence.PostLoad", getAttr(attrs, "method-name"));
}
else
{
// Specified at <entity-listener>
EventListenerMetaData elmd = (EventListenerMetaData)md;
elmd.addCallback("javax.persistence.PostLoad", getAttr(attrs, "method-name"));
}
}
else if (localName.equals("attribute-override"))
{
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Override columns for a superclass field
AbstractClassMetaData cmd = (AbstractClassMetaData)md;
AbstractMemberMetaData fmd = newOverriddenFieldObject(cmd, attrs);
cmd.addMember(fmd);
pushStack(fmd);
}
else
{
// Override mappings for embedded field
AbstractMemberMetaData mmd = (AbstractMemberMetaData)md;
EmbeddedMetaData embmd = mmd.getEmbeddedMetaData();
if (embmd == null)
{
embmd = new EmbeddedMetaData();
embmd.setParent(mmd);
mmd.setEmbeddedMetaData(embmd);
}
AbstractMemberMetaData embMmd = newOverriddenEmbeddedFieldObject(embmd, attrs);
embmd.addMember(embMmd);
pushStack(mmd);
}
}
else if (localName.equals("association-override"))
{
MetaData md = getStack();
if (md instanceof AbstractClassMetaData)
{
// Override columns for a superclass field
AbstractClassMetaData cmd = (AbstractClassMetaData)getStack();
AbstractMemberMetaData fmd = newOverriddenFieldObject(cmd, attrs);
cmd.addMember(fmd);
pushStack(fmd);
}
else
{
// Override mappings for embedded field
AbstractMemberMetaData mmd = (AbstractMemberMetaData)md;
EmbeddedMetaData embmd = mmd.getEmbeddedMetaData();
if (embmd == null)
{
embmd = new EmbeddedMetaData();
embmd.setParent(mmd);
mmd.setEmbeddedMetaData(embmd);
}
AbstractMemberMetaData embMmd = newOverriddenEmbeddedFieldObject(embmd, attrs);
embmd.addMember(embMmd);
pushStack(mmd);
}
}
else if (localName.equals("exclude-default-listeners"))
{
AbstractClassMetaData cmd = (AbstractClassMetaData)getStack();
cmd.excludeDefaultListeners();
}
else if (localName.equals("exclude-superclass-listeners"))
{
AbstractClassMetaData cmd = (AbstractClassMetaData)getStack();
cmd.excludeSuperClassListeners();
}
else
{
String message = LOCALISER.msg("044037", qName);
NucleusLogger.METADATA.error(message);