public void initialize() {
if(databaseConnection != null) {
if(logger.isDebugging()) {
logger.debugFine("Loading data from database connection.");
}
MultipleObjectsBundle objpackages = databaseConnection.loadData();
// Run at most once.
databaseConnection = null;
// Find DBID column
int idrepnr = findDBIDColumn(objpackages);
// Build DBID array
if(idrepnr == -1) {
this.ids = DBIDUtil.generateStaticDBIDRange(objpackages.dataLength());
}
else {
final ArrayModifiableDBIDs newids = DBIDUtil.newArray(objpackages.dataLength());
for(int j = 0; j < objpackages.dataLength(); j++) {
DBID newid = (DBID) objpackages.data(j, idrepnr);
newids.add(newid);
}
this.ids = newids;
}
// Replace id representation.
// TODO: this is an ugly hack
this.idrep = new DBIDView(this, this.ids);
relations.add(this.idrep);
getHierarchy().add(this, idrep);
// insert into db - note: DBIDs should have been prepared before this!
Relation<?>[] targets = alignColumns(objpackages);
for(int j = 0; j < objpackages.dataLength(); j++) {
// insert object
final DBID newid = ids.get(j);
for(int i = 0; i < targets.length; i++) {
// DBIDs were handled above.
if(i == idrepnr) {
continue;
}
@SuppressWarnings("unchecked")
final Relation<Object> relation = (Relation<Object>) targets[i];
relation.set(newid, objpackages.data(j, i));
}
}
for(Relation<?> relation : relations) {
SimpleTypeInformation<?> meta = relation.getDataTypeInformation();