diff --git a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/HistoryQueryImpl.java b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/HistoryQueryImpl.java
index 14d311cfe..316294995 100644
--- a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/HistoryQueryImpl.java
+++ b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/HistoryQueryImpl.java
@@ -6,8 +6,8 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TimeInterval;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
import pro.taskana.simplehistory.query.HistoryQuery;
import pro.taskana.simplehistory.query.HistoryQueryColumnName;
diff --git a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/SimpleHistoryServiceImpl.java b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/SimpleHistoryServiceImpl.java
index 3215df04d..6670f50a1 100644
--- a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/SimpleHistoryServiceImpl.java
+++ b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/SimpleHistoryServiceImpl.java
@@ -5,7 +5,7 @@ import java.time.Instant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.history.api.TaskanaHistory;
import pro.taskana.history.api.TaskanaHistoryEvent;
import pro.taskana.simplehistory.impl.mappings.HistoryEventMapper;
diff --git a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/TaskanaHistoryEngineImpl.java b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/TaskanaHistoryEngineImpl.java
index f043f963f..84cc3cd65 100644
--- a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/TaskanaHistoryEngineImpl.java
+++ b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/impl/TaskanaHistoryEngineImpl.java
@@ -13,7 +13,7 @@ import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.history.api.TaskanaHistory;
import pro.taskana.simplehistory.TaskanaHistoryEngine;
import pro.taskana.simplehistory.configuration.DbSchemaCreator;
diff --git a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/query/HistoryQuery.java b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/query/HistoryQuery.java
index 5e71df5e3..44cfa78e3 100644
--- a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/query/HistoryQuery.java
+++ b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/query/HistoryQuery.java
@@ -1,8 +1,8 @@
package pro.taskana.simplehistory.query;
-import pro.taskana.BaseQuery;
-import pro.taskana.TimeInterval;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.BaseQuery;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.simplehistory.impl.HistoryEventImpl;
/** HistoryQuery for generating dynamic sql. */
diff --git a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/query/HistoryQueryColumnName.java b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/query/HistoryQueryColumnName.java
index 4ce679849..b7801eff8 100644
--- a/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/query/HistoryQueryColumnName.java
+++ b/history/taskana-simplehistory-provider/src/main/java/pro/taskana/simplehistory/query/HistoryQueryColumnName.java
@@ -1,6 +1,6 @@
package pro.taskana.simplehistory.query;
-import pro.taskana.QueryColumnName;
+import pro.taskana.common.api.QueryColumnName;
/**
* Enum containing the column names for {@link
diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/AbstractAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/AbstractAccTest.java
index 27e1d3872..5894c06aa 100644
--- a/history/taskana-simplehistory-provider/src/test/java/acceptance/AbstractAccTest.java
+++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/AbstractAccTest.java
@@ -15,7 +15,7 @@ import org.junit.BeforeClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.simplehistory.impl.HistoryEventImpl;
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
diff --git a/history/taskana-simplehistory-provider/src/test/java/acceptance/query/QueryHistoryAccTest.java b/history/taskana-simplehistory-provider/src/test/java/acceptance/query/QueryHistoryAccTest.java
index 20284878a..a6a3974ee 100644
--- a/history/taskana-simplehistory-provider/src/test/java/acceptance/query/QueryHistoryAccTest.java
+++ b/history/taskana-simplehistory-provider/src/test/java/acceptance/query/QueryHistoryAccTest.java
@@ -10,8 +10,8 @@ import java.time.Instant;
import java.util.List;
import org.junit.Test;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.TimeInterval;
+import pro.taskana.common.api.BaseQuery.SortDirection;
+import pro.taskana.common.api.TimeInterval;
import pro.taskana.simplehistory.impl.HistoryEventImpl;
import pro.taskana.simplehistory.query.HistoryQuery;
import pro.taskana.simplehistory.query.HistoryQueryColumnName;
diff --git a/history/taskana-simplehistory-provider/src/test/java/configuration/TaskanaEngineConfigurationTest.java b/history/taskana-simplehistory-provider/src/test/java/configuration/TaskanaEngineConfigurationTest.java
index 2f7bf319a..eda7e1324 100644
--- a/history/taskana-simplehistory-provider/src/test/java/configuration/TaskanaEngineConfigurationTest.java
+++ b/history/taskana-simplehistory-provider/src/test/java/configuration/TaskanaEngineConfigurationTest.java
@@ -8,8 +8,8 @@ import javax.sql.DataSource;
import org.junit.Assert;
import org.junit.Test;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.TaskanaEngineConfiguration;
/**
* Unit Test for TaskanaEngineConfigurationTest.
diff --git a/history/taskana-simplehistory-provider/src/test/java/pro/taskana/simplehistory/impl/HistoryQueryImplTest.java b/history/taskana-simplehistory-provider/src/test/java/pro/taskana/simplehistory/impl/HistoryQueryImplTest.java
index 39ef5b5e5..e73acdc8f 100644
--- a/history/taskana-simplehistory-provider/src/test/java/pro/taskana/simplehistory/impl/HistoryQueryImplTest.java
+++ b/history/taskana-simplehistory-provider/src/test/java/pro/taskana/simplehistory/impl/HistoryQueryImplTest.java
@@ -15,7 +15,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import pro.taskana.TimeInterval;
+import pro.taskana.common.api.TimeInterval;
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
/**
diff --git a/history/taskana-simplehistory-provider/src/test/java/pro/taskana/simplehistory/impl/SimpleHistoryServiceImplTest.java b/history/taskana-simplehistory-provider/src/test/java/pro/taskana/simplehistory/impl/SimpleHistoryServiceImplTest.java
index 90a38431d..371723092 100644
--- a/history/taskana-simplehistory-provider/src/test/java/pro/taskana/simplehistory/impl/SimpleHistoryServiceImplTest.java
+++ b/history/taskana-simplehistory-provider/src/test/java/pro/taskana/simplehistory/impl/SimpleHistoryServiceImplTest.java
@@ -25,7 +25,7 @@ import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.simplehistory.impl.mappings.HistoryEventMapper;
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
diff --git a/history/taskana-simplehistory-rest-spring/src/main/java/pro/taskana/rest/simplehistory/TaskHistoryEventController.java b/history/taskana-simplehistory-rest-spring/src/main/java/pro/taskana/rest/simplehistory/TaskHistoryEventController.java
index aa36b70a5..fa14fff89 100644
--- a/history/taskana-simplehistory-rest-spring/src/main/java/pro/taskana/rest/simplehistory/TaskHistoryEventController.java
+++ b/history/taskana-simplehistory-rest-spring/src/main/java/pro/taskana/rest/simplehistory/TaskHistoryEventController.java
@@ -16,11 +16,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import pro.taskana.BaseQuery;
-import pro.taskana.TimeInterval;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.api.BaseQuery;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.internal.util.LoggerUtils;
import pro.taskana.rest.AbstractPagingController;
import pro.taskana.rest.resource.PagedResources.PageMetadata;
import pro.taskana.rest.resource.TaskHistoryEventListAssembler;
diff --git a/history/taskana-simplehistory-rest-spring/src/main/java/pro/taskana/rest/simplehistory/sampledata/SampleDataGenerator.java b/history/taskana-simplehistory-rest-spring/src/main/java/pro/taskana/rest/simplehistory/sampledata/SampleDataGenerator.java
index 48ae988ef..8e503e3d4 100644
--- a/history/taskana-simplehistory-rest-spring/src/main/java/pro/taskana/rest/simplehistory/sampledata/SampleDataGenerator.java
+++ b/history/taskana-simplehistory-rest-spring/src/main/java/pro/taskana/rest/simplehistory/sampledata/SampleDataGenerator.java
@@ -13,7 +13,7 @@ import org.apache.ibatis.jdbc.ScriptRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.configuration.DB;
+import pro.taskana.common.internal.configuration.DB;
/** This class generates sample data for manual testing purposes. */
public class SampleDataGenerator {
diff --git a/history/taskana-simplehistory-spring-test/src/test/java/pro/taskana/TaskHistoryEventControllerIntTest.java b/history/taskana-simplehistory-spring-test/src/test/java/pro/taskana/TaskHistoryEventControllerIntTest.java
index 5fcc49172..fd9f6f8cc 100644
--- a/history/taskana-simplehistory-spring-test/src/test/java/pro/taskana/TaskHistoryEventControllerIntTest.java
+++ b/history/taskana-simplehistory-spring-test/src/test/java/pro/taskana/TaskHistoryEventControllerIntTest.java
@@ -35,7 +35,7 @@ import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
-import pro.taskana.exceptions.SystemException;
+import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.rest.resource.TaskHistoryEventListResource;
import pro.taskana.rest.simplehistory.TaskHistoryRestConfiguration;
import pro.taskana.rest.simplehistory.sampledata.SampleDataGenerator;
diff --git a/lib/taskana-cdi-example/src/main/java/pro/taskana/ExampleBootstrap.java b/lib/taskana-cdi-example/src/main/java/pro/taskana/ExampleBootstrap.java
index 242b1355d..77fe352d4 100644
--- a/lib/taskana-cdi-example/src/main/java/pro/taskana/ExampleBootstrap.java
+++ b/lib/taskana-cdi-example/src/main/java/pro/taskana/ExampleBootstrap.java
@@ -6,14 +6,16 @@ import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Initialized;
import javax.enterprise.event.Observes;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
/** Example Bootstrap Application. */
@ApplicationScoped
diff --git a/lib/taskana-cdi-example/src/main/java/pro/taskana/TaskanaEjb.java b/lib/taskana-cdi-example/src/main/java/pro/taskana/TaskanaEjb.java
index 664ccaad3..6d3ab6abd 100644
--- a/lib/taskana-cdi-example/src/main/java/pro/taskana/TaskanaEjb.java
+++ b/lib/taskana-cdi-example/src/main/java/pro/taskana/TaskanaEjb.java
@@ -3,6 +3,8 @@ package pro.taskana;
import javax.ejb.Stateless;
import javax.inject.Inject;
+import pro.taskana.task.api.TaskService;
+
/** example Taskana EJB. */
@Stateless
public class TaskanaEjb {
diff --git a/lib/taskana-cdi/src/main/java/pro/taskana/TaskanaProducers.java b/lib/taskana-cdi/src/main/java/pro/taskana/TaskanaProducers.java
index 120f11fc9..738863aea 100644
--- a/lib/taskana-cdi/src/main/java/pro/taskana/TaskanaProducers.java
+++ b/lib/taskana-cdi/src/main/java/pro/taskana/TaskanaProducers.java
@@ -17,7 +17,10 @@ import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.workbasket.api.WorkbasketService;
/** TODO. */
@ApplicationScoped
diff --git a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaEjb.java b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaEjb.java
index b1ad0aed3..d010d3604 100644
--- a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaEjb.java
+++ b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaEjb.java
@@ -3,11 +3,16 @@ package pro.taskana;
import javax.ejb.Stateless;
import javax.inject.Inject;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.workbasket.api.WorkbasketService;
/** TODO. */
@Stateless
diff --git a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java
index 97916c325..4f212b8bc 100644
--- a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java
+++ b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java
@@ -11,18 +11,24 @@ import javax.ws.rs.core.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketType;
/** TODO. */
@Path("/test")
diff --git a/lib/taskana-core/src/main/java/pro/taskana/configuration/TaskanaEngineConfiguration.java b/lib/taskana-core/src/main/java/pro/taskana/TaskanaEngineConfiguration.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/configuration/TaskanaEngineConfiguration.java
rename to lib/taskana-core/src/main/java/pro/taskana/TaskanaEngineConfiguration.java
index 1daab0547..d2ad252f8 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/configuration/TaskanaEngineConfiguration.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/TaskanaEngineConfiguration.java
@@ -1,4 +1,4 @@
-package pro.taskana.configuration;
+package pro.taskana;
import java.io.File;
import java.io.FileInputStream;
@@ -27,11 +27,13 @@ import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.SystemException;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.SystemException;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.configuration.DB;
+import pro.taskana.common.internal.configuration.DbSchemaCreator;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.task.api.TaskanaRole;
/**
* This central class creates the TaskanaEngine and holds all the information about DB and Security.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/Classification.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/Classification.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/Classification.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/api/Classification.java
index ce9137a4a..ea13818ec 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/Classification.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/Classification.java
@@ -1,9 +1,9 @@
-package pro.taskana;
+package pro.taskana.classification.api;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.time.Instant;
-import pro.taskana.impl.ClassificationImpl;
+import pro.taskana.classification.internal.ClassificationImpl;
/** Interface used to specify the Classification-Model. */
@JsonDeserialize(as = ClassificationImpl.class)
diff --git a/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationQuery.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationQuery.java
index 173c28cf4..97d586b1a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationQuery.java
@@ -1,6 +1,8 @@
-package pro.taskana;
+package pro.taskana.classification.api;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.BaseQuery;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
/** ClassificationQuery for generating dynamic sql. */
public interface ClassificationQuery
diff --git a/lib/taskana-core/src/main/java/pro/taskana/ClassificationQueryColumnName.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationQueryColumnName.java
similarity index 80%
rename from lib/taskana-core/src/main/java/pro/taskana/ClassificationQueryColumnName.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationQueryColumnName.java
index a8d189aad..564c5d015 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationQueryColumnName.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationQueryColumnName.java
@@ -1,8 +1,11 @@
-package pro.taskana;
+package pro.taskana.classification.api;
+
+import pro.taskana.common.api.QueryColumnName;
+import pro.taskana.workbasket.internal.WorkbasketQueryMapper;
/**
* Enum containing the column names for {@link
- * pro.taskana.mappings.QueryMapper#queryClassificationColumnValues}.
+ * WorkbasketQueryMapper#queryClassificationColumnValues}.
*
* @author jsa
*/
diff --git a/lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationService.java
similarity index 89%
rename from lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationService.java
index 60813084b..14e1360a0 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationService.java
@@ -1,12 +1,12 @@
-package pro.taskana;
+package pro.taskana.classification.api;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationInUseException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationInUseException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
/** This class manages the classifications. */
public interface ClassificationService {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/ClassificationSummary.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationSummary.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/ClassificationSummary.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationSummary.java
index 5c991b5e0..34a2e7265 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationSummary.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/ClassificationSummary.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.classification.api;
/**
* Interface for ClassificationSummaries. This is a specific short model-object which only requieres
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationAlreadyExistException.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationAlreadyExistException.java
similarity index 76%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationAlreadyExistException.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationAlreadyExistException.java
index c613c081c..b54a63cba 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationAlreadyExistException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationAlreadyExistException.java
@@ -1,6 +1,7 @@
-package pro.taskana.exceptions;
+package pro.taskana.classification.api.exceptions;
-import pro.taskana.Classification;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.common.api.exceptions.TaskanaException;
/** Thrown, when a classification does already exits, but wanted to create with same ID+domain. */
public class ClassificationAlreadyExistException extends TaskanaException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationInUseException.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationInUseException.java
similarity index 75%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationInUseException.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationInUseException.java
index 9e8c72411..c90a9b929 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationInUseException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationInUseException.java
@@ -1,4 +1,6 @@
-package pro.taskana.exceptions;
+package pro.taskana.classification.api.exceptions;
+
+import pro.taskana.common.api.exceptions.TaskanaException;
/** Thrown if a specific task is not in the database. */
public class ClassificationInUseException extends TaskanaException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationNotFoundException.java b/lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationNotFoundException.java
similarity index 83%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationNotFoundException.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationNotFoundException.java
index 76feb6cce..0a25bfdb2 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationNotFoundException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/api/exceptions/ClassificationNotFoundException.java
@@ -1,4 +1,6 @@
-package pro.taskana.exceptions;
+package pro.taskana.classification.api.exceptions;
+
+import pro.taskana.common.api.exceptions.NotFoundException;
/** Thrown if a specific task is not in the database. */
public class ClassificationNotFoundException extends NotFoundException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationImpl.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationImpl.java
similarity index 96%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationImpl.java
index f03004655..a13143314 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationImpl.java
@@ -1,10 +1,10 @@
-package pro.taskana.impl;
+package pro.taskana.classification.internal;
import java.time.Instant;
import java.util.Objects;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationSummary;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationSummary;
/** Classification entity. */
public class ClassificationImpl extends ClassificationSummaryImpl implements Classification {
@@ -15,7 +15,7 @@ public class ClassificationImpl extends ClassificationSummaryImpl implements Cla
private String description;
private String applicationEntryPoint;
- ClassificationImpl() {}
+ public ClassificationImpl() {}
ClassificationImpl(ClassificationImpl classification) {
this.id = classification.getId();
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/ClassificationMapper.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationMapper.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/ClassificationMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationMapper.java
index 030abe6a1..0561d309b 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/ClassificationMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.classification.internal;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
@@ -8,8 +8,6 @@ import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
-import pro.taskana.impl.ClassificationImpl;
-
/** This class is the mybatis mapping of classifications. */
@SuppressWarnings({"checkstyle:LineLength", "checkstyle:Indentation"})
public interface ClassificationMapper {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationQueryImpl.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationQueryImpl.java
index fbe40f5f1..caaff2bbd 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationQueryImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.classification.internal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -8,13 +8,14 @@ import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.ClassificationQuery;
-import pro.taskana.ClassificationQueryColumnName;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.TimeInterval;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.TaskanaRuntimeException;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.classification.api.ClassificationQuery;
+import pro.taskana.classification.api.ClassificationQueryColumnName;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.TaskanaRuntimeException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.util.LoggerUtils;
/**
* Implementation of ClassificationQuery interface.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationQueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationQueryMapper.java
new file mode 100644
index 000000000..2b414b469
--- /dev/null
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationQueryMapper.java
@@ -0,0 +1,161 @@
+package pro.taskana.classification.internal;
+
+import java.util.List;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+
+/** This class provides a mapper for all classification queries. */
+@SuppressWarnings({"checkstyle:LineLength", "checkstyle:Indentation"})
+public interface ClassificationQueryMapper {
+ @Select(
+ "")
+ @Results({
+ @Result(property = "id", column = "ID"),
+ @Result(property = "key", column = "KEY"),
+ @Result(property = "category", column = "CATEGORY"),
+ @Result(property = "type", column = "TYPE"),
+ @Result(property = "domain", column = "DOMAIN"),
+ @Result(property = "name", column = "NAME"),
+ @Result(property = "priority", column = "PRIORITY"),
+ @Result(property = "serviceLevel", column = "SERVICE_LEVEL"),
+ @Result(property = "parentId", column = "PARENT_ID"),
+ @Result(property = "parentKey", column = "PARENT_KEY"),
+ @Result(property = "custom1", column = "CUSTOM_1"),
+ @Result(property = "custom2", column = "CUSTOM_2"),
+ @Result(property = "custom3", column = "CUSTOM_3"),
+ @Result(property = "custom4", column = "CUSTOM_4"),
+ @Result(property = "custom5", column = "CUSTOM_5"),
+ @Result(property = "custom6", column = "CUSTOM_6"),
+ @Result(property = "custom7", column = "CUSTOM_7"),
+ @Result(property = "custom8", column = "CUSTOM_8")
+ })
+ List queryClassificationSummaries(
+ ClassificationQueryImpl classificationQuery);
+
+ @Select(
+ "")
+ Long countQueryClassifications(ClassificationQueryImpl classificationQuery);
+
+ @Select(
+ "")
+ List queryClassificationColumnValues(ClassificationQueryImpl classificationQuery);
+}
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationServiceImpl.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationServiceImpl.java
index 07bac6aed..4183df9f6 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationServiceImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.classification.internal;
import java.sql.SQLException;
import java.sql.SQLIntegrityConstraintViolationException;
@@ -13,24 +13,24 @@ import org.apache.ibatis.exceptions.PersistenceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationQuery;
-import pro.taskana.ClassificationService;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.TaskSummary;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationInUseException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.util.IdGenerator;
-import pro.taskana.jobs.ClassificationChangedJob;
-import pro.taskana.jobs.ScheduledJob;
-import pro.taskana.mappings.ClassificationMapper;
-import pro.taskana.mappings.TaskMapper;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationQuery;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationInUseException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.jobs.ClassificationChangedJob;
+import pro.taskana.common.internal.jobs.ScheduledJob;
+import pro.taskana.common.internal.util.IdGenerator;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.TaskanaRole;
+import pro.taskana.task.internal.TaskMapper;
/** This is the implementation of ClassificationService. */
public class ClassificationServiceImpl implements ClassificationService {
@@ -41,7 +41,7 @@ public class ClassificationServiceImpl implements ClassificationService {
private TaskMapper taskMapper;
private InternalTaskanaEngine taskanaEngine;
- ClassificationServiceImpl(
+ public ClassificationServiceImpl(
InternalTaskanaEngine taskanaEngine,
ClassificationMapper classificationMapper,
TaskMapper taskMapper) {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationSummaryImpl.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationSummaryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationSummaryImpl.java
index 63dadeeb4..925ca9bdd 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationSummaryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationSummaryImpl.java
@@ -1,8 +1,8 @@
-package pro.taskana.impl;
+package pro.taskana.classification.internal;
import java.util.Objects;
-import pro.taskana.ClassificationSummary;
+import pro.taskana.classification.api.ClassificationSummary;
/** Implementation for the short summaries of a classification entity. */
public class ClassificationSummaryImpl implements ClassificationSummary {
@@ -26,7 +26,7 @@ public class ClassificationSummaryImpl implements ClassificationSummary {
protected String custom7;
protected String custom8;
- ClassificationSummaryImpl() {}
+ public ClassificationSummaryImpl() {}
@Override
public String getId() {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/BaseQuery.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/BaseQuery.java
similarity index 99%
rename from lib/taskana-core/src/main/java/pro/taskana/BaseQuery.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/BaseQuery.java
index 9f0f71634..69c306f83 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/BaseQuery.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/BaseQuery.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.common.api;
import java.util.List;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/BulkOperationResults.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/BulkOperationResults.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/BulkOperationResults.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/BulkOperationResults.java
index 2825cd059..52e0ebb41 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/BulkOperationResults.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/BulkOperationResults.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.common.api;
import java.util.ArrayList;
import java.util.HashMap;
@@ -7,7 +7,7 @@ import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.internal.util.LoggerUtils;
/**
* Returning type for a bulk db interaction with errors. This wrapper is storing them with a
diff --git a/lib/taskana-core/src/main/java/pro/taskana/CustomField.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/CustomField.java
similarity index 90%
rename from lib/taskana-core/src/main/java/pro/taskana/CustomField.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/CustomField.java
index 73797f498..3977323f3 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/CustomField.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/CustomField.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.common.api;
/** This enum contains the fields CUSTOM_1 - CUSTOM_10 for the task entity. */
public enum CustomField {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/JobService.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/JobService.java
similarity index 76%
rename from lib/taskana-core/src/main/java/pro/taskana/JobService.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/JobService.java
index 2b541be02..29126939f 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/JobService.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/JobService.java
@@ -1,6 +1,6 @@
-package pro.taskana;
+package pro.taskana.common.api;
-import pro.taskana.jobs.ScheduledJob;
+import pro.taskana.common.internal.jobs.ScheduledJob;
/** Service to manage the TASKANA jobs. */
public interface JobService {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/KeyDomain.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/KeyDomain.java
similarity index 96%
rename from lib/taskana-core/src/main/java/pro/taskana/KeyDomain.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/KeyDomain.java
index b2df7b441..4246f81d8 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/KeyDomain.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/KeyDomain.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.common.api;
import java.util.Objects;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/QueryColumnName.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/QueryColumnName.java
similarity index 82%
rename from lib/taskana-core/src/main/java/pro/taskana/QueryColumnName.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/QueryColumnName.java
index 4a3f43856..c4d04e02e 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/QueryColumnName.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/QueryColumnName.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.common.api;
/**
* This interface ist used to emulate an extensible enum for use in the Basequery interface.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskanaEngine.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/TaskanaEngine.java
similarity index 90%
rename from lib/taskana-core/src/main/java/pro/taskana/TaskanaEngine.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/TaskanaEngine.java
index e819e3678..7a389aeb2 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TaskanaEngine.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/TaskanaEngine.java
@@ -1,9 +1,14 @@
-package pro.taskana;
+package pro.taskana.common.api;
import java.sql.SQLException;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskanaRole;
+import pro.taskana.workbasket.api.WorkbasketService;
/** The TaskanaEngine represents an overall set of all needed services. */
public interface TaskanaEngine {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TimeInterval.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/TimeInterval.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/TimeInterval.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/TimeInterval.java
index 4819f9e1b..6472def97 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TimeInterval.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/TimeInterval.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.common.api;
import java.time.Instant;
import java.util.Objects;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/AttachmentPersistenceException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/AttachmentPersistenceException.java
similarity index 92%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/AttachmentPersistenceException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/AttachmentPersistenceException.java
index 131048a04..e4d8780fc 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/AttachmentPersistenceException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/AttachmentPersistenceException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* Thrown, when an attachment should be inserted to the DB, but it does already exist.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/AutocommitFailedException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/AutocommitFailedException.java
similarity index 87%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/AutocommitFailedException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/AutocommitFailedException.java
index c051a166c..49cad3718 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/AutocommitFailedException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/AutocommitFailedException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/** Thrown in ConnectionManagementMode AUTOCOMMIT when an attempt to commit fails. */
public class AutocommitFailedException extends TaskanaRuntimeException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ConcurrencyException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/ConcurrencyException.java
similarity index 88%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/ConcurrencyException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/ConcurrencyException.java
index 0b953c093..d557020e1 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ConcurrencyException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/ConcurrencyException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* This exception is thrown when an attempt is made to update an object that has already been
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ConnectionNotSetException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/ConnectionNotSetException.java
similarity index 89%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/ConnectionNotSetException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/ConnectionNotSetException.java
index 2da382db9..634f6b8f4 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ConnectionNotSetException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/ConnectionNotSetException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* Thrown if ConnectionManagementMode is CONNECTION_MANAGED_EXTERNALLY and an attempt is made to
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/DomainNotFoundException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/DomainNotFoundException.java
similarity index 88%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/DomainNotFoundException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/DomainNotFoundException.java
index dde0a4609..dfc73fac8 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/DomainNotFoundException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/DomainNotFoundException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* This exception is thrown if a domain name is specified which is not found in the configuration.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidArgumentException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidArgumentException.java
similarity index 89%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidArgumentException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidArgumentException.java
index 59c29471d..d389929c1 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidArgumentException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidArgumentException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* This exception is thrown when a method is called with invalid argument.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidOwnerException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidOwnerException.java
similarity index 87%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidOwnerException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidOwnerException.java
index 7fa4e89db..17d3781a6 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidOwnerException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidOwnerException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* This exception is thrown when the task state doesn't allow the requested operation.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidStateException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidStateException.java
similarity index 87%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidStateException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidStateException.java
index e0fa68b72..16c8698f2 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidStateException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/InvalidStateException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* This exception is thrown when the task state doesn't allow the requested operation.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/NotAuthorizedException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/NotAuthorizedException.java
similarity index 91%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/NotAuthorizedException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/NotAuthorizedException.java
index d53f858ef..1bdf92c58 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/NotAuthorizedException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/NotAuthorizedException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/** This exception is used to communicate a not authorized user. */
public class NotAuthorizedException extends TaskanaException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/NotFoundException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/NotFoundException.java
similarity index 89%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/NotFoundException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/NotFoundException.java
index a5dce5391..7098f539c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/NotFoundException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/NotFoundException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/** This exception will be thrown if a specific object is not in the database. */
public class NotFoundException extends TaskanaException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/SystemException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/SystemException.java
similarity index 88%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/SystemException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/SystemException.java
index 74627e5ad..d87fc90b7 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/SystemException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/SystemException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/** This exception is thrown when a generic taskana problem is encountered. */
public class SystemException extends TaskanaRuntimeException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/TaskanaException.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/TaskanaException.java
index ee9e9b5f8..3460b1737 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/TaskanaException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* common base class for Taskana's checked exceptions.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaRuntimeException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/TaskanaRuntimeException.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaRuntimeException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/TaskanaRuntimeException.java
index bf68ad67f..fcc24acce 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaRuntimeException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/TaskanaRuntimeException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* Common base class for Taskana's runtime exceptions.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/UnsupportedDatabaseException.java b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/UnsupportedDatabaseException.java
similarity index 88%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/UnsupportedDatabaseException.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/UnsupportedDatabaseException.java
index 2cb179bcb..16dc97c43 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/UnsupportedDatabaseException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/api/exceptions/UnsupportedDatabaseException.java
@@ -1,4 +1,4 @@
-package pro.taskana.exceptions;
+package pro.taskana.common.api.exceptions;
/**
* This exception will be thrown if the database name doesn't match to one of the desired databases.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/CustomPropertySelector.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/CustomPropertySelector.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/CustomPropertySelector.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/CustomPropertySelector.java
index cfbf618ac..0b88ce049 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/CustomPropertySelector.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/CustomPropertySelector.java
@@ -1,6 +1,6 @@
-package pro.taskana.mappings;
+package pro.taskana.common.internal;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
/**
* Determines which custom properties are to be updated.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/InternalTaskanaEngine.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/InternalTaskanaEngine.java
similarity index 92%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/InternalTaskanaEngine.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/InternalTaskanaEngine.java
index 8e4b614ef..8a17e7b3a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/InternalTaskanaEngine.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/InternalTaskanaEngine.java
@@ -1,11 +1,11 @@
-package pro.taskana.impl;
+package pro.taskana.common.internal;
import java.util.function.Supplier;
import org.apache.ibatis.session.SqlSession;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.history.HistoryEventProducer;
-import pro.taskana.taskrouting.TaskRoutingManager;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.history.internal.HistoryEventProducer;
+import pro.taskana.task.internal.TaskRoutingManager;
/**
* FOR INTERNAL USE ONLY.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/JobMapper.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/JobMapper.java
similarity index 95%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/JobMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/JobMapper.java
index b45a9bcda..7010eb64b 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/JobMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/JobMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.common.internal;
import java.util.List;
import java.util.Map;
@@ -10,8 +10,8 @@ import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
-import pro.taskana.impl.persistence.MapTypeHandler;
-import pro.taskana.jobs.ScheduledJob;
+import pro.taskana.common.internal.jobs.ScheduledJob;
+import pro.taskana.common.internal.persistence.MapTypeHandler;
/** This class is the mybatis mapping of the JOB table. */
@SuppressWarnings("checkstyle:LineLength")
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/JobServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/JobServiceImpl.java
similarity index 95%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/JobServiceImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/JobServiceImpl.java
index 96c324c30..2c8e83135 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/JobServiceImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/JobServiceImpl.java
@@ -1,13 +1,12 @@
-package pro.taskana.impl;
+package pro.taskana.common.internal;
import java.time.Instant;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.JobService;
-import pro.taskana.jobs.ScheduledJob;
-import pro.taskana.mappings.JobMapper;
+import pro.taskana.common.api.JobService;
+import pro.taskana.common.internal.jobs.ScheduledJob;
/** Controls all job activities. */
public class JobServiceImpl implements JobService {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskanaEngineImpl.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/TaskanaEngineImpl.java
similarity index 87%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TaskanaEngineImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/TaskanaEngineImpl.java
index 800ba84e5..e95dbac4a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskanaEngineImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/TaskanaEngineImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.common.internal;
import java.security.AccessController;
import java.security.Principal;
@@ -26,37 +26,40 @@ import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.ClassificationService;
-import pro.taskana.JobService;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskService;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaRole;
-import pro.taskana.WorkbasketService;
-import pro.taskana.configuration.DB;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.AutocommitFailedException;
-import pro.taskana.exceptions.ConnectionNotSetException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.SystemException;
-import pro.taskana.exceptions.TaskanaRuntimeException;
-import pro.taskana.history.HistoryEventProducer;
-import pro.taskana.impl.persistence.InstantTypeHandler;
-import pro.taskana.impl.persistence.MapTypeHandler;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.mappings.AttachmentMapper;
-import pro.taskana.mappings.ClassificationMapper;
-import pro.taskana.mappings.DistributionTargetMapper;
-import pro.taskana.mappings.JobMapper;
-import pro.taskana.mappings.ObjectReferenceMapper;
-import pro.taskana.mappings.QueryMapper;
-import pro.taskana.mappings.TaskMapper;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.mappings.WorkbasketAccessMapper;
-import pro.taskana.mappings.WorkbasketMapper;
-import pro.taskana.security.CurrentUserContext;
-import pro.taskana.security.GroupPrincipal;
-import pro.taskana.taskrouting.TaskRoutingManager;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.internal.ClassificationMapper;
+import pro.taskana.classification.internal.ClassificationServiceImpl;
+import pro.taskana.common.api.JobService;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.AutocommitFailedException;
+import pro.taskana.common.api.exceptions.ConnectionNotSetException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.SystemException;
+import pro.taskana.common.api.exceptions.TaskanaRuntimeException;
+import pro.taskana.common.internal.configuration.DB;
+import pro.taskana.common.internal.persistence.InstantTypeHandler;
+import pro.taskana.common.internal.persistence.MapTypeHandler;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.common.internal.security.GroupPrincipal;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.history.internal.HistoryEventProducer;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.TaskMonitorMapper;
+import pro.taskana.report.internal.TaskMonitorServiceImpl;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskanaRole;
+import pro.taskana.task.internal.AttachmentMapper;
+import pro.taskana.task.internal.ObjectReferenceMapper;
+import pro.taskana.task.internal.TaskMapper;
+import pro.taskana.task.internal.TaskRoutingManager;
+import pro.taskana.task.internal.TaskServiceImpl;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.internal.DistributionTargetMapper;
+import pro.taskana.workbasket.internal.WorkbasketAccessMapper;
+import pro.taskana.workbasket.internal.WorkbasketMapper;
+import pro.taskana.workbasket.internal.WorkbasketQueryMapper;
+import pro.taskana.workbasket.internal.WorkbasketServiceImpl;
/** This is the implementation of TaskanaEngine. */
public class TaskanaEngineImpl implements TaskanaEngine {
@@ -251,7 +254,7 @@ public class TaskanaEngineImpl implements TaskanaEngine {
configuration.addMapper(ClassificationMapper.class);
configuration.addMapper(WorkbasketAccessMapper.class);
configuration.addMapper(ObjectReferenceMapper.class);
- configuration.addMapper(QueryMapper.class);
+ configuration.addMapper(WorkbasketQueryMapper.class);
configuration.addMapper(AttachmentMapper.class);
configuration.addMapper(JobMapper.class);
SqlSessionFactory localSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
diff --git a/lib/taskana-core/src/main/java/pro/taskana/configuration/DB.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/configuration/DB.java
similarity index 90%
rename from lib/taskana-core/src/main/java/pro/taskana/configuration/DB.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/configuration/DB.java
index 42ebe31a5..9dbdea044 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/configuration/DB.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/configuration/DB.java
@@ -1,6 +1,6 @@
-package pro.taskana.configuration;
+package pro.taskana.common.internal.configuration;
-import pro.taskana.exceptions.UnsupportedDatabaseException;
+import pro.taskana.common.api.exceptions.UnsupportedDatabaseException;
/** Supported versions of databases. */
public enum DB {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/configuration/DbSchemaCreator.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/configuration/DbSchemaCreator.java
similarity index 99%
rename from lib/taskana-core/src/main/java/pro/taskana/configuration/DbSchemaCreator.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/configuration/DbSchemaCreator.java
index 7cc95c355..31e157c23 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/configuration/DbSchemaCreator.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/configuration/DbSchemaCreator.java
@@ -1,4 +1,4 @@
-package pro.taskana.configuration;
+package pro.taskana.common.internal.configuration;
import java.io.BufferedReader;
import java.io.IOException;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/jobs/AbstractTaskanaJob.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/AbstractTaskanaJob.java
similarity index 87%
rename from lib/taskana-core/src/main/java/pro/taskana/jobs/AbstractTaskanaJob.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/AbstractTaskanaJob.java
index 0cd4dc92a..95af8119e 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/jobs/AbstractTaskanaJob.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/AbstractTaskanaJob.java
@@ -1,13 +1,13 @@
-package pro.taskana.jobs;
+package pro.taskana.common.internal.jobs;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
/** Abstract base for all background jobs of TASKANA. */
public abstract class AbstractTaskanaJob implements TaskanaJob {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/jobs/ClassificationChangedJob.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/ClassificationChangedJob.java
similarity index 91%
rename from lib/taskana-core/src/main/java/pro/taskana/jobs/ClassificationChangedJob.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/ClassificationChangedJob.java
index 3bca63226..f69b4ec4a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/jobs/ClassificationChangedJob.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/ClassificationChangedJob.java
@@ -1,4 +1,4 @@
-package pro.taskana.jobs;
+package pro.taskana.common.internal.jobs;
import java.util.HashMap;
import java.util.List;
@@ -7,10 +7,10 @@ import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.impl.TaskServiceImpl;
-import pro.taskana.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
+import pro.taskana.task.internal.TaskServiceImpl;
/**
* This class executes a job of type CLASSIFICATIONCHANGEDJOB.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/jobs/JobRunner.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/JobRunner.java
similarity index 90%
rename from lib/taskana-core/src/main/java/pro/taskana/jobs/JobRunner.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/JobRunner.java
index ba2349dc3..79b633e6e 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/jobs/JobRunner.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/JobRunner.java
@@ -1,4 +1,4 @@
-package pro.taskana.jobs;
+package pro.taskana.common.internal.jobs;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -7,12 +7,12 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.exceptions.SystemException;
-import pro.taskana.impl.JobServiceImpl;
-import pro.taskana.impl.TaskServiceImpl;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.SystemException;
+import pro.taskana.common.internal.JobServiceImpl;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
+import pro.taskana.task.internal.TaskServiceImpl;
/** This is the runner for Tasks jobs. */
public class JobRunner {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/jobs/ScheduledJob.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/ScheduledJob.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/jobs/ScheduledJob.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/ScheduledJob.java
index 0a8cac9df..807b31d64 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/jobs/ScheduledJob.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/ScheduledJob.java
@@ -1,4 +1,4 @@
-package pro.taskana.jobs;
+package pro.taskana.common.internal.jobs;
import java.time.Instant;
import java.util.Map;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/jobs/TaskCleanupJob.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskCleanupJob.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/jobs/TaskCleanupJob.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskCleanupJob.java
index cc12bd67e..a9f4ff015 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/jobs/TaskCleanupJob.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskCleanupJob.java
@@ -1,4 +1,4 @@
-package pro.taskana.jobs;
+package pro.taskana.common.internal.jobs;
import java.time.Duration;
import java.time.Instant;
@@ -10,15 +10,15 @@ import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.BaseQuery;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.TaskSummary;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TimeInterval;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.api.BaseQuery;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.task.api.TaskSummary;
/** Job to cleanup completed tasks after a period of time. */
public class TaskCleanupJob extends AbstractTaskanaJob {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/jobs/TaskRefreshJob.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskRefreshJob.java
similarity index 83%
rename from lib/taskana-core/src/main/java/pro/taskana/jobs/TaskRefreshJob.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskRefreshJob.java
index f4dee8979..5c9bfb484 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/jobs/TaskRefreshJob.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskRefreshJob.java
@@ -1,4 +1,4 @@
-package pro.taskana.jobs;
+package pro.taskana.common.internal.jobs;
import java.util.Arrays;
import java.util.List;
@@ -6,11 +6,11 @@ import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.impl.TaskServiceImpl;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.task.internal.TaskServiceImpl;
/**
* This class executes a job of type CLASSIFICATIONCHANGEDJOB.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/jobs/TaskanaJob.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskanaJob.java
similarity index 70%
rename from lib/taskana-core/src/main/java/pro/taskana/jobs/TaskanaJob.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskanaJob.java
index bf6939108..63faaf16e 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/jobs/TaskanaJob.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/TaskanaJob.java
@@ -1,6 +1,6 @@
-package pro.taskana.jobs;
+package pro.taskana.common.internal.jobs;
-import pro.taskana.exceptions.TaskanaException;
+import pro.taskana.common.api.exceptions.TaskanaException;
/** Interface for all background TASKANA jobs. */
public interface TaskanaJob {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/jobs/WorkbasketCleanupJob.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/WorkbasketCleanupJob.java
similarity index 88%
rename from lib/taskana-core/src/main/java/pro/taskana/jobs/WorkbasketCleanupJob.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/WorkbasketCleanupJob.java
index 1cfdf492a..1e8080465 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/jobs/WorkbasketCleanupJob.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/jobs/WorkbasketCleanupJob.java
@@ -1,4 +1,4 @@
-package pro.taskana.jobs;
+package pro.taskana.common.internal.jobs;
import java.time.Duration;
import java.time.Instant;
@@ -6,16 +6,16 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.BaseQuery;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.WorkbasketQueryColumnName;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketInUseException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.api.BaseQuery;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
+import pro.taskana.workbasket.api.WorkbasketQueryColumnName;
+import pro.taskana.workbasket.api.exceptions.WorkbasketInUseException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/**
* Job to cleanup completed workbaskets after a period of time if there are no pending tasks
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/InstantTypeHandler.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/persistence/InstantTypeHandler.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/persistence/InstantTypeHandler.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/persistence/InstantTypeHandler.java
index b5854b6d8..5b46284ea 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/InstantTypeHandler.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/persistence/InstantTypeHandler.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.persistence;
+package pro.taskana.common.internal.persistence;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/MapTypeHandler.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/persistence/MapTypeHandler.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/persistence/MapTypeHandler.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/persistence/MapTypeHandler.java
index 69fdf6a4a..e35e20fcd 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/persistence/MapTypeHandler.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/persistence/MapTypeHandler.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.persistence;
+package pro.taskana.common.internal.persistence;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/security/CurrentUserContext.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/security/CurrentUserContext.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/security/CurrentUserContext.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/security/CurrentUserContext.java
index 04480ecad..4b085c7c0 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/security/CurrentUserContext.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/security/CurrentUserContext.java
@@ -1,6 +1,6 @@
-package pro.taskana.security;
+package pro.taskana.common.internal.security;
-import static pro.taskana.configuration.TaskanaEngineConfiguration.shouldUseLowerCaseForAccessIds;
+import static pro.taskana.TaskanaEngineConfiguration.shouldUseLowerCaseForAccessIds;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/security/GroupPrincipal.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/security/GroupPrincipal.java
similarity index 91%
rename from lib/taskana-core/src/main/java/pro/taskana/security/GroupPrincipal.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/security/GroupPrincipal.java
index 785c4844a..3353dbb60 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/security/GroupPrincipal.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/security/GroupPrincipal.java
@@ -1,4 +1,4 @@
-package pro.taskana.security;
+package pro.taskana.common.internal.security;
import java.security.Principal;
import java.security.acl.Group;
@@ -7,7 +7,7 @@ import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.internal.util.LoggerUtils;
/** Represents a group with a name and a set of members. */
public class GroupPrincipal implements Group {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/security/UserPrincipal.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/security/UserPrincipal.java
similarity index 89%
rename from lib/taskana-core/src/main/java/pro/taskana/security/UserPrincipal.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/security/UserPrincipal.java
index 8dbe54d55..5e0fffa48 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/security/UserPrincipal.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/security/UserPrincipal.java
@@ -1,4 +1,4 @@
-package pro.taskana.security;
+package pro.taskana.common.internal.security;
import java.security.Principal;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/transaction/TaskanaCallable.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/transaction/TaskanaCallable.java
similarity index 78%
rename from lib/taskana-core/src/main/java/pro/taskana/transaction/TaskanaCallable.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/transaction/TaskanaCallable.java
index 76269c52c..c46a38970 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/transaction/TaskanaCallable.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/transaction/TaskanaCallable.java
@@ -1,4 +1,4 @@
-package pro.taskana.transaction;
+package pro.taskana.common.internal.transaction;
/**
* represents a callable Object.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/transaction/TaskanaTransactionProvider.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/transaction/TaskanaTransactionProvider.java
similarity index 82%
rename from lib/taskana-core/src/main/java/pro/taskana/transaction/TaskanaTransactionProvider.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/transaction/TaskanaTransactionProvider.java
index 19fedfd21..29ce25532 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/transaction/TaskanaTransactionProvider.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/transaction/TaskanaTransactionProvider.java
@@ -1,4 +1,4 @@
-package pro.taskana.transaction;
+package pro.taskana.common.internal.transaction;
/**
* This class provides support for transactions.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/util/IdGenerator.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/IdGenerator.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/util/IdGenerator.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/util/IdGenerator.java
index b71916536..0d8746596 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/util/IdGenerator.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/IdGenerator.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.util;
+package pro.taskana.common.internal.util;
import java.util.UUID;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/util/LoggerUtils.java b/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/LoggerUtils.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/util/LoggerUtils.java
rename to lib/taskana-core/src/main/java/pro/taskana/common/internal/util/LoggerUtils.java
index 611fe2341..f63cc5b38 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/util/LoggerUtils.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/common/internal/util/LoggerUtils.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.util;
+package pro.taskana.common.internal.util;
import java.util.List;
import java.util.Map;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/api/TaskanaHistory.java b/lib/taskana-core/src/main/java/pro/taskana/history/api/TaskanaHistory.java
index f0b3be78b..45f56ff6d 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/api/TaskanaHistory.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/api/TaskanaHistory.java
@@ -1,6 +1,6 @@
package pro.taskana.history.api;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
/** Interface for TASKANA History Service Provider. */
public interface TaskanaHistory {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/api/TaskanaHistoryEvent.java b/lib/taskana-core/src/main/java/pro/taskana/history/api/TaskanaHistoryEvent.java
index 0017779b4..95a6b5fbf 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/api/TaskanaHistoryEvent.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/api/TaskanaHistoryEvent.java
@@ -2,7 +2,7 @@ package pro.taskana.history.api;
import java.time.Instant;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.common.internal.security.CurrentUserContext;
/** Super class for all specific events from the TASKANA engine. */
public class TaskanaHistoryEvent {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/HistoryEventProducer.java b/lib/taskana-core/src/main/java/pro/taskana/history/internal/HistoryEventProducer.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/history/HistoryEventProducer.java
rename to lib/taskana-core/src/main/java/pro/taskana/history/internal/HistoryEventProducer.java
index d6aa6ad76..614f4eaa0 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/HistoryEventProducer.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/internal/HistoryEventProducer.java
@@ -1,11 +1,11 @@
-package pro.taskana.history;
+package pro.taskana.history.internal;
import java.util.Objects;
import java.util.ServiceLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
import pro.taskana.history.api.TaskanaHistory;
import pro.taskana.history.api.TaskanaHistoryEvent;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/ClaimCancelledEvent.java b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/ClaimCancelledEvent.java
similarity index 75%
rename from lib/taskana-core/src/main/java/pro/taskana/history/events/task/ClaimCancelledEvent.java
rename to lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/ClaimCancelledEvent.java
index 9e5bd36f2..ff0ea6055 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/ClaimCancelledEvent.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/ClaimCancelledEvent.java
@@ -1,6 +1,6 @@
-package pro.taskana.history.events.task;
+package pro.taskana.history.internal.events.task;
-import pro.taskana.Task;
+import pro.taskana.task.api.Task;
/** Event fired if a task is cancelled to be claimed. */
public class ClaimCancelledEvent extends TaskEvent {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/ClaimedEvent.java b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/ClaimedEvent.java
similarity index 71%
rename from lib/taskana-core/src/main/java/pro/taskana/history/events/task/ClaimedEvent.java
rename to lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/ClaimedEvent.java
index 0323dc005..58c8b79a7 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/ClaimedEvent.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/ClaimedEvent.java
@@ -1,6 +1,6 @@
-package pro.taskana.history.events.task;
+package pro.taskana.history.internal.events.task;
-import pro.taskana.Task;
+import pro.taskana.task.api.Task;
/** Event fired if a task is claimed. */
public class ClaimedEvent extends TaskEvent {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/CompletedEvent.java b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/CompletedEvent.java
similarity index 76%
rename from lib/taskana-core/src/main/java/pro/taskana/history/events/task/CompletedEvent.java
rename to lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/CompletedEvent.java
index 4c15d355b..c9bcb7181 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/CompletedEvent.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/CompletedEvent.java
@@ -1,7 +1,7 @@
-package pro.taskana.history.events.task;
+package pro.taskana.history.internal.events.task;
-import pro.taskana.Task;
-import pro.taskana.TaskSummary;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskSummary;
/** Event fired if a task is completed. */
public class CompletedEvent extends TaskEvent {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/CreatedEvent.java b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/CreatedEvent.java
similarity index 71%
rename from lib/taskana-core/src/main/java/pro/taskana/history/events/task/CreatedEvent.java
rename to lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/CreatedEvent.java
index 2d40ad1b2..2d1a27871 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/CreatedEvent.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/CreatedEvent.java
@@ -1,6 +1,6 @@
-package pro.taskana.history.events.task;
+package pro.taskana.history.internal.events.task;
-import pro.taskana.Task;
+import pro.taskana.task.api.Task;
/** Event fired if a task is created. */
public class CreatedEvent extends TaskEvent {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/TaskEvent.java b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/TaskEvent.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/history/events/task/TaskEvent.java
rename to lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/TaskEvent.java
index b7d9145e7..c66f3ce07 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/TaskEvent.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/TaskEvent.java
@@ -1,8 +1,8 @@
-package pro.taskana.history.events.task;
+package pro.taskana.history.internal.events.task;
-import pro.taskana.Task;
-import pro.taskana.TaskSummary;
import pro.taskana.history.api.TaskanaHistoryEvent;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskSummary;
/** Super class for all task related events. */
public class TaskEvent extends TaskanaHistoryEvent {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/TransferredEvent.java b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/TransferredEvent.java
similarity index 79%
rename from lib/taskana-core/src/main/java/pro/taskana/history/events/task/TransferredEvent.java
rename to lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/TransferredEvent.java
index 9d02ee3cf..cc09af28e 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/history/events/task/TransferredEvent.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/history/internal/events/task/TransferredEvent.java
@@ -1,10 +1,10 @@
-package pro.taskana.history.events.task;
+package pro.taskana.history.internal.events.task;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.Task;
-import pro.taskana.WorkbasketSummary;
+import pro.taskana.task.api.Task;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/** Event fired if a task is transferred. */
public class TransferredEvent extends TaskEvent {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/report/CategoryReport.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/CategoryReport.java
similarity index 76%
rename from lib/taskana-core/src/main/java/pro/taskana/report/CategoryReport.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/CategoryReport.java
index 83a56424b..77d4640e0 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/report/CategoryReport.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/CategoryReport.java
@@ -1,12 +1,12 @@
-package pro.taskana.report;
+package pro.taskana.report.api;
import java.util.List;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.structure.Report;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.structure.Report;
/**
* A CategoryReport contains the total numbers of tasks of the respective category as well as the
diff --git a/lib/taskana-core/src/main/java/pro/taskana/report/ClassificationReport.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/ClassificationReport.java
similarity index 66%
rename from lib/taskana-core/src/main/java/pro/taskana/report/ClassificationReport.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/ClassificationReport.java
index c8790b5f1..46e046ec5 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/report/ClassificationReport.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/ClassificationReport.java
@@ -1,18 +1,20 @@
-package pro.taskana.report;
+package pro.taskana.report.api;
import java.util.List;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.DetailedMonitorQueryItem;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.row.DetailedClassificationRow;
-import pro.taskana.impl.report.structure.Report;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.DetailedMonitorQueryItem;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.row.DetailedClassificationRow;
+import pro.taskana.report.internal.row.FoldableRow;
+import pro.taskana.report.internal.structure.Report;
+import pro.taskana.report.internal.structure.Row;
/**
- * The ClassificationReport extends the Report. The {@link pro.taskana.impl.report.structure.Row}s
- * of the ClassificationReport are grouped by classifications.
+ * The ClassificationReport extends the Report. The {@link Row}s of the ClassificationReport are
+ * grouped by classifications.
*/
public class ClassificationReport extends Report {
@@ -30,9 +32,8 @@ public class ClassificationReport extends Report {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/report/CustomFieldValueReport.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/CustomFieldValueReport.java
similarity index 77%
rename from lib/taskana-core/src/main/java/pro/taskana/report/CustomFieldValueReport.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/CustomFieldValueReport.java
index 6a898cffc..e3762307c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/report/CustomFieldValueReport.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/CustomFieldValueReport.java
@@ -1,12 +1,12 @@
-package pro.taskana.report;
+package pro.taskana.report.api;
import java.util.List;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.structure.Report;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.structure.Report;
/**
* A CustomFieldValueReport contains the total numbers of tasks of the respective custom field as
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskMonitorService.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/TaskMonitorService.java
similarity index 86%
rename from lib/taskana-core/src/main/java/pro/taskana/TaskMonitorService.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/TaskMonitorService.java
index bec72fe6c..ad7d8ae4c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TaskMonitorService.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/TaskMonitorService.java
@@ -1,11 +1,6 @@
-package pro.taskana;
+package pro.taskana.report.api;
-import pro.taskana.report.CategoryReport;
-import pro.taskana.report.ClassificationReport;
-import pro.taskana.report.CustomFieldValueReport;
-import pro.taskana.report.TaskStatusReport;
-import pro.taskana.report.TimestampReport;
-import pro.taskana.report.WorkbasketReport;
+import pro.taskana.common.api.CustomField;
/** The Task Monitor Service manages operations on tasks regarding the monitoring. */
public interface TaskMonitorService {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/report/TaskStatusReport.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/TaskStatusReport.java
similarity index 79%
rename from lib/taskana-core/src/main/java/pro/taskana/report/TaskStatusReport.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/TaskStatusReport.java
index 82916d732..eabd4321c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/report/TaskStatusReport.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/TaskStatusReport.java
@@ -1,15 +1,15 @@
-package pro.taskana.report;
+package pro.taskana.report.api;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TaskStatusColumnHeader;
-import pro.taskana.impl.report.item.TaskQueryItem;
-import pro.taskana.impl.report.structure.Report;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.internal.header.TaskStatusColumnHeader;
+import pro.taskana.report.internal.item.TaskQueryItem;
+import pro.taskana.report.internal.structure.Report;
+import pro.taskana.task.api.TaskState;
/**
* A TaskStatusReport contains the total number of tasks, clustered in their task status.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/report/TimeIntervalReportBuilder.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/TimeIntervalReportBuilder.java
similarity index 89%
rename from lib/taskana-core/src/main/java/pro/taskana/report/TimeIntervalReportBuilder.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/TimeIntervalReportBuilder.java
index 5111ffefc..3691c4995 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/report/TimeIntervalReportBuilder.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/TimeIntervalReportBuilder.java
@@ -1,16 +1,16 @@
-package pro.taskana.report;
+package pro.taskana.report.api;
import java.util.List;
import java.util.Map;
-import pro.taskana.CustomField;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.SelectedItem;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.AgeQueryItem;
-import pro.taskana.impl.report.structure.Report;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.internal.SelectedItem;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.AgeQueryItem;
+import pro.taskana.report.internal.structure.Report;
+import pro.taskana.task.api.TaskState;
/**
* "Super" Interface for all TimeIntervalReportBuilders.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/report/Timestamp.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/Timestamp.java
similarity index 62%
rename from lib/taskana-core/src/main/java/pro/taskana/report/Timestamp.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/Timestamp.java
index 6ae9fd214..5c72cabff 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/report/Timestamp.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/Timestamp.java
@@ -1,6 +1,8 @@
-package pro.taskana.report;
+package pro.taskana.report.api;
-/** This enum contains all timestamps saved in the database table for a {@link pro.taskana.Task}. */
+import pro.taskana.task.api.Task;
+
+/** This enum contains all timestamps saved in the database table for a {@link Task}. */
public enum Timestamp {
CREATED,
CLAIMED,
diff --git a/lib/taskana-core/src/main/java/pro/taskana/report/TimestampReport.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/TimestampReport.java
similarity index 70%
rename from lib/taskana-core/src/main/java/pro/taskana/report/TimestampReport.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/TimestampReport.java
index ee11310d7..c781d1034 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/report/TimestampReport.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/TimestampReport.java
@@ -1,13 +1,13 @@
-package pro.taskana.report;
+package pro.taskana.report.api;
import java.util.List;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.TimestampQueryItem;
-import pro.taskana.impl.report.row.TimestampRow;
-import pro.taskana.impl.report.structure.Report;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.TimestampQueryItem;
+import pro.taskana.report.internal.row.TimestampRow;
+import pro.taskana.report.internal.structure.Report;
/** A {@link TimestampReport} displays created and competed tasks for a specific dates. */
public class TimestampReport extends Report {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/report/WorkbasketReport.java b/lib/taskana-core/src/main/java/pro/taskana/report/api/WorkbasketReport.java
similarity index 84%
rename from lib/taskana-core/src/main/java/pro/taskana/report/WorkbasketReport.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/api/WorkbasketReport.java
index e1eb8eb89..5d521f9b3 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/report/WorkbasketReport.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/api/WorkbasketReport.java
@@ -1,13 +1,13 @@
-package pro.taskana.report;
+package pro.taskana.report.api;
import java.util.List;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.CombinedClassificationFilter;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.structure.Report;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.internal.CombinedClassificationFilter;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.structure.Report;
/**
* A WorkbasketReport contains the total numbers of tasks of the respective workbasket as well as
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/CategoryReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/CategoryReportBuilderImpl.java
similarity index 77%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/CategoryReportBuilderImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/CategoryReportBuilderImpl.java
index ecf80bbb3..75de667f5 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/CategoryReportBuilderImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/CategoryReportBuilderImpl.java
@@ -1,17 +1,17 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.preprocessor.DaysToWorkingDaysPreProcessor;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.CategoryReport;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.CategoryReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.preprocessor.DaysToWorkingDaysPreProcessor;
+import pro.taskana.task.api.TaskanaRole;
/** The implementation of CategoryReportBuilder. */
public class CategoryReportBuilderImpl
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/ClassificationReportBuilderImpl.java
similarity index 81%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationReportBuilderImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/ClassificationReportBuilderImpl.java
index 6b7108ae0..dd5fcd1e5 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationReportBuilderImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/ClassificationReportBuilderImpl.java
@@ -1,19 +1,19 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.DetailedMonitorQueryItem;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.preprocessor.DaysToWorkingDaysPreProcessor;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.ClassificationReport;
-import pro.taskana.report.ClassificationReport.DetailedClassificationReport;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.ClassificationReport;
+import pro.taskana.report.api.ClassificationReport.DetailedClassificationReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.DetailedMonitorQueryItem;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.preprocessor.DaysToWorkingDaysPreProcessor;
+import pro.taskana.task.api.TaskanaRole;
/** The implementation of ClassificationReportBuilder. */
public class ClassificationReportBuilderImpl
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/CombinedClassificationFilter.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/CombinedClassificationFilter.java
similarity index 84%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/CombinedClassificationFilter.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/CombinedClassificationFilter.java
index c2251af59..f4845e981 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/CombinedClassificationFilter.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/CombinedClassificationFilter.java
@@ -1,10 +1,12 @@
-package pro.taskana.impl.report;
+package pro.taskana.report.internal;
+
+import pro.taskana.report.api.WorkbasketReport;
/**
* The CombinedClassificationFilter is a pair of a classificationId for a task and a
* classificationId for the corresponding attachment that is used to filter the {@link
- * pro.taskana.report.WorkbasketReport} by the classification of the attachment. To filter by the
- * classification of the task, the classificationId of the attachment should be null.
+ * WorkbasketReport} by the classification of the attachment. To filter by the classification of the
+ * task, the classificationId of the attachment should be null.
*/
public class CombinedClassificationFilter {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/CustomFieldValueReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/CustomFieldValueReportBuilderImpl.java
similarity index 78%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/CustomFieldValueReportBuilderImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/CustomFieldValueReportBuilderImpl.java
index b6775b778..5fa800ea0 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/CustomFieldValueReportBuilderImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/CustomFieldValueReportBuilderImpl.java
@@ -1,18 +1,18 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.CustomField;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.preprocessor.DaysToWorkingDaysPreProcessor;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.CustomFieldValueReport;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.CustomFieldValueReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.preprocessor.DaysToWorkingDaysPreProcessor;
+import pro.taskana.task.api.TaskanaRole;
/** The implementation of CustomFieldValueReportBuilder. */
public class CustomFieldValueReportBuilderImpl
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/DaysToWorkingDaysConverter.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/DaysToWorkingDaysConverter.java
index 43ff00eb3..a1a76689f 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/DaysToWorkingDaysConverter.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/DaysToWorkingDaysConverter.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import static java.time.temporal.ChronoUnit.DAYS;
@@ -17,9 +17,9 @@ import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
/**
* The DaysToWorkingDaysConverter provides a method to convert an age in days into an age in working
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/SelectedItem.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/SelectedItem.java
similarity index 96%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/SelectedItem.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/SelectedItem.java
index e650660c4..0fe23a690 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/SelectedItem.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/SelectedItem.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
/**
* An item that contains information of a selected item of a Report. It is used to get the task ids
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/TaskMonitorMapper.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskMonitorMapper.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/TaskMonitorMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskMonitorMapper.java
index 3dfaadd52..d2807e3d5 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/TaskMonitorMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskMonitorMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.report.internal;
import java.util.List;
import java.util.Map;
@@ -7,15 +7,13 @@ import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
-import pro.taskana.CustomField;
-import pro.taskana.TaskState;
-import pro.taskana.impl.SelectedItem;
-import pro.taskana.impl.report.CombinedClassificationFilter;
-import pro.taskana.impl.report.item.DetailedMonitorQueryItem;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.item.TaskQueryItem;
-import pro.taskana.impl.report.item.TimestampQueryItem;
-import pro.taskana.report.Timestamp;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.report.api.Timestamp;
+import pro.taskana.report.internal.item.DetailedMonitorQueryItem;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.item.TaskQueryItem;
+import pro.taskana.report.internal.item.TimestampQueryItem;
+import pro.taskana.task.api.TaskState;
/** This class is the mybatis mapping of task monitoring. */
@SuppressWarnings({"checkstyle:LineLength", "checkstyle:Indentation"})
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskMonitorServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskMonitorServiceImpl.java
similarity index 69%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TaskMonitorServiceImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskMonitorServiceImpl.java
index 5a6981cda..33ec94454 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskMonitorServiceImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskMonitorServiceImpl.java
@@ -1,14 +1,14 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.CategoryReport;
-import pro.taskana.report.ClassificationReport;
-import pro.taskana.report.CustomFieldValueReport;
-import pro.taskana.report.TaskStatusReport;
-import pro.taskana.report.TimestampReport;
-import pro.taskana.report.WorkbasketReport;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.CategoryReport;
+import pro.taskana.report.api.ClassificationReport;
+import pro.taskana.report.api.CustomFieldValueReport;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.api.TaskStatusReport;
+import pro.taskana.report.api.TimestampReport;
+import pro.taskana.report.api.WorkbasketReport;
/** This is the implementation of TaskMonitorService. */
public class TaskMonitorServiceImpl implements TaskMonitorService {
@@ -16,7 +16,8 @@ public class TaskMonitorServiceImpl implements TaskMonitorService {
private InternalTaskanaEngine taskanaEngine;
private TaskMonitorMapper taskMonitorMapper;
- TaskMonitorServiceImpl(InternalTaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
+ public TaskMonitorServiceImpl(
+ InternalTaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super();
this.taskanaEngine = taskanaEngine;
this.taskMonitorMapper = taskMonitorMapper;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskStatusReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskStatusReportBuilderImpl.java
similarity index 82%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TaskStatusReportBuilderImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskStatusReportBuilderImpl.java
index f10f26644..fbb5cc29d 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskStatusReportBuilderImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TaskStatusReportBuilderImpl.java
@@ -1,15 +1,15 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.item.TaskQueryItem;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.TaskStatusReport;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.TaskStatusReport;
+import pro.taskana.report.internal.item.TaskQueryItem;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskanaRole;
/** The implementation of TaskStatusReportBuilder. */
public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TimeIntervalReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TimeIntervalReportBuilderImpl.java
similarity index 91%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TimeIntervalReportBuilderImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/TimeIntervalReportBuilderImpl.java
index aef67523c..183c30ac5 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TimeIntervalReportBuilderImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TimeIntervalReportBuilderImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import java.util.ArrayList;
import java.util.Collections;
@@ -8,17 +8,17 @@ import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.CustomField;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.AgeQueryItem;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.ClassificationReport;
-import pro.taskana.report.TimeIntervalReportBuilder;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.report.api.ClassificationReport;
+import pro.taskana.report.api.TimeIntervalReportBuilder;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.AgeQueryItem;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskanaRole;
/**
* Implementation of {@link TimeIntervalReportBuilder}.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TimestampReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TimestampReportBuilderImpl.java
similarity index 83%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TimestampReportBuilderImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/TimestampReportBuilderImpl.java
index f03f265b3..7a7910fc2 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TimestampReportBuilderImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/TimestampReportBuilderImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -8,16 +8,16 @@ import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.TimestampQueryItem;
-import pro.taskana.impl.report.preprocessor.DaysToWorkingDaysPreProcessor;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.Timestamp;
-import pro.taskana.report.TimestampReport;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.Timestamp;
+import pro.taskana.report.api.TimestampReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.TimestampQueryItem;
+import pro.taskana.report.internal.preprocessor.DaysToWorkingDaysPreProcessor;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskanaRole;
/** The implementation of {@link TimestampReport.Builder}. */
public class TimestampReportBuilderImpl
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketReportBuilderImpl.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/WorkbasketReportBuilderImpl.java
similarity index 86%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketReportBuilderImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/WorkbasketReportBuilderImpl.java
index a9019f640..9172f8ada 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketReportBuilderImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/WorkbasketReportBuilderImpl.java
@@ -1,18 +1,17 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.CombinedClassificationFilter;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.preprocessor.DaysToWorkingDaysPreProcessor;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.WorkbasketReport;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.WorkbasketReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.preprocessor.DaysToWorkingDaysPreProcessor;
+import pro.taskana.task.api.TaskanaRole;
/** The implementation of WorkbasketReportBuilder. */
public class WorkbasketReportBuilderImpl
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/header/TaskStatusColumnHeader.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/header/TaskStatusColumnHeader.java
similarity index 72%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/header/TaskStatusColumnHeader.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/header/TaskStatusColumnHeader.java
index e2d7b398c..12ce11e91 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/header/TaskStatusColumnHeader.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/header/TaskStatusColumnHeader.java
@@ -1,8 +1,8 @@
-package pro.taskana.impl.report.header;
+package pro.taskana.report.internal.header;
-import pro.taskana.TaskState;
-import pro.taskana.impl.report.item.TaskQueryItem;
-import pro.taskana.impl.report.structure.ColumnHeader;
+import pro.taskana.report.internal.item.TaskQueryItem;
+import pro.taskana.report.internal.structure.ColumnHeader;
+import pro.taskana.task.api.TaskState;
/** The TaskStatusColumnHeader represents a column for each {@link TaskState}. */
public class TaskStatusColumnHeader implements ColumnHeader {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/header/TimeIntervalColumnHeader.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/header/TimeIntervalColumnHeader.java
similarity index 96%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/header/TimeIntervalColumnHeader.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/header/TimeIntervalColumnHeader.java
index 22003297c..60d18634a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/header/TimeIntervalColumnHeader.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/header/TimeIntervalColumnHeader.java
@@ -1,12 +1,12 @@
-package pro.taskana.impl.report.header;
+package pro.taskana.report.internal.header;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
-import pro.taskana.impl.report.item.AgeQueryItem;
-import pro.taskana.impl.report.structure.ColumnHeader;
+import pro.taskana.report.internal.item.AgeQueryItem;
+import pro.taskana.report.internal.structure.ColumnHeader;
/**
* A TimeIntervalColumnHeader has a lower and an upper age limit which subdivide the count of tasks
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/AgeQueryItem.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/AgeQueryItem.java
similarity index 70%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/item/AgeQueryItem.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/item/AgeQueryItem.java
index 24a0b85f1..a8923397d 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/AgeQueryItem.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/AgeQueryItem.java
@@ -1,6 +1,6 @@
-package pro.taskana.impl.report.item;
+package pro.taskana.report.internal.item;
-import pro.taskana.impl.report.structure.QueryItem;
+import pro.taskana.report.internal.structure.QueryItem;
/**
* The MonitorQueryItem entity contains the number of tasks for a key (e.g. workbasketKey) and age
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/DetailedMonitorQueryItem.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/DetailedMonitorQueryItem.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/item/DetailedMonitorQueryItem.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/item/DetailedMonitorQueryItem.java
index cf7360abb..ccbba4f36 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/DetailedMonitorQueryItem.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/DetailedMonitorQueryItem.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.report.item;
+package pro.taskana.report.internal.item;
/**
* The DetailedMonitorQueryItem extends the {@link MonitorQueryItem}. The additional attachment key
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/MonitorQueryItem.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/MonitorQueryItem.java
similarity index 95%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/item/MonitorQueryItem.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/item/MonitorQueryItem.java
index 999f8539e..b28c105bb 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/MonitorQueryItem.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/MonitorQueryItem.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.report.item;
+package pro.taskana.report.internal.item;
/**
* The MonitorQueryItem entity contains the number of tasks for a key (e.g. workbasketKey) and age
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/TaskQueryItem.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/TaskQueryItem.java
similarity index 86%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/item/TaskQueryItem.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/item/TaskQueryItem.java
index 37d634f7f..4280efbca 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/TaskQueryItem.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/TaskQueryItem.java
@@ -1,7 +1,7 @@
-package pro.taskana.impl.report.item;
+package pro.taskana.report.internal.item;
-import pro.taskana.TaskState;
-import pro.taskana.impl.report.structure.QueryItem;
+import pro.taskana.report.internal.structure.QueryItem;
+import pro.taskana.task.api.TaskState;
/**
* The TaskQueryItem entity contains the number of tasks for a domain which have a specific state.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/TimestampQueryItem.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/TimestampQueryItem.java
similarity index 81%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/item/TimestampQueryItem.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/item/TimestampQueryItem.java
index c2282b0e2..0147db725 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/item/TimestampQueryItem.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/item/TimestampQueryItem.java
@@ -1,11 +1,9 @@
-package pro.taskana.impl.report.item;
+package pro.taskana.report.internal.item;
-import pro.taskana.report.Timestamp;
+import pro.taskana.report.api.Timestamp;
+import pro.taskana.report.api.TimestampReport;
-/**
- * The TimestampQueryItem contains the necessary information for the {@link
- * pro.taskana.report.TimestampReport}.
- */
+/** The TimestampQueryItem contains the necessary information for the {@link TimestampReport}. */
public class TimestampQueryItem implements AgeQueryItem {
private static final String N_A = "N/A";
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/preprocessor/DaysToWorkingDaysPreProcessor.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/preprocessor/DaysToWorkingDaysPreProcessor.java
similarity index 67%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/preprocessor/DaysToWorkingDaysPreProcessor.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/preprocessor/DaysToWorkingDaysPreProcessor.java
index 830889296..dd8f00a06 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/preprocessor/DaysToWorkingDaysPreProcessor.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/preprocessor/DaysToWorkingDaysPreProcessor.java
@@ -1,12 +1,12 @@
-package pro.taskana.impl.report.preprocessor;
+package pro.taskana.report.internal.preprocessor;
import java.util.List;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.impl.DaysToWorkingDaysConverter;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.AgeQueryItem;
-import pro.taskana.impl.report.structure.QueryItemPreprocessor;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.report.internal.DaysToWorkingDaysConverter;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.AgeQueryItem;
+import pro.taskana.report.internal.structure.QueryItemPreprocessor;
/**
* Uses {@link DaysToWorkingDaysConverter} to convert an <I>s age to working days.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/row/DetailedClassificationRow.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/row/DetailedClassificationRow.java
similarity index 57%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/row/DetailedClassificationRow.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/row/DetailedClassificationRow.java
index 818cddfa3..d94629ab8 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/row/DetailedClassificationRow.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/row/DetailedClassificationRow.java
@@ -1,12 +1,12 @@
-package pro.taskana.impl.report.row;
+package pro.taskana.report.internal.row;
-import pro.taskana.impl.report.item.DetailedMonitorQueryItem;
-import pro.taskana.impl.report.structure.Row;
+import pro.taskana.report.api.ClassificationReport;
+import pro.taskana.report.internal.item.DetailedMonitorQueryItem;
+import pro.taskana.report.internal.structure.Row;
/**
- * Represents a single Row inside {@link
- * pro.taskana.report.ClassificationReport.DetailedClassificationReport}. The collapsing criteria is
- * the attachement key of each {@link DetailedMonitorQueryItem}.
+ * Represents a single Row inside {@link ClassificationReport.DetailedClassificationReport}. The
+ * collapsing criteria is the attachement key of each {@link DetailedMonitorQueryItem}.
*/
public class DetailedClassificationRow extends FoldableRow {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/row/FoldableRow.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/row/FoldableRow.java
similarity index 84%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/row/FoldableRow.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/row/FoldableRow.java
index b43ff433b..898921e8a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/row/FoldableRow.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/row/FoldableRow.java
@@ -1,21 +1,21 @@
-package pro.taskana.impl.report.row;
+package pro.taskana.report.internal.row;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
-import pro.taskana.impl.report.structure.QueryItem;
-import pro.taskana.impl.report.structure.Row;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.report.internal.structure.QueryItem;
+import pro.taskana.report.internal.structure.Report;
+import pro.taskana.report.internal.structure.Row;
/**
* The FoldableRow extends the {@link SingleRow}. In contrast to the {@link SingleRow} the
* FoldableRow contains rows which can be collapsed or expanded. The FoldableRow itself displays the
* sum of all foldable rows.
*
- * @param the {@link QueryItem} on which the {@link pro.taskana.impl.report.structure.Report} is
- * based on.
+ * @param the {@link QueryItem} on which the {@link Report} is based on.
*/
public abstract class FoldableRow extends SingleRow {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/row/SingleRow.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/row/SingleRow.java
similarity index 53%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/row/SingleRow.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/row/SingleRow.java
index 5478e8ddc..2c3ce34cf 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/row/SingleRow.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/row/SingleRow.java
@@ -1,16 +1,15 @@
-package pro.taskana.impl.report.row;
+package pro.taskana.report.internal.row;
-import pro.taskana.impl.report.structure.QueryItem;
-import pro.taskana.impl.report.structure.Row;
+import pro.taskana.report.internal.structure.ColumnHeader;
+import pro.taskana.report.internal.structure.QueryItem;
+import pro.taskana.report.internal.structure.Report;
+import pro.taskana.report.internal.structure.Row;
/**
- * A SingleRow represents a single row in a {@link pro.taskana.impl.report.structure.Report}. It
- * contains an array of cells whose index corresponds to the {@link
- * pro.taskana.impl.report.structure.ColumnHeader} index in the {@link
- * pro.taskana.impl.report.structure.Report}.
+ * A SingleRow represents a single row in a {@link Report}. It contains an array of cells whose
+ * index corresponds to the {@link ColumnHeader} index in the {@link Report}.
*
- * @param {@link QueryItem} on which the {@link pro.taskana.impl.report.structure.Report} is
- * based on.
+ * @param {@link QueryItem} on which the {@link Report} is based on.
*/
public class SingleRow implements Row {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/row/TimestampRow.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/row/TimestampRow.java
similarity index 73%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/row/TimestampRow.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/row/TimestampRow.java
index febd88685..325c20d3d 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/row/TimestampRow.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/row/TimestampRow.java
@@ -1,11 +1,12 @@
-package pro.taskana.impl.report.row;
+package pro.taskana.report.internal.row;
-import pro.taskana.impl.report.item.TimestampQueryItem;
-import pro.taskana.impl.report.structure.Row;
+import pro.taskana.report.api.TimestampReport;
+import pro.taskana.report.internal.item.TimestampQueryItem;
+import pro.taskana.report.internal.structure.Row;
/**
- * A single Row inside the {@link pro.taskana.report.TimestampReport}. It contains 4 sub-rows for
- * each org level respectively.
+ * A single Row inside the {@link TimestampReport}. It contains 4 sub-rows for each org level
+ * respectively.
*/
public class TimestampRow extends FoldableRow {
@@ -24,8 +25,8 @@ public class TimestampRow extends FoldableRow {
}
/**
- * Row inside the {@link pro.taskana.report.TimestampReport} containing the information regarding
- * a specific org level 1.
+ * Row inside the {@link TimestampReport} containing the information regarding a specific org
+ * level 1.
*/
public static final class OrgLevel1Row extends FoldableRow {
@@ -45,8 +46,8 @@ public class TimestampRow extends FoldableRow {
}
/**
- * Row inside the {@link pro.taskana.report.TimestampReport} containing the information regarding
- * a specific org level 2.
+ * Row inside the {@link TimestampReport} containing the information regarding a specific org
+ * level 2.
*/
public static final class OrgLevel2Row extends FoldableRow {
@@ -66,8 +67,8 @@ public class TimestampRow extends FoldableRow {
}
/**
- * Row inside the {@link pro.taskana.report.TimestampReport} containing the information regarding
- * a specific org level 3.
+ * Row inside the {@link TimestampReport} containing the information regarding a specific org
+ * level 3.
*/
public static final class OrgLevel3Row extends FoldableRow {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/ColumnHeader.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/ColumnHeader.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/ColumnHeader.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/ColumnHeader.java
index 7567a49b5..4cf8699c5 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/ColumnHeader.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/ColumnHeader.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.report.structure;
+package pro.taskana.report.internal.structure;
/**
* A ColumnHeader is an element of a {@link Report}. It determines weather a given <Item>
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/QueryItem.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/QueryItem.java
similarity index 90%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/QueryItem.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/QueryItem.java
index c038321b0..2d1168b2a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/QueryItem.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/QueryItem.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.report.structure;
+package pro.taskana.report.internal.structure;
/**
* A QueryItem is en entity on which a {@link Report} is based on. Its value will be added to the
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/QueryItemPreprocessor.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/QueryItemPreprocessor.java
similarity index 89%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/QueryItemPreprocessor.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/QueryItemPreprocessor.java
index a4857fa33..12f9bb62b 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/QueryItemPreprocessor.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/QueryItemPreprocessor.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.report.structure;
+package pro.taskana.report.internal.structure;
/**
* The QueryItemPreprocessor is used when adding {@link QueryItem}s into a {@link Report}. It
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Report.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/Report.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Report.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/Report.java
index 2b3f3e602..92c242da7 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Report.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/Report.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.report.structure;
+package pro.taskana.report.internal.structure;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -6,9 +6,9 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.row.SingleRow;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.internal.row.SingleRow;
/**
* A Report represents an abstract table that consists of {@link Row}s and a list of
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Row.java b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/Row.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Row.java
rename to lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/Row.java
index e79873068..b2615adcb 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Row.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/report/internal/structure/Row.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.report.structure;
+package pro.taskana.report.internal.structure;
/**
* Representation of a row in a {@link Report}. It contains an array of cells whose index
diff --git a/lib/taskana-core/src/main/java/pro/taskana/Attachment.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/Attachment.java
similarity index 96%
rename from lib/taskana-core/src/main/java/pro/taskana/Attachment.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/Attachment.java
index 6e094b235..52afb11a4 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/Attachment.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/Attachment.java
@@ -1,8 +1,10 @@
-package pro.taskana;
+package pro.taskana.task.api;
import java.time.Instant;
import java.util.Map;
+import pro.taskana.classification.api.ClassificationSummary;
+
/** Attachment-Interface to specify Attachment Attributes. */
public interface Attachment {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/AttachmentSummary.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/AttachmentSummary.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/AttachmentSummary.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/AttachmentSummary.java
index 35cae1e1f..f6427d0de 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/AttachmentSummary.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/AttachmentSummary.java
@@ -1,7 +1,9 @@
-package pro.taskana;
+package pro.taskana.task.api;
import java.time.Instant;
+import pro.taskana.classification.api.ClassificationSummary;
+
/**
* Interface for AttachmentSummaries. This is a specific short model-object which only contains the
* most important information.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/CallbackState.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/CallbackState.java
similarity index 88%
rename from lib/taskana-core/src/main/java/pro/taskana/CallbackState.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/CallbackState.java
index ed9ab5fe8..2d25298a5 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/CallbackState.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/CallbackState.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.task.api;
/**
* This enum contains all status of synchronization between a taskana task and a task in a remote
diff --git a/lib/taskana-core/src/main/java/pro/taskana/ObjectReference.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReference.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/ObjectReference.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReference.java
index 1bdf2e6b5..f05a13f09 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/ObjectReference.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReference.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.task.api;
import java.util.Objects;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/ObjectReferenceQuery.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReferenceQuery.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/ObjectReferenceQuery.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReferenceQuery.java
index 3e7729fe7..64a72c3d4 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/ObjectReferenceQuery.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReferenceQuery.java
@@ -1,4 +1,6 @@
-package pro.taskana;
+package pro.taskana.task.api;
+
+import pro.taskana.common.api.BaseQuery;
/** ObjectReferenceQuery for generating dynamic sql. */
public interface ObjectReferenceQuery
diff --git a/lib/taskana-core/src/main/java/pro/taskana/ObjectReferenceQueryColumnName.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReferenceQueryColumnName.java
similarity index 71%
rename from lib/taskana-core/src/main/java/pro/taskana/ObjectReferenceQueryColumnName.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReferenceQueryColumnName.java
index 126d3b288..a8110c0d2 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/ObjectReferenceQueryColumnName.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/ObjectReferenceQueryColumnName.java
@@ -1,8 +1,11 @@
-package pro.taskana;
+package pro.taskana.task.api;
+
+import pro.taskana.common.api.QueryColumnName;
+import pro.taskana.workbasket.internal.WorkbasketQueryMapper;
/**
* Enum containing the column names for {@link
- * pro.taskana.mappings.QueryMapper#queryObjectReferenceColumnValues
+ * WorkbasketQueryMapper#queryObjectReferenceColumnValues
* (pro.taskana.impl.ObjectReferenceQueryImpl)}.
*
* @author jsa
diff --git a/lib/taskana-core/src/main/java/pro/taskana/Task.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/Task.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/Task.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/Task.java
index 9db317a0e..696bc1d2c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/Task.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/Task.java
@@ -1,10 +1,13 @@
-package pro.taskana;
+package pro.taskana.task.api;
import java.time.Instant;
import java.util.List;
import java.util.Map;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/** task-Interface to specify attribute interactions. */
public interface Task {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskQuery.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskQuery.java
similarity index 99%
rename from lib/taskana-core/src/main/java/pro/taskana/TaskQuery.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/TaskQuery.java
index d74e11bce..26b419119 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TaskQuery.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskQuery.java
@@ -1,6 +1,9 @@
-package pro.taskana;
+package pro.taskana.task.api;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.BaseQuery;
+import pro.taskana.common.api.KeyDomain;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
/** TaskQuery for generating dynamic sql. */
public interface TaskQuery extends BaseQuery {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskQueryColumnName.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskQueryColumnName.java
similarity index 88%
rename from lib/taskana-core/src/main/java/pro/taskana/TaskQueryColumnName.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/TaskQueryColumnName.java
index 58d98c956..e8e64ed33 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TaskQueryColumnName.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskQueryColumnName.java
@@ -1,8 +1,12 @@
-package pro.taskana;
+package pro.taskana.task.api;
+
+import pro.taskana.common.api.QueryColumnName;
+import pro.taskana.task.internal.TaskQueryImpl;
+import pro.taskana.workbasket.internal.WorkbasketQueryMapper;
/**
* Enum containing the column names for {@link
- * pro.taskana.mappings.QueryMapper#queryTaskColumnValues(pro.taskana.impl.TaskQueryImpl)}.
+ * WorkbasketQueryMapper#queryTaskColumnValues(TaskQueryImpl)}.
*
* @author jsa
*/
diff --git a/lib/taskana-core/src/main/java/pro/taskana/taskrouting/api/TaskRoutingProvider.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskRoutingProvider.java
similarity index 85%
rename from lib/taskana-core/src/main/java/pro/taskana/taskrouting/api/TaskRoutingProvider.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/TaskRoutingProvider.java
index a44f967fa..f30fd94ba 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/taskrouting/api/TaskRoutingProvider.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskRoutingProvider.java
@@ -1,7 +1,6 @@
-package pro.taskana.taskrouting.api;
+package pro.taskana.task.api;
-import pro.taskana.Task;
-import pro.taskana.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine;
/** Interface for TASKANA TaskRoutingProvider SPI. */
public interface TaskRoutingProvider {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskService.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/TaskService.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java
index 47f027172..7d96879c1 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TaskService.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskService.java
@@ -1,19 +1,21 @@
-package pro.taskana;
+package pro.taskana.task.api;
import java.util.List;
import java.util.Map;
-import pro.taskana.exceptions.AttachmentPersistenceException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.AttachmentPersistenceException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** The Task Service manages all operations on tasks. */
public interface TaskService {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskState.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskState.java
similarity index 78%
rename from lib/taskana-core/src/main/java/pro/taskana/TaskState.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/TaskState.java
index 389318fa7..d4aba71ba 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TaskState.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskState.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.task.api;
/** This enum contains all status of the tasks. */
public enum TaskState {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskSummary.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskSummary.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/TaskSummary.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/TaskSummary.java
index 1d9938236..27a9e04f9 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TaskSummary.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskSummary.java
@@ -1,9 +1,11 @@
-package pro.taskana;
+package pro.taskana.task.api;
import java.time.Instant;
import java.util.List;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/**
* Interface for TaskSummary. This is a specific short model-object which only contains the most
diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskanaRole.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskanaRole.java
similarity index 91%
rename from lib/taskana-core/src/main/java/pro/taskana/TaskanaRole.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/TaskanaRole.java
index 77da507b8..c07c2e37c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/TaskanaRole.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/TaskanaRole.java
@@ -1,10 +1,10 @@
-package pro.taskana;
+package pro.taskana.task.api;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
-import pro.taskana.exceptions.SystemException;
+import pro.taskana.common.api.exceptions.SystemException;
/** This enum contains all roles that are known to taskana. */
public enum TaskanaRole {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskAlreadyExistException.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/exceptions/TaskAlreadyExistException.java
similarity index 76%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskAlreadyExistException.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/exceptions/TaskAlreadyExistException.java
index 59724e5a8..efd17ec56 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskAlreadyExistException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/exceptions/TaskAlreadyExistException.java
@@ -1,4 +1,6 @@
-package pro.taskana.exceptions;
+package pro.taskana.task.api.exceptions;
+
+import pro.taskana.common.api.exceptions.TaskanaException;
/**
* Thrown when a Task is going to be created, but a Task with the same ID does already exist. The
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskNotFoundException.java b/lib/taskana-core/src/main/java/pro/taskana/task/api/exceptions/TaskNotFoundException.java
similarity index 73%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskNotFoundException.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/api/exceptions/TaskNotFoundException.java
index b8cab3a5e..2120ce02e 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskNotFoundException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/api/exceptions/TaskNotFoundException.java
@@ -1,4 +1,6 @@
-package pro.taskana.exceptions;
+package pro.taskana.task.api.exceptions;
+
+import pro.taskana.common.api.exceptions.NotFoundException;
/** This exception will be thrown if a specific task is not in the database. */
public class TaskNotFoundException extends NotFoundException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/AttachmentImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentImpl.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/AttachmentImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentImpl.java
index 39c7485dc..79644da8c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/AttachmentImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentImpl.java
@@ -1,14 +1,15 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
-import pro.taskana.Attachment;
-import pro.taskana.AttachmentSummary;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.ObjectReference;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.internal.ClassificationSummaryImpl;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.AttachmentSummary;
+import pro.taskana.task.api.ObjectReference;
/**
* Attachment entity.
@@ -27,7 +28,7 @@ public class AttachmentImpl implements Attachment {
private Instant received;
private Map customAttributes = new HashMap();
- AttachmentImpl() {}
+ public AttachmentImpl() {}
@Override
public String getId() {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/AttachmentMapper.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentMapper.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/AttachmentMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentMapper.java
index c56c09463..f53b72067 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/AttachmentMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.task.internal;
import java.util.List;
import java.util.Map;
@@ -11,9 +11,7 @@ import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.type.ClobTypeHandler;
-import pro.taskana.impl.AttachmentImpl;
-import pro.taskana.impl.AttachmentSummaryImpl;
-import pro.taskana.impl.persistence.MapTypeHandler;
+import pro.taskana.common.internal.persistence.MapTypeHandler;
/** This class is the mybatis mapping of Attachment. */
@SuppressWarnings("checkstyle:LineLength")
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/AttachmentSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentSummaryImpl.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/AttachmentSummaryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentSummaryImpl.java
index dbe6a9a26..a55cbd7d0 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/AttachmentSummaryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/AttachmentSummaryImpl.java
@@ -1,11 +1,12 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import java.time.Instant;
import java.util.Objects;
-import pro.taskana.AttachmentSummary;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.ObjectReference;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.internal.ClassificationSummaryImpl;
+import pro.taskana.task.api.AttachmentSummary;
+import pro.taskana.task.api.ObjectReference;
/** The most important fields of the Attachment entity. */
public class AttachmentSummaryImpl implements AttachmentSummary {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/MinimalTaskSummary.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/MinimalTaskSummary.java
similarity index 91%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/MinimalTaskSummary.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/MinimalTaskSummary.java
index 4139a80f3..67a19a60e 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/MinimalTaskSummary.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/MinimalTaskSummary.java
@@ -1,7 +1,7 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
-import pro.taskana.CallbackState;
-import pro.taskana.TaskState;
+import pro.taskana.task.api.CallbackState;
+import pro.taskana.task.api.TaskState;
/** A convenience class to represent pairs of task id and task state. */
public class MinimalTaskSummary {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/ObjectReferenceMapper.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/ObjectReferenceMapper.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/ObjectReferenceMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/ObjectReferenceMapper.java
index ac9bc7c03..56f8c867d 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/ObjectReferenceMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/ObjectReferenceMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.task.internal;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
@@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
-import pro.taskana.ObjectReference;
+import pro.taskana.task.api.ObjectReference;
/** This class is the mybatis mapping of ObjectReference. */
@SuppressWarnings({"checkstyle:LineLength", "checkstyle:Indentation"})
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/ObjectReferenceQueryImpl.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/ObjectReferenceQueryImpl.java
index 351e24a36..b776f6348 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/ObjectReferenceQueryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/ObjectReferenceQueryImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -8,11 +8,12 @@ import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.ObjectReference;
-import pro.taskana.ObjectReferenceQuery;
-import pro.taskana.ObjectReferenceQueryColumnName;
-import pro.taskana.exceptions.TaskanaRuntimeException;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.api.exceptions.TaskanaRuntimeException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.ObjectReferenceQuery;
+import pro.taskana.task.api.ObjectReferenceQueryColumnName;
/**
* Implementation of ObjectReferenceQuery interface.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskImpl.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TaskImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskImpl.java
index 00d8e62f8..4eb07aff3 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import java.time.Instant;
import java.util.ArrayList;
@@ -9,16 +9,18 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
-import pro.taskana.Attachment;
-import pro.taskana.AttachmentSummary;
-import pro.taskana.CallbackState;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.ObjectReference;
-import pro.taskana.Task;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.internal.ClassificationSummaryImpl;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.AttachmentSummary;
+import pro.taskana.task.api.CallbackState;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.internal.WorkbasketSummaryImpl;
/** Task entity. */
public class TaskImpl implements Task {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/TaskMapper.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskMapper.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/TaskMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskMapper.java
index e1cc1e545..b50d02b79 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/TaskMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.task.internal;
import java.util.List;
import java.util.Map;
@@ -11,11 +11,9 @@ import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
-import pro.taskana.CallbackState;
-import pro.taskana.impl.MinimalTaskSummary;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.impl.TaskSummaryImpl;
-import pro.taskana.impl.persistence.MapTypeHandler;
+import pro.taskana.common.internal.CustomPropertySelector;
+import pro.taskana.common.internal.persistence.MapTypeHandler;
+import pro.taskana.task.api.CallbackState;
/** This class is the mybatis mapping of task. */
@SuppressWarnings("checkstyle:LineLength")
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryImpl.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryImpl.java
index 02e8e855f..961074f3b 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -9,24 +9,26 @@ import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.CallbackState;
-import pro.taskana.KeyDomain;
-import pro.taskana.ObjectReferenceQuery;
-import pro.taskana.TaskQuery;
-import pro.taskana.TaskQueryColumnName;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
-import pro.taskana.TaskanaRole;
-import pro.taskana.TimeInterval;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.configuration.DB;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.NotAuthorizedToQueryWorkbasketException;
-import pro.taskana.exceptions.TaskanaRuntimeException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.common.api.KeyDomain;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaRuntimeException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.configuration.DB;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.task.api.CallbackState;
+import pro.taskana.task.api.ObjectReferenceQuery;
+import pro.taskana.task.api.TaskQuery;
+import pro.taskana.task.api.TaskQueryColumnName;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.TaskanaRole;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.exceptions.NotAuthorizedToQueryWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.workbasket.internal.WorkbasketQueryImpl;
/** TaskQuery for generating dynamic sql. */
public class TaskQueryImpl implements TaskQuery {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryMapper.java
similarity index 65%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryMapper.java
index b99566dc5..2192c7dba 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskQueryMapper.java
@@ -1,30 +1,15 @@
-package pro.taskana.mappings;
+package pro.taskana.task.internal;
import java.util.List;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
-import pro.taskana.ObjectReference;
-import pro.taskana.WorkbasketAccessItemQuery;
-import pro.taskana.impl.ClassificationQueryImpl;
-import pro.taskana.impl.ClassificationSummaryImpl;
-import pro.taskana.impl.ObjectReferenceQueryImpl;
-import pro.taskana.impl.TaskQueryImpl;
-import pro.taskana.impl.TaskSummaryImpl;
-import pro.taskana.impl.WorkbasketAccessItemImpl;
-import pro.taskana.impl.WorkbasketQueryImpl;
-import pro.taskana.impl.WorkbasketSummaryImpl;
+import pro.taskana.task.api.ObjectReference;
-/** This class provides a mapper for all queries. */
+/** This class provides a mapper for all task queries. */
@SuppressWarnings({"checkstyle:LineLength", "checkstyle:Indentation"})
-public interface QueryMapper {
-
- String OBJECTREFERENCEMAPPER_FINDBYID = "pro.taskana.mappings.ObjectReferenceMapper.findById";
- String CLASSIFICATION_FINDBYKEYANDDOMAIN =
- "pro.taskana.mappings.ClassificationMapper.findByKeyAndDomain";
- String CLASSIFICATION_FINDBYID = "pro.taskana.mappings.ClassificationMapper.findById";
- String WORKBASKET_FINDSUMMARYBYKEY = "pro.taskana.mappings.WorkbasketMapper.findSummaryByKey";
+public interface TaskQueryMapper {
@Select(
"")
- @Results({
- @Result(property = "id", column = "ID"),
- @Result(property = "key", column = "KEY"),
- @Result(property = "category", column = "CATEGORY"),
- @Result(property = "type", column = "TYPE"),
- @Result(property = "domain", column = "DOMAIN"),
- @Result(property = "name", column = "NAME"),
- @Result(property = "priority", column = "PRIORITY"),
- @Result(property = "serviceLevel", column = "SERVICE_LEVEL"),
- @Result(property = "parentId", column = "PARENT_ID"),
- @Result(property = "parentKey", column = "PARENT_KEY"),
- @Result(property = "custom1", column = "CUSTOM_1"),
- @Result(property = "custom2", column = "CUSTOM_2"),
- @Result(property = "custom3", column = "CUSTOM_3"),
- @Result(property = "custom4", column = "CUSTOM_4"),
- @Result(property = "custom5", column = "CUSTOM_5"),
- @Result(property = "custom6", column = "CUSTOM_6"),
- @Result(property = "custom7", column = "CUSTOM_7"),
- @Result(property = "custom8", column = "CUSTOM_8")
- })
- List queryClassificationSummaries(
- ClassificationQueryImpl classificationQuery);
-
@Select(
"")
- @Results({
- @Result(property = "id", column = "ID"),
- @Result(property = "key", column = "KEY"),
- @Result(property = "name", column = "NAME"),
- @Result(property = "description", column = "DESCRIPTION"),
- @Result(property = "owner", column = "OWNER"),
- @Result(property = "domain", column = "DOMAIN"),
- @Result(property = "type", column = "TYPE"),
- @Result(property = "custom1", column = "CUSTOM_1"),
- @Result(property = "custom2", column = "CUSTOM_2"),
- @Result(property = "custom3", column = "CUSTOM_3"),
- @Result(property = "custom4", column = "CUSTOM_4"),
- @Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
- @Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
- @Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
- @Result(property = "orgLevel4", column = "ORG_LEVEL_4"),
- @Result(property = "markedForDeletion", column = "MARKED_FOR_DELETION")
- })
- List queryWorkbasketSummaries(WorkbasketQueryImpl workbasketQuery);
-
- @Select(
- "")
- @Results({
- @Result(property = "id", column = "ID"),
- @Result(property = "workbasketId", column = "WORKBASKET_ID"),
- @Result(property = "workbasketKey", column = "KEY"),
- @Result(property = "accessId", column = "ACCESS_ID"),
- @Result(property = "accessName", column = "ACCESS_NAME"),
- @Result(property = "permRead", column = "PERM_READ"),
- @Result(property = "permOpen", column = "PERM_OPEN"),
- @Result(property = "permAppend", column = "PERM_APPEND"),
- @Result(property = "permTransfer", column = "PERM_TRANSFER"),
- @Result(property = "permDistribute", column = "PERM_DISTRIBUTE"),
- @Result(property = "permCustom1", column = "PERM_CUSTOM_1"),
- @Result(property = "permCustom2", column = "PERM_CUSTOM_2"),
- @Result(property = "permCustom3", column = "PERM_CUSTOM_3"),
- @Result(property = "permCustom4", column = "PERM_CUSTOM_4"),
- @Result(property = "permCustom5", column = "PERM_CUSTOM_5"),
- @Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
- @Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
- @Result(property = "permCustom8", column = "PERM_CUSTOM_8"),
- @Result(property = "permCustom9", column = "PERM_CUSTOM_9"),
- @Result(property = "permCustom10", column = "PERM_CUSTOM_10"),
- @Result(property = "permCustom11", column = "PERM_CUSTOM_11"),
- @Result(property = "permCustom12", column = "PERM_CUSTOM_12")
- })
- List queryWorkbasketAccessItems(
- WorkbasketAccessItemQuery accessItemQuery);
-
@Select(
"")
Long countQueryTasksDb2(TaskQueryImpl taskQuery);
- @Select(
- "")
- Long countQueryClassifications(ClassificationQueryImpl classificationQuery);
-
@Select(
"")
Long countQueryObjectReferences(ObjectReferenceQueryImpl objectReference);
- @Select(
- "")
- Long countQueryWorkbaskets(WorkbasketQueryImpl workbasketQuery);
-
- @Select(
- "")
- Long countQueryWorkbasketAccessItems(WorkbasketAccessItemQuery accessItem);
-
@Select(
"")
List queryTaskColumnValues(TaskQueryImpl taskQuery);
- @Select(
- "")
- List queryClassificationColumnValues(ClassificationQueryImpl classificationQuery);
-
@Select(
"")
List queryObjectReferenceColumnValues(ObjectReferenceQueryImpl objectReference);
-
- @Select(
- "")
- List queryWorkbasketColumnValues(WorkbasketQueryImpl workbasketQuery);
-
- @Select(
- "")
- List queryWorkbasketAccessItemColumnValues(WorkbasketAccessItemQuery accessItemQuery);
}
diff --git a/lib/taskana-core/src/main/java/pro/taskana/taskrouting/TaskRoutingManager.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskRoutingManager.java
similarity index 95%
rename from lib/taskana-core/src/main/java/pro/taskana/taskrouting/TaskRoutingManager.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskRoutingManager.java
index 92d4e2fd0..f0cca7f74 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/taskrouting/TaskRoutingManager.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskRoutingManager.java
@@ -1,4 +1,4 @@
-package pro.taskana.taskrouting;
+package pro.taskana.task.internal;
import java.util.ArrayList;
import java.util.List;
@@ -9,9 +9,9 @@ import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.Task;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.taskrouting.api.TaskRoutingProvider;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskRoutingProvider;
/**
* Loads TaskRoutingProvider SPI implementation(s) and passes requests to determine workbasketids to
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java
similarity index 96%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java
index 846dbafc0..e4e8b398d 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskServiceImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import java.time.Duration;
import java.time.Instant;
@@ -16,47 +16,49 @@ import org.apache.ibatis.exceptions.PersistenceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.Attachment;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.CallbackState;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.ObjectReference;
-import pro.taskana.Task;
-import pro.taskana.TaskQuery;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
-import pro.taskana.TaskanaRole;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.exceptions.AttachmentPersistenceException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.SystemException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.history.HistoryEventProducer;
-import pro.taskana.history.events.task.ClaimCancelledEvent;
-import pro.taskana.history.events.task.ClaimedEvent;
-import pro.taskana.history.events.task.CompletedEvent;
-import pro.taskana.history.events.task.CreatedEvent;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.util.IdGenerator;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.mappings.AttachmentMapper;
-import pro.taskana.mappings.CustomPropertySelector;
-import pro.taskana.mappings.TaskMapper;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.AttachmentPersistenceException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.SystemException;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.CustomPropertySelector;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.common.internal.util.IdGenerator;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.history.internal.HistoryEventProducer;
+import pro.taskana.history.internal.events.task.ClaimCancelledEvent;
+import pro.taskana.history.internal.events.task.ClaimedEvent;
+import pro.taskana.history.internal.events.task.CompletedEvent;
+import pro.taskana.history.internal.events.task.CreatedEvent;
+import pro.taskana.report.internal.DaysToWorkingDaysConverter;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.CallbackState;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskQuery;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.TaskanaRole;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.workbasket.internal.WorkbasketQueryImpl;
+import pro.taskana.workbasket.internal.WorkbasketSummaryImpl;
/** This is the implementation of TaskService. */
@SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
@@ -87,7 +89,7 @@ public class TaskServiceImpl implements TaskService {
private HistoryEventProducer historyEventProducer;
private TaskTransferrer taskTransferrer;
- TaskServiceImpl(
+ public TaskServiceImpl(
InternalTaskanaEngine taskanaEngine,
TaskMapper taskMapper,
AttachmentMapper attachmentMapper) {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskSummaryImpl.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TaskSummaryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskSummaryImpl.java
index fe15c4f4e..e87d9b5b1 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskSummaryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskSummaryImpl.java
@@ -1,17 +1,19 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import pro.taskana.AttachmentSummary;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.ObjectReference;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.exceptions.InvalidArgumentException;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.internal.ClassificationSummaryImpl;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.task.api.AttachmentSummary;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.internal.WorkbasketSummaryImpl;
/** Entity which contains the most important informations about a Task. */
public class TaskSummaryImpl implements TaskSummary {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskTransferrer.java b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskTransferrer.java
similarity index 93%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/TaskTransferrer.java
rename to lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskTransferrer.java
index df2a689b6..2d5f95e14 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskTransferrer.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/task/internal/TaskTransferrer.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import java.time.Instant;
import java.util.ArrayList;
@@ -10,24 +10,25 @@ import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.Task;
-import pro.taskana.TaskState;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.history.HistoryEventProducer;
-import pro.taskana.history.events.task.TransferredEvent;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.mappings.TaskMapper;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.history.internal.HistoryEventProducer;
+import pro.taskana.history.internal.events.task.TransferredEvent;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.workbasket.internal.WorkbasketQueryImpl;
/** This class is responsible for the transfer of tasks. */
public class TaskTransferrer {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/AbstractWorkbasketAccessItemQuery.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/AbstractWorkbasketAccessItemQuery.java
similarity index 95%
rename from lib/taskana-core/src/main/java/pro/taskana/AbstractWorkbasketAccessItemQuery.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/AbstractWorkbasketAccessItemQuery.java
index 9d6f78bb1..f26b2f1a4 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/AbstractWorkbasketAccessItemQuery.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/AbstractWorkbasketAccessItemQuery.java
@@ -1,4 +1,6 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
+
+import pro.taskana.common.api.BaseQuery;
/**
* AbstractWorkbasketAccessItemQuery for generating dynamic sql.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/AccessItemQueryColumnName.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/AccessItemQueryColumnName.java
similarity index 65%
rename from lib/taskana-core/src/main/java/pro/taskana/AccessItemQueryColumnName.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/AccessItemQueryColumnName.java
index 5df788b90..8e6f0a192 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/AccessItemQueryColumnName.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/AccessItemQueryColumnName.java
@@ -1,8 +1,11 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
+
+import pro.taskana.common.api.QueryColumnName;
+import pro.taskana.workbasket.internal.WorkbasketQueryMapper;
/**
* Enum containing the column names for {@link
- * pro.taskana.mappings.QueryMapper#queryWorkbasketAccessItemColumnValues}.
+ * WorkbasketQueryMapper#queryWorkbasketAccessItemColumnValues}.
*
* @author jsa
*/
diff --git a/lib/taskana-core/src/main/java/pro/taskana/Workbasket.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/Workbasket.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/Workbasket.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/Workbasket.java
index 344b5644c..596420693 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/Workbasket.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/Workbasket.java
@@ -1,9 +1,9 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.time.Instant;
-import pro.taskana.impl.WorkbasketImpl;
+import pro.taskana.workbasket.internal.WorkbasketImpl;
/** Workbasket entity interface. */
@JsonDeserialize(as = WorkbasketImpl.class)
diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItem.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketAccessItem.java
similarity index 99%
rename from lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItem.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketAccessItem.java
index f9d59c6ae..caf8448b4 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItem.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketAccessItem.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
/**
* Interface for WorkbasketAccessItem. This interface is used to control access of users to
diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemQuery.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketAccessItemQuery.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemQuery.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketAccessItemQuery.java
index 426a9e0cf..ffb4670c8 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketAccessItemQuery.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketAccessItemQuery.java
@@ -1,4 +1,6 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
+
+import pro.taskana.common.api.BaseQuery;
/** WorkbasketAccessItemQuery for generating dynamic SQL. */
public interface WorkbasketAccessItemQuery
diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketPermission.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketPermission.java
similarity index 89%
rename from lib/taskana-core/src/main/java/pro/taskana/WorkbasketPermission.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketPermission.java
index 3478d9748..31906b1ce 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketPermission.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketPermission.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
/** This enum contains all permission values for the workbaskets. */
public enum WorkbasketPermission {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketQuery.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQuery.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/WorkbasketQuery.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQuery.java
index b80f9f591..fca6e3067 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketQuery.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQuery.java
@@ -1,7 +1,9 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.BaseQuery;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
/** WorkitemQuery for generating dynamic sql. */
public interface WorkbasketQuery extends BaseQuery {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketQueryColumnName.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQueryColumnName.java
similarity index 72%
rename from lib/taskana-core/src/main/java/pro/taskana/WorkbasketQueryColumnName.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQueryColumnName.java
index 5242ddc7c..d35556e5a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketQueryColumnName.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQueryColumnName.java
@@ -1,8 +1,10 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
+
+import pro.taskana.common.api.QueryColumnName;
+import pro.taskana.workbasket.internal.WorkbasketQueryMapper;
/**
- * Enum containing the column names for {@link
- * pro.taskana.mappings.QueryMapper#queryWorkbasketColumnValues
+ * Enum containing the column names for {@link WorkbasketQueryMapper#queryWorkbasketColumnValues
* (pro.taskana.impl.WorkbasketQueryImpl)}.
*
* @author jsa
diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketService.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketService.java
similarity index 95%
rename from lib/taskana-core/src/main/java/pro/taskana/WorkbasketService.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketService.java
index e85901961..32122da44 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketService.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketService.java
@@ -1,16 +1,17 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
import java.util.List;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketInUseException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketInUseException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** This service manages Workbaskets. */
public interface WorkbasketService {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketSummary.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketSummary.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/WorkbasketSummary.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketSummary.java
index 24f265e85..8257c00d4 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketSummary.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketSummary.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
/**
* Interface for WorkbasketSummary. This is a specific short model-object which only contains the
diff --git a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketType.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketType.java
similarity index 78%
rename from lib/taskana-core/src/main/java/pro/taskana/WorkbasketType.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketType.java
index 89b2fa15b..45cc66b98 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/WorkbasketType.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketType.java
@@ -1,4 +1,4 @@
-package pro.taskana;
+package pro.taskana.workbasket.api;
/** This enum contains the supported work basket types. */
public enum WorkbasketType {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidWorkbasketException.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/InvalidWorkbasketException.java
similarity index 76%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidWorkbasketException.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/InvalidWorkbasketException.java
index 6fb9af927..cd937eaa7 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/InvalidWorkbasketException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/InvalidWorkbasketException.java
@@ -1,4 +1,6 @@
-package pro.taskana.exceptions;
+package pro.taskana.workbasket.api.exceptions;
+
+import pro.taskana.common.api.exceptions.TaskanaException;
/**
* This exception is thrown when a request is made to insert or update a workbasket that is missing
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/NotAuthorizedToQueryWorkbasketException.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/NotAuthorizedToQueryWorkbasketException.java
similarity index 79%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/NotAuthorizedToQueryWorkbasketException.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/NotAuthorizedToQueryWorkbasketException.java
index 0c86b8971..0f777a831 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/NotAuthorizedToQueryWorkbasketException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/NotAuthorizedToQueryWorkbasketException.java
@@ -1,4 +1,6 @@
-package pro.taskana.exceptions;
+package pro.taskana.workbasket.api.exceptions;
+
+import pro.taskana.common.api.exceptions.TaskanaRuntimeException;
/** This exception is used to communicate that a user is not authorized to query a Workbasket. */
public class NotAuthorizedToQueryWorkbasketException extends TaskanaRuntimeException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketAccessItemAlreadyExistException.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketAccessItemAlreadyExistException.java
similarity index 76%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketAccessItemAlreadyExistException.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketAccessItemAlreadyExistException.java
index fd81e85e9..3e494f0cd 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketAccessItemAlreadyExistException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketAccessItemAlreadyExistException.java
@@ -1,6 +1,7 @@
-package pro.taskana.exceptions;
+package pro.taskana.workbasket.api.exceptions;
-import pro.taskana.WorkbasketAccessItem;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
public class WorkbasketAccessItemAlreadyExistException extends TaskanaException {
private static final long serialVersionUID = 4716611657569005013L;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketAlreadyExistException.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketAlreadyExistException.java
similarity index 76%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketAlreadyExistException.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketAlreadyExistException.java
index 112fea404..4cdcd1431 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketAlreadyExistException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketAlreadyExistException.java
@@ -1,6 +1,7 @@
-package pro.taskana.exceptions;
+package pro.taskana.workbasket.api.exceptions;
-import pro.taskana.Workbasket;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.workbasket.api.Workbasket;
/** Thrown, when a workbasket does already exits, but wanted to create with same ID. */
public class WorkbasketAlreadyExistException extends TaskanaException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketInUseException.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketInUseException.java
similarity index 71%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketInUseException.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketInUseException.java
index 2e5097672..cb8069b96 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketInUseException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketInUseException.java
@@ -1,4 +1,6 @@
-package pro.taskana.exceptions;
+package pro.taskana.workbasket.api.exceptions;
+
+import pro.taskana.common.api.exceptions.TaskanaException;
/** Thrown if a specific Workbasket does have content and should be deleted. */
public class WorkbasketInUseException extends TaskanaException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketNotFoundException.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketNotFoundException.java
similarity index 84%
rename from lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketNotFoundException.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketNotFoundException.java
index 78d4d9259..364361e09 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/WorkbasketNotFoundException.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/exceptions/WorkbasketNotFoundException.java
@@ -1,4 +1,6 @@
-package pro.taskana.exceptions;
+package pro.taskana.workbasket.api.exceptions;
+
+import pro.taskana.common.api.exceptions.NotFoundException;
/** This exception will be thrown if a specific workbasket is not in the database. */
public class WorkbasketNotFoundException extends NotFoundException {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/AbstractWorkbasketAccessItemQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/AbstractWorkbasketAccessItemQueryImpl.java
similarity index 94%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/AbstractWorkbasketAccessItemQueryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/AbstractWorkbasketAccessItemQueryImpl.java
index 72e546b7a..f23a7008c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/AbstractWorkbasketAccessItemQueryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/AbstractWorkbasketAccessItemQueryImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -8,11 +8,12 @@ import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.AbstractWorkbasketAccessItemQuery;
-import pro.taskana.AccessItemQueryColumnName;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.exceptions.TaskanaRuntimeException;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.api.exceptions.TaskanaRuntimeException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.workbasket.api.AbstractWorkbasketAccessItemQuery;
+import pro.taskana.workbasket.api.AccessItemQueryColumnName;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
/**
* AbstractWorkbasketAccessItemQueryImpl for generating dynamic SQL.
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/DistributionTargetMapper.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/DistributionTargetMapper.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/DistributionTargetMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/DistributionTargetMapper.java
index 62b5922c7..87e37dd7c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/DistributionTargetMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/DistributionTargetMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.workbasket.internal;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessItemImpl.java
similarity index 99%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessItemImpl.java
index b34d4f9d5..10744cf27 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessItemImpl.java
@@ -1,8 +1,8 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import java.util.Objects;
-import pro.taskana.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
/** WorkbasketAccessItemImpl Entity. */
public class WorkbasketAccessItemImpl implements WorkbasketAccessItem {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessItemQueryImpl.java
similarity index 95%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemQueryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessItemQueryImpl.java
index 19c5118bd..0b6432311 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketAccessItemQueryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessItemQueryImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -8,11 +8,12 @@ import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.AccessItemQueryColumnName;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketAccessItemQuery;
-import pro.taskana.exceptions.TaskanaRuntimeException;
-import pro.taskana.impl.util.LoggerUtils;
+import pro.taskana.common.api.exceptions.TaskanaRuntimeException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.workbasket.api.AccessItemQueryColumnName;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketAccessItemQuery;
/** WorkbasketAccessItemQueryImpl for generating dynamic SQL. */
public class WorkbasketAccessItemQueryImpl implements WorkbasketAccessItemQuery {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketAccessMapper.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessMapper.java
similarity index 99%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketAccessMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessMapper.java
index a6a9a9b66..296069b0a 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketAccessMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.workbasket.internal;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
@@ -10,8 +10,6 @@ import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
-import pro.taskana.impl.WorkbasketAccessItemImpl;
-
/** This class is the mybatis mapping of workbasket access items. */
@SuppressWarnings("checkstyle:LineLength")
public interface WorkbasketAccessMapper {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketImpl.java
similarity index 96%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketImpl.java
index 5a8168a34..2a7a46525 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketImpl.java
@@ -1,11 +1,11 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import java.time.Instant;
import java.util.Objects;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.WorkbasketType;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.WorkbasketType;
/** Workbasket entity. */
public class WorkbasketImpl implements Workbasket {
@@ -29,7 +29,7 @@ public class WorkbasketImpl implements Workbasket {
private String orgLevel4;
private boolean markedForDeletion;
- WorkbasketImpl() {}
+ public WorkbasketImpl() {}
@Override
public String getId() {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketMapper.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketMapper.java
similarity index 98%
rename from lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketMapper.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketMapper.java
index 7620d8ba9..1fb8320c3 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/WorkbasketMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.workbasket.internal;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
@@ -10,9 +10,6 @@ import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
-import pro.taskana.impl.WorkbasketImpl;
-import pro.taskana.impl.WorkbasketSummaryImpl;
-
/** This class is the mybatis mapping of workbaskets. */
@SuppressWarnings("checkstyle:LineLength")
public interface WorkbasketMapper {
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketQueryImpl.java
similarity index 95%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketQueryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketQueryImpl.java
index 1959d122d..65a997eb6 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketQueryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketQueryImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import java.util.ArrayList;
import java.util.Arrays;
@@ -8,19 +8,20 @@ import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskanaRole;
-import pro.taskana.TimeInterval;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketQuery;
-import pro.taskana.WorkbasketQueryColumnName;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.WorkbasketType;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskanaRuntimeException;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaRuntimeException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.task.api.TaskanaRole;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketQuery;
+import pro.taskana.workbasket.api.WorkbasketQueryColumnName;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.WorkbasketType;
/**
* WorkbasketQuery for generating dynamic SQL.
@@ -634,11 +635,11 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
return checkReadPermission;
}
- void setUsedToAugmentTasks(boolean usedToAugmentTasks) {
+ public void setUsedToAugmentTasks(boolean usedToAugmentTasks) {
this.usedToAugmentTasks = usedToAugmentTasks;
}
- static void lowercaseAccessIds(String[] accessIdArray) {
+ public static void lowercaseAccessIds(String[] accessIdArray) {
if (TaskanaEngineConfiguration.shouldUseLowerCaseForAccessIds()) {
for (int i = 0; i < accessIdArray.length; i++) {
String id = accessIdArray[i];
diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketQueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketQueryMapper.java
new file mode 100644
index 000000000..96e8b1010
--- /dev/null
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketQueryMapper.java
@@ -0,0 +1,363 @@
+package pro.taskana.workbasket.internal;
+
+import java.util.List;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+
+import pro.taskana.workbasket.api.WorkbasketAccessItemQuery;
+
+/** This class provides a mapper for all queries. */
+@SuppressWarnings({"checkstyle:LineLength", "checkstyle:Indentation"})
+public interface WorkbasketQueryMapper {
+
+ @Select(
+ "")
+ @Results({
+ @Result(property = "id", column = "ID"),
+ @Result(property = "key", column = "KEY"),
+ @Result(property = "name", column = "NAME"),
+ @Result(property = "description", column = "DESCRIPTION"),
+ @Result(property = "owner", column = "OWNER"),
+ @Result(property = "domain", column = "DOMAIN"),
+ @Result(property = "type", column = "TYPE"),
+ @Result(property = "custom1", column = "CUSTOM_1"),
+ @Result(property = "custom2", column = "CUSTOM_2"),
+ @Result(property = "custom3", column = "CUSTOM_3"),
+ @Result(property = "custom4", column = "CUSTOM_4"),
+ @Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
+ @Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
+ @Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
+ @Result(property = "orgLevel4", column = "ORG_LEVEL_4"),
+ @Result(property = "markedForDeletion", column = "MARKED_FOR_DELETION")
+ })
+ List queryWorkbasketSummaries(WorkbasketQueryImpl workbasketQuery);
+
+ @Select(
+ "")
+ @Results({
+ @Result(property = "id", column = "ID"),
+ @Result(property = "workbasketId", column = "WORKBASKET_ID"),
+ @Result(property = "workbasketKey", column = "KEY"),
+ @Result(property = "accessId", column = "ACCESS_ID"),
+ @Result(property = "accessName", column = "ACCESS_NAME"),
+ @Result(property = "permRead", column = "PERM_READ"),
+ @Result(property = "permOpen", column = "PERM_OPEN"),
+ @Result(property = "permAppend", column = "PERM_APPEND"),
+ @Result(property = "permTransfer", column = "PERM_TRANSFER"),
+ @Result(property = "permDistribute", column = "PERM_DISTRIBUTE"),
+ @Result(property = "permCustom1", column = "PERM_CUSTOM_1"),
+ @Result(property = "permCustom2", column = "PERM_CUSTOM_2"),
+ @Result(property = "permCustom3", column = "PERM_CUSTOM_3"),
+ @Result(property = "permCustom4", column = "PERM_CUSTOM_4"),
+ @Result(property = "permCustom5", column = "PERM_CUSTOM_5"),
+ @Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
+ @Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
+ @Result(property = "permCustom8", column = "PERM_CUSTOM_8"),
+ @Result(property = "permCustom9", column = "PERM_CUSTOM_9"),
+ @Result(property = "permCustom10", column = "PERM_CUSTOM_10"),
+ @Result(property = "permCustom11", column = "PERM_CUSTOM_11"),
+ @Result(property = "permCustom12", column = "PERM_CUSTOM_12")
+ })
+ List queryWorkbasketAccessItems(
+ WorkbasketAccessItemQuery accessItemQuery);
+
+ @Select(
+ "")
+ Long countQueryWorkbaskets(WorkbasketQueryImpl workbasketQuery);
+
+ @Select(
+ "")
+ Long countQueryWorkbasketAccessItems(WorkbasketAccessItemQuery accessItem);
+
+ @Select(
+ "")
+ List queryWorkbasketColumnValues(WorkbasketQueryImpl workbasketQuery);
+
+ @Select(
+ "")
+ List queryWorkbasketAccessItemColumnValues(WorkbasketAccessItemQuery accessItemQuery);
+}
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketServiceImpl.java
similarity index 96%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketServiceImpl.java
index 9abd7d20b..7ccb0646c 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketServiceImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketServiceImpl.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import java.time.Instant;
import java.util.ArrayList;
@@ -12,32 +12,30 @@ import org.apache.ibatis.exceptions.PersistenceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaRole;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketAccessItemQuery;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketQuery;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketInUseException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.util.IdGenerator;
-import pro.taskana.impl.util.LoggerUtils;
-import pro.taskana.mappings.DistributionTargetMapper;
-import pro.taskana.mappings.WorkbasketAccessMapper;
-import pro.taskana.mappings.WorkbasketMapper;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.common.internal.util.IdGenerator;
+import pro.taskana.common.internal.util.LoggerUtils;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskanaRole;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketAccessItemQuery;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketQuery;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketInUseException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** This is the implementation of WorkbasketService. */
public class WorkbasketServiceImpl implements WorkbasketService {
@@ -50,7 +48,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
private DistributionTargetMapper distributionTargetMapper;
private WorkbasketAccessMapper workbasketAccessMapper;
- WorkbasketServiceImpl(
+ public WorkbasketServiceImpl(
InternalTaskanaEngine taskanaEngine,
WorkbasketMapper workbasketMapper,
DistributionTargetMapper distributionTargetMapper,
diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketSummaryImpl.java
similarity index 97%
rename from lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketSummaryImpl.java
rename to lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketSummaryImpl.java
index 5c2db9dc9..6a0c33746 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/impl/WorkbasketSummaryImpl.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketSummaryImpl.java
@@ -1,9 +1,9 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import java.util.Objects;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.WorkbasketType;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.WorkbasketType;
/** This entity contains the most important information about a workbasket. */
public class WorkbasketSummaryImpl implements WorkbasketSummary {
@@ -25,7 +25,7 @@ public class WorkbasketSummaryImpl implements WorkbasketSummary {
private String orgLevel4;
private boolean markedForDeletion;
- WorkbasketSummaryImpl() {}
+ public WorkbasketSummaryImpl() {}
/*
* (non-Javadoc)
diff --git a/lib/taskana-core/src/test/java/acceptance/AbstractAccTest.java b/lib/taskana-core/src/test/java/acceptance/AbstractAccTest.java
index 3fdcab26d..bea1543d6 100644
--- a/lib/taskana-core/src/test/java/acceptance/AbstractAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/AbstractAccTest.java
@@ -13,15 +13,15 @@ import java.util.Map;
import javax.sql.DataSource;
import org.junit.jupiter.api.BeforeAll;
-import pro.taskana.Attachment;
-import pro.taskana.ObjectReference;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaEngine.ConnectionManagementMode;
-import pro.taskana.TimeInterval;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
import pro.taskana.sampledata.SampleDataGenerator;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.ObjectReference;
/** Base class for all acceptance tests. */
public abstract class AbstractAccTest {
diff --git a/lib/taskana-core/src/test/java/acceptance/classification/CreateClassificationAccTest.java b/lib/taskana-core/src/test/java/acceptance/classification/CreateClassificationAccTest.java
index c934def33..02a40ee0e 100644
--- a/lib/taskana-core/src/test/java/acceptance/classification/CreateClassificationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/classification/CreateClassificationAccTest.java
@@ -7,15 +7,15 @@ import acceptance.AbstractAccTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.impl.ClassificationImpl;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.classification.internal.ClassificationImpl;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
diff --git a/lib/taskana-core/src/test/java/acceptance/classification/DeleteClassificationAccTest.java b/lib/taskana-core/src/test/java/acceptance/classification/DeleteClassificationAccTest.java
index 5cb3f8f24..8e6dcb859 100644
--- a/lib/taskana-core/src/test/java/acceptance/classification/DeleteClassificationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/classification/DeleteClassificationAccTest.java
@@ -9,11 +9,11 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.exceptions.ClassificationInUseException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationInUseException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
diff --git a/lib/taskana-core/src/test/java/acceptance/classification/GetClassificationAccTest.java b/lib/taskana-core/src/test/java/acceptance/classification/GetClassificationAccTest.java
index e3b1fbaf7..7a3334dbd 100644
--- a/lib/taskana-core/src/test/java/acceptance/classification/GetClassificationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/classification/GetClassificationAccTest.java
@@ -8,10 +8,10 @@ import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.exceptions.ClassificationNotFoundException;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
/** Acceptance test for all "get classification" scenarios. */
class GetClassificationAccTest extends AbstractAccTest {
diff --git a/lib/taskana-core/src/test/java/acceptance/classification/QueryClassificationAccTest.java b/lib/taskana-core/src/test/java/acceptance/classification/QueryClassificationAccTest.java
index aed8cd1d9..06f938333 100644
--- a/lib/taskana-core/src/test/java/acceptance/classification/QueryClassificationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/classification/QueryClassificationAccTest.java
@@ -2,10 +2,10 @@ package acceptance.classification;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static pro.taskana.ClassificationQueryColumnName.CREATED;
-import static pro.taskana.ClassificationQueryColumnName.NAME;
-import static pro.taskana.ClassificationQueryColumnName.TYPE;
-import static pro.taskana.ClassificationQueryColumnName.VALID_IN_DOMAIN;
+import static pro.taskana.classification.api.ClassificationQueryColumnName.CREATED;
+import static pro.taskana.classification.api.ClassificationQueryColumnName.NAME;
+import static pro.taskana.classification.api.ClassificationQueryColumnName.TYPE;
+import static pro.taskana.classification.api.ClassificationQueryColumnName.VALID_IN_DOMAIN;
import acceptance.AbstractAccTest;
import java.time.Instant;
@@ -14,14 +14,14 @@ import java.util.stream.Collectors;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.ClassificationService;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.TimeInterval;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.BaseQuery.SortDirection;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
diff --git a/lib/taskana-core/src/test/java/acceptance/classification/QueryClassificationWithPaginationAccTest.java b/lib/taskana-core/src/test/java/acceptance/classification/QueryClassificationWithPaginationAccTest.java
index 0b5dc8eb0..dca0e12b8 100644
--- a/lib/taskana-core/src/test/java/acceptance/classification/QueryClassificationWithPaginationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/classification/QueryClassificationWithPaginationAccTest.java
@@ -8,8 +8,8 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.ClassificationService;
-import pro.taskana.ClassificationSummary;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.ClassificationSummary;
import pro.taskana.security.JaasExtension;
/** Acceptance test for all "query classifications with pagination" scenarios. */
diff --git a/lib/taskana-core/src/test/java/acceptance/classification/UpdateClassificationAccTest.java b/lib/taskana-core/src/test/java/acceptance/classification/UpdateClassificationAccTest.java
index 7696efc77..6071617e1 100644
--- a/lib/taskana-core/src/test/java/acceptance/classification/UpdateClassificationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/classification/UpdateClassificationAccTest.java
@@ -19,23 +19,23 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.impl.DaysToWorkingDaysConverter;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.jobs.JobRunner;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.jobs.JobRunner;
+import pro.taskana.report.internal.DaysToWorkingDaysConverter;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
/** Acceptance test for all "update classification" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/config/TaskanaConfigAccTest.java b/lib/taskana-core/src/test/java/acceptance/config/TaskanaConfigAccTest.java
index f1e3ef9d9..8503a0123 100644
--- a/lib/taskana-core/src/test/java/acceptance/config/TaskanaConfigAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/config/TaskanaConfigAccTest.java
@@ -14,9 +14,9 @@ import java.util.HashMap;
import org.h2.store.fs.FileUtils;
import org.junit.jupiter.api.Test;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
/**
* Test taskana configuration without roles.
diff --git a/lib/taskana-core/src/test/java/acceptance/config/TaskanaRoleConfigAccTest.java b/lib/taskana-core/src/test/java/acceptance/config/TaskanaRoleConfigAccTest.java
index e1b265128..6e54fbcdd 100644
--- a/lib/taskana-core/src/test/java/acceptance/config/TaskanaRoleConfigAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/config/TaskanaRoleConfigAccTest.java
@@ -10,10 +10,10 @@ import java.util.Set;
import org.h2.store.fs.FileUtils;
import org.junit.jupiter.api.Test;
-import pro.taskana.TaskanaRole;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
+import pro.taskana.task.api.TaskanaRole;
/**
* Test taskana's role configuration.
diff --git a/lib/taskana-core/src/test/java/acceptance/jobs/TaskCleanupJobAccTest.java b/lib/taskana-core/src/test/java/acceptance/jobs/TaskCleanupJobAccTest.java
index ce8b5b2b4..ff88b9f8e 100644
--- a/lib/taskana-core/src/test/java/acceptance/jobs/TaskCleanupJobAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/jobs/TaskCleanupJobAccTest.java
@@ -11,20 +11,20 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.jobs.TaskCleanupJob;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.jobs.TaskCleanupJob;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "jobs tasks runner" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/jobs/WorkbasketCleanupJobAccTest.java b/lib/taskana-core/src/test/java/acceptance/jobs/WorkbasketCleanupJobAccTest.java
index ebf95b83a..96c8bf0d0 100644
--- a/lib/taskana-core/src/test/java/acceptance/jobs/WorkbasketCleanupJobAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/jobs/WorkbasketCleanupJobAccTest.java
@@ -10,16 +10,16 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BaseQuery;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.jobs.TaskCleanupJob;
-import pro.taskana.jobs.WorkbasketCleanupJob;
+import pro.taskana.common.api.BaseQuery;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.common.internal.jobs.TaskCleanupJob;
+import pro.taskana.common.internal.jobs.WorkbasketCleanupJob;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/** Acceptance test for all "jobs workbasket runner" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/objectreference/QueryObjectReferenceAccTest.java b/lib/taskana-core/src/test/java/acceptance/objectreference/QueryObjectReferenceAccTest.java
index a40bc22af..7f9035f61 100644
--- a/lib/taskana-core/src/test/java/acceptance/objectreference/QueryObjectReferenceAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/objectreference/QueryObjectReferenceAccTest.java
@@ -2,15 +2,15 @@ package acceptance.objectreference;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static pro.taskana.ObjectReferenceQueryColumnName.COMPANY;
-import static pro.taskana.ObjectReferenceQueryColumnName.SYSTEM;
+import static pro.taskana.task.api.ObjectReferenceQueryColumnName.COMPANY;
+import static pro.taskana.task.api.ObjectReferenceQueryColumnName.SYSTEM;
import acceptance.AbstractAccTest;
import java.util.List;
import org.junit.jupiter.api.Test;
-import pro.taskana.ObjectReference;
-import pro.taskana.TaskQuery;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.TaskQuery;
/** Acceptance test for all "get classification" scenarios. */
class QueryObjectReferenceAccTest extends AbstractAccTest {
diff --git a/lib/taskana-core/src/test/java/acceptance/objectreference/QueryObjectreferencesWithPaginationAccTest.java b/lib/taskana-core/src/test/java/acceptance/objectreference/QueryObjectreferencesWithPaginationAccTest.java
index b4f4508cd..883deb53b 100644
--- a/lib/taskana-core/src/test/java/acceptance/objectreference/QueryObjectreferencesWithPaginationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/objectreference/QueryObjectreferencesWithPaginationAccTest.java
@@ -9,11 +9,11 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.ObjectReference;
-import pro.taskana.ObjectReferenceQuery;
-import pro.taskana.TaskQuery;
-import pro.taskana.TaskService;
import pro.taskana.security.JaasExtension;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.ObjectReferenceQuery;
+import pro.taskana.task.api.TaskQuery;
+import pro.taskana.task.api.TaskService;
/** Acceptance test for all "query classifications with pagination" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/persistence/UpdateObjectsUseUtcTimeStampsAccTest.java b/lib/taskana-core/src/test/java/acceptance/persistence/UpdateObjectsUseUtcTimeStampsAccTest.java
index e6984db16..255d61b82 100644
--- a/lib/taskana-core/src/test/java/acceptance/persistence/UpdateObjectsUseUtcTimeStampsAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/persistence/UpdateObjectsUseUtcTimeStampsAccTest.java
@@ -14,33 +14,33 @@ import java.util.TimeZone;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.JobService;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketType;
-import pro.taskana.exceptions.AttachmentPersistenceException;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.JobServiceImpl;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.jobs.ScheduledJob;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.JobService;
+import pro.taskana.common.api.exceptions.AttachmentPersistenceException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.JobServiceImpl;
+import pro.taskana.common.internal.jobs.ScheduledJob;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for access to timestamps from different timezones. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/report/AbstractReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/AbstractReportAccTest.java
index 83a8be4b5..cd6f13dcb 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/AbstractReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/AbstractReportAccTest.java
@@ -4,9 +4,9 @@ import java.sql.SQLException;
import javax.sql.DataSource;
import org.junit.jupiter.api.BeforeAll;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
import pro.taskana.sampledata.SampleDataGenerator;
/** Abstract test class for all report building tests. */
diff --git a/lib/taskana-core/src/test/java/acceptance/report/GetCustomAttributeValuesForReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/GetCustomAttributeValuesForReportAccTest.java
index 37f4156b4..e5cffd82a 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/GetCustomAttributeValuesForReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/GetCustomAttributeValuesForReportAccTest.java
@@ -13,9 +13,9 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.TaskMonitorService;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
diff --git a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfCategoryReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfCategoryReportAccTest.java
index 72928cafc..8e65070cd 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfCategoryReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfCategoryReportAccTest.java
@@ -13,15 +13,15 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.SelectedItem;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.SelectedItem;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskState;
/** Acceptance test for all "get task ids of category report" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfClassificationReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfClassificationReportAccTest.java
index 9f1a82356..af7ae6934 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfClassificationReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfClassificationReportAccTest.java
@@ -9,11 +9,11 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.SelectedItem;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.SelectedItem;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
diff --git a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfCustomFieldValueReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfCustomFieldValueReportAccTest.java
index 712432101..a444d1b57 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfCustomFieldValueReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfCustomFieldValueReportAccTest.java
@@ -13,15 +13,15 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.SelectedItem;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.SelectedItem;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskState;
/** Acceptance test for all "get task ids of category report" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfWorkbasketReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfWorkbasketReportAccTest.java
index e80db9027..ca3509e5c 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfWorkbasketReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/GetTaskIdsOfWorkbasketReportAccTest.java
@@ -10,11 +10,11 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.SelectedItem;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.SelectedItem;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
diff --git a/lib/taskana-core/src/test/java/acceptance/report/ProvideCategoryReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/ProvideCategoryReportAccTest.java
index a2ad86eca..bfc9b3646 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/ProvideCategoryReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/ProvideCategoryReportAccTest.java
@@ -17,15 +17,15 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.report.CategoryReport;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.CategoryReport;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskState;
/** Acceptance test for all "category report" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/report/ProvideClassificationReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/ProvideClassificationReportAccTest.java
index 4b8ebf229..498121d62 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/ProvideClassificationReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/ProvideClassificationReportAccTest.java
@@ -17,15 +17,15 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.report.ClassificationReport;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.ClassificationReport;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskState;
/** Acceptance test for all "classification report" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/report/ProvideCustomFieldValueReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/ProvideCustomFieldValueReportAccTest.java
index c5aefb9d0..1728e3afe 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/ProvideCustomFieldValueReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/ProvideCustomFieldValueReportAccTest.java
@@ -16,15 +16,15 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.report.CustomFieldValueReport;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.CustomFieldValueReport;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskState;
/** Acceptance test for all "classification report" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/report/ProvideDetailedClassificationReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/ProvideDetailedClassificationReportAccTest.java
index 6233efd7a..429739b88 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/ProvideDetailedClassificationReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/ProvideDetailedClassificationReportAccTest.java
@@ -16,18 +16,18 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.DetailedMonitorQueryItem;
-import pro.taskana.impl.report.row.FoldableRow;
-import pro.taskana.impl.report.structure.Row;
-import pro.taskana.report.ClassificationReport.DetailedClassificationReport;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.ClassificationReport.DetailedClassificationReport;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.DetailedMonitorQueryItem;
+import pro.taskana.report.internal.row.FoldableRow;
+import pro.taskana.report.internal.structure.Row;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskState;
/** Acceptance test for all "detailed classification report" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/report/ProvideTaskStatusReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/ProvideTaskStatusReportAccTest.java
index 44460eca7..4fd7fac05 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/ProvideTaskStatusReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/ProvideTaskStatusReportAccTest.java
@@ -13,16 +13,16 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TaskStatusColumnHeader;
-import pro.taskana.impl.report.item.TaskQueryItem;
-import pro.taskana.impl.report.structure.Row;
-import pro.taskana.report.TaskStatusReport;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.api.TaskStatusReport;
+import pro.taskana.report.internal.header.TaskStatusColumnHeader;
+import pro.taskana.report.internal.item.TaskQueryItem;
+import pro.taskana.report.internal.structure.Row;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskState;
/** Acceptance test for all "task status report" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/report/ProvideTimestampReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/ProvideTimestampReportAccTest.java
index b2ca47464..81b5a4437 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/ProvideTimestampReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/ProvideTimestampReportAccTest.java
@@ -12,12 +12,12 @@ import java.util.stream.IntStream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.TimestampQueryItem;
-import pro.taskana.impl.report.row.SingleRow;
-import pro.taskana.impl.report.row.TimestampRow;
-import pro.taskana.report.TimestampReport;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.api.TimestampReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.TimestampQueryItem;
+import pro.taskana.report.internal.row.SingleRow;
+import pro.taskana.report.internal.row.TimestampRow;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
diff --git a/lib/taskana-core/src/test/java/acceptance/report/ProvideWorkbasketReportAccTest.java b/lib/taskana-core/src/test/java/acceptance/report/ProvideWorkbasketReportAccTest.java
index f2a30c58e..195a7c9ff 100644
--- a/lib/taskana-core/src/test/java/acceptance/report/ProvideWorkbasketReportAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/report/ProvideWorkbasketReportAccTest.java
@@ -17,16 +17,16 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import pro.taskana.CustomField;
-import pro.taskana.TaskMonitorService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.CombinedClassificationFilter;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.report.WorkbasketReport;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.report.api.TaskMonitorService;
+import pro.taskana.report.api.WorkbasketReport;
+import pro.taskana.report.internal.CombinedClassificationFilter;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskState;
/** Acceptance test for all "workbasket level report" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/security/ClassificationQueryAccTest.java b/lib/taskana-core/src/test/java/acceptance/security/ClassificationQueryAccTest.java
index aa077c6f1..54a4c2cb9 100644
--- a/lib/taskana-core/src/test/java/acceptance/security/ClassificationQueryAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/security/ClassificationQueryAccTest.java
@@ -8,8 +8,8 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.ClassificationService;
-import pro.taskana.ClassificationSummary;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.ClassificationSummary;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
diff --git a/lib/taskana-core/src/test/java/acceptance/security/TaskEngineAccTest.java b/lib/taskana-core/src/test/java/acceptance/security/TaskEngineAccTest.java
index 0572f7858..c7a9da0ed 100644
--- a/lib/taskana-core/src/test/java/acceptance/security/TaskEngineAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/security/TaskEngineAccTest.java
@@ -8,11 +8,11 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.TaskanaEngineProxyForTest;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.TaskanaEngineProxyForTest;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskanaRole;
/** Acceptance test for task queries and authorization. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/security/TaskQueryAccTest.java b/lib/taskana-core/src/test/java/acceptance/security/TaskQueryAccTest.java
index 88893c048..fd1c2b812 100644
--- a/lib/taskana-core/src/test/java/acceptance/security/TaskQueryAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/security/TaskQueryAccTest.java
@@ -8,10 +8,10 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
/** Acceptance test for task queries and authorization. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/security/WorkbasketQueryAccTest.java b/lib/taskana-core/src/test/java/acceptance/security/WorkbasketQueryAccTest.java
index c578786e5..ef680bed5 100644
--- a/lib/taskana-core/src/test/java/acceptance/security/WorkbasketQueryAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/security/WorkbasketQueryAccTest.java
@@ -8,13 +8,13 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/** Acceptance test for workbasket queries and authorization. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/CallbackStateAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/CallbackStateAccTest.java
index 00f8bdc59..0b00b05dc 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/CallbackStateAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/CallbackStateAccTest.java
@@ -15,24 +15,24 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.CallbackState;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.TaskImpl;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.CallbackState;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "create task" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/CompleteTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/CompleteTaskAccTest.java
index b13d76089..81a97a9c2 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/CompleteTaskAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/CompleteTaskAccTest.java
@@ -12,21 +12,21 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.security.CurrentUserContext;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance tests for all claim and complete scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/CreateTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/CreateTaskAccTest.java
index f7cbfc8ed..764b4a587 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/CreateTaskAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/CreateTaskAccTest.java
@@ -23,29 +23,29 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Attachment;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.ObjectReference;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketService;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.DaysToWorkingDaysConverter;
-import pro.taskana.impl.TaskanaEngineProxyForTest;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.mappings.AttachmentMapper;
-import pro.taskana.mappings.TaskTestMapper;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.TaskanaEngineProxyForTest;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.report.internal.DaysToWorkingDaysConverter;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.AttachmentMapper;
+import pro.taskana.task.internal.TaskTestMapper;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "create task" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/DeleteTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/DeleteTaskAccTest.java
index d315c0ac1..21ad968bc 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/DeleteTaskAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/DeleteTaskAccTest.java
@@ -13,16 +13,16 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.TaskanaException;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
/** Acceptance test for all "delete task" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/GetTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/GetTaskAccTest.java
index 5b18afacc..2a0af1395 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/GetTaskAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/GetTaskAccTest.java
@@ -11,14 +11,14 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
/** Acceptance test for all "get task" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTaskByClassificationNameAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTaskByClassificationNameAccTest.java
index b8703abd9..6bebec0ff 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/QueryTaskByClassificationNameAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTaskByClassificationNameAccTest.java
@@ -8,14 +8,14 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.AttachmentSummary;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.TaskQuery;
-import pro.taskana.TaskQueryColumnName;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
+import pro.taskana.common.api.BaseQuery.SortDirection;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.AttachmentSummary;
+import pro.taskana.task.api.TaskQuery;
+import pro.taskana.task.api.TaskQueryColumnName;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
/**
* Acceptance test for the usecase of adding/removing an attachment of a task and update the result
diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTaskWithAttachment.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTaskWithAttachment.java
index f44bc68ad..119ebc6cd 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/QueryTaskWithAttachment.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTaskWithAttachment.java
@@ -10,16 +10,16 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Attachment;
-import pro.taskana.AttachmentSummary;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.AttachmentSummary;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
/**
* Acceptance test for the usecase of adding/removing an attachment of a task and update the result
diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksAccTest.java
index e99bdc915..7ac9ba134 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksAccTest.java
@@ -6,14 +6,14 @@ import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static pro.taskana.BaseQuery.SortDirection.ASCENDING;
-import static pro.taskana.BaseQuery.SortDirection.DESCENDING;
-import static pro.taskana.TaskQueryColumnName.A_CHANNEL;
-import static pro.taskana.TaskQueryColumnName.A_CLASSIFICATION_ID;
-import static pro.taskana.TaskQueryColumnName.A_REF_VALUE;
-import static pro.taskana.TaskQueryColumnName.CLASSIFICATION_KEY;
-import static pro.taskana.TaskQueryColumnName.OWNER;
-import static pro.taskana.TaskQueryColumnName.STATE;
+import static pro.taskana.common.api.BaseQuery.SortDirection.ASCENDING;
+import static pro.taskana.common.api.BaseQuery.SortDirection.DESCENDING;
+import static pro.taskana.task.api.TaskQueryColumnName.A_CHANNEL;
+import static pro.taskana.task.api.TaskQueryColumnName.A_CLASSIFICATION_ID;
+import static pro.taskana.task.api.TaskQueryColumnName.A_REF_VALUE;
+import static pro.taskana.task.api.TaskQueryColumnName.CLASSIFICATION_KEY;
+import static pro.taskana.task.api.TaskQueryColumnName.OWNER;
+import static pro.taskana.task.api.TaskQueryColumnName.STATE;
import acceptance.AbstractAccTest;
import java.sql.SQLException;
@@ -27,26 +27,26 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Attachment;
-import pro.taskana.Task;
-import pro.taskana.TaskQuery;
-import pro.taskana.TaskQueryColumnName;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
-import pro.taskana.TimeInterval;
-import pro.taskana.exceptions.AttachmentPersistenceException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.impl.TaskanaEngineProxyForTest;
-import pro.taskana.mappings.TaskTestMapper;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.AttachmentPersistenceException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.TaskanaEngineProxyForTest;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskQuery;
+import pro.taskana.task.api.TaskQueryColumnName;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.task.internal.TaskTestMapper;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "query tasks with sorting" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByObjectReferenceAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByObjectReferenceAccTest.java
index cde482b60..b29f5f715 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByObjectReferenceAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByObjectReferenceAccTest.java
@@ -7,11 +7,11 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
-import pro.taskana.exceptions.SystemException;
+import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
/** Acceptance test for all "query tasks by object reference" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByTimeIntervalsAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByTimeIntervalsAccTest.java
index b42d6ba83..0a7e85b02 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByTimeIntervalsAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByTimeIntervalsAccTest.java
@@ -11,12 +11,12 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
-import pro.taskana.TimeInterval;
+import pro.taskana.common.api.BaseQuery.SortDirection;
+import pro.taskana.common.api.TimeInterval;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
/** Acceptance test for all "query tasks with sorting" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java
index 0e0162310..9c1b33443 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java
@@ -11,12 +11,12 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.KeyDomain;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
-import pro.taskana.exceptions.NotAuthorizedToQueryWorkbasketException;
+import pro.taskana.common.api.KeyDomain;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.workbasket.api.exceptions.NotAuthorizedToQueryWorkbasketException;
/** Acceptance test for all "query tasks by workbasket" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithPaginationAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithPaginationAccTest.java
index 3ffa71b1e..3f43686f0 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithPaginationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithPaginationAccTest.java
@@ -8,11 +8,11 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.KeyDomain;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
+import pro.taskana.common.api.KeyDomain;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
/** Acceptance test for all "query tasks by workbasket with pagination" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithSortingAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithSortingAccTest.java
index 521641269..777ff7e74 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithSortingAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithSortingAccTest.java
@@ -14,13 +14,13 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.KeyDomain;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
+import pro.taskana.common.api.BaseQuery.SortDirection;
+import pro.taskana.common.api.KeyDomain;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
/** Acceptance test for all "query tasks with sorting" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/TransferTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/TransferTaskAccTest.java
index 7afd81be4..23321a869 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/TransferTaskAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/TransferTaskAccTest.java
@@ -18,20 +18,20 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.Workbasket;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "transfer task" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAccTest.java
index 17ea18c8a..20ab5e9ee 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAccTest.java
@@ -20,22 +20,22 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.ObjectReference;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.AttachmentPersistenceException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.TaskImpl;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.AttachmentPersistenceException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "update task" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAttachmentsAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAttachmentsAccTest.java
index bceb14022..361e2e945 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAttachmentsAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAttachmentsAccTest.java
@@ -18,26 +18,26 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Attachment;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.exceptions.AttachmentPersistenceException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.AttachmentImpl;
-import pro.taskana.impl.DaysToWorkingDaysConverter;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.security.CurrentUserContext;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.AttachmentPersistenceException;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.report.internal.DaysToWorkingDaysConverter;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.AttachmentImpl;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/**
* Acceptance test for the usecase of adding/removing an attachment of a task and update the result
diff --git a/lib/taskana-core/src/test/java/acceptance/task/WorkOnTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/WorkOnTaskAccTest.java
index ec5e12504..13acc82ac 100644
--- a/lib/taskana-core/src/test/java/acceptance/task/WorkOnTaskAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/task/WorkOnTaskAccTest.java
@@ -18,18 +18,18 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BulkOperationResults;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskState;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.TaskanaException;
+import pro.taskana.common.api.BulkOperationResults;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
/** Acceptance test for all "work on task" scenarios. This includes claim, complete... */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/taskrouting/TaskRoutingAccTest.java b/lib/taskana-core/src/test/java/acceptance/taskrouting/TaskRoutingAccTest.java
index 2e0398034..bdc0f547b 100644
--- a/lib/taskana-core/src/test/java/acceptance/taskrouting/TaskRoutingAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/taskrouting/TaskRoutingAccTest.java
@@ -7,17 +7,17 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.TaskImpl;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "create task" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/taskrouting/TestTaskRoutingProviderForDomainA.java b/lib/taskana-core/src/test/java/acceptance/taskrouting/TestTaskRoutingProviderForDomainA.java
index b9a3bba44..44d6f9e42 100644
--- a/lib/taskana-core/src/test/java/acceptance/taskrouting/TestTaskRoutingProviderForDomainA.java
+++ b/lib/taskana-core/src/test/java/acceptance/taskrouting/TestTaskRoutingProviderForDomainA.java
@@ -1,8 +1,8 @@
package acceptance.taskrouting;
-import pro.taskana.Task;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.taskrouting.api.TaskRoutingProvider;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskRoutingProvider;
/** This is a sample implementation of TaskRouter. */
public class TestTaskRoutingProviderForDomainA implements TaskRoutingProvider {
diff --git a/lib/taskana-core/src/test/java/acceptance/taskrouting/TestTaskRoutingProviderForDomainB.java b/lib/taskana-core/src/test/java/acceptance/taskrouting/TestTaskRoutingProviderForDomainB.java
index 42b10f3a5..55bb46fa4 100644
--- a/lib/taskana-core/src/test/java/acceptance/taskrouting/TestTaskRoutingProviderForDomainB.java
+++ b/lib/taskana-core/src/test/java/acceptance/taskrouting/TestTaskRoutingProviderForDomainB.java
@@ -1,8 +1,8 @@
package acceptance.taskrouting;
-import pro.taskana.Task;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.taskrouting.api.TaskRoutingProvider;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskRoutingProvider;
/** This is a sample implementation of TaskRouter. */
public class TestTaskRoutingProviderForDomainB implements TaskRoutingProvider {
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/CreateWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/CreateWorkbasketAccTest.java
index 7e61e6c4e..405d52c5c 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/CreateWorkbasketAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/CreateWorkbasketAccTest.java
@@ -10,19 +10,19 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketType;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "create workbasket" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/DeleteWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/DeleteWorkbasketAccTest.java
index bb92b2a02..8fd818699 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/DeleteWorkbasketAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/DeleteWorkbasketAccTest.java
@@ -13,21 +13,21 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskService;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketInUseException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.TaskImpl;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketInUseException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test which does test the deletion of a workbasket and all wanted failures. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/DistributionTargetsAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/DistributionTargetsAccTest.java
index 53f60e999..01cdb6970 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/DistributionTargetsAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/DistributionTargetsAccTest.java
@@ -14,13 +14,13 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "get workbasket" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/GetWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/GetWorkbasketAccTest.java
index fc7f725be..7b44db704 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/GetWorkbasketAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/GetWorkbasketAccTest.java
@@ -9,15 +9,15 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.WorkbasketType;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "get workbasket" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccTest.java
index 9b86e1169..9f05eff56 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccTest.java
@@ -3,7 +3,7 @@ package acceptance.workbasket;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static pro.taskana.WorkbasketQueryColumnName.NAME;
+import static pro.taskana.workbasket.api.WorkbasketQueryColumnName.NAME;
import acceptance.AbstractAccTest;
import java.util.ArrayList;
@@ -12,16 +12,16 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketQuery;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.WorkbasketType;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.BaseQuery.SortDirection;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketQuery;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.WorkbasketType;
/** Acceptance test for all "query workbasket by permission" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsAccTest.java
index eb02c2ba7..bb2e95a4d 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketAccessItemsAccTest.java
@@ -3,9 +3,9 @@ package acceptance.workbasket;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static pro.taskana.AccessItemQueryColumnName.ACCESS_ID;
-import static pro.taskana.AccessItemQueryColumnName.WORKBASKET_ID;
-import static pro.taskana.AccessItemQueryColumnName.WORKBASKET_KEY;
+import static pro.taskana.workbasket.api.AccessItemQueryColumnName.ACCESS_ID;
+import static pro.taskana.workbasket.api.AccessItemQueryColumnName.WORKBASKET_ID;
+import static pro.taskana.workbasket.api.AccessItemQueryColumnName.WORKBASKET_KEY;
import acceptance.AbstractAccTest;
import java.util.Arrays;
@@ -14,13 +14,13 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketAccessItemQuery;
-import pro.taskana.WorkbasketService;
-import pro.taskana.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.BaseQuery.SortDirection;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketAccessItemQuery;
+import pro.taskana.workbasket.api.WorkbasketService;
/** Acceptance test for all "query access items for workbaskets" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketByPermissionAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketByPermissionAccTest.java
index 70a7b95a9..ee264b48e 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketByPermissionAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketByPermissionAccTest.java
@@ -11,15 +11,15 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.SystemException;
+import pro.taskana.common.api.BaseQuery.SortDirection;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/** Acceptance test for all "query workbasket by permission" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketsWithPaginationAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketsWithPaginationAccTest.java
index 8fc187a0f..5e01bfadb 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketsWithPaginationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketsWithPaginationAccTest.java
@@ -8,10 +8,10 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/** Acceptance test for all "query classifications with pagination" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAccTest.java
index 86bf944b6..bb85ea107 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAccTest.java
@@ -9,13 +9,13 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketType;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/** Acceptance test for all "update workbasket" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAuthorizations2AccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAuthorizations2AccTest.java
index ee0b70192..1636dd762 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAuthorizations2AccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAuthorizations2AccTest.java
@@ -9,10 +9,10 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
/** Acceptance test for all "update workbasket" scenarios that need a fresh database. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAuthorizationsAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAuthorizationsAccTest.java
index b666ff267..d9ae1f329 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAuthorizationsAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/UpdateWorkbasketAuthorizationsAccTest.java
@@ -17,22 +17,22 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.KeyDomain;
-import pro.taskana.Task;
-import pro.taskana.TaskService;
-import pro.taskana.TaskSummary;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.NotAuthorizedToQueryWorkbasketException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.WorkbasketAccessItemImpl;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.KeyDomain;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.exceptions.NotAuthorizedToQueryWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.workbasket.internal.WorkbasketAccessItemImpl;
/** Acceptance test for all "update workbasket" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/WorkbasketQueryWithOrderedPaginationAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/WorkbasketQueryWithOrderedPaginationAccTest.java
index 75a1015ab..db9ed0a52 100644
--- a/lib/taskana-core/src/test/java/acceptance/workbasket/WorkbasketQueryWithOrderedPaginationAccTest.java
+++ b/lib/taskana-core/src/test/java/acceptance/workbasket/WorkbasketQueryWithOrderedPaginationAccTest.java
@@ -8,11 +8,11 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.BaseQuery.SortDirection;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
+import pro.taskana.common.api.BaseQuery.SortDirection;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/** Acceptance test for all "query classifications with pagination" scenarios. */
@ExtendWith(JaasExtension.class)
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationQueryImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationQueryImplTest.java
similarity index 93%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationQueryImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationQueryImplTest.java
index 5664c3378..8036c2f4c 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationQueryImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationQueryImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.classification.internal;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
@@ -13,7 +13,8 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.ClassificationSummary;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.common.internal.InternalTaskanaEngine;
/**
* Test for ClassificationQueryImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntAutoCommitTest.java b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplIntAutoCommitTest.java
similarity index 88%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntAutoCommitTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplIntAutoCommitTest.java
index fd26b152a..80e4d1532 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntAutoCommitTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplIntAutoCommitTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.integration;
+package pro.taskana.classification.internal;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;
@@ -16,21 +16,21 @@ import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaEngine.ConnectionManagementMode;
-import pro.taskana.TimeInterval;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
import pro.taskana.sampledata.SampleDataGenerator;
/**
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntExplicitTest.java b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplIntExplicitTest.java
similarity index 92%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntExplicitTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplIntExplicitTest.java
index 2cada3bbb..40e940a0e 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/ClassificationServiceImplIntExplicitTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplIntExplicitTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.integration;
+package pro.taskana.classification.internal;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsNot.not;
@@ -21,22 +21,21 @@ import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaEngine.ConnectionManagementMode;
-import pro.taskana.TimeInterval;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.ConcurrencyException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.ClassificationImpl;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
+import pro.taskana.common.api.TimeInterval;
+import pro.taskana.common.api.exceptions.ConcurrencyException;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
import pro.taskana.sampledata.SampleDataGenerator;
/**
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplTest.java
similarity index 90%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplTest.java
index f9f3c985e..7a14f5bed 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/ClassificationServiceImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.classification.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
@@ -13,10 +13,10 @@ import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.Classification;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.mappings.ClassificationMapper;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
/**
* Unit Test for ClassificationServiceImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TestClassificationQuery.java b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/TestClassificationQuery.java
similarity index 93%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/TestClassificationQuery.java
rename to lib/taskana-core/src/test/java/pro/taskana/classification/internal/TestClassificationQuery.java
index 271ac2655..9ce839a90 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/TestClassificationQuery.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/classification/internal/TestClassificationQuery.java
@@ -1,12 +1,12 @@
-package pro.taskana.impl;
+package pro.taskana.classification.internal;
import java.util.ArrayList;
import java.util.List;
-import pro.taskana.ClassificationQuery;
-import pro.taskana.ClassificationQueryColumnName;
-import pro.taskana.ClassificationSummary;
-import pro.taskana.TimeInterval;
+import pro.taskana.classification.api.ClassificationQuery;
+import pro.taskana.classification.api.ClassificationQueryColumnName;
+import pro.taskana.classification.api.ClassificationSummary;
+import pro.taskana.common.api.TimeInterval;
/** Created by BV on 26.10.2017. */
public class TestClassificationQuery implements ClassificationQuery {
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/JunitHelper.java b/lib/taskana-core/src/test/java/pro/taskana/common/internal/JunitHelper.java
similarity index 86%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/JunitHelper.java
rename to lib/taskana-core/src/test/java/pro/taskana/common/internal/JunitHelper.java
index 68e4ac703..30bb49d4e 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/JunitHelper.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/common/internal/JunitHelper.java
@@ -1,7 +1,8 @@
-package pro.taskana.impl;
+package pro.taskana.common.internal;
-import pro.taskana.Attachment;
-import pro.taskana.ObjectReference;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.internal.AttachmentImpl;
/**
* This class contains helper methods for Junit Tests.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskanaEngineProxyForTest.java b/lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineProxyForTest.java
similarity index 91%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/TaskanaEngineProxyForTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineProxyForTest.java
index cc5b54d2e..8ae0bbf90 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskanaEngineProxyForTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineProxyForTest.java
@@ -1,9 +1,9 @@
-package pro.taskana.impl;
+package pro.taskana.common.internal;
import java.lang.reflect.Field;
import org.apache.ibatis.session.SqlSession;
-import pro.taskana.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine;
/**
* Utility class to enable unit tests to access mappers directly.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/configuration/TaskanaEngineTestConfiguration.java b/lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineTestConfiguration.java
similarity index 99%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/configuration/TaskanaEngineTestConfiguration.java
rename to lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineTestConfiguration.java
index 77a8ec851..616f714d0 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/configuration/TaskanaEngineTestConfiguration.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineTestConfiguration.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.configuration;
+package pro.taskana.common.internal;
import java.io.File;
import java.io.FileInputStream;
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/configuration/TaskanaEngineTestConfigurationTest.java b/lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineTestConfigurationTest.java
similarity index 82%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/configuration/TaskanaEngineTestConfigurationTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineTestConfigurationTest.java
index 0e526bdb4..c67184bfc 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/configuration/TaskanaEngineTestConfigurationTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/common/internal/TaskanaEngineTestConfigurationTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.configuration;
+package pro.taskana.common.internal;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -6,8 +6,8 @@ import java.sql.SQLException;
import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.TaskanaEngine;
/** Test of configuration. */
class TaskanaEngineTestConfigurationTest {
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/CategoryReportBuilderImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/report/internal/CategoryReportBuilderImplTest.java
similarity index 96%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/CategoryReportBuilderImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/report/internal/CategoryReportBuilderImplTest.java
index aea3460da..7fb423d10 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/CategoryReportBuilderImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/report/internal/CategoryReportBuilderImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -22,16 +22,16 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.CustomField;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.CategoryReport;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.CategoryReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.task.api.TaskState;
/** Unit Test for CategoryBuilderImpl. */
@ExtendWith(MockitoExtension.class)
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationReportBuilderImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/report/internal/ClassificationReportBuilderImplTest.java
similarity index 96%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationReportBuilderImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/report/internal/ClassificationReportBuilderImplTest.java
index 13867f700..f0562dc52 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationReportBuilderImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/report/internal/ClassificationReportBuilderImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -22,19 +22,19 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.CustomField;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.DetailedMonitorQueryItem;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.impl.report.row.FoldableRow;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.ClassificationReport;
-import pro.taskana.report.ClassificationReport.DetailedClassificationReport;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.ClassificationReport;
+import pro.taskana.report.api.ClassificationReport.DetailedClassificationReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.DetailedMonitorQueryItem;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.row.FoldableRow;
+import pro.taskana.task.api.TaskState;
/** Unit Test for ClassificationReportBuilderImpl. */
@ExtendWith(MockitoExtension.class)
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/CustomFieldValueReportBuilderImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/report/internal/CustomFieldValueReportBuilderImplTest.java
similarity index 94%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/CustomFieldValueReportBuilderImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/report/internal/CustomFieldValueReportBuilderImplTest.java
index 9d5fef373..712993f0f 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/CustomFieldValueReportBuilderImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/report/internal/CustomFieldValueReportBuilderImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -21,16 +21,16 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.CustomField;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.CustomFieldValueReport;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.CustomFieldValueReport;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.task.api.TaskState;
/** Unit Test for CustomFieldValueReportBuilderImpl. */
@ExtendWith(MockitoExtension.class)
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java b/lib/taskana-core/src/test/java/pro/taskana/report/internal/DaysToWorkingDaysConverterTest.java
similarity index 98%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/report/internal/DaysToWorkingDaysConverterTest.java
index 7096779c7..c27d3a684 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/DaysToWorkingDaysConverterTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/report/internal/DaysToWorkingDaysConverterTest.java
@@ -1,9 +1,9 @@
-package pro.taskana.impl;
+package pro.taskana.report.internal;
import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static pro.taskana.impl.DaysToWorkingDaysConverter.getEasterSunday;
+import static pro.taskana.report.internal.DaysToWorkingDaysConverter.getEasterSunday;
import java.time.Instant;
import java.time.LocalDate;
@@ -13,8 +13,8 @@ import java.util.List;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
/** Test for the DaysToWorkingDaysConverter. */
class DaysToWorkingDaysConverterTest {
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/report/structure/ReportTest.java b/lib/taskana-core/src/test/java/pro/taskana/report/internal/ReportTest.java
similarity index 94%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/report/structure/ReportTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/report/internal/ReportTest.java
index bec12e342..2474bde4e 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/report/structure/ReportTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/report/internal/ReportTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.report.structure;
+package pro.taskana.report.internal;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -12,8 +12,11 @@ import java.util.stream.IntStream;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.report.internal.structure.QueryItemPreprocessor;
+import pro.taskana.report.internal.structure.Report;
+import pro.taskana.report.internal.structure.Row;
/** Tests for {@link Report}. */
class ReportTest {
diff --git a/lib/taskana-core/src/test/java/pro/taskana/sampledata/SampleDataGeneratorTest.java b/lib/taskana-core/src/test/java/pro/taskana/sampledata/SampleDataGeneratorTest.java
index db10b1c1c..7bcd3f741 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/sampledata/SampleDataGeneratorTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/sampledata/SampleDataGeneratorTest.java
@@ -4,7 +4,7 @@ import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import pro.taskana.configuration.DbSchemaCreator;
+import pro.taskana.common.internal.configuration.DbSchemaCreator;
/** Test SampleDataGenerator. */
class SampleDataGeneratorTest {
diff --git a/lib/taskana-core/src/test/java/pro/taskana/security/JaasExtension.java b/lib/taskana-core/src/test/java/pro/taskana/security/JaasExtension.java
index 20ff0c976..49853edbd 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/security/JaasExtension.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/security/JaasExtension.java
@@ -11,6 +11,9 @@ import org.junit.jupiter.api.extension.InvocationInterceptor;
import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
import org.junit.platform.commons.JUnitException;
+import pro.taskana.common.internal.security.GroupPrincipal;
+import pro.taskana.common.internal.security.UserPrincipal;
+
/** Runner for integration tests that enables JAAS subject. */
public class JaasExtension implements InvocationInterceptor {
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/ObjectReferenceQueryImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/ObjectReferenceQueryImplTest.java
similarity index 94%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/ObjectReferenceQueryImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/ObjectReferenceQueryImplTest.java
index 576a2910c..e0a1384db 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/ObjectReferenceQueryImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/ObjectReferenceQueryImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
@@ -13,7 +13,8 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.ObjectReference;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.task.api.ObjectReference;
/**
* Test for ObjectReferenceQueryImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskAttachmentTest.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskAttachmentTest.java
similarity index 95%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/TaskAttachmentTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskAttachmentTest.java
index 4e4e7a500..76524d3a3 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskAttachmentTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskAttachmentTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;
@@ -13,9 +13,10 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.Attachment;
-import pro.taskana.AttachmentSummary;
-import pro.taskana.ObjectReference;
+import pro.taskana.classification.internal.ClassificationImpl;
+import pro.taskana.task.api.Attachment;
+import pro.taskana.task.api.AttachmentSummary;
+import pro.taskana.task.api.ObjectReference;
/**
* Unit Test for methods needed fot attachment at TaskImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskQueryImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskQueryImplTest.java
similarity index 91%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/TaskQueryImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskQueryImplTest.java
index f05832d4e..889fb1257 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskQueryImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskQueryImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
@@ -14,10 +14,11 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.configuration.DB;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.configuration.DB;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
/**
* Test for TaskQueryImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntAutocommitTest.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplIntAutocommitTest.java
similarity index 89%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntAutocommitTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplIntAutocommitTest.java
index 062469c91..1267b99c6 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntAutocommitTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplIntAutocommitTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.integration;
+package pro.taskana.task.internal;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;
@@ -15,45 +15,43 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.KeyDomain;
-import pro.taskana.ObjectReference;
-import pro.taskana.Task;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaEngine.ConnectionManagementMode;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketType;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.SystemException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.ClassificationImpl;
-import pro.taskana.impl.JunitHelper;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.impl.TaskServiceImpl;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.WorkbasketImpl;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
-import pro.taskana.impl.util.IdGenerator;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.classification.internal.ClassificationImpl;
+import pro.taskana.common.api.KeyDomain;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.SystemException;
+import pro.taskana.common.internal.JunitHelper;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.common.internal.util.IdGenerator;
import pro.taskana.sampledata.SampleDataGenerator;
-import pro.taskana.security.CurrentUserContext;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.workbasket.internal.WorkbasketImpl;
/**
* Integration Test for TaskServiceImpl transactions with connection management mode AUTOCOMMIT.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntExplicitTest.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplIntExplicitTest.java
similarity index 91%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntExplicitTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplIntExplicitTest.java
index 582b9386c..9d2d54e34 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/TaskServiceImplIntExplicitTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplIntExplicitTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.integration;
+package pro.taskana.task.internal;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;
@@ -19,46 +19,44 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.Classification;
-import pro.taskana.ClassificationService;
-import pro.taskana.KeyDomain;
-import pro.taskana.Task;
-import pro.taskana.TaskState;
-import pro.taskana.TaskSummary;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaEngine.ConnectionManagementMode;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketType;
-import pro.taskana.configuration.DbSchemaCreator;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.SystemException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.ClassificationImpl;
-import pro.taskana.impl.JunitHelper;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.impl.TaskServiceImpl;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.WorkbasketImpl;
-import pro.taskana.impl.WorkbasketSummaryImpl;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
-import pro.taskana.impl.util.IdGenerator;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.classification.internal.ClassificationImpl;
+import pro.taskana.common.api.KeyDomain;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.SystemException;
+import pro.taskana.common.internal.JunitHelper;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
+import pro.taskana.common.internal.configuration.DbSchemaCreator;
+import pro.taskana.common.internal.security.CurrentUserContext;
+import pro.taskana.common.internal.util.IdGenerator;
import pro.taskana.sampledata.SampleDataGenerator;
-import pro.taskana.security.CurrentUserContext;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.workbasket.internal.WorkbasketImpl;
+import pro.taskana.workbasket.internal.WorkbasketSummaryImpl;
/**
* Integration Test for TaskServiceImpl transactions with connection management mode EXPLICIT.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplTest.java
similarity index 86%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplTest.java
index cd290232b..ba5e5a4ba 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskServiceImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -14,16 +14,19 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.Classification;
-import pro.taskana.ObjectReference;
-import pro.taskana.TaskSummary;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketService;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.mappings.AttachmentMapper;
-import pro.taskana.mappings.ObjectReferenceMapper;
-import pro.taskana.mappings.TaskMapper;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.internal.ClassificationImpl;
+import pro.taskana.classification.internal.ClassificationQueryImpl;
+import pro.taskana.classification.internal.ClassificationServiceImpl;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.common.internal.JunitHelper;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.internal.WorkbasketImpl;
/**
* Unit Test for TaskServiceImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskStatusReportBuilderImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskStatusReportBuilderImplTest.java
similarity index 89%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/TaskStatusReportBuilderImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskStatusReportBuilderImplTest.java
index c3ec322ac..24cd95558 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskStatusReportBuilderImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskStatusReportBuilderImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -19,14 +19,16 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaRole;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.item.TaskQueryItem;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.TaskStatusReport;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.TaskStatusReport;
+import pro.taskana.report.internal.TaskMonitorMapper;
+import pro.taskana.report.internal.TaskMonitorServiceImpl;
+import pro.taskana.report.internal.item.TaskQueryItem;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskanaRole;
/** Unit Test for TaskStatusReportBuilderImpl. */
@ExtendWith(MockitoExtension.class)
diff --git a/lib/taskana-core/src/test/java/pro/taskana/mappings/TaskTestMapper.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskTestMapper.java
similarity index 97%
rename from lib/taskana-core/src/test/java/pro/taskana/mappings/TaskTestMapper.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskTestMapper.java
index 84f4d46ba..8b2c064f6 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/mappings/TaskTestMapper.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskTestMapper.java
@@ -1,4 +1,4 @@
-package pro.taskana.mappings;
+package pro.taskana.task.internal;
import java.util.List;
import java.util.Map;
@@ -8,8 +8,7 @@ import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.type.ClobTypeHandler;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.impl.persistence.MapTypeHandler;
+import pro.taskana.common.internal.persistence.MapTypeHandler;
/** This class contains specific mybatis mappings for task tests. */
@SuppressWarnings({"checkstyle:LineLength"})
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskTransferrerTest.java b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskTransferrerTest.java
similarity index 82%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/TaskTransferrerTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskTransferrerTest.java
index ef07de7b3..e5c415ff4 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskTransferrerTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/task/internal/TaskTransferrerTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.task.internal;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;
@@ -16,21 +16,21 @@ import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.Classification;
-import pro.taskana.Task;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketPermission;
-import pro.taskana.WorkbasketService;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.mappings.AttachmentMapper;
-import pro.taskana.mappings.ObjectReferenceMapper;
-import pro.taskana.mappings.TaskMapper;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.internal.ClassificationQueryImpl;
+import pro.taskana.classification.internal.ClassificationServiceImpl;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketPermission;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/**
* Unit Test for TaskServiceImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketAccessItemQueryImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketAccessItemQueryImplTest.java
similarity index 92%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketAccessItemQueryImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketAccessItemQueryImplTest.java
index 8acdbb32d..cd64cfdc2 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketAccessItemQueryImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketAccessItemQueryImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
@@ -13,7 +13,8 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.WorkbasketAccessItem;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
/**
* Test for WorkbasketAccessItemQueryImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketQueryImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketQueryImplTest.java
similarity index 91%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketQueryImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketQueryImplTest.java
index 8b29e80c1..e9c606cdc 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketQueryImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketQueryImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
@@ -14,8 +14,9 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.WorkbasketSummary;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.workbasket.api.WorkbasketSummary;
/**
* Test for WorkbasketQueryImpl.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketReportBuilderImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketReportBuilderImplTest.java
similarity index 95%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketReportBuilderImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketReportBuilderImplTest.java
index 077bc199b..1a319eb32 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketReportBuilderImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketReportBuilderImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -23,18 +23,21 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.CustomField;
-import pro.taskana.TaskState;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaRole;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.impl.report.CombinedClassificationFilter;
-import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
-import pro.taskana.impl.report.item.MonitorQueryItem;
-import pro.taskana.mappings.TaskMonitorMapper;
-import pro.taskana.report.WorkbasketReport;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.CustomField;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.report.api.WorkbasketReport;
+import pro.taskana.report.internal.CombinedClassificationFilter;
+import pro.taskana.report.internal.SelectedItem;
+import pro.taskana.report.internal.TaskMonitorMapper;
+import pro.taskana.report.internal.TaskMonitorServiceImpl;
+import pro.taskana.report.internal.header.TimeIntervalColumnHeader;
+import pro.taskana.report.internal.item.MonitorQueryItem;
+import pro.taskana.task.api.TaskState;
+import pro.taskana.task.api.TaskanaRole;
/** Unit Test for WorkbasketReportBuilderImpl. */
@ExtendWith(MockitoExtension.class)
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntAutocommitTest.java b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplIntAutocommitTest.java
similarity index 88%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntAutocommitTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplIntAutocommitTest.java
index 713446853..270b192df 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntAutocommitTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplIntAutocommitTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.integration;
+package pro.taskana.workbasket.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -15,27 +15,26 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaEngine.ConnectionManagementMode;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.WorkbasketType;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.WorkbasketImpl;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
-import pro.taskana.impl.util.IdGenerator;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
+import pro.taskana.common.internal.util.IdGenerator;
import pro.taskana.sampledata.SampleDataGenerator;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/**
* Integration Test for workbasketServiceImpl with connection management mode AUTOCOMMIT.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntExplicitTest.java b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplIntExplicitTest.java
similarity index 88%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntExplicitTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplIntExplicitTest.java
index 8e76ddfa5..7f0fbd16a 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/integration/WorkbasketServiceImplIntExplicitTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplIntExplicitTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl.integration;
+package pro.taskana.workbasket.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -15,28 +15,27 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.TaskanaEngine.ConnectionManagementMode;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketService;
-import pro.taskana.WorkbasketSummary;
-import pro.taskana.WorkbasketType;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.WorkbasketImpl;
-import pro.taskana.impl.configuration.TaskanaEngineTestConfiguration;
-import pro.taskana.impl.util.IdGenerator;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
+import pro.taskana.common.internal.util.IdGenerator;
import pro.taskana.sampledata.SampleDataGenerator;
import pro.taskana.security.JaasExtension;
import pro.taskana.security.WithAccessId;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketSummary;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/**
* Integration Test for workbasketServiceImpl with connection mode EXPLICIT.
diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketServiceImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplTest.java
similarity index 90%
rename from lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketServiceImplTest.java
rename to lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplTest.java
index 28cf75262..669cb82b6 100644
--- a/lib/taskana-core/src/test/java/pro/taskana/impl/WorkbasketServiceImplTest.java
+++ b/lib/taskana-core/src/test/java/pro/taskana/workbasket/internal/WorkbasketServiceImplTest.java
@@ -1,4 +1,4 @@
-package pro.taskana.impl;
+package pro.taskana.workbasket.internal;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -27,22 +27,20 @@ import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
-import pro.taskana.TaskQuery;
-import pro.taskana.TaskService;
-import pro.taskana.TaskanaEngine;
-import pro.taskana.Workbasket;
-import pro.taskana.WorkbasketAccessItem;
-import pro.taskana.WorkbasketType;
-import pro.taskana.configuration.TaskanaEngineConfiguration;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.WorkbasketAccessItemAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.mappings.DistributionTargetMapper;
-import pro.taskana.mappings.WorkbasketAccessMapper;
-import pro.taskana.mappings.WorkbasketMapper;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.internal.InternalTaskanaEngine;
+import pro.taskana.task.api.TaskQuery;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketAccessItem;
+import pro.taskana.workbasket.api.WorkbasketType;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAccessItemAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
/**
* Unit Test for workbasketServiceImpl.
diff --git a/lib/taskana-core/src/test/resources/META-INF/services/pro.taskana.taskrouting.api.TaskRoutingProvider b/lib/taskana-core/src/test/resources/META-INF/services/pro.taskana.task.api.TaskRoutingProvider
similarity index 100%
rename from lib/taskana-core/src/test/resources/META-INF/services/pro.taskana.taskrouting.api.TaskRoutingProvider
rename to lib/taskana-core/src/test/resources/META-INF/services/pro.taskana.task.api.TaskRoutingProvider
diff --git a/lib/taskana-spring-example/src/main/java/pro/taskana/ExampleBootstrap.java b/lib/taskana-spring-example/src/main/java/pro/taskana/ExampleBootstrap.java
index 44c8c3ad1..5223311a5 100644
--- a/lib/taskana-spring-example/src/main/java/pro/taskana/ExampleBootstrap.java
+++ b/lib/taskana-spring-example/src/main/java/pro/taskana/ExampleBootstrap.java
@@ -5,18 +5,25 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-import pro.taskana.exceptions.ClassificationAlreadyExistException;
-import pro.taskana.exceptions.ClassificationNotFoundException;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidArgumentException;
-import pro.taskana.exceptions.InvalidOwnerException;
-import pro.taskana.exceptions.InvalidStateException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskAlreadyExistException;
-import pro.taskana.exceptions.TaskNotFoundException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
+import pro.taskana.classification.api.Classification;
+import pro.taskana.classification.api.exceptions.ClassificationAlreadyExistException;
+import pro.taskana.classification.api.exceptions.ClassificationNotFoundException;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.common.api.exceptions.InvalidArgumentException;
+import pro.taskana.common.api.exceptions.InvalidOwnerException;
+import pro.taskana.common.api.exceptions.InvalidStateException;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.task.api.exceptions.TaskAlreadyExistException;
+import pro.taskana.task.api.exceptions.TaskNotFoundException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketType;
/** TODO. */
@Component
diff --git a/lib/taskana-spring-example/src/main/java/pro/taskana/TaskanaConfig.java b/lib/taskana-spring-example/src/main/java/pro/taskana/TaskanaConfig.java
index d4ff9b841..d6bb74237 100644
--- a/lib/taskana-spring-example/src/main/java/pro/taskana/TaskanaConfig.java
+++ b/lib/taskana-spring-example/src/main/java/pro/taskana/TaskanaConfig.java
@@ -13,7 +13,11 @@ import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.configuration.SpringTaskanaEngineConfiguration;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.workbasket.api.WorkbasketService;
/** Class to set /load configuration for Taskana Library. */
@Configuration
diff --git a/lib/taskana-spring-example/src/main/java/pro/taskana/TaskanaTestController.java b/lib/taskana-spring-example/src/main/java/pro/taskana/TaskanaTestController.java
index b14edcec3..4002fbd11 100644
--- a/lib/taskana-spring-example/src/main/java/pro/taskana/TaskanaTestController.java
+++ b/lib/taskana-spring-example/src/main/java/pro/taskana/TaskanaTestController.java
@@ -8,12 +8,15 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.impl.WorkbasketImpl;
-import pro.taskana.impl.util.IdGenerator;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.internal.WorkbasketImpl;
+import pro.taskana.common.internal.util.IdGenerator;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketType;
/** Rest Controller. */
@RestController
diff --git a/lib/taskana-spring-example/src/test/java/pro/taskana/TaskanaTransactionIntTest.java b/lib/taskana-spring-example/src/test/java/pro/taskana/TaskanaTransactionIntTest.java
index 7639f7b38..b98efc941 100644
--- a/lib/taskana-spring-example/src/test/java/pro/taskana/TaskanaTransactionIntTest.java
+++ b/lib/taskana-spring-example/src/test/java/pro/taskana/TaskanaTransactionIntTest.java
@@ -24,19 +24,29 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit.jupiter.SpringExtension;
-import pro.taskana.exceptions.DomainNotFoundException;
-import pro.taskana.exceptions.InvalidWorkbasketException;
-import pro.taskana.exceptions.NotAuthorizedException;
-import pro.taskana.exceptions.TaskanaException;
-import pro.taskana.exceptions.WorkbasketAlreadyExistException;
-import pro.taskana.exceptions.WorkbasketNotFoundException;
-import pro.taskana.impl.TaskImpl;
-import pro.taskana.impl.TaskanaEngineImpl;
-import pro.taskana.impl.WorkbasketImpl;
-import pro.taskana.impl.util.IdGenerator;
-import pro.taskana.jobs.TaskCleanupJob;
-import pro.taskana.jobs.WorkbasketCleanupJob;
-import pro.taskana.transaction.TaskanaTransactionProvider;
+import pro.taskana.classification.api.ClassificationService;
+import pro.taskana.common.api.KeyDomain;
+import pro.taskana.common.api.TaskanaEngine;
+import pro.taskana.common.api.exceptions.DomainNotFoundException;
+import pro.taskana.workbasket.api.exceptions.InvalidWorkbasketException;
+import pro.taskana.common.api.exceptions.NotAuthorizedException;
+import pro.taskana.common.api.exceptions.TaskanaException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketAlreadyExistException;
+import pro.taskana.workbasket.api.exceptions.WorkbasketNotFoundException;
+import pro.taskana.task.internal.TaskImpl;
+import pro.taskana.common.internal.TaskanaEngineImpl;
+import pro.taskana.workbasket.internal.WorkbasketImpl;
+import pro.taskana.common.internal.util.IdGenerator;
+import pro.taskana.common.internal.jobs.TaskCleanupJob;
+import pro.taskana.common.internal.jobs.WorkbasketCleanupJob;
+import pro.taskana.task.api.ObjectReference;
+import pro.taskana.task.api.Task;
+import pro.taskana.task.api.TaskService;
+import pro.taskana.task.api.TaskSummary;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
+import pro.taskana.workbasket.api.Workbasket;
+import pro.taskana.workbasket.api.WorkbasketService;
+import pro.taskana.workbasket.api.WorkbasketType;
/** Test for internal transaction management. */
@ExtendWith(SpringExtension.class)
diff --git a/lib/taskana-spring-example/src/test/java/pro/taskana/TransactionalJobsConfiguration.java b/lib/taskana-spring-example/src/test/java/pro/taskana/TransactionalJobsConfiguration.java
index c164bbbaf..04e6bbcf5 100644
--- a/lib/taskana-spring-example/src/test/java/pro/taskana/TransactionalJobsConfiguration.java
+++ b/lib/taskana-spring-example/src/test/java/pro/taskana/TransactionalJobsConfiguration.java
@@ -3,7 +3,7 @@ package pro.taskana;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import pro.taskana.transaction.TaskanaTransactionProvider;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
/** Configuration class for Spring sample application. */
@Configuration
diff --git a/lib/taskana-spring/src/main/java/pro/taskana/SpringTaskanaEngineImpl.java b/lib/taskana-spring/src/main/java/pro/taskana/SpringTaskanaEngineImpl.java
index c5d2162ae..6eea2dccf 100644
--- a/lib/taskana-spring/src/main/java/pro/taskana/SpringTaskanaEngineImpl.java
+++ b/lib/taskana-spring/src/main/java/pro/taskana/SpringTaskanaEngineImpl.java
@@ -4,7 +4,7 @@ import javax.annotation.PostConstruct;
import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
import pro.taskana.configuration.SpringTaskanaEngineConfiguration;
-import pro.taskana.impl.TaskanaEngineImpl;
+import pro.taskana.common.internal.TaskanaEngineImpl;
/** This class configures the TaskanaEngine for spring. */
public class SpringTaskanaEngineImpl extends TaskanaEngineImpl {
diff --git a/lib/taskana-spring/src/main/java/pro/taskana/configuration/SpringTaskanaEngineConfiguration.java b/lib/taskana-spring/src/main/java/pro/taskana/configuration/SpringTaskanaEngineConfiguration.java
index ed97ba853..184b0ab66 100644
--- a/lib/taskana-spring/src/main/java/pro/taskana/configuration/SpringTaskanaEngineConfiguration.java
+++ b/lib/taskana-spring/src/main/java/pro/taskana/configuration/SpringTaskanaEngineConfiguration.java
@@ -4,7 +4,8 @@ import java.sql.SQLException;
import javax.sql.DataSource;
import pro.taskana.SpringTaskanaEngineImpl;
-import pro.taskana.TaskanaEngine;
+import pro.taskana.TaskanaEngineConfiguration;
+import pro.taskana.common.api.TaskanaEngine;
/** This class configures the TaskanaEngineConfiguration for spring. */
public class SpringTaskanaEngineConfiguration extends TaskanaEngineConfiguration {
diff --git a/lib/taskana-spring/src/main/java/pro/taskana/transaction/SpringTransactionProvider.java b/lib/taskana-spring/src/main/java/pro/taskana/transaction/SpringTransactionProvider.java
index 524decedd..2ec4983f1 100644
--- a/lib/taskana-spring/src/main/java/pro/taskana/transaction/SpringTransactionProvider.java
+++ b/lib/taskana-spring/src/main/java/pro/taskana/transaction/SpringTransactionProvider.java
@@ -3,6 +3,9 @@ package pro.taskana.transaction;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
+import pro.taskana.common.internal.transaction.TaskanaCallable;
+import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
+
/** TODO. */
@Component
public class SpringTransactionProvider implements TaskanaTransactionProvider