diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/IOperationListener.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/IOperationListener.java index dfcd0066a527c2a8f7099708f34cc68dc1f264a8..8959f297e09adf9fd0f61e5ff097ee3b3368522d 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/IOperationListener.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/IOperationListener.java @@ -7,6 +7,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.Session; public interface IOperationListener<OPERATION extends IOperation, RESULT extends IOperationResult> { + public static final String LISTENER_PROPERTY_KEY = "operation-listener"; + public abstract void beforeOperation(IApplicationServerInternalApi api, Session session, OPERATION operation); public abstract void afterOperation(IApplicationServerInternalApi api, Session session, OPERATION operation, RESULT result, RuntimeException runtimeException); } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/shared/utils/AutoSymlink.java b/openbis/source/java/ch/ethz/sis/openbis/generic/shared/utils/AutoSymlink.java index 7c046542dad40dd251b2e552b455b84891ff1c2f..ba2cb5d42e782a47b6770b45a7078e7bc6dbc1a5 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/shared/utils/AutoSymlink.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/shared/utils/AutoSymlink.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.Map; import java.util.Properties; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.operation.IOperationListener; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.service.CustomASServiceProvider; import ch.systemsx.cisd.base.unix.Unix; import ch.systemsx.cisd.common.io.PropertyIOUtils; @@ -50,8 +51,9 @@ public class AutoSymlink new PluginType("services", CustomASServiceProvider.SERVICES_PROPERTY_KEY); PluginType miscellaneous = new PluginType("miscellaneous", null); + PluginType apiListener = new PluginType("api-listener", IOperationListener.LISTENER_PROPERTY_KEY); CorePluginsInjector injector = - new CorePluginsInjector(ScannerType.AS, new IPluginType[] { maintenanceTasks, services, miscellaneous }); + new CorePluginsInjector(ScannerType.AS, new IPluginType[] { maintenanceTasks, services, miscellaneous, apiListener }); Map<String, File> pluginFolders = injector.injectCorePlugins(properties); createSymlinks(new File("webapps/openbis/WEB-INF/lib/"), pluginFolders); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/coreplugin/CorePluginsInjectingPropertyPlaceholderConfigurer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/coreplugin/CorePluginsInjectingPropertyPlaceholderConfigurer.java index 5614e0a727731db2c01198e63f88cd3e078cc6d9..ce14b3101340986478fc2b408f2aa21921aa158f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/coreplugin/CorePluginsInjectingPropertyPlaceholderConfigurer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/coreplugin/CorePluginsInjectingPropertyPlaceholderConfigurer.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.coreplugin; import java.io.IOException; import java.util.Properties; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.operation.IOperationListener; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.service.CustomASServiceProvider; import ch.systemsx.cisd.common.maintenance.MaintenanceTaskUtils; import ch.systemsx.cisd.common.spring.ExposablePropertyPlaceholderConfigurer; @@ -65,10 +66,11 @@ public class CorePluginsInjectingPropertyPlaceholderConfigurer extends CustomImport.PropertyNames.CUSTOM_IMPORTS.getName()); PluginType queryDatabases = new PluginType("query-databases", "query-databases"); PluginType miscellaneous = new PluginType("miscellaneous", null); + PluginType apiListener = new PluginType("api-listener", IOperationListener.LISTENER_PROPERTY_KEY); PluginType webapps = PLUGIN_TYPE_WEBAPPS; new CorePluginsInjector(ScannerType.AS, new IPluginType[] - { maintenanceTasks, services, customImports, queryDatabases, miscellaneous, dssDataSources, + { maintenanceTasks, services, customImports, queryDatabases, miscellaneous, apiListener, dssDataSources, webapps }).injectCorePlugins(properties); // Inject the web apps into jetty