diff --git a/java/com.sap.sailing.datamining/META-INF/MANIFEST.MF b/java/com.sap.sailing.datamining/META-INF/MANIFEST.MF index d1f520a759c..37c8afb4b4b 100644 --- a/java/com.sap.sailing.datamining/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.datamining/META-INF/MANIFEST.MF @@ -15,7 +15,8 @@ Require-Bundle: com.sap.sailing.domain;bundle-version="1.0.0", com.sap.sse.datamining;bundle-version="1.0.0", com.sap.sse.datamining.shared;bundle-version="1.0.0", com.sap.sse, - com.sap.sse.common + com.sap.sse.common, + org.eclipse.osgi Bundle-ClassPath: . Bundle-Activator: com.sap.sailing.datamining.Activator Bundle-ActivationPolicy: lazy diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Activator.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Activator.java index e1a694ee167..498408a8aca 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Activator.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/Activator.java @@ -1,5 +1,6 @@ package com.sap.sailing.datamining; +import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -14,6 +15,7 @@ import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext; import com.sap.sailing.datamining.data.HasTrackedRaceContext; import com.sap.sse.datamining.DataMiningBundleService; import com.sap.sse.datamining.DataRetrieverChainDefinition; +import com.sap.sse.datamining.DataSourceProvider; import com.sap.sse.i18n.ResourceBundleStringMessages; import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl; @@ -24,13 +26,14 @@ public class Activator implements BundleActivator, DataMiningBundleService { private static Activator INSTANCE; private final ResourceBundleStringMessages sailingServerStringMessages; - private final SailingDataRetrieverChainDefinitions dataRetrieverChainDefinitions; + private final SailingDataRetrievalChainDefinitions dataRetrieverChainDefinitions; private final SailingClusterGroups clusterGroups; + private DataSourceProvider racingEventServiceProvider; private ServiceReference dataMiningBundleServiceReference; public Activator() { - dataRetrieverChainDefinitions = new SailingDataRetrieverChainDefinitions(); + dataRetrieverChainDefinitions = new SailingDataRetrievalChainDefinitions(); sailingServerStringMessages = new ResourceBundleStringMessagesImpl(STRING_MESSAGES_BASE_NAME, getClass().getClassLoader()); clusterGroups = new SailingClusterGroups(); } @@ -38,6 +41,7 @@ public class Activator implements BundleActivator, DataMiningBundleService { @Override public void start(BundleContext context) throws Exception { INSTANCE = this; + racingEventServiceProvider = new RacingEventServiceProvider(context); dataMiningBundleServiceReference = context.registerService(DataMiningBundleService.class, this, null).getReference(); } @@ -68,6 +72,13 @@ public class Activator implements BundleActivator, DataMiningBundleService { return dataRetrieverChainDefinitions.getDataRetrieverChainDefinitions(); } + @Override + public Iterable> getDataSourceProviders() { + Collection> dataSourceProviders = new HashSet<>(); + dataSourceProviders.add(racingEventServiceProvider); + return dataSourceProviders; + } + public SailingClusterGroups getClusterGroups() { return clusterGroups; } diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/RacingEventServiceProvider.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/RacingEventServiceProvider.java new file mode 100644 index 00000000000..9cffedfe4eb --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/RacingEventServiceProvider.java @@ -0,0 +1,29 @@ +package com.sap.sailing.datamining; + +import org.osgi.framework.BundleContext; +import org.osgi.util.tracker.ServiceTracker; + +import com.sap.sailing.server.RacingEventService; +import com.sap.sse.datamining.impl.AbstractDataSourceProvider; + +public class RacingEventServiceProvider extends AbstractDataSourceProvider { + + private final ServiceTracker racingEventServiceTracker; + + public RacingEventServiceProvider(BundleContext context) { + super(RacingEventService.class); + racingEventServiceTracker = createAndOpenRacingEventServiceTracker(context); + } + + private ServiceTracker createAndOpenRacingEventServiceTracker(BundleContext context) { + ServiceTracker result = new ServiceTracker<>(context, RacingEventService.class.getName(), null); + result.open(); + return result; + } + + @Override + public RacingEventService getDataSource() { + return racingEventServiceTracker.getService(); + } + +} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrievalChainDefinitions.java similarity index 95% rename from java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java rename to java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrievalChainDefinitions.java index a1a6cc23517..83f22e6f941 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrieverChainDefinitions.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SailingDataRetrievalChainDefinitions.java @@ -21,11 +21,11 @@ import com.sap.sailing.server.RacingEventService; import com.sap.sse.datamining.DataRetrieverChainDefinition; import com.sap.sse.datamining.impl.SimpleDataRetrieverChainDefinition; -public class SailingDataRetrieverChainDefinitions { +public class SailingDataRetrievalChainDefinitions { private final Collection> dataRetrieverChainDefinitions; - public SailingDataRetrieverChainDefinitions() { + public SailingDataRetrievalChainDefinitions() { dataRetrieverChainDefinitions = new ArrayList<>(); final DataRetrieverChainDefinition trackedRaceRetrieverChainDefinition = new SimpleDataRetrieverChainDefinition<>( @@ -55,7 +55,7 @@ public class SailingDataRetrieverChainDefinitions { dataRetrieverChainDefinitions.add(gpsFixRetrieverChainDefinition); } - public Collection> getDataRetrieverChainDefinitions() { + public Iterable> getDataRetrieverChainDefinitions() { return dataRetrieverChainDefinitions; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java index 96950fc2b63..80b35dc16d5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java @@ -34,16 +34,12 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM private final BundleContext context; private final ServiceTracker dataMiningServerTracker; - private final ServiceTracker racingEventServiceTracker; private final FunctionDTOFactory functionDTOFactory; public DataMiningServiceImpl() { context = Activator.getDefault(); - dataMiningServerTracker = createAndOpenDataMiningServerTracker(context); - racingEventServiceTracker = createAndOpenRacingEventServiceTracker(context); - functionDTOFactory = new FunctionDTOFactory(); } @@ -58,17 +54,6 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM private DataMiningServer getDataMiningServer() { return dataMiningServerTracker.getService(); } - - private ServiceTracker createAndOpenRacingEventServiceTracker(BundleContext context) { - ServiceTracker result = new ServiceTracker( - context, RacingEventService.class.getName(), null); - result.open(); - return result; - } - - private RacingEventService getRacingEventService() { - return racingEventServiceTracker.getService(); - } @Override public Iterable getAllStatistics(String localeInfoName) { @@ -110,17 +95,17 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM public Iterable getDataRetrieverChainDefinitionsFor(FunctionDTO statisticToCalculate, String localeInfoName) { Class baseDataType = getBaseDataType(statisticToCalculate); @SuppressWarnings("unchecked") - Iterable> dataRetrieverChainDefinitions = (Iterable>)(Iterable) getDataMiningServer().getDataRetrieverChainDefinitionsByDataType(baseDataType); + Iterable> dataRetrieverChainDefinitions = (Iterable>)(Iterable) getDataMiningServer().getDataRetrieverChainDefinitionsByDataType(baseDataType); return dataRetrieverChainDefinitionsAsDTOs(dataRetrieverChainDefinitions, localeInfoName); } private Collection dataRetrieverChainDefinitionsAsDTOs( - Iterable> dataRetrieverChainDefinitions, String localeInfoName) { + Iterable> dataRetrieverChainDefinitions, String localeInfoName) { Locale locale = ResourceBundleStringMessages.Util.getLocaleFor(localeInfoName); ResourceBundleStringMessages ServerStringMessages = getDataMiningServer().getStringMessages(); Collection DTOs = new ArrayList<>(); - for (DataRetrieverChainDefinition dataRetrieverChainDefinition : dataRetrieverChainDefinitions) { + for (DataRetrieverChainDefinition dataRetrieverChainDefinition : dataRetrieverChainDefinitions) { Collection retrievedDataTypesChain = new ArrayList<>(); for (DataRetrieverTypeWithInformation retrieverTypeWithInformation : dataRetrieverChainDefinition.getDataRetrieverTypesWithInformation()) { String typeName = retrieverTypeWithInformation.getRetrievedDataType().getSimpleName(); @@ -142,7 +127,7 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM DataRetrieverChainDefinition retrieverChainDefinition = getDataMiningServer().getDataRetrieverChainDefinition(dataRetrieverChainDefinitionDTO.getId()); Iterable> dimensions = functionDTOsAsFunctions(dimensionDTOs); Locale locale = ResourceBundleStringMessages.Util.getLocaleFor(localeInfoName); - Query> dimensionValuesQuery = getDataMiningServer().createDimensionValuesQuery(getRacingEventService(), retrieverChainDefinition, retrieverLevel, dimensions, locale); + Query> dimensionValuesQuery = getDataMiningServer().createDimensionValuesQuery(retrieverChainDefinition, retrieverLevel, dimensions, locale); QueryResult> result = dimensionValuesQuery.run(); return result; } @@ -159,7 +144,7 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM @Override public QueryResult runQuery(QueryDefinitionDTO queryDefinitionDTO) throws Exception { QueryDefinition queryDefinition = getDataMiningServer().getQueryDefinitionForDTO(queryDefinitionDTO); - Query query = getDataMiningServer().createQuery(getRacingEventService(), queryDefinition); + Query query = getDataMiningServer().createQuery(queryDefinition); QueryResult result = query.run(); return result; } diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainDefinitionRegistry.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainDefinitionRegistry.java index bb4fae751f4..b0bee1580f8 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainDefinitionRegistry.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDataRetrieverChainDefinitionRegistry.java @@ -10,6 +10,7 @@ import org.junit.Before; import org.junit.Test; import com.sap.sse.datamining.DataRetrieverChainDefinition; +import com.sap.sse.datamining.DataRetrieverChainDefinitionRegistry; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Regatta; import com.sap.sse.datamining.test.functions.registry.test_contexts.Test_HasLegOfCompetitorContext; diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningBundleService.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningBundleService.java index 84694004ccb..d9ada1c7a9c 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningBundleService.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningBundleService.java @@ -35,4 +35,9 @@ public interface DataMiningBundleService { */ public Iterable> getDataRetrieverChainDefinitions(); + /** + * @return a collection of {@link DataSourceProvider DataSourceProviders}, that are used to get the data sources for the queries + */ + public Iterable> getDataSourceProviders(); + } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningServer.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningServer.java index e24bdcd83cc..d80734661ac 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningServer.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataMiningServer.java @@ -7,7 +7,6 @@ import java.util.concurrent.ExecutorService; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.FunctionProvider; -import com.sap.sse.datamining.impl.DataRetrieverChainDefinitionProvider; import com.sap.sse.datamining.shared.QueryDefinitionDTO; import com.sap.sse.datamining.shared.dto.FunctionDTO; import com.sap.sse.i18n.ResourceBundleStringMessages; @@ -51,10 +50,9 @@ public interface DataMiningServer { public QueryDefinition getQueryDefinitionForDTO(QueryDefinitionDTO queryDefinitionDTO); - public Query> createDimensionValuesQuery(DataSource dataSource, - DataRetrieverChainDefinition dataRetrieverChainDefinition, int retrieverLevel, + public Query> createDimensionValuesQuery(DataRetrieverChainDefinition dataRetrieverChainDefinition, int retrieverLevel, Iterable> dimensions, Locale locale); - public Query createQuery(DataSource dataSource, QueryDefinition queryDefinition); + public Query createQuery(QueryDefinition queryDefinition); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverChainDefinitionProvider.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinitionProvider.java similarity index 87% rename from java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverChainDefinitionProvider.java rename to java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinitionProvider.java index dd18b10ed11..eeec25d6d1f 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverChainDefinitionProvider.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinitionProvider.java @@ -1,10 +1,8 @@ -package com.sap.sse.datamining.impl; +package com.sap.sse.datamining; import java.util.Collection; import java.util.UUID; -import com.sap.sse.datamining.DataRetrieverChainDefinition; - public interface DataRetrieverChainDefinitionProvider { public Collection> getBySourceType( diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverChainDefinitionRegistry.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinitionRegistry.java similarity index 75% rename from java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverChainDefinitionRegistry.java rename to java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinitionRegistry.java index 9b7794e6575..820f8bf0834 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataRetrieverChainDefinitionRegistry.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataRetrieverChainDefinitionRegistry.java @@ -1,6 +1,5 @@ -package com.sap.sse.datamining.impl; +package com.sap.sse.datamining; -import com.sap.sse.datamining.DataRetrieverChainDefinition; public interface DataRetrieverChainDefinitionRegistry extends DataRetrieverChainDefinitionProvider { diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataSourceProvider.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataSourceProvider.java new file mode 100644 index 00000000000..9b0f7d38ba3 --- /dev/null +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/DataSourceProvider.java @@ -0,0 +1,9 @@ +package com.sap.sse.datamining; + +public interface DataSourceProvider { + + public Class getDataSourceType(); + + public DataSourceType getDataSource(); + +} diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/ModifiableDataMiningServer.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/ModifiableDataMiningServer.java index 081cc62fcf7..2bf9ef8cf11 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/ModifiableDataMiningServer.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/ModifiableDataMiningServer.java @@ -14,6 +14,9 @@ public interface ModifiableDataMiningServer extends DataMiningServer { public void registerAllWithExternalFunctionPolicy(Iterable> externalClassesToScan); public void unregisterAllFunctionsOf(Iterable> classesToUnregister); + + public void setDataSourceProvider(DataSourceProvider dataSourceProvider); + public void removeDataSourceProvider(DataSourceProvider dataSourceProvider); public void registerDataRetrieverChainDefinition(DataRetrieverChainDefinition dataRetrieverChainDefinition); public void unregisterDataRetrieverChainDefinition(DataRetrieverChainDefinition dataRetrieverChainDefinition); diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/AbstractDataSourceProvider.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/AbstractDataSourceProvider.java new file mode 100644 index 00000000000..e05f149c824 --- /dev/null +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/AbstractDataSourceProvider.java @@ -0,0 +1,18 @@ +package com.sap.sse.datamining.impl; + +import com.sap.sse.datamining.DataSourceProvider; + +public abstract class AbstractDataSourceProvider implements DataSourceProvider { + + private final Class dataSourceType; + + public AbstractDataSourceProvider(Class dataSourceType) { + this.dataSourceType = dataSourceType; + } + + @Override + public Class getDataSourceType() { + return dataSourceType; + } + +} diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningActivator.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningActivator.java index 8303724ffb1..ef13c935e21 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningActivator.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningActivator.java @@ -17,6 +17,8 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer; import com.sap.sse.datamining.DataMiningBundleService; import com.sap.sse.datamining.DataMiningServer; import com.sap.sse.datamining.DataRetrieverChainDefinition; +import com.sap.sse.datamining.DataRetrieverChainDefinitionRegistry; +import com.sap.sse.datamining.DataSourceProvider; import com.sap.sse.datamining.ModifiableDataMiningServer; import com.sap.sse.datamining.impl.functions.FunctionManager; import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl; @@ -75,6 +77,9 @@ public class DataMiningActivator implements BundleActivator { dataMiningServer.registerAllClasses(dataMiningBundleService.getClassesWithMarkedMethods()); + for (DataSourceProvider dataSourceProvider : dataMiningBundleService.getDataSourceProviders()) { + dataMiningServer.setDataSourceProvider(dataSourceProvider); + } for (DataRetrieverChainDefinition dataRetrieverChainDefinition : dataMiningBundleService.getDataRetrieverChainDefinitions()) { dataMiningServer.registerDataRetrieverChainDefinition(dataRetrieverChainDefinition); } @@ -84,7 +89,11 @@ public class DataMiningActivator implements BundleActivator { dataMiningServer.removeStringMessages(dataMiningBundleService.getStringMessages()); dataMiningServer.unregisterAllFunctionsOf(dataMiningBundleService.getClassesWithMarkedMethods()); + + for (DataSourceProvider dataSourceProvider : dataMiningBundleService.getDataSourceProviders()) { + dataMiningServer.removeDataSourceProvider(dataSourceProvider); + } for (DataRetrieverChainDefinition dataRetrieverChainDefinition : dataMiningBundleService.getDataRetrieverChainDefinitions()) { dataMiningServer.unregisterDataRetrieverChainDefinition(dataRetrieverChainDefinition); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningServerImpl.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningServerImpl.java index dad7509bd31..292fca6051b 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningServerImpl.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/DataMiningServerImpl.java @@ -2,6 +2,7 @@ package com.sap.sse.datamining.impl; import java.io.Serializable; import java.util.Collection; +import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; @@ -10,6 +11,9 @@ import java.util.UUID; import java.util.concurrent.ExecutorService; import com.sap.sse.datamining.DataRetrieverChainDefinition; +import com.sap.sse.datamining.DataRetrieverChainDefinitionProvider; +import com.sap.sse.datamining.DataRetrieverChainDefinitionRegistry; +import com.sap.sse.datamining.DataSourceProvider; import com.sap.sse.datamining.ModifiableDataMiningServer; import com.sap.sse.datamining.Query; import com.sap.sse.datamining.QueryDefinition; @@ -32,7 +36,8 @@ public class DataMiningServerImpl implements ModifiableDataMiningServer { private final FunctionRegistry functionRegistry; private final FunctionProvider functionProvider; - private DataRetrieverChainDefinitionRegistry dataRetrieverChainDefinitionRegistry; + private final Map, DataSourceProvider> dataSourceProviderMappedByDataSourceType; + private final DataRetrieverChainDefinitionRegistry dataRetrieverChainDefinitionRegistry; public DataMiningServerImpl(ExecutorService executorService, FunctionRegistry functionRegistry, FunctionProvider functionProvider, DataRetrieverChainDefinitionRegistry dataRetrieverChainDefinitionRegistry) { this.stringMessages = new CompoundResourceBundleStringMessages(); @@ -40,6 +45,7 @@ public class DataMiningServerImpl implements ModifiableDataMiningServer { this.queryFactory = new QueryFactory(); this.functionRegistry = functionRegistry; this.functionProvider = functionProvider; + dataSourceProviderMappedByDataSourceType = new HashMap<>(); this.dataRetrieverChainDefinitionRegistry = dataRetrieverChainDefinitionRegistry; } @@ -118,6 +124,16 @@ public class DataMiningServerImpl implements ModifiableDataMiningServer { return functionProvider.getFunctionForDTO(functionDTO); } + @Override + public void setDataSourceProvider(DataSourceProvider dataSourceProvider) { + dataSourceProviderMappedByDataSourceType.put(dataSourceProvider.getDataSourceType(), dataSourceProvider); + } + + @Override + public void removeDataSourceProvider(DataSourceProvider dataSourceProvider) { + dataSourceProviderMappedByDataSourceType.remove(dataSourceProvider.getDataSourceType()); + } + @Override public DataRetrieverChainDefinitionProvider getDataRetrieverChainDefinitionProvider() { return dataRetrieverChainDefinitionRegistry; @@ -190,15 +206,22 @@ public class DataMiningServerImpl implements ModifiableDataMiningServer { } @Override - public Query createQuery(DataSource dataSource, QueryDefinition queryDefinition) { - return queryFactory.createQuery(dataSource, queryDefinition, getStringMessages(), getExecutorService()); + public Query createQuery(QueryDefinition queryDefinition) { + DataSourceProvider dataSourceProvider = getDataSourceProviderFor(queryDefinition.getDataRetrieverChainDefinition().getDataSourceType()); + return queryFactory.createQuery(dataSourceProvider.getDataSource(), queryDefinition, getStringMessages(), getExecutorService()); } @Override - public Query> createDimensionValuesQuery(DataSource dataSource, - DataRetrieverChainDefinition dataRetrieverChainDefinition, int retrieverLevel, + public Query> createDimensionValuesQuery(DataRetrieverChainDefinition dataRetrieverChainDefinition, int retrieverLevel, Iterable> dimensions, Locale locale) { - return queryFactory.createDimensionValuesQuery(dataSource, dataRetrieverChainDefinition, retrieverLevel, dimensions, locale, getStringMessages(), getExecutorService()); + DataSourceProvider dataSourceProvider = getDataSourceProviderFor(dataRetrieverChainDefinition.getDataSourceType()); + return queryFactory.createDimensionValuesQuery(dataSourceProvider.getDataSource(), dataRetrieverChainDefinition, retrieverLevel, dimensions, locale, getStringMessages(), getExecutorService()); + } + + @SuppressWarnings("unchecked") + private DataSourceProvider getDataSourceProviderFor(Class dataSourceType) { + assert dataSourceProviderMappedByDataSourceType.containsKey(dataSourceType) : "No DataSourceProvider found for '" + dataSourceType + "'"; + return (DataSourceProvider) dataSourceProviderMappedByDataSourceType.get(dataSourceType); } } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/SimpleDataRetrieverChainDefinitionRegistry.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/SimpleDataRetrieverChainDefinitionRegistry.java index 898801e468b..6224077793b 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/SimpleDataRetrieverChainDefinitionRegistry.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/SimpleDataRetrieverChainDefinitionRegistry.java @@ -8,6 +8,7 @@ import java.util.Objects; import java.util.UUID; import com.sap.sse.datamining.DataRetrieverChainDefinition; +import com.sap.sse.datamining.DataRetrieverChainDefinitionRegistry; public class SimpleDataRetrieverChainDefinitionRegistry implements DataRetrieverChainDefinitionRegistry {