candidateTables.add(tbl);
}
}
}
}
return new ClassTableExtent(om,
(DatastoreClass[])candidateTables.toArray(new DatastoreClass[candidateTables.size()]),
c, subclasses, cmd);
}
else
{
// "new-table", "superclass-table", "subclass-table"
if (t instanceof ClassView)
{
return new ClassViewExtent(om, t, c, subclasses, cmd);
}
else if (t instanceof ClassTable)
{
return new ClassTableExtent(om, t, c, subclasses, cmd);
}
else
{
// No specific table, so either has no table, or multiple
// This happens with the "subclass-table" inheritance strategy
AbstractClassMetaData[] cmds = getClassesManagingTableForClass(cmd, om.getClassLoaderResolver());
if (cmds != null)
{
DatastoreClass[] tables = new DatastoreClass[cmds.length];
for (int i=0;i<cmds.length;i++)
{
tables[i] = getDatastoreClass(cmds[i].getFullClassName(), om.getClassLoaderResolver());
}
return new ClassTableExtent(om, tables, c, subclasses, cmd);
}
else
{
throw new JPOXUserException("Attempt to create an Extent for class " + c.getName() + " which has MetaData, yet no table was found! This should be impossible");
}