public AbstractClassLibrary(AbstractClassLibrary<T> factory, CopyStrategyLibrary copyStrategies) {
this.reflectFactory = factory.reflectFactory;
this.copyStrategyLibrary = copyStrategies;
for (Table.Cell<Name, Name, ClassMetadata<? extends T, ?>> cell: factory.uriLookup.cellSet()) {
Name objectName = cell.getRowKey();
Name moduleName = cell.getColumnKey();
ClassMetadata<? extends T, ?> oldMetaData = cell.getValue();
Class<? extends T> clazz = oldMetaData.getType();
SimpleUri uri = oldMetaData.getUri();
ClassMetadata<? extends T, ?> metadata = createMetadata(clazz, factory.reflectFactory, copyStrategies, uri);
if (metadata != null) {
classLookup.put(clazz, metadata);
uriLookup.put(objectName, moduleName, metadata);
} else {
throw new RuntimeException("Failed to create copy of class library");
}
}
}