if (cmd != null)
{
// Class is persistable so process remaining annotations
InheritanceMetaData inhmd = null;
DiscriminatorMetaData dismd = null;
IdentityMetaData idmd = null;
PrimaryKeyMetaData pkmd = null;
VersionMetaData vermd = null;
JoinMetaData[] joins = null;
QueryMetaData[] queries = null;
FetchPlanMetaData[] fetchPlans = null;
FetchGroupMetaData[] fetchGroups = null;
SequenceMetaData seqmd = null;
String cacheable = null;
boolean embeddedOnly = false;
ColumnMetaData[] unmappedColumns = null;
HashSet<IndexMetaData> indices = null;
HashSet<UniqueMetaData> uniqueKeys = null;
HashSet<ForeignKeyMetaData> fks = null;
HashSet<ExtensionMetaData> extensions = null;
for (int i=0;i<annotations.length;i++)
{
if (isSupportedAnnotation(annotations[i].getName()))
{
HashMap<String, Object> annotationValues = annotations[i].getNameValueMap();
String annName = annotations[i].getName();
if (annName.equals(JDOAnnotationUtils.EMBEDDED_ONLY))
{
embeddedOnly = true;
}
else if (annName.equals(JDOAnnotationUtils.VERSION))
{
VersionStrategy versionStrategy = (VersionStrategy)annotationValues.get("strategy");
String strategy = JDOAnnotationUtils.getVersionStrategyString(versionStrategy);
String indexed = (String)annotationValues.get("indexed");
String column = (String)annotationValues.get("column");
Column[] columns = (Column[])annotationValues.get("columns");
vermd = new VersionMetaData();
vermd.setStrategy(strategy);
vermd.setColumnName(column);
vermd.setIndexed(IndexedValue.getIndexedValue(indexed));
if (columns != null && columns.length > 0)
{
// Only use the first column
ColumnMetaData colmd =
JDOAnnotationUtils.getColumnMetaDataForColumnAnnotation(columns[0]);
vermd.addColumn(colmd);
}
JDOAnnotationUtils.addExtensionsToMetaData(vermd, (Extension[])annotationValues.get("extensions"));
}
else if (annName.equals(JDOAnnotationUtils.DATASTORE_IDENTITY))
{
String strategy = JDOAnnotationUtils.getIdentityStrategyString(
(IdGeneratorStrategy)annotationValues.get("strategy"));
String customStrategy = (String)annotationValues.get("customStrategy");
if (!StringUtils.isWhitespace(customStrategy))
{
// User has provided an extension strategy
strategy = customStrategy;
}
String sequence = (String)annotationValues.get("sequence");
String column = (String)annotationValues.get("column");
Column[] columns = (Column[])annotationValues.get("columns");
idmd = new IdentityMetaData();
idmd.setColumnName(column);
idmd.setValueStrategy(IdentityStrategy.getIdentityStrategy(strategy));
idmd.setSequence(sequence);
if (columns != null && columns.length > 0)
{
// Only use the first column
ColumnMetaData colmd =
JDOAnnotationUtils.getColumnMetaDataForColumnAnnotation(columns[0]);
idmd.addColumn(colmd);
}
JDOAnnotationUtils.addExtensionsToMetaData(idmd, (Extension[])annotationValues.get("extensions"));
}
else if (annName.equals(JDOAnnotationUtils.PRIMARY_KEY))
{
String pkName = (String)annotationValues.get("name");
String pkColumn = (String)annotationValues.get("column");
Column[] columns = (Column[])annotationValues.get("columns");
pkmd = new PrimaryKeyMetaData();
pkmd.setName(pkName);
pkmd.setColumnName(pkColumn);
if (columns != null && columns.length > 0)
{
for (int j=0;j<columns.length;j++)
{
pkmd.addColumn(JDOAnnotationUtils.getColumnMetaDataForColumnAnnotation(columns[j]));
}
}
}
else if (annName.equals(JDOAnnotationUtils.JOINS))
{
if (joins != null)
{
NucleusLogger.METADATA.warn(LOCALISER.msg("044210", cmd.getFullClassName()));
}
Join[] js = (Join[])annotationValues.get("value");
if (js != null && js.length > 0)
{
joins = new JoinMetaData[js.length];
for (int j=0;j<js.length;j++)
{
joins[j] = new JoinMetaData();
joins[j].setTable(js[j].table());
joins[j].setColumnName(js[j].column());
joins[j].setIndexed(IndexedValue.getIndexedValue(js[i].indexed()));
joins[j].setOuter(js[j].outer());
joins[j].setUnique(js[i].unique());
joins[j].setDeleteAction(JDOAnnotationUtils.getForeignKeyActionString(js[j].deleteAction()));
}
}
}
else if (annName.equals(JDOAnnotationUtils.JOIN))
{
if (joins != null)
{
NucleusLogger.METADATA.warn(LOCALISER.msg("044210", cmd.getFullClassName()));
}
joins = new JoinMetaData[1];
joins[0] = new JoinMetaData();
joins[0].setTable((String)annotationValues.get("table"));
joins[0].setColumnName((String)annotationValues.get("column"));
joins[0].setIndexed(IndexedValue.getIndexedValue((String)annotationValues.get("indexed")));
joins[0].setOuter((String)annotationValues.get("outer"));
joins[0].setUnique((String)annotationValues.get("unique"));
joins[0].setDeleteAction(((ForeignKeyAction)annotationValues.get("deleteAction")).toString());
JDOAnnotationUtils.addExtensionsToMetaData(joins[0], (Extension[])annotationValues.get("extensions"));
}
else if (annName.equals(JDOAnnotationUtils.INHERITANCE))
{
String strategy = JDOAnnotationUtils.getInheritanceStrategyString(
(InheritanceStrategy)annotationValues.get("strategy"));
String customStrategy = (String)annotationValues.get("customStrategy");
if (!StringUtils.isWhitespace(customStrategy))
{
// User has provided an extension strategy
strategy = customStrategy;
}
inhmd = new InheritanceMetaData();
inhmd.setStrategy(strategy);
}
else if (annName.equals(JDOAnnotationUtils.DISCRIMINATOR))
{
DiscriminatorStrategy discriminatorStrategy = (DiscriminatorStrategy)annotationValues.get("strategy");
String strategy = JDOAnnotationUtils.getDiscriminatorStrategyString(discriminatorStrategy);
String column = (String)annotationValues.get("column");
String indexed = (String)annotationValues.get("indexed");
String value = (String)annotationValues.get("value");
Column[] columns = (Column[])annotationValues.get("columns");
dismd = new DiscriminatorMetaData();
dismd.setColumnName(column);
dismd.setValue(value);
dismd.setStrategy(strategy);
dismd.setIndexed(indexed);
if (columns != null && columns.length > 0)
{
// Only use the first column
ColumnMetaData colmd =
JDOAnnotationUtils.getColumnMetaDataForColumnAnnotation(columns[0]);
dismd.setColumnMetaData(colmd);
}
}
else if (annName.equals(JDOAnnotationUtils.QUERIES))
{
if (queries != null)