Merge remote-tracking branch 'origin/master' into anehmer/integration
diff --git a/src/main/java/org/eclipse/mdm/api/odsadapter/ODSContext.java b/src/main/java/org/eclipse/mdm/api/odsadapter/ODSContext.java
index d2de0a5..71e4391 100644
--- a/src/main/java/org/eclipse/mdm/api/odsadapter/ODSContext.java
+++ b/src/main/java/org/eclipse/mdm/api/odsadapter/ODSContext.java
@@ -32,6 +32,7 @@
import org.eclipse.mdm.api.odsadapter.filetransfer.CORBAFileService;
import org.eclipse.mdm.api.odsadapter.filetransfer.Transfer;
import org.eclipse.mdm.api.odsadapter.lookup.EntityLoader;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfigRepositoryLoader;
import org.eclipse.mdm.api.odsadapter.notification.ODSNotificationServiceFactory;
import org.eclipse.mdm.api.odsadapter.query.ODSEntityFactory;
import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
@@ -77,7 +78,7 @@
this.fileServer = fileServer;
this.parameters = parameters;
- this.modelManager = new ODSModelManager(orb, aoSession);
+ this.modelManager = initModelManager(orb, aoSession);
this.queryService = new ODSQueryService(this.modelManager);
this.entityManager = new ODSEntityManager(this);
this.entityLoader = new EntityLoader(modelManager, queryService);
@@ -85,6 +86,39 @@
LOGGER.debug("ODSContext initialized.");
}
+ private static final String ENTITYCONFIGREPOSITORYLOADERCLASS_ATTRIBUTE_NAME = "entityConfigRepositoryLoaderClass";
+
+ /**
+ * Initializes the ODSModelManager with an optionally configured
+ * {@link EntityConfigRepositoryLoader} in service.xml
+ *
+ * @return The initialized {@link ODSModelManager}
+ */
+ private ODSModelManager initModelManager(ORB orb, AoSession aoSession) throws AoException {
+ // check parameters for configured custom EntityConfigRepositoryLoader
+ String entityConfigRepositoryLoaderClassName = parameters.get(ENTITYCONFIGREPOSITORYLOADERCLASS_ATTRIBUTE_NAME);
+
+ // if custom loader is configured
+ if (entityConfigRepositoryLoaderClassName != null) {
+ EntityConfigRepositoryLoader entityConfigRepositoryLoader;
+ try {
+ entityConfigRepositoryLoader = Thread.currentThread().getContextClassLoader()
+ .loadClass(entityConfigRepositoryLoaderClassName).asSubclass(EntityConfigRepositoryLoader.class)
+ .newInstance();
+ } catch (Exception e) {
+ // just log an error, but recover using the default loader
+ LOGGER.error("Failed to initialize EntityConfigRepositoryLoaderClass. Using default.", e);
+ return new ODSModelManager(orb, aoSession);
+ }
+
+ return new ODSModelManager(orb, aoSession, entityConfigRepositoryLoader);
+ }
+ // if not, use default
+ else {
+ return new ODSModelManager(orb, aoSession);
+ }
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/src/main/java/org/eclipse/mdm/api/odsadapter/lookup/config/DefaultEntityConfigRepositoryLoader.java b/src/main/java/org/eclipse/mdm/api/odsadapter/lookup/config/DefaultEntityConfigRepositoryLoader.java
index 82529f5..adbf57e 100644
--- a/src/main/java/org/eclipse/mdm/api/odsadapter/lookup/config/DefaultEntityConfigRepositoryLoader.java
+++ b/src/main/java/org/eclipse/mdm/api/odsadapter/lookup/config/DefaultEntityConfigRepositoryLoader.java
@@ -321,7 +321,7 @@
* to the MIME type.
* @return The created {@code EntityConfig} is returned.
*/
- private <T extends Entity> EntityConfig<T> create(ODSModelManager modelManager, Key<T> key, String typeName,
+ public <T extends Entity> EntityConfig<T> create(ODSModelManager modelManager, Key<T> key, String typeName,
boolean appendName) {
EntityConfig<T> entityConfig = new EntityConfig<>(key);
ODSEntityType entityType = (ODSEntityType) modelManager.getEntityType(typeName);
@@ -347,4 +347,4 @@
}
return sb.toString();
}
-}
+}
\ No newline at end of file