526880 - [REQU-65] Separation of interfaces
Change-Id: Id8406ea0dc0daa37179658f4375d6fa58c61832b
Signed-off-by: Matthias Koller <m.koller@peak-solution.de>
diff --git a/src/main/java/org/eclipse/mdm/api/base/BaseApplicationContext.java b/src/main/java/org/eclipse/mdm/api/base/BaseApplicationContext.java
new file mode 100644
index 0000000..99fda43
--- /dev/null
+++ b/src/main/java/org/eclipse/mdm/api/base/BaseApplicationContext.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2017 Peak Solution GmbH
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.mdm.api.base;
+
+import java.util.Map;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.file.FileService;
+import org.eclipse.mdm.api.base.model.BaseEntityFactory;
+import org.eclipse.mdm.api.base.notification.NotificationService;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.base.search.SearchService;
+
+/**
+ * Base application context represents a connection/session to the underlying data store.
+ * It provides access to managers and services.
+ *
+ * @param <S>
+ * Type of the connected entity factory.
+ * @param <T>
+ * Type of the connected entity manager.
+ * @since 1.0.0
+ */
+public interface BaseApplicationContext<S extends BaseEntityFactory, T extends BaseEntityManager> extends AutoCloseable {
+ /**
+ * The returned service loads entities from the underlying data source.
+ *
+ * @return {@code Optional} is empty if no such service is available.
+ */
+ default Optional<T> getEntityManager() {
+ return Optional.empty();
+ }
+
+ /**
+ * The returned service creates new entities.
+ *
+ * @return {@code Optional} is empty if no such service is available.
+ */
+ default Optional<S> getEntityFactory() {
+ return Optional.empty();
+ }
+
+ /**
+ * The returned service provides access to the application model's meta data.
+ *
+ * @return {@code Optional} is empty if no such service is available.
+ * @see ModelManager
+ */
+ default Optional<ModelManager> getModelManager() {
+ return Optional.empty();
+ }
+
+ /**
+ * The returned service provides advanced search capabilities for supported
+ * entity types.
+ *
+ * @return {@code Optional} is empty if no such service is available.
+ * @see SearchService
+ */
+ default Optional<SearchService> getSearchService() {
+ return Optional.empty();
+ }
+
+ /**
+ * The returned service provides access to the low level query API.
+ *
+ * @return {@code Optional} is empty if no such service is available.
+ * @see QueryService
+ */
+ default Optional<QueryService> getQueryService() {
+ return Optional.empty();
+ }
+
+ /**
+ * The returned service allows to download linked files from the file
+ * storage.
+ *
+ * @return {@code Optional} is empty if no such service is available.
+ * @see FileService
+ */
+ default Optional<FileService> getFileService() {
+ return Optional.empty();
+ }
+
+ /**
+ * The returned service allows to register/unregister for events at a registration service.
+ *
+ * @return {@code Optional} is empty if no such service is available.
+ * @see NotificationService
+ */
+ default Optional<NotificationService> getNotificationService() {
+ return Optional.empty();
+ }
+
+ /**
+ * Returns a map with all configuration parameters, which where given to initialize this context.
+ *
+ * @return map with configuration parameters
+ */
+ Map<String, String> getParameters();
+
+ /**
+ * Closes the BaseContext.
+ *
+ * This closes all underlying managers and services.
+ */
+ void close() throws ConnectionException;
+}
diff --git a/src/main/java/org/eclipse/mdm/api/base/BaseApplicationContextFactory.java b/src/main/java/org/eclipse/mdm/api/base/BaseApplicationContextFactory.java
new file mode 100644
index 0000000..2f0ac30
--- /dev/null
+++ b/src/main/java/org/eclipse/mdm/api/base/BaseApplicationContextFactory.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2017 Peak Solution GmbH
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.mdm.api.base;
+
+import java.util.Map;
+
+import org.eclipse.mdm.api.base.model.BaseEntityFactory;
+
+/**
+ * Takes connection parameters and produces a corresponding base application context.
+ *
+ * @param <T>
+ * Type of the connected entity manager.
+ * @since 1.0.0
+ */
+public interface BaseApplicationContextFactory<T extends BaseApplicationContext<? extends BaseEntityFactory, ? extends BaseEntityManager>> {
+
+ /**
+ * Takes given connection parameters and creates a new context, which
+ * is permanently connected with configured data source.
+ *
+ * @param connectionParameters
+ * The connection parameters.
+ * @return The connected context is returned.
+ * @throws ConnectionException
+ * Thrown if unable to connect to a data source.
+ */
+ T connect(Map<String, String> connectionParameters) throws ConnectionException;
+}
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/mdm/api/base/BaseEntityManager.java b/src/main/java/org/eclipse/mdm/api/base/BaseEntityManager.java
index b7d8c7b..1588e59 100644
--- a/src/main/java/org/eclipse/mdm/api/base/BaseEntityManager.java
+++ b/src/main/java/org/eclipse/mdm/api/base/BaseEntityManager.java
@@ -15,7 +15,6 @@
import java.util.Optional;
import org.eclipse.mdm.api.base.massdata.ReadRequest;
-import org.eclipse.mdm.api.base.model.BaseEntityFactory;
import org.eclipse.mdm.api.base.model.ContextDescribable;
import org.eclipse.mdm.api.base.model.ContextRoot;
import org.eclipse.mdm.api.base.model.ContextType;
@@ -26,8 +25,6 @@
import org.eclipse.mdm.api.base.model.TestStep;
import org.eclipse.mdm.api.base.model.User;
import org.eclipse.mdm.api.base.query.DataAccessException;
-import org.eclipse.mdm.api.base.query.ModelManager;
-import org.eclipse.mdm.api.base.query.SearchService;
/**
* Provides business layer CRUD operations and services (CREATE, READ, UPDATE,
@@ -39,55 +36,13 @@
* @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
* @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
*/
-public interface BaseEntityManager<S extends BaseEntityFactory> {
+public interface BaseEntityManager {
// ======================================================================
// Public methods
// ======================================================================
/**
- * The returned service creates new entities.
- *
- * @return {@code Optional} is empty if no such service is available.
- */
- default Optional<S> getEntityFactory() {
- return Optional.empty();
- }
-
- /**
- * The returned service provides advanced search capabilities for supported
- * entity types.
- *
- * @return {@code Optional} is empty if no such service is available.
- * @see SearchService
- */
- default Optional<SearchService> getSearchService() {
- return Optional.empty();
- }
-
- /**
- * The returned service provides access to the low level query API and the
- * application model's meta data.
- *
- * @return {@code Optional} is empty if no such service is available.
- * @see ModelManager
- */
- default Optional<ModelManager> getModelManager() {
- return Optional.empty();
- }
-
- /**
- * The returned service allows to download linked files from the file
- * storage.
- *
- * @return {@code Optional} is empty if no such service is available.
- * @see FileService
- */
- default Optional<FileService> getFileService() {
- return Optional.empty();
- }
-
- /**
* Returns the {@link Environment} this entity manager is connected to.
*
* @return The {@code Environment} is returned.
diff --git a/src/main/java/org/eclipse/mdm/api/base/EntityManagerFactory.java b/src/main/java/org/eclipse/mdm/api/base/EntityManagerFactory.java
deleted file mode 100644
index e153d44..0000000
--- a/src/main/java/org/eclipse/mdm/api/base/EntityManagerFactory.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2016 Gigatronik Ingolstadt GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.eclipse.mdm.api.base;
-
-import java.util.Map;
-
-import org.eclipse.mdm.api.base.model.BaseEntityFactory;
-
-/**
- * Takes connection parameters and produces a corresponding entity manager.
- *
- * @param <T>
- * Type of the connected entity manager.
- * @since 1.0.0
- * @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
- */
-public interface EntityManagerFactory<T extends BaseEntityManager<? extends BaseEntityFactory>> {
-
- // ======================================================================
- // Public methods
- // ======================================================================
-
- /**
- * Takes given connection parameters and creates a new entity manager, which
- * is permanently connected with configured data source.
- *
- * @param connectionParameters
- * The connection parameters.
- * @return The connected entity manager is returned.
- * @throws ConnectionException
- * Thrown if unable to connect to a data source.
- */
- T connect(Map<String, String> connectionParameters) throws ConnectionException;
-
-}
diff --git a/src/main/java/org/eclipse/mdm/api/base/NotificationManagerFactory.java b/src/main/java/org/eclipse/mdm/api/base/NotificationManagerFactory.java
deleted file mode 100644
index 5d51cbb..0000000
--- a/src/main/java/org/eclipse/mdm/api/base/NotificationManagerFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.eclipse.mdm.api.base;
-
-import java.util.Map;
-
-import org.eclipse.mdm.api.base.model.BaseEntityFactory;
-import org.eclipse.mdm.api.base.notification.NotificationManager;
-
-/**
- * Takes a base entity manager and connection parameters and produces a
- * corresponding notification manager.
- *
- * @since 1.0.0
- * @author Matthias Koller, Peak Solution GmbH
- */
-public interface NotificationManagerFactory {
-
- /**
- * Creates a notification manager based on the given entity manager and
- * parameters
- *
- * @param entityManager
- * The entityManager.
- * @param connectionParameters
- * The connection parameters.
- * @return The configured NotificationManager is returned.
- * @throws ConnectionException
- * Thrown if unable to connect to a data source.
- */
- NotificationManager create(BaseEntityManager<? extends BaseEntityFactory> baseEntityManager,
- Map<String, String> parameters) throws ConnectionException;
-}
diff --git a/src/main/java/org/eclipse/mdm/api/base/ServiceNotProvidedException.java b/src/main/java/org/eclipse/mdm/api/base/ServiceNotProvidedException.java
new file mode 100644
index 0000000..f351058
--- /dev/null
+++ b/src/main/java/org/eclipse/mdm/api/base/ServiceNotProvidedException.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2017 Peak Solution GmbH and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.mdm.api.base;
+
+/**
+ * This exception indicates that a service is not provided by an adapter.
+ */
+public class ServiceNotProvidedException extends RuntimeException {
+
+ private static final long serialVersionUID = -4829618036958929415L;
+
+ /**
+ * Constructor.
+ *
+ * @param clazz the service that is not provided
+ */
+ public ServiceNotProvidedException(Class<?> clazz) {
+ super("The service '" + clazz + "' is not implemented!");
+ }
+}
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/Attribute.java b/src/main/java/org/eclipse/mdm/api/base/adapter/Attribute.java
similarity index 98%
rename from src/main/java/org/eclipse/mdm/api/base/query/Attribute.java
rename to src/main/java/org/eclipse/mdm/api/base/adapter/Attribute.java
index 0ef918b..a9539b9 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/Attribute.java
+++ b/src/main/java/org/eclipse/mdm/api/base/adapter/Attribute.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.adapter;
import org.eclipse.mdm.api.base.model.Enumeration;
import org.eclipse.mdm.api.base.model.Value;
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/DefaultCore.java b/src/main/java/org/eclipse/mdm/api/base/adapter/DefaultCore.java
similarity index 97%
rename from src/main/java/org/eclipse/mdm/api/base/query/DefaultCore.java
rename to src/main/java/org/eclipse/mdm/api/base/adapter/DefaultCore.java
index 7b8521c..16b6e17 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/DefaultCore.java
+++ b/src/main/java/org/eclipse/mdm/api/base/adapter/DefaultCore.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.adapter;
import java.util.Collection;
import java.util.HashMap;
@@ -15,6 +15,7 @@
import org.eclipse.mdm.api.base.model.Core;
import org.eclipse.mdm.api.base.model.Entity;
import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.Record;
/**
* Provides access to the internals of any entity:
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/EntityType.java b/src/main/java/org/eclipse/mdm/api/base/adapter/EntityType.java
similarity index 98%
rename from src/main/java/org/eclipse/mdm/api/base/query/EntityType.java
rename to src/main/java/org/eclipse/mdm/api/base/adapter/EntityType.java
index 3540e33..31a6a1d 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/EntityType.java
+++ b/src/main/java/org/eclipse/mdm/api/base/adapter/EntityType.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.adapter;
import java.util.List;
import java.util.Map;
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/ModelManager.java b/src/main/java/org/eclipse/mdm/api/base/adapter/ModelManager.java
similarity index 94%
rename from src/main/java/org/eclipse/mdm/api/base/query/ModelManager.java
rename to src/main/java/org/eclipse/mdm/api/base/adapter/ModelManager.java
index 7c831fb..03d0e82 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/ModelManager.java
+++ b/src/main/java/org/eclipse/mdm/api/base/adapter/ModelManager.java
@@ -6,12 +6,13 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.adapter;
import java.util.List;
import org.eclipse.mdm.api.base.model.ContextType;
import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.query.Query;
/**
* Provides access to any modeled {@link EntityType} within an underlying
@@ -29,13 +30,6 @@
// ======================================================================
/**
- * Creates a new and empty {@link Query}.
- *
- * @return Created {@code Query} is returned.
- */
- Query createQuery();
-
- /**
* Returns all available {@link EntityType}s.
*
* @return The returned {@code List} is unmodifiable.
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/Relation.java b/src/main/java/org/eclipse/mdm/api/base/adapter/Relation.java
similarity index 98%
rename from src/main/java/org/eclipse/mdm/api/base/query/Relation.java
rename to src/main/java/org/eclipse/mdm/api/base/adapter/Relation.java
index 4b76edd..bc667ba 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/Relation.java
+++ b/src/main/java/org/eclipse/mdm/api/base/adapter/Relation.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.adapter;
import org.eclipse.mdm.api.base.model.Value;
import org.eclipse.mdm.api.base.model.ValueType;
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/RelationType.java b/src/main/java/org/eclipse/mdm/api/base/adapter/RelationType.java
similarity index 96%
rename from src/main/java/org/eclipse/mdm/api/base/query/RelationType.java
rename to src/main/java/org/eclipse/mdm/api/base/adapter/RelationType.java
index 85de713..02b09aa 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/RelationType.java
+++ b/src/main/java/org/eclipse/mdm/api/base/adapter/RelationType.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.adapter;
/**
* RelationType enumeration.
diff --git a/src/main/java/org/eclipse/mdm/api/base/FileService.java b/src/main/java/org/eclipse/mdm/api/base/file/FileService.java
similarity index 99%
rename from src/main/java/org/eclipse/mdm/api/base/FileService.java
rename to src/main/java/org/eclipse/mdm/api/base/file/FileService.java
index 34e64f1..8ceb888 100644
--- a/src/main/java/org/eclipse/mdm/api/base/FileService.java
+++ b/src/main/java/org/eclipse/mdm/api/base/file/FileService.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base;
+package org.eclipse.mdm.api.base.file;
import java.io.IOException;
import java.io.InputStream;
diff --git a/src/main/java/org/eclipse/mdm/api/base/model/ContextDescribable.java b/src/main/java/org/eclipse/mdm/api/base/model/ContextDescribable.java
index b3f5083..1337ee6 100644
--- a/src/main/java/org/eclipse/mdm/api/base/model/ContextDescribable.java
+++ b/src/main/java/org/eclipse/mdm/api/base/model/ContextDescribable.java
@@ -37,7 +37,7 @@
* @throws DataAccessException
* Thrown if unable to query the available {@code ContextType}s.
*/
- List<ContextType> loadContextTypes(BaseEntityManager<? extends BaseEntityFactory> manager) throws DataAccessException;
+ List<ContextType> loadContextTypes(BaseEntityManager manager) throws DataAccessException;
/**
* Loads the requested {@link ContextRoot}s for given
@@ -55,7 +55,7 @@
* ContextRoot}s.
* @see ContextType
*/
- Map<ContextType, ContextRoot> loadContexts(BaseEntityManager<? extends BaseEntityFactory> manager, ContextType... contextTypes)
+ Map<ContextType, ContextRoot> loadContexts(BaseEntityManager manager, ContextType... contextTypes)
throws DataAccessException;
}
diff --git a/src/main/java/org/eclipse/mdm/api/base/model/Measurement.java b/src/main/java/org/eclipse/mdm/api/base/model/Measurement.java
index 4a0bad0..7e4d332 100644
--- a/src/main/java/org/eclipse/mdm/api/base/model/Measurement.java
+++ b/src/main/java/org/eclipse/mdm/api/base/model/Measurement.java
@@ -136,7 +136,7 @@
* {@inheritDoc}
*/
@Override
- public List<ContextType> loadContextTypes(BaseEntityManager<? extends BaseEntityFactory> manager)
+ public List<ContextType> loadContextTypes(BaseEntityManager manager)
throws DataAccessException {
return manager.loadContextTypes(this);
}
@@ -145,7 +145,7 @@
* {@inheritDoc}
*/
@Override
- public Map<ContextType, ContextRoot> loadContexts(BaseEntityManager<? extends BaseEntityFactory> manager,
+ public Map<ContextType, ContextRoot> loadContexts(BaseEntityManager manager,
ContextType... contextTypes) throws DataAccessException {
return manager.loadContexts(this, contextTypes);
}
diff --git a/src/main/java/org/eclipse/mdm/api/base/model/TestStep.java b/src/main/java/org/eclipse/mdm/api/base/model/TestStep.java
index 802c220..126215d 100644
--- a/src/main/java/org/eclipse/mdm/api/base/model/TestStep.java
+++ b/src/main/java/org/eclipse/mdm/api/base/model/TestStep.java
@@ -94,7 +94,7 @@
* {@inheritDoc}
*/
@Override
- public List<ContextType> loadContextTypes(BaseEntityManager<? extends BaseEntityFactory> manager)
+ public List<ContextType> loadContextTypes(BaseEntityManager manager)
throws DataAccessException {
return manager.loadContextTypes(this);
}
@@ -103,7 +103,7 @@
* {@inheritDoc}
*/
@Override
- public Map<ContextType, ContextRoot> loadContexts(BaseEntityManager<? extends BaseEntityFactory> manager,
+ public Map<ContextType, ContextRoot> loadContexts(BaseEntityManager manager,
ContextType... contextTypes) throws DataAccessException {
return manager.loadContexts(this, contextTypes);
}
diff --git a/src/main/java/org/eclipse/mdm/api/base/notification/NotificationFilter.java b/src/main/java/org/eclipse/mdm/api/base/notification/NotificationFilter.java
index d3409e0..2adbc3e 100644
--- a/src/main/java/org/eclipse/mdm/api/base/notification/NotificationFilter.java
+++ b/src/main/java/org/eclipse/mdm/api/base/notification/NotificationFilter.java
@@ -5,7 +5,7 @@
import java.util.HashSet;
import java.util.Set;
-import org.eclipse.mdm.api.base.query.EntityType;
+import org.eclipse.mdm.api.base.adapter.EntityType;
/**
* Class represents a filter for notifications.
diff --git a/src/main/java/org/eclipse/mdm/api/base/notification/NotificationListener.java b/src/main/java/org/eclipse/mdm/api/base/notification/NotificationListener.java
index 63344d9..0ac0ca8 100644
--- a/src/main/java/org/eclipse/mdm/api/base/notification/NotificationListener.java
+++ b/src/main/java/org/eclipse/mdm/api/base/notification/NotificationListener.java
@@ -2,9 +2,9 @@
import java.util.List;
+import org.eclipse.mdm.api.base.adapter.EntityType;
import org.eclipse.mdm.api.base.model.Entity;
import org.eclipse.mdm.api.base.model.User;
-import org.eclipse.mdm.api.base.query.EntityType;
/**
* Listener interface for notifications.
diff --git a/src/main/java/org/eclipse/mdm/api/base/notification/NotificationManager.java b/src/main/java/org/eclipse/mdm/api/base/notification/NotificationService.java
similarity index 97%
rename from src/main/java/org/eclipse/mdm/api/base/notification/NotificationManager.java
rename to src/main/java/org/eclipse/mdm/api/base/notification/NotificationService.java
index f3a0243..6093473 100644
--- a/src/main/java/org/eclipse/mdm/api/base/notification/NotificationManager.java
+++ b/src/main/java/org/eclipse/mdm/api/base/notification/NotificationService.java
@@ -6,7 +6,7 @@
* @since 1.0.0
* @author Matthias Koller, Peak Solution GmbH
*/
-public interface NotificationManager {
+public interface NotificationService {
/**
* Registers a NotificationListener at the underlying notification service.
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/ComparisonOperator.java b/src/main/java/org/eclipse/mdm/api/base/query/ComparisonOperator.java
index a40211c..aa3c530 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/ComparisonOperator.java
+++ b/src/main/java/org/eclipse/mdm/api/base/query/ComparisonOperator.java
@@ -10,6 +10,7 @@
import java.util.Arrays;
+import org.eclipse.mdm.api.base.adapter.Attribute;
import org.eclipse.mdm.api.base.model.ValueType;
/**
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/Condition.java b/src/main/java/org/eclipse/mdm/api/base/query/Condition.java
index 700e642..eda235a 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/Condition.java
+++ b/src/main/java/org/eclipse/mdm/api/base/query/Condition.java
@@ -10,6 +10,7 @@
import java.util.Objects;
+import org.eclipse.mdm.api.base.adapter.Attribute;
import org.eclipse.mdm.api.base.model.Value;
/**
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/DataAccessException.java b/src/main/java/org/eclipse/mdm/api/base/query/DataAccessException.java
index c291aab..2f8cbe0 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/DataAccessException.java
+++ b/src/main/java/org/eclipse/mdm/api/base/query/DataAccessException.java
@@ -14,7 +14,7 @@
* @since 1.0.0
* @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
*/
-public final class DataAccessException extends Exception {
+public final class DataAccessException extends RuntimeException {
// ======================================================================
// Class variables
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/Filter.java b/src/main/java/org/eclipse/mdm/api/base/query/Filter.java
index e75d0fa..4b70368 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/Filter.java
+++ b/src/main/java/org/eclipse/mdm/api/base/query/Filter.java
@@ -18,6 +18,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.search.SearchQuery;
+import org.eclipse.mdm.api.base.search.SearchService;
+
/**
* A filter is a sequence of {@link FilterItem}s containing {@link BooleanOperator}s or
* {@link Condition}s.
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/Query.java b/src/main/java/org/eclipse/mdm/api/base/query/Query.java
index ae4be98..9d6b277 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/Query.java
+++ b/src/main/java/org/eclipse/mdm/api/base/query/Query.java
@@ -12,6 +12,10 @@
import java.util.List;
import java.util.Optional;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+
/**
* Provides methods to easily build queries by adding select, join, group by and
* order by statements. Finally an optional {@link Filter} may be given to
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/QueryService.java b/src/main/java/org/eclipse/mdm/api/base/query/QueryService.java
new file mode 100644
index 0000000..389b68d
--- /dev/null
+++ b/src/main/java/org/eclipse/mdm/api/base/query/QueryService.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017 Peak Solution GmbH
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.mdm.api.base.query;
+
+/**
+ * The {@link QueryService} provides access to the low level query API.
+ *
+ * A {@link Query}, created by this service, can be used to build and execute
+ * queries on the underlying datastore. The results are returned as a list
+ * of {@link Result}s.
+ *
+ * @since 1.0.0
+ */
+public interface QueryService {
+
+ /**
+ * Creates a new and empty {@link Query}.
+ *
+ * @return Created {@code Query} is returned.
+ */
+ Query createQuery();
+}
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/Record.java b/src/main/java/org/eclipse/mdm/api/base/query/Record.java
index 53778ab..979932a 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/Record.java
+++ b/src/main/java/org/eclipse/mdm/api/base/query/Record.java
@@ -12,6 +12,9 @@
import java.util.Map;
import java.util.Optional;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
import org.eclipse.mdm.api.base.model.Value;
/**
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/Result.java b/src/main/java/org/eclipse/mdm/api/base/query/Result.java
index bf11b7a..8fb9d4a 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/Result.java
+++ b/src/main/java/org/eclipse/mdm/api/base/query/Result.java
@@ -14,6 +14,8 @@
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
import org.eclipse.mdm.api.base.model.Value;
/**
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/SearchQuery.java b/src/main/java/org/eclipse/mdm/api/base/search/SearchQuery.java
similarity index 95%
rename from src/main/java/org/eclipse/mdm/api/base/query/SearchQuery.java
rename to src/main/java/org/eclipse/mdm/api/base/search/SearchQuery.java
index e4f266c..1652e06 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/SearchQuery.java
+++ b/src/main/java/org/eclipse/mdm/api/base/search/SearchQuery.java
@@ -6,11 +6,16 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.search;
import java.util.List;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.Result;
/**
* This is an interface for predefined search query implementations.
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/SearchService.java b/src/main/java/org/eclipse/mdm/api/base/search/SearchService.java
similarity index 97%
rename from src/main/java/org/eclipse/mdm/api/base/query/SearchService.java
rename to src/main/java/org/eclipse/mdm/api/base/search/SearchService.java
index e6c3b8a..f2683ea 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/SearchService.java
+++ b/src/main/java/org/eclipse/mdm/api/base/search/SearchService.java
@@ -6,15 +6,22 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.search;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
import org.eclipse.mdm.api.base.model.Entity;
import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
/**
* This search service uses given {@link Entity} type to execute the associated
diff --git a/src/main/java/org/eclipse/mdm/api/base/query/Searchable.java b/src/main/java/org/eclipse/mdm/api/base/search/Searchable.java
similarity index 93%
rename from src/main/java/org/eclipse/mdm/api/base/query/Searchable.java
rename to src/main/java/org/eclipse/mdm/api/base/search/Searchable.java
index cab0bee..355bcda 100644
--- a/src/main/java/org/eclipse/mdm/api/base/query/Searchable.java
+++ b/src/main/java/org/eclipse/mdm/api/base/search/Searchable.java
@@ -6,10 +6,12 @@
* http://www.eclipse.org/legal/epl-v10.html
*/
-package org.eclipse.mdm.api.base.query;
+package org.eclipse.mdm.api.base.search;
import java.util.List;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+
/**
* A searchable is used to describe the hierarchical order of
* {@link EntityType}s being used for searching.
diff --git a/src/test/java/org/eclipse/mdm/api/base/AttributeImpl.java b/src/test/java/org/eclipse/mdm/api/base/AttributeImpl.java
index 05d3253..7ab8187 100755
--- a/src/test/java/org/eclipse/mdm/api/base/AttributeImpl.java
+++ b/src/test/java/org/eclipse/mdm/api/base/AttributeImpl.java
@@ -8,10 +8,10 @@
package org.eclipse.mdm.api.base;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
import org.eclipse.mdm.api.base.model.Enumeration;
import org.eclipse.mdm.api.base.model.ValueType;
-import org.eclipse.mdm.api.base.query.Attribute;
-import org.eclipse.mdm.api.base.query.EntityType;
public class AttributeImpl implements Attribute {
diff --git a/src/test/java/org/eclipse/mdm/api/base/EntityTypeImpl.java b/src/test/java/org/eclipse/mdm/api/base/EntityTypeImpl.java
index e723177..a8665a8 100755
--- a/src/test/java/org/eclipse/mdm/api/base/EntityTypeImpl.java
+++ b/src/test/java/org/eclipse/mdm/api/base/EntityTypeImpl.java
@@ -11,10 +11,10 @@
import java.util.List;
import org.eclipse.mdm.api.base.AttributeImpl.Type;
-import org.eclipse.mdm.api.base.query.Attribute;
-import org.eclipse.mdm.api.base.query.EntityType;
-import org.eclipse.mdm.api.base.query.Relation;
-import org.eclipse.mdm.api.base.query.RelationType;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.adapter.RelationType;
public class EntityTypeImpl implements EntityType {
diff --git a/src/test/java/org/eclipse/mdm/api/base/RelationImpl.java b/src/test/java/org/eclipse/mdm/api/base/RelationImpl.java
index 4ca2c79..0ca5eea 100755
--- a/src/test/java/org/eclipse/mdm/api/base/RelationImpl.java
+++ b/src/test/java/org/eclipse/mdm/api/base/RelationImpl.java
@@ -8,10 +8,10 @@
package org.eclipse.mdm.api.base;
-import org.eclipse.mdm.api.base.query.Attribute;
-import org.eclipse.mdm.api.base.query.EntityType;
-import org.eclipse.mdm.api.base.query.Relation;
-import org.eclipse.mdm.api.base.query.RelationType;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.adapter.RelationType;
public class RelationImpl implements Relation {