TSK-1946: update to Spring Boot 2.7.8 (#1999)

* TSK-1946: H2 Update

* TSK-1946: add new run configurations

* TSK-1946: update to Spring Boot 2.7.3

Updated Spring Security Configs to new component-based configuration.
See https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

Co-authored-by: Marcel Bagemihl <marcel.bagemihl@novatec-gmbh.de>

* TSK-1946: wildfly now only starting postgres db

* TSK-1946: drop sup 4 sys prop db.type. We only execute PSQL

* TSK-1946: create new module 'taskana-rest-spring-test-lib' to simplify the Spring Security Configuration Setup for Spring Tests

* TSK-1946: H2 Update

* TSK-1946: add new run configurations

* TSK-1946: update to Spring Boot 2.7.3

Updated Spring Security Configs to new component-based configuration.
See https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

Co-authored-by: Marcel Bagemihl <marcel.bagemihl@novatec-gmbh.de>

* TSK-1946: wildfly now only starting postgres db

* TSK-1946: drop sup 4 sys prop db.type. We only execute PSQL

* TSK-1946: create new module 'taskana-rest-spring-test-lib' to simplify the Spring Security Configuration Setup for Spring Tests

* TSK-1946: update to Spring Boot 2.7.8

---------

Co-authored-by: Yakup Ensar Evli <54323073+ensarevlideveloper@users.noreply.github.com>
Co-authored-by: Mustapha Zorgati <15628173+mustaphazorgati@users.noreply.github.com>
Co-authored-by: Marcel Bagemihl <marcel.bagemihl@novatec-gmbh.de>
Co-authored-by: arolfes <arolfes@users.noreply.github.com>
This commit is contained in:
Norman Schmidt 2023-01-30 12:33:41 +01:00 committed by GitHub
parent 00be11caee
commit 48d85e0ee7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
118 changed files with 121149 additions and 11879 deletions

View File

@ -254,6 +254,7 @@ jobs:
- taskana-spi-routing-dmn-router
- taskana-routing-rest
- taskana-rest-spring
- taskana-rest-spring-test-lib
- taskana-rest-spring-example-common
- taskana-loghistory-provider
- taskana-simplehistory-provider

View File

@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-core" type="JUnit" factoryName="JUnit" folderName="lib" nameIsGenerated="true">
<configuration default="false" name="All in taskana-core H2" type="JUnit" factoryName="JUnit" folderName="lib">
<module name="taskana-core" />
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />

View File

@ -0,0 +1,21 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-core-test DB2" type="JUnit" factoryName="JUnit" folderName="lib">
<module name="taskana-core-test" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="pro.taskana.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<envs>
<env name="DB" value="DB2" />
</envs>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,18 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-core-test H2" type="JUnit" factoryName="JUnit" folderName="lib">
<module name="taskana-core-test" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="pro.taskana.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@ -0,0 +1,21 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-core-test POSTGRES" type="JUnit" factoryName="JUnit" folderName="lib">
<module name="taskana-core-test" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="pro.taskana.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<envs>
<env name="DB" value="POSTGRES" />
</envs>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>

View File

@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="All in taskana-simplehistory-provider" type="JUnit" factoryName="JUnit" folderName="history" nameIsGenerated="true">
<configuration default="false" name="All in taskana-simplehistory-provider H2" type="JUnit" factoryName="JUnit" folderName="history">
<module name="taskana-simplehistory-provider" />
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />

View File

@ -76,6 +76,11 @@
<artifactId>taskana-rest-spring</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-rest-spring-test-lib</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-routing-rest</artifactId>

View File

@ -11,7 +11,8 @@ import pro.taskana.common.internal.configuration.DbSchemaCreator;
class SampleDataGeneratorTest {
private static final String JDBC_URL =
"jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0;INIT=CREATE SCHEMA IF NOT EXISTS TASKANA";
"jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;"
+ "IGNORECASE=TRUE;LOCK_MODE=0;INIT=CREATE SCHEMA IF NOT EXISTS TASKANA";
@Test
void getScriptsValidSql() {

View File

@ -63,7 +63,7 @@ public final class DataSourceGenerator {
private static DataSource createDataSourceForH2() {
String jdbcDriver = "org.h2.Driver";
String jdbcUrl =
"jdbc:h2:mem:taskana;LOCK_MODE=0;"
"jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;LOCK_MODE=0;"
+ "INIT=CREATE SCHEMA IF NOT EXISTS TASKANA\\;"
+ "SET COLLATION DEFAULT_de_DE ";
String dbUserName = "sa";

View File

@ -60,7 +60,7 @@
<!-- test dependencies -->
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-common-test</artifactId>
<artifactId>taskana-rest-spring-test-lib</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>

View File

@ -1,79 +0,0 @@
package pro.taskana.simplehistory.rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
import pro.taskana.common.rest.SpringSecurityToJaasFilter;
@EnableWebSecurity
// this class is copied from taskana-rest-spring.
// We can't move it to taskana-common-test because we use the SpringSecurityToJaasFilter
// which is declared in taskana-rest-spring
public class HistoryWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
private final LdapAuthoritiesPopulator ldapAuthoritiesPopulator;
private final GrantedAuthoritiesMapper grantedAuthoritiesMapper;
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapUserDnPatterns;
@Autowired
public HistoryWebSecurityConfigurer(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
LdapAuthoritiesPopulator ldapAuthoritiesPopulator,
GrantedAuthoritiesMapper grantedAuthoritiesMapper) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.ldapAuthoritiesPopulator = ldapAuthoritiesPopulator;
this.grantedAuthoritiesMapper = grantedAuthoritiesMapper;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns(ldapUserDnPatterns)
.groupSearchBase(ldapGroupSearchBase)
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.authoritiesMapper(grantedAuthoritiesMapper)
.contextSource()
.url(ldapServerUrl + "/" + ldapBaseDn)
.and()
.passwordCompare()
.passwordAttribute("userPassword");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.csrf()
.disable()
.httpBasic()
.and()
.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new SpringSecurityToJaasFilter(), JaasApiIntegrationFilter.class)
.authorizeRequests()
.anyRequest()
.fullyAuthenticated();
}
private JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
}

View File

@ -3,7 +3,7 @@ package pro.taskana.simplehistory.rest;
import static java.lang.String.CASE_INSENSITIVE_ORDER;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
@ -25,8 +25,8 @@ import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.util.UriComponentsBuilder;
import pro.taskana.common.rest.models.PageMetadata;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.simplehistory.rest.models.TaskHistoryEventPagedRepresentationModel;
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;

View File

@ -5,7 +5,7 @@ import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuild
import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.test.BaseRestDocTest;
import pro.taskana.rest.test.BaseRestDocTest;
class TaskHistoryEventControllerRestDocTest extends BaseRestDocTest {

View File

@ -6,7 +6,7 @@ import java.time.Instant;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
import pro.taskana.spi.history.api.events.task.TaskHistoryCustomField;
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;

View File

@ -1,7 +1,11 @@
logging.level.pro.taskana=INFO
taskana.schemaName=TASKANA
spring.main.allow-bean-definition-overriding=true
######## Taskana DB #######
spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=sa
taskana.schemaName=TASKANA
####### Properties for AccessIdController to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin
@ -29,11 +33,10 @@ taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=memberUid
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn= OU=Test,O=TASKANA
spring.ldap.embedded.credential.username= uid=admin
spring.ldap.embedded.credential.password= secret
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin
spring.ldap.embedded.credential.password=secret
spring.ldap.embedded.ldif=classpath:taskana-test.ldif
spring.ldap.embedded.port= 10389
spring.ldap.embedded.port=10389
spring.ldap.embedded.validation.enabled=false

View File

@ -75,7 +75,8 @@ public class TaskanaProducersTest {
private Connection getConnection() throws Exception {
return DriverManager.getConnection(
"jdbc:h2:~/taskana-h2-data/testdb;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0",
"jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;"
+ "IGNORECASE=TRUE;LOCK_MODE=0",
"SA",
"SA");
}

View File

@ -5,7 +5,7 @@ swarm:
data-sources:
TestDS:
driver-name: myh2
connection-url: jdbc:h2:~/taskana-h2-data/testdb;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0
connection-url: jdbc:h2:~/taskana-h2-data/testdb;NON_KEYWORDS=KEY,VALUE;AUTO_SERVER=TRUE;IGNORECASE=TRUE;LOCK_MODE=0
user-name: SA
password: SA
jdbc-drivers:
@ -13,3 +13,4 @@ swarm:
driver-class-name: org.h2.Driver
xa-datasource-name: org.h2.jdbcx.JdbcDataSource
driver-module-name: com.h2database.h2

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -5832,15 +5832,15 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)\
5. Dependencies of Slice common.internal\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\
@ -5892,7 +5892,7 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -5905,27 +5905,27 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -5949,9 +5949,9 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\
@ -6279,15 +6279,15 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)\
6. Dependencies of Slice common.internal\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\
@ -6342,7 +6342,7 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -6355,27 +6355,27 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -6399,9 +6399,9 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\
@ -6742,15 +6742,15 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)\
4. Dependencies of Slice common.internal\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> calls constructor <pro.taskana.classification.internal.ClassificationServiceImpl.<init>(pro.taskana.common.internal.InternalTaskanaEngine, pro.taskana.spi.priority.internal.PriorityServiceManager, pro.taskana.classification.internal.ClassificationMapper, pro.taskana.task.internal.TaskMapper)> in (TaskanaEngineImpl.java:185)\
- Method <pro.taskana.common.internal.TaskanaEngineImpl.getClassificationService()> references class object <pro.taskana.classification.internal.ClassificationMapper> in (TaskanaEngineImpl.java:188)\
@ -6801,7 +6801,7 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -6814,27 +6814,27 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -6858,9 +6858,9 @@ Cycle detected: Slice classification.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\
@ -17582,15 +17582,15 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181)
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)
Cycle detected: Slice common.internal -> \
Slice task.internal -> \
Slice workbasket.internal -> \
@ -17644,7 +17644,7 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -17657,27 +17657,27 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -17701,9 +17701,9 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\
@ -17759,15 +17759,15 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.user.internal.UserServiceImpl.getUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:62)\
- Method <pro.taskana.user.internal.UserServiceImpl.getUsers(java.util.Set)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (UserServiceImpl.java:84)\
- Method <pro.taskana.user.internal.UserServiceImpl.createUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:95)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:111)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:116)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:112)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:117)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:120)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:134)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:138)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:157)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:173)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:181)
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:118)\
- Method <pro.taskana.user.internal.UserServiceImpl.updateUser(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:121)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:137)\
- Method <pro.taskana.user.internal.UserServiceImpl.deleteUser(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.lang.Runnable)> in (UserServiceImpl.java:141)\
- Method <pro.taskana.user.internal.UserServiceImpl.determineDomains(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (UserServiceImpl.java:160)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (UserServiceImpl.java:176)\
- Method <pro.taskana.user.internal.UserServiceImpl.insertIntoDatabase(pro.taskana.user.api.models.User)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (UserServiceImpl.java:184)
Cycle detected: Slice common.internal -> \
Slice workbasket.internal -> \
Slice common.internal\
@ -17809,7 +17809,7 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketAccessItemQueryImpl.java:163)\
- Method <pro.taskana.workbasket.internal.WorkbasketAccessItemQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketAccessItemQueryImpl.java:166)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:168)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:171)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.accessIdsHavePermissions(java.util.List, [Ljava.lang.String;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:172)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.createWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:176)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:185)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasket(pro.taskana.workbasket.api.models.Workbasket)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:190)\
@ -17822,27 +17822,27 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:324)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:327)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:351)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:358)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.executeInDatabaseConnection(java.util.function.Supplier)> in (WorkbasketQueryImpl.java:359)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.lambda$1()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:360)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.updateWorkbasketAccessItem(pro.taskana.workbasket.api.models.WorkbasketAccessItem)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:361)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:366)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:367)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:369)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:381)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:370)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.list(int, int)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:382)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:389)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:393)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:396)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:390)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:394)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.listValues(pro.taskana.workbasket.api.WorkbasketQueryColumnName, pro.taskana.common.api.BaseQuery$SortDirection)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:397)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.deleteWorkbasketAccessItem(java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:399)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:404)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:406)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:405)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:407)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:409)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:417)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:419)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.single()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:410)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketQueryImpl.java:418)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getSqlSession()> in (WorkbasketQueryImpl.java:420)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:421)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:422)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.count()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketQueryImpl.java:423)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:427)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:432)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.checkAuthorization(java.lang.String, java.lang.String, [Lpro.taskana.workbasket.api.WorkbasketPermission;)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:441)\
@ -17866,9 +17866,9 @@ Cycle detected: Slice common.internal -> \
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.getDistributionTargets(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:599)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:607)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.openConnection()> in (WorkbasketServiceImpl.java:609)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:620)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:624)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:634)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:621)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:625)\
- Method <pro.taskana.workbasket.internal.WorkbasketQueryImpl.handleCallerRolesAndAccessIds()> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketQueryImpl.java:635)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:648)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.setDistributionTargets(java.lang.String, java.util.List)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.returnConnection()> in (WorkbasketServiceImpl.java:654)\
- Method <pro.taskana.workbasket.internal.WorkbasketServiceImpl.addDistributionTarget(java.lang.String, java.lang.String)> calls method <pro.taskana.common.internal.InternalTaskanaEngine.getEngine()> in (WorkbasketServiceImpl.java:668)\

View File

@ -0,0 +1,24 @@
Method <acceptance.PojoTest.equalsContract()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:39)
Method <acceptance.PojoTest.testsThatPojoClassesAreFound()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:34)
Method <acceptance.PojoTest.validateGetAndSet()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:70)
Method <acceptance.PojoTest.validateGetters()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:49)
Method <acceptance.PojoTest.validateNoPublicFields()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:90)
Method <acceptance.PojoTest.validateNoStaticExceptFinalFields()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:80)
Method <acceptance.PojoTest.validateSetters()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (PojoTest.java:59)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithExplicitId()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:250)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithInvalidCategory()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:211)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithInvalidParentId()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:238)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithInvalidParentKey()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:226)
Method <acceptance.classification.create.CreateClassificationAccTest.should_ThrowException_TryingToCreateClassificationWithInvalidType()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateClassificationAccTest.java:197)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest$WithSpi.should_executeBatch()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:145)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest.should_loadAnyRelevantTaskIds()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:87)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest.should_loadExistingTaskIds()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:97)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest.should_notLoadAnyIrrelevantTaskIds()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:108)
Method <acceptance.jobs.helper.TaskUpdatePriorityWorkerAccTest.should_noticeDifferentPriority_When_PriorityHasChanged()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (TaskUpdatePriorityWorkerAccTest.java:117)
Method <acceptance.task.create.CreateTaskWithSorAccTest.should_copyObjectReferences_When_DuplicatingTask()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateTaskWithSorAccTest.java:136)
Method <acceptance.task.create.CreateTaskWithSorAccTest.should_createObjectReferences_When_CreatingTask()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateTaskWithSorAccTest.java:68)
Method <acceptance.task.update.UpdateManualPriorityAccTest.should_setPriorityAccordingToClassification_When_NegativeManualPriority()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (UpdateManualPriorityAccTest.java:77)
Method <acceptance.task.update.UpdateManualPriorityAccTest.should_setPriorityToManualPriority_When_PositiveManualPriority()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (UpdateManualPriorityAccTest.java:65)
Method <acceptance.task.update.UpdateManualPriorityWithSpiAccTest$UpdateManualPriorityTest.should_setPriorityToManualAndNotUpdateAccordingToSpi_When_ManualPriorityPositive()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (UpdateManualPriorityWithSpiAccTest.java:87)
Method <acceptance.task.update.UpdateManualPriorityWithSpiAccTest$UpdateManualPriorityTest.should_setPriorityUsingSpi_When_ManualPriorityNegative()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (UpdateManualPriorityWithSpiAccTest.java:101)
Method <acceptance.taskpreprocessing.CreateTaskPreprocessingAccTest.should_processTaskBeforeCreation_When_CreateTaskPreprocessorEnabled()> does not have name matching '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$' in (CreateTaskPreprocessingAccTest.java:61)

View File

@ -1,6 +1,6 @@
#
#Tue Oct 25 17:18:51 CEST 2022
slices\ matching\ 'pro.taskana.(**)'\ should\ be\ free\ of\ cycles=9652a208-0dfc-428f-9436-b7d5b718e2c1
methods\ that\ are\ annotated\ with\ @Test\ or\ annotated\ with\ @TestFactory\ or\ annotated\ with\ @TestTemplate\ and\ are\ not\ declared\ in\ acceptance.ArchitectureTest\ should\ be\ package\ private\ and\ should\ have\ name\ matching\ '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$'=974cd44c-bceb-4997-a1c3-18cb011ca438
slices\ assigned\ from\ every\ single\ class\ should\ be\ free\ of\ cycles=a54262d1-6fd5-453c-bef4-7481fef02511
no\ classes\ should\ use\ field\ injection,\ because\ field\ injection\ is\ considered\ harmful;\ use\ constructor\ injection\ or\ setter\ injection\ instead;\ see\ https\://stackoverflow.com/q/39890849\ for\ detailed\ explanations=e480c7e3-4001-4306-9859-39636786785d
#Sat Jan 28 10:53:15 CET 2023
slices\ matching\ 'pro.taskana.(**)'\ should\ be\ free\ of\ cycles=9e212b8e-ebae-4b84-83eb-0b18b9f8a8f3
methods\ that\ are\ annotated\ with\ @Test\ or\ annotated\ with\ @TestFactory\ or\ annotated\ with\ @TestTemplate\ and\ are\ not\ declared\ in\ acceptance.ArchitectureTest\ should\ be\ package\ private\ and\ should\ have\ name\ matching\ '^should_[A-Z][^_]+(_(For|When)_[A-Z][^_]+)?$'=74deb6a1-c507-47a1-b135-9308e42f4e71
slices\ assigned\ from\ every\ single\ class\ should\ be\ free\ of\ cycles=978ec381-cf0f-43f8-81ae-72f353d6ada3
no\ classes\ should\ use\ field\ injection,\ because\ field\ injection\ is\ considered\ harmful;\ use\ constructor\ injection\ or\ setter\ injection\ instead;\ see\ https\://stackoverflow.com/q/39890849\ for\ detailed\ explanations=382817ff-573d-4d20-9597-c425d2698970

View File

@ -226,7 +226,8 @@ public class TaskanaEngineConfiguration {
public static DataSource createDefaultDataSource() {
String driverClass = "org.h2.Driver";
String jdbcUrl =
"jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0;"
"jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;"
+ "IGNORECASE=TRUE;LOCK_MODE=0;"
+ "INIT=CREATE SCHEMA IF NOT EXISTS TASKANA\\;"
+ "SET COLLATION DEFAULT_de_DE";
String username = "sa";

View File

@ -30,9 +30,6 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
"pro.taskana.workbasket.internal.WorkbasketQueryMapper.countQueryWorkbaskets";
private static final String LINK_TO_VALUEMAPPER =
"pro.taskana.workbasket.internal.WorkbasketQueryMapper.queryWorkbasketColumnValues";
private final InternalTaskanaEngine taskanaEngine;
private final List<String> orderBy;
private final List<String> orderColumns;
private WorkbasketQueryColumnName columnName;
private String[] accessIds;
private String[] idIn;
@ -66,7 +63,11 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
private String[] orgLevel3Like;
private String[] orgLevel4In;
private String[] orgLevel4Like;
private boolean markedForDeletion;
private Boolean markedForDeletion;
private InternalTaskanaEngine taskanaEngine;
private List<String> orderBy;
private List<String> orderColumns;
private boolean joinWithAccessList;
private boolean checkReadPermission;
private boolean usedToAugmentTasks;
@ -543,7 +544,7 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
return orgLevel4Like;
}
public boolean isMarkedForDeletion() {
public Boolean isMarkedForDeletion() {
return markedForDeletion;
}

View File

@ -7,8 +7,8 @@ spring.h2.console.enabled=true
security.basic.enabled=false
######## customdb / Taskana DB #######
customdb.datasource.url=jdbc:h2:mem:testdb;IGNORECASE=TRUE;LOCK_MODE=0
#customdb.datasource.url=jdbc:h2:mem:testdb;TRACE_LEVEL_FIle=4
customdb.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
#customdb.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=KEY,VALUE;TRACE_LEVEL_FIle=4
customdb.datasource.schema=classpath:schema.sql
customdb.datasource.driverClassName=org.h2.Driver
customdb.datasource.hibernate.dialect=org.hibernate.dialect.H2

View File

@ -16,7 +16,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
@ -86,6 +86,8 @@ class TransactionTest {
private Connection getConnection() throws Exception {
return DriverManager.getConnection(
"jdbc:h2:mem:task-engine;IGNORECASE=TRUE;LOCK_MODE=0", "SA", UUID.randomUUID().toString());
"jdbc:h2:mem:task-engine;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0",
"SA",
UUID.randomUUID().toString());
}
}

View File

@ -11,7 +11,7 @@
<bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.h2.Driver" />
<property name="url"
value="jdbc:h2:mem:task-engine;DB_CLOSE_DELAY=1000;IGNORECASE=TRUE;LOCK_MODE=0" />
value="jdbc:h2:mem:task-engine;NON_KEYWORDS=KEY,VALUE;DB_CLOSE_DELAY=1000;IGNORECASE=TRUE;LOCK_MODE=0" />
<property name="username" value="SA" />
<property name="password" value="SA" />
</bean>

View File

@ -92,7 +92,11 @@ public class TestContainerExtension implements InvocationInterceptor {
new PooledDataSource(
Thread.currentThread().getContextClassLoader(),
"org.h2.Driver",
"jdbc:h2:mem:taskana;LOCK_MODE=0;INIT=SET COLLATION DEFAULT_de_DE",
"jdbc:h2:mem:"
+ "taskana"
+ ";NON_KEYWORDS=KEY,VALUE;LOCK_MODE=0;"
+ "INIT=CREATE SCHEMA IF NOT EXISTS TASKANA\\;"
+ "SET COLLATION DEFAULT_de_DE ",
"sa",
"sa");
ds.setPoolTimeToWait(50);

View File

@ -65,8 +65,8 @@
<!-- spring dependencies -->
<version.javax.annotation-api>1.3.2</version.javax.annotation-api>
<version.spring.core>2.0.0.RELEASE</version.spring.core>
<version.spring.boot>2.6.6</version.spring.boot>
<version.spring.mybatis>2.0.7</version.spring.mybatis>
<version.spring.boot>2.7.8</version.spring.boot>
<version.spring.mybatis>2.1.0</version.spring.mybatis>
<!-- wildfly dependencies -->
<version.wildfly>15.0.1.Final</version.wildfly>

View File

@ -22,6 +22,7 @@
<module>taskana-rest-spring-example-common</module>
<module>taskana-rest-spring-example-boot</module>
<module>taskana-rest-spring-example-wildfly</module>
<module>taskana-rest-spring-test-lib</module>
</modules>
</project>

View File

@ -1,13 +1,25 @@
package pro.taskana.example.boot.security;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.ldap.core.support.BaseLdapPathContextSource;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.ldap.LdapPasswordComparisonAuthenticationManagerFactory;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@ -15,16 +27,14 @@ import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import pro.taskana.common.rest.SpringSecurityToJaasFilter;
/** Default basic configuration for taskana web example. */
@EnableWebSecurity
public class BootWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
private final LdapAuthoritiesPopulator ldapAuthoritiesPopulator;
private final GrantedAuthoritiesMapper grantedAuthoritiesMapper;
@Configuration
public class BootWebSecurityConfigurer {
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapUserDnPatterns;
private final String ldapGroupSearchBase;
private final String ldapGroupSearchFilter;
private final boolean devMode;
private final boolean enableCsrf;
@ -32,38 +42,22 @@ public class BootWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
public BootWebSecurityConfigurer(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.groupSearchFilter:uniqueMember={0}}") String ldapGroupSearchFilter,
@Value("${enableCsrf:false}") boolean enableCsrf,
LdapAuthoritiesPopulator ldapAuthoritiesPopulator,
GrantedAuthoritiesMapper grantedAuthoritiesMapper,
@Value("${devMode:false}") boolean devMode) {
this.enableCsrf = enableCsrf;
this.ldapAuthoritiesPopulator = ldapAuthoritiesPopulator;
this.grantedAuthoritiesMapper = grantedAuthoritiesMapper;
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapGroupSearchFilter = ldapGroupSearchFilter;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.devMode = devMode;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns(ldapUserDnPatterns)
.groupSearchBase(ldapGroupSearchBase)
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.authoritiesMapper(grantedAuthoritiesMapper)
.contextSource()
.url(ldapServerUrl + "/" + ldapBaseDn)
.and()
.passwordCompare()
.passwordAttribute("userPassword");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
HttpSecurity httpSecurity =
http.authorizeRequests()
.antMatchers("/css/**", "/img/**")
@ -95,6 +89,7 @@ public class BootWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
} else {
addLoginPageConfiguration(http);
}
return http.build();
}
protected void addLoginPageConfiguration(HttpSecurity http) throws Exception {
@ -117,9 +112,50 @@ public class BootWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
.permitAll();
}
@Bean
public LdapAuthoritiesPopulator authoritiesPopulator(
DefaultSpringSecurityContextSource contextSource) {
Function<Map<String, List<String>>, GrantedAuthority> authorityMapper =
recordVar -> new SimpleGrantedAuthority(recordVar.get("spring.security.ldap.dn").get(0));
DefaultLdapAuthoritiesPopulator populator =
new DefaultLdapAuthoritiesPopulator(contextSource, ldapGroupSearchBase);
populator.setGroupSearchFilter(ldapGroupSearchFilter);
populator.setSearchSubtree(true);
populator.setRolePrefix("");
populator.setAuthorityMapper(authorityMapper);
return populator;
}
@Bean
public DefaultSpringSecurityContextSource defaultSpringSecurityContextSource() {
return new DefaultSpringSecurityContextSource(ldapServerUrl + "/" + ldapBaseDn);
}
@Bean
public GrantedAuthoritiesMapper grantedAuthoritiesMapper() {
SimpleAuthorityMapper grantedAuthoritiesMapper = new SimpleAuthorityMapper();
grantedAuthoritiesMapper.setPrefix("");
return grantedAuthoritiesMapper;
}
protected JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
@Bean
AuthenticationManager ldapAuthenticationManager(
BaseLdapPathContextSource contextSource, LdapAuthoritiesPopulator authorities) {
@SuppressWarnings("deprecation")
LdapPasswordComparisonAuthenticationManagerFactory factory =
new LdapPasswordComparisonAuthenticationManagerFactory(
contextSource, NoOpPasswordEncoder.getInstance());
factory.setUserDnPatterns(ldapUserDnPatterns);
factory.setLdapAuthoritiesPopulator(authorities);
factory.setAuthoritiesMapper(grantedAuthoritiesMapper());
factory.setPasswordAttribute("userPassword");
return factory.createAuthenticationManager();
}
}

View File

@ -5,7 +5,7 @@ server.servlet.context-path=/taskana
######## Taskana DB #######
######## h2 configuration ########
########spring.datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0
########spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
########spring.datasource.driverClassName=org.h2.Driver
########spring.datasource.username=sa
########spring.datasource.password=sa

View File

@ -3,7 +3,7 @@ server.servlet.context-path=/taskana
### logging.level.org.springframework=DEBUG
######## Taskana DB #######
######## h2 configuration ########
########spring.datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0
########spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
########spring.datasource.driverClassName=org.h2.Driver
########spring.datasource.username=sa
########spring.datasource.password=sa

View File

@ -1,28 +1,22 @@
logging.level.pro.taskana=INFO
logging.level.org.springframework.security=INFO
server.servlet.context-path=/taskana
taskana.routing.dmn.upload.path=/tmp/routing.dmn
######## Taskana DB #######
######## h2 configuration ########
spring.datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_MODE=0
spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_MODE=0
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=sa
taskana.schemaName=TASKANA
######## h2 console configuration ########
########spring.h2.console.enabled=true
########spring.h2.console.path=/h2-console
######## db2 configuration ########
########spring.datasource.driverClassName=com.ibm.db2.jcc.DB2Driver
########spring.datasource.url=jdbc:db2://localhost:5101/tskdb
########spring.datasource.username=db2inst1
########spring.datasource.password=db2inst1-pwd
######## Postgres configuration ########
########spring.datasource.url=jdbc:postgresql://localhost:5102/taskana
########spring.datasource.driverClassName=org.postgresql.Driver
@ -32,13 +26,10 @@ taskana.schemaName=TASKANA
########spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
####### property that control rest api security deploy use true for no security.
devMode=false
# This property enables the support of XSRF tokens. This will not work together with devMode.
enableCsrf=true
####### property that control if the database is cleaned and sample data is generated
generateSampleData=true
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 * * * * *
####### cache static resources properties
@ -46,21 +37,17 @@ spring.web.resources.cache.cachecontrol.cache-private=true
####### for upload of big workbasket- or classification-files
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
####### serve compressed files for faster UI loading times
server.compression.enabled=true
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css,image/svg+xml
server.compression.min-response-size=10240
spring.main.allow-bean-definition-overriding=true
server.tomcat.max-http-form-post-size=-1
server.tomcat.max-save-post-size=-1
server.tomcat.max-swallow-size=-1
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native
####### Properties for AccessIdController to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin
@ -88,11 +75,10 @@ taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn= OU=Test,O=TASKANA
spring.ldap.embedded.credential.username= uid=admin
spring.ldap.embedded.credential.password= secret
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin
spring.ldap.embedded.credential.password=secret
spring.ldap.embedded.ldif=classpath:taskana-example.ldif
spring.ldap.embedded.port= 10389
spring.ldap.embedded.port=10389
spring.ldap.embedded.validation.enabled=false

View File

@ -80,7 +80,7 @@
<!-- test dependencies -->
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-common-test</artifactId>
<artifactId>taskana-rest-spring-test-lib</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>

View File

@ -1,20 +1,8 @@
package pro.taskana.example.rest;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@ -24,23 +12,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class ExampleWebSecurityConfig {
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapGroupSearchFilter;
@Autowired
public ExampleWebSecurityConfig(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.groupSearchFilter:uniqueMember={0}}") String ldapGroupSearchFilter) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapGroupSearchFilter = ldapGroupSearchFilter;
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new CorsWebMvcConfigurer();
@ -51,7 +22,7 @@ public class ExampleWebSecurityConfig {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOriginPattern("*");
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
@ -60,33 +31,6 @@ public class ExampleWebSecurityConfig {
return bean;
}
@Bean
public LdapAuthoritiesPopulator authoritiesPopulator(
DefaultSpringSecurityContextSource contextSource) {
Function<Map<String, List<String>>, GrantedAuthority> authorityMapper =
recordVar -> new SimpleGrantedAuthority(recordVar.get("spring.security.ldap.dn").get(0));
DefaultLdapAuthoritiesPopulator populator =
new DefaultLdapAuthoritiesPopulator(contextSource, ldapGroupSearchBase);
populator.setGroupSearchFilter(ldapGroupSearchFilter);
populator.setSearchSubtree(true);
populator.setRolePrefix("");
populator.setAuthorityMapper(authorityMapper);
return populator;
}
@Bean
public DefaultSpringSecurityContextSource defaultSpringSecurityContextSource() {
return new DefaultSpringSecurityContextSource(ldapServerUrl + "/" + ldapBaseDn);
}
@Bean
public GrantedAuthoritiesMapper grantedAuthoritiesMapper() {
SimpleAuthorityMapper grantedAuthoritiesMapper = new SimpleAuthorityMapper();
grantedAuthoritiesMapper.setPrefix("");
return grantedAuthoritiesMapper;
}
private static class CorsWebMvcConfigurer implements WebMvcConfigurer {
@Override

View File

@ -1,76 +0,0 @@
package pro.taskana.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
import pro.taskana.common.rest.SpringSecurityToJaasFilter;
@EnableWebSecurity
public class CommonWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
private final LdapAuthoritiesPopulator ldapAuthoritiesPopulator;
private final GrantedAuthoritiesMapper grantedAuthoritiesMapper;
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapUserDnPatterns;
@Autowired
public CommonWebSecurityConfigurer(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
LdapAuthoritiesPopulator ldapAuthoritiesPopulator,
GrantedAuthoritiesMapper grantedAuthoritiesMapper) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.ldapAuthoritiesPopulator = ldapAuthoritiesPopulator;
this.grantedAuthoritiesMapper = grantedAuthoritiesMapper;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns(ldapUserDnPatterns)
.groupSearchBase(ldapGroupSearchBase)
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.authoritiesMapper(grantedAuthoritiesMapper)
.contextSource()
.url(ldapServerUrl + "/" + ldapBaseDn)
.and()
.passwordCompare()
.passwordAttribute("userPassword");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.csrf()
.disable()
.httpBasic()
.and()
.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new SpringSecurityToJaasFilter(), JaasApiIntegrationFilter.class)
.authorizeRequests()
.anyRequest()
.fullyAuthenticated();
}
private JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
}

View File

@ -1,7 +1,7 @@
package pro.taskana.example.jobs;
import static org.assertj.core.api.Assertions.assertThat;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.time.Instant;
import java.util.List;
@ -18,8 +18,8 @@ import pro.taskana.classification.rest.assembler.ClassificationRepresentationMod
import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.models.Task;
import pro.taskana.task.rest.assembler.TaskRepresentationModelAssembler;
import pro.taskana.task.rest.models.TaskRepresentationModel;

View File

@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.test.context.ActiveProfiles;
import pro.taskana.common.rest.models.AccessIdRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test Ldap attachment. */
@TaskanaSpringBootTest

View File

@ -11,7 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.rest.ldap.LdapClient;
import pro.taskana.common.rest.models.AccessIdRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.user.api.models.User;
/** Test Ldap attachment. */

View File

@ -1,54 +1,2 @@
logging.level.pro.taskana=INFO
logging.level.org.springframework.security=INFO
logging.level.org.springframework.ldap=INFO
### logging.level.org.springframework=DEBUG
######## Taskana DB #######
datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0
datasource.driverClassName=org.h2.Driver
datasource.username=sa
datasource.password=sa
taskana.schemaName=TASKANA
####### property that control rest api security deploy use true for no security.
devMode=false
####### Properties for AccessIdController to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:11389
taskana.ldap.bindDn=uid=admin
taskana.ldap.bindPassword=secret
taskana.ldap.baseDn=ou=Test,O=TASKANA
taskana.ldap.userSearchBase=
taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userFullnameAttribute=cn
taskana.ldap.userPhoneAttribute=phoneNumber
taskana.ldap.userMobilePhoneAttribute=mobileNumber
taskana.ldap.userEmailAttribute=email
taskana.ldap.userOrglevel1Attribute=orgLevel1
taskana.ldap.userOrglevel2Attribute=orgLevel2
taskana.ldap.userOrglevel3Attribute=someDepartement
taskana.ldap.userOrglevel4Attribute=orgLevel4
taskana.ldap.userIdAttribute=uid
taskana.ldap.userMemberOfGroupAttribute=memberOf
taskana.ldap.groupSearchBase=
taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin
spring.ldap.embedded.credential.password=secret
spring.ldap.embedded.ldif=classpath:taskana-test.ldif
spring.ldap.embedded.port=11389
spring.ldap.embedded.validation.enabled=false
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 0 * * * *
####### cache static resources properties
spring.web.resources.cache.cachecontrol.cache-private=true
spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native

View File

@ -3,10 +3,10 @@ logging.level.org.springframework.security=INFO
logging.level.org.springframework.ldap=INFO
### logging.level.org.springframework=DEBUG
######## Taskana DB #######
datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0
datasource.driverClassName=org.h2.Driver
datasource.username=sa
datasource.password=sa
spring.datasource.url=jdbc:h2:mem:taskana;NON_KEYWORDS=KEY,VALUE;IGNORECASE=TRUE;LOCK_MODE=0
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=sa
taskana.schemaName=TASKANA
####### property that control rest api security deploy use true for no security.
devMode=false

View File

@ -69,12 +69,6 @@
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.security</groupId>
@ -98,8 +92,8 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
<dependency>
@ -159,23 +153,6 @@
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>${version.maven.clean}</version>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>target</directory>
<excludes>
<exclude>wildfly-${version.wildfly}</exclude>
<exclude>wildfly-${version.wildfly}/**</exclude>
</excludes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
@ -212,7 +189,7 @@
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<outputDirectory>
${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/org/postgresql/main
${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/org/postgresql/postgresql/main
</outputDirectory>
</artifactItem>
</artifactItems>
@ -220,45 +197,20 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${version.maven.surefire}</version>
<executions>
<execution>
<id>default-test</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
<execution>
<id>integration-tests</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${version.maven.resources}</version>
<executions>
<execution>
<id>copy-module-xml</id>
<id>copy-postgres-module-xml</id>
<phase>process-test-classes</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/org/postgresql/main
${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/org/postgresql/postgresql/main
</outputDirectory>
<resources>
<resource>

View File

@ -8,12 +8,9 @@ import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
@ -29,18 +26,6 @@ public class TaskanaWildflyConfiguration {
return new DataSourceTransactionManager(dataSource);
}
@Bean
@Primary
@ConfigurationProperties(prefix = "datasource")
public DataSourceProperties dataSourceProperties(
@Value("${taskana.schemaName:TASKANA}") String schemaName) {
DataSourceProperties props = new DataSourceProperties();
props.setUrl(
"jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0;INIT=CREATE SCHEMA IF NOT EXISTS "
+ schemaName);
return props;
}
@Bean
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
public SampleDataGenerator generateSampleData(
@ -55,7 +40,7 @@ public class TaskanaWildflyConfiguration {
}
@Bean
public DataSource dataSource(DataSourceProperties dsProperties) {
public DataSource dataSource() throws Exception {
// First try to load Properties and get Datasource via jndi lookup
Context ctx;
DataSource dataSource;
@ -74,7 +59,7 @@ public class TaskanaWildflyConfiguration {
"Caught exception when attempting to start Taskana with Datasource "
+ "from Jndi. Using default H2 datasource. ",
e);
return dsProperties.initializeDataSourceBuilder().build();
throw e;
}
}
}

View File

@ -1,23 +1,25 @@
package pro.taskana.example.wildfly.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
/**
* Default basic configuration for taskana web example running on Wildfly / JBoss with Elytron or
* JAAS Security.
*/
@EnableWebSecurity
public class WildflyWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Configuration
public class WildflyWebSecurityConfigurer {
@Override
protected void configure(HttpSecurity http) throws Exception {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new ElytronToJaasFilter(), JaasApiIntegrationFilter.class)
.csrf()
.disable();
return http.build();
}
protected JaasApiIntegrationFilter jaasApiIntegrationFilter() {

View File

@ -1,6 +1,11 @@
package pro.taskana.common.test.rest;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -17,9 +22,22 @@ import pro.taskana.sampledata.SampleDataGenerator;
@DependsOn("getTaskanaEngine") // wait for schema to be created BEFORE inserting test data
public class TestConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(TestConfiguration.class);
@Autowired
public TestConfiguration(
@Value("${taskana.schemaName:TASKANA}") String schemaName, DataSource dataSource) {
if (LOGGER.isDebugEnabled()) {
try (Connection connection = dataSource.getConnection()) {
DatabaseMetaData metaData = connection.getMetaData();
LOGGER.debug(
"Using database of type {} with url '{}'",
metaData.getDatabaseProductName(),
metaData.getURL());
} catch (SQLException e) {
LOGGER.error(e.getMessage(), e);
}
}
new SampleDataGenerator(dataSource, schemaName).generateSampleData();
}

View File

@ -3,6 +3,8 @@ package pro.taskana.example.wildfly;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
@ -23,6 +25,8 @@ public class AbstractAccTest {
protected static final String DEPENDENCY_VERSION = "5.9.1-SNAPSHOT";
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractAccTest.class);
static {
Runtime.getRuntime().addShutdownHook(new Thread(AbstractAccTest::stopPostgresDb));
@ -98,6 +102,7 @@ public class AbstractAccTest {
"sh", "-c", "docker-compose -f ../../docker-databases/docker-compose.yml down -v");
}
Process process = builder.start();
LOGGER.info("Stopping POSTGRES...");
int exitCode = process.waitFor();
if (exitCode != 0) {
throw new RuntimeException("could not start postgres db!");
@ -115,16 +120,17 @@ public class AbstractAccTest {
builder.command(
"cmd.exe",
"/c",
"docker-compose -f ../../docker-databases/docker-compose.yml up -d",
"taskana-postgres_10");
"docker-compose -f ../../docker-databases/docker-compose.yml up -d "
+ "taskana-postgres_10");
} else {
builder.command(
"sh",
"-c",
"docker-compose -f ../../docker-databases/docker-compose.yml up -d",
"taskana-postgres_10");
"docker-compose -f ../../docker-databases/docker-compose.yml up -d "
+ "taskana-postgres_10");
}
Process process = builder.start();
LOGGER.info("Starting POSTGRES...");
int exitCode = process.waitFor();
if (exitCode != 0) {
throw new RuntimeException("could not start postgres db!");

View File

@ -1,51 +0,0 @@
######## Taskana DB #######
datasource.jndi=java:/TaskanaDS/H2
taskana.schemaName=TASKANA
devMode=true
####### properties to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin
taskana.ldap.bindPassword=secret
taskana.ldap.baseDn=ou=Test,O=TASKANA
taskana.ldap.userSearchBase=cn=users
taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userFullnameAttribute=cn
taskana.ldap.userPhoneAttribute=phoneNumber
taskana.ldap.userMobilePhoneAttribute=mobileNumber
taskana.ldap.userEmailAttribute=email
taskana.ldap.userOrglevel1Attribute=orgLevel1
taskana.ldap.userOrglevel2Attribute=orgLevel2
taskana.ldap.userOrglevel3Attribute=someDepartement
taskana.ldap.userOrglevel4Attribute=orgLevel4
taskana.ldap.userIdAttribute=uid
taskana.ldap.userMemberOfGroupAttribute=memberOf
taskana.ldap.groupSearchBase=
taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 * * * * *
####### cache static resources propertiesgit add --
spring.resources.cache.cachecontrol.cache-private=true
spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin
spring.ldap.embedded.credential.password=secret
spring.ldap.embedded.ldif=classpath:taskana-test.ldif
spring.ldap.embedded.port=10389
spring.ldap.embedded.validation.enabled=false

View File

@ -1,52 +0,0 @@
######## Taskana DB #######
datasource.jndi=java:/TaskanaDS/PostgreSQL
taskana.schemaName=taskana
devMode=true
####### properties to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin
taskana.ldap.bindPassword=secret
taskana.ldap.baseDn=ou=Test,O=TASKANA
taskana.ldap.userSearchBase=cn=users
taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userFullnameAttribute=cn
taskana.ldap.userPhoneAttribute=phoneNumber
taskana.ldap.userMobilePhoneAttribute=mobileNumber
taskana.ldap.userEmailAttribute=email
taskana.ldap.userOrglevel1Attribute=orgLevel1
taskana.ldap.userOrglevel2Attribute=orgLevel2
taskana.ldap.userOrglevel3Attribute=someDepartement
taskana.ldap.userOrglevel4Attribute=orgLevel4
taskana.ldap.userIdAttribute=uid
taskana.ldap.userMemberOfGroupAttribute=memberOf
taskana.ldap.groupSearchBase=
taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 * * * * *
####### cache static resources propertiesgit add --
spring.resources.cache.cachecontrol.cache-private=true
spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn= OU=Test,O=TASKANA
spring.ldap.embedded.credential.username= uid=admin
spring.ldap.embedded.credential.password= secret
spring.ldap.embedded.ldif=classpath:taskana-test.ldif
spring.ldap.embedded.port= 10389
spring.ldap.embedded.validation.enabled=false

View File

@ -1,9 +1,6 @@
######## Taskana DB #######
datasource.jndi=java:/TaskanaDS/PostgreSQL
datasource.jndi=java:jboss/datasources/TaskanaDS
taskana.schemaName=taskana
devMode=true
####### properties to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin
@ -31,18 +28,14 @@ taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=uniquemember
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 * * * * *
####### cache static resources propertiesgit add --
spring.resources.cache.cachecontrol.cache-private=true
spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.remoteip.internal-proxies=.*
server.forward-headers-strategy=native
# Embedded Spring LDAP server
spring.ldap.embedded.base-dn=OU=Test,O=TASKANA
spring.ldap.embedded.credential.username=uid=admin

View File

@ -2,16 +2,19 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/schema/arquillian
http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<defaultProtocol type="Servlet 3.0"/>
<container qualifier="jboss" default="true">
<configuration>
<property name="jbossHome">target/wildfly-15.0.1.Final</property>
<property
name="serverConfig">../../../../src/test/resources/int-test-standalone.xml</property>
<!-- <property name="javaVmArguments">-Xmx512m -XX:MaxPermSize=128m
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
</property> -->
<property name="javaVmArguments">-Djava.util.logging.manager=org.jboss.logmanager.LogManager</property>
</configuration>
</container>
<defaultProtocol type="Servlet 3.0"/>
<container qualifier="jboss" default="true">
<configuration>
<property name="jbossHome">target/wildfly-15.0.1.Final</property>
<property
name="serverConfig">../../../../src/test/resources/int-test-standalone.xml
</property>
<!-- <property name="javaVmArguments">-->
<!-- -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y-->
<!-- -Djava.util.logging.manager=org.jboss.logmanager.LogManager-->
<!-- </property>-->
<property name="javaVmArguments">-Djava.util.logging.manager=org.jboss.logmanager.LogManager
</property>
</configuration>
</container>
</arquillian>

View File

@ -1,14 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.1" name="org.postgresql">
<module xmlns="urn:jboss:module:1.1" name="org.postgresql.postgresql">
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
<resources>
<!--the name of your driver -->
<resource-root path="postgresql-42.3.3.jar"/>
</resources>
<resources>
<resource-root path="postgresql-42.3.8.jar"/>
</resources>
</module>

View File

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>taskana-rest-spring-test-lib</artifactId>
<name>${project.groupId}:${project.artifactId}</name>
<description>Test utils for TASKANA rest logic (based on spring).</description>
<parent>
<groupId>pro.taskana</groupId>
<artifactId>taskana-rest-parent</artifactId>
<version>5.9.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<properties>
<sonar.tests/>
</properties>
<dependencies>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-common-logging</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-common-data</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${version.javax.servlet}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
</dependency>
<dependency>
<groupId>capital.scalable</groupId>
<artifactId>spring-auto-restdocs-core</artifactId>
<version>${version.auto-restdocs}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test;
package pro.taskana.rest.test;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
@ -30,9 +30,6 @@ import org.springframework.test.web.servlet.setup.MockMvcConfigurerAdapter;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
@TaskanaSpringBootTest
@ExtendWith(RestDocumentationExtension.class)
public class BaseRestDocTest {

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test.rest;
package pro.taskana.rest.test;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

View File

@ -0,0 +1,114 @@
package pro.taskana.rest.test;
import java.io.IOException;
import java.security.AccessController;
import java.util.Optional;
import javax.security.auth.Subject;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.filter.GenericFilterBean;
import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.common.api.security.GroupPrincipal;
import pro.taskana.common.api.security.UserPrincipal;
// Duplicate of pro.taskana.common.rest.SpringSecurityToJaasFilter
/** Simple Filter to map all Spring Security Roles to JAAS-Principals. */
public class SpringSecurityToJaasFilter extends GenericFilterBean {
private static final Logger LOGGER = LoggerFactory.getLogger(SpringSecurityToJaasFilter.class);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
Optional<Authentication> authentication = getCurrentAuthentication();
if (authentication.isPresent()) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Authentication found in Spring security context: {}", authentication);
}
obtainSubject()
.ifPresent(
subject -> {
initializeUserPrincipalFromAuthentication(authentication.get(), subject);
initializeGroupPrincipalsFromAuthentication(authentication.get(), subject);
});
} else {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"No authentication found in Spring security context. Continuing unauthenticatic.");
}
}
chain.doFilter(request, response);
}
/**
* Obtains the <code>Subject</code> to run as or <code>null</code> if no <code>Subject</code> is
* available.
*
* <p>The default implementation attempts to obtain the <code>Subject</code> from the <code>
* SecurityContext</code>'s <code>Authentication</code>. If it is of type <code>
* JaasAuthenticationToken</code> and is authenticated, the <code>Subject</code> is returned from
* it.
*
* @return the Subject to run.
*/
protected Optional<Subject> obtainSubject() {
Optional<Authentication> authentication = getCurrentAuthentication();
if (logger.isDebugEnabled()) {
logger.debug("Attempting to obtainSubject using authentication : " + authentication);
}
if (!authentication.isPresent() || !authentication.get().isAuthenticated()) {
return Optional.empty();
}
return Optional.of(Subject.getSubject(AccessController.getContext()));
}
Optional<Authentication> getCurrentAuthentication() {
return Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication());
}
private void initializeUserPrincipalFromAuthentication(
Authentication authentication, Subject subject) {
if (subject.getPrincipals().isEmpty()) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"Setting the principal of the subject with {}.", authentication.getPrincipal());
}
subject
.getPrincipals()
.add(new UserPrincipal(((UserDetails) authentication.getPrincipal()).getUsername()));
} else {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Principal of the subject is already set to {}.", subject.getPrincipals());
}
throw new SystemException("Finding an existing principal is unexpected. Please investigate.");
}
}
private void initializeGroupPrincipalsFromAuthentication(
Authentication authentication, Subject subject) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Adding roles {} to subject.", authentication.getAuthorities());
}
authentication
.getAuthorities()
.forEach(
grantedAuthority ->
subject.getPrincipals().add(new GroupPrincipal(grantedAuthority.getAuthority())));
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("{}", subject.getPublicCredentials(GroupPrincipal.class));
}
}
}

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test.rest;
package pro.taskana.rest.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test.rest;
package pro.taskana.rest.test;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;

View File

@ -1,4 +1,4 @@
package pro.taskana.common.test.rest;
package pro.taskana.rest.test;
import java.util.List;
import java.util.Map;
@ -8,13 +8,21 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.ldap.core.support.BaseLdapPathContextSource;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.ldap.LdapPasswordComparisonAuthenticationManagerFactory;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@ -27,6 +35,7 @@ public class TestWebSecurityConfig {
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapUserDnPatterns;
private final String ldapGroupSearchBase;
private final String ldapGroupSearchFilter;
@ -34,10 +43,12 @@ public class TestWebSecurityConfig {
public TestWebSecurityConfig(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.groupSearchFilter:uniqueMember={0}}") String ldapGroupSearchFilter) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapGroupSearchFilter = ldapGroupSearchFilter;
}
@ -77,6 +88,7 @@ public class TestWebSecurityConfig {
}
@Bean
@Primary
public DefaultSpringSecurityContextSource defaultSpringSecurityContextSource() {
return new DefaultSpringSecurityContextSource(ldapServerUrl + "/" + ldapBaseDn);
}
@ -88,6 +100,44 @@ public class TestWebSecurityConfig {
return grantedAuthoritiesMapper;
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.csrf()
.disable()
.httpBasic()
.and()
.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new SpringSecurityToJaasFilter(), JaasApiIntegrationFilter.class)
.authorizeRequests()
.anyRequest()
.fullyAuthenticated();
return http.build();
}
@Bean
AuthenticationManager ldapAuthenticationManager(
BaseLdapPathContextSource contextSource,
LdapAuthoritiesPopulator authorities,
GrantedAuthoritiesMapper grantedAuthoritiesMapper) {
@SuppressWarnings("deprecation")
LdapPasswordComparisonAuthenticationManagerFactory factory =
new LdapPasswordComparisonAuthenticationManagerFactory(
contextSource, NoOpPasswordEncoder.getInstance());
factory.setUserDnPatterns(ldapUserDnPatterns);
factory.setLdapAuthoritiesPopulator(authorities);
factory.setAuthoritiesMapper(grantedAuthoritiesMapper);
factory.setPasswordAttribute("userPassword");
return factory.createAuthenticationManager();
}
private JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
private static class CorsWebMvcConfigurer implements WebMvcConfigurer {
@Override

View File

@ -82,7 +82,7 @@
<!-- test dependencies -->
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-common-test</artifactId>
<artifactId>taskana-rest-spring-test-lib</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
@ -170,6 +170,12 @@
<version>${version.archunit}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-test-api</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>

View File

@ -3,7 +3,7 @@ package pro.taskana.classification.rest;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.api.SharedConstants.MASTER_DOMAIN;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
import org.junit.jupiter.api.Test;
@ -22,8 +22,8 @@ import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.classification.rest.models.ClassificationSummaryPagedRepresentationModel;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test {@link ClassificationController}. */
@TaskanaSpringBootTest

View File

@ -14,7 +14,7 @@ import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.rest.assembler.ClassificationRepresentationModelAssembler;
import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest;
import pro.taskana.rest.test.BaseRestDocTest;
class ClassificationControllerRestDocTest extends BaseRestDocTest {

View File

@ -4,7 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.api.SharedConstants.MASTER_DOMAIN;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
@ -42,8 +42,8 @@ import pro.taskana.classification.rest.models.ClassificationCollectionRepresenta
import pro.taskana.classification.rest.models.ClassificationDefinitionRepresentationModel;
import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test classification definitions. */
@TaskanaSpringBootTest

View File

@ -13,7 +13,7 @@ import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.rest.assembler.ClassificationRepresentationModelAssembler;
import pro.taskana.classification.rest.models.ClassificationCollectionRepresentationModel;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest;
import pro.taskana.rest.test.BaseRestDocTest;
class ClassificationDefinitionControllerRestDocTest extends BaseRestDocTest {

View File

@ -12,7 +12,7 @@ import pro.taskana.classification.api.models.Classification;
import pro.taskana.classification.internal.models.ClassificationImpl;
import pro.taskana.classification.rest.models.ClassificationRepresentationModel;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test for {@link ClassificationRepresentationModelAssembler}. */
@TaskanaSpringBootTest

View File

@ -17,7 +17,7 @@ import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.internal.models.ClassificationSummaryImpl;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test for {@link ClassificationSummaryRepresentationModelAssembler}. */
@TaskanaSpringBootTest

View File

@ -2,7 +2,7 @@ package pro.taskana.common.rest;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.util.List;
import java.util.stream.Stream;
@ -21,8 +21,8 @@ import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.common.internal.util.Pair;
import pro.taskana.common.rest.models.AccessIdRepresentationModel;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
@TaskanaSpringBootTest
class AccessIdControllerIntTest {

View File

@ -5,7 +5,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.test.BaseRestDocTest;
import pro.taskana.rest.test.BaseRestDocTest;
class AccessIdControllerRestDocTest extends BaseRestDocTest {

View File

@ -1,7 +1,7 @@
package pro.taskana.common.rest;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
@ -20,8 +20,8 @@ import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.classification.rest.models.ClassificationSummaryPagedRepresentationModel;
import pro.taskana.common.api.exceptions.ErrorCode;
import pro.taskana.common.rest.TaskanaRestExceptionHandler.MalformedQueryParameter;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.workbasket.api.WorkbasketPermission;
import pro.taskana.workbasket.api.WorkbasketType;
import pro.taskana.workbasket.rest.models.WorkbasketSummaryPagedRepresentationModel;

View File

@ -15,7 +15,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.internal.configuration.DB;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.sampledata.SampleDataGenerator;
/** Test that the schema name can be customized. */

View File

@ -14,8 +14,8 @@ import org.springframework.web.client.RestTemplate;
import pro.taskana.common.api.TaskanaRole;
import pro.taskana.common.rest.models.CustomAttributesRepresentationModel;
import pro.taskana.common.rest.models.TaskanaUserInfoRepresentationModel;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test TaskanaEngineController. */
@TaskanaSpringBootTest

View File

@ -8,7 +8,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.rest.models.CustomAttributesRepresentationModel;
import pro.taskana.common.test.BaseRestDocTest;
import pro.taskana.rest.test.BaseRestDocTest;
class TaskanaEngineControllerRestDocTest extends BaseRestDocTest {

View File

@ -1,74 +0,0 @@
package pro.taskana.common.rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.jaasapi.JaasApiIntegrationFilter;
@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
private final LdapAuthoritiesPopulator ldapAuthoritiesPopulator;
private final GrantedAuthoritiesMapper grantedAuthoritiesMapper;
private final String ldapServerUrl;
private final String ldapBaseDn;
private final String ldapGroupSearchBase;
private final String ldapUserDnPatterns;
@Autowired
public WebSecurityConfigurer(
@Value("${taskana.ldap.serverUrl:ldap://localhost:10389}") String ldapServerUrl,
@Value("${taskana.ldap.baseDn:OU=Test,O=TASKANA}") String ldapBaseDn,
@Value("${taskana.ldap.groupSearchBase:cn=groups}") String ldapGroupSearchBase,
@Value("${taskana.ldap.userDnPatterns:uid={0},cn=users}") String ldapUserDnPatterns,
LdapAuthoritiesPopulator ldapAuthoritiesPopulator,
GrantedAuthoritiesMapper grantedAuthoritiesMapper) {
this.ldapServerUrl = ldapServerUrl;
this.ldapBaseDn = ldapBaseDn;
this.ldapGroupSearchBase = ldapGroupSearchBase;
this.ldapUserDnPatterns = ldapUserDnPatterns;
this.ldapAuthoritiesPopulator = ldapAuthoritiesPopulator;
this.grantedAuthoritiesMapper = grantedAuthoritiesMapper;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns(ldapUserDnPatterns)
.groupSearchBase(ldapGroupSearchBase)
.ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
.authoritiesMapper(grantedAuthoritiesMapper)
.contextSource()
.url(ldapServerUrl + "/" + ldapBaseDn)
.and()
.passwordCompare()
.passwordAttribute("userPassword");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.and()
.csrf()
.disable()
.httpBasic()
.and()
.addFilter(jaasApiIntegrationFilter())
.addFilterAfter(new SpringSecurityToJaasFilter(), JaasApiIntegrationFilter.class)
.authorizeRequests()
.anyRequest()
.fullyAuthenticated();
}
private JaasApiIntegrationFilter jaasApiIntegrationFilter() {
JaasApiIntegrationFilter filter = new JaasApiIntegrationFilter();
filter.setCreateEmptySubject(true);
return filter;
}
}

View File

@ -2,7 +2,7 @@ package pro.taskana.monitor.rest;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URLEncoder;
@ -18,11 +18,11 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpClientErrorException.BadRequest;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.monitor.rest.models.PriorityColumnHeaderRepresentationModel;
import pro.taskana.monitor.rest.models.ReportRepresentationModel;
import pro.taskana.monitor.rest.models.ReportRepresentationModel.RowRepresentationModel;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test MonitorController. */
@TaskanaSpringBootTest

View File

@ -6,7 +6,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest;
import pro.taskana.rest.test.BaseRestDocTest;
class MonitorControllerRestDocTest extends BaseRestDocTest {

View File

@ -5,9 +5,9 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.monitor.api.reports.header.PriorityColumnHeader;
import pro.taskana.monitor.rest.models.PriorityColumnHeaderRepresentationModel;
import pro.taskana.rest.test.TaskanaSpringBootTest;
@TaskanaSpringBootTest
class PriorityColumnHeaderRepresentationModelAssemblerTest {

View File

@ -13,13 +13,13 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.monitor.api.reports.ClassificationReport;
import pro.taskana.monitor.api.reports.WorkbasketReport;
import pro.taskana.monitor.api.reports.header.TimeIntervalColumnHeader;
import pro.taskana.monitor.api.reports.item.DetailedMonitorQueryItem;
import pro.taskana.monitor.api.reports.item.MonitorQueryItem;
import pro.taskana.monitor.rest.models.ReportRepresentationModel;
import pro.taskana.rest.test.TaskanaSpringBootTest;
/** Test for {@link ReportRepresentationModelAssembler}. */
@TaskanaSpringBootTest

View File

@ -2,7 +2,7 @@ package pro.taskana.task.rest;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.time.Instant;
import java.util.Comparator;
@ -18,8 +18,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.rest.models.TaskCommentCollectionRepresentationModel;
import pro.taskana.task.rest.models.TaskCommentRepresentationModel;

View File

@ -11,13 +11,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.rest.test.BaseRestDocTest;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.TaskComment;
import pro.taskana.task.rest.assembler.TaskCommentRepresentationModelAssembler;
import pro.taskana.task.rest.models.TaskCommentRepresentationModel;
import pro.taskana.testapi.security.JaasExtension;
import pro.taskana.testapi.security.WithAccessId;
@ExtendWith(JaasExtension.class)
class TaskCommentControllerRestDocTest extends BaseRestDocTest {

View File

@ -3,7 +3,7 @@ package pro.taskana.task.rest;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
@ -37,8 +37,8 @@ import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.sampledata.SampleDataGenerator;
import pro.taskana.task.api.TaskState;
import pro.taskana.task.rest.models.IsReadRepresentationModel;

View File

@ -11,16 +11,16 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.BaseRestDocTest;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.rest.test.BaseRestDocTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.Task;
import pro.taskana.task.internal.models.ObjectReferenceImpl;
import pro.taskana.task.rest.assembler.TaskRepresentationModelAssembler;
import pro.taskana.task.rest.models.IsReadRepresentationModel;
import pro.taskana.task.rest.models.TaskRepresentationModel;
import pro.taskana.testapi.security.JaasExtension;
import pro.taskana.testapi.security.WithAccessId;
@ExtendWith(JaasExtension.class)
class TaskControllerRestDocTest extends BaseRestDocTest {

View File

@ -10,7 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.Attachment;
import pro.taskana.task.internal.models.AttachmentImpl;

View File

@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.AttachmentSummary;
import pro.taskana.task.internal.models.AttachmentSummaryImpl;

View File

@ -5,7 +5,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.models.ObjectReference;
import pro.taskana.task.internal.models.ObjectReferenceImpl;
import pro.taskana.task.rest.models.ObjectReferenceRepresentationModel;

View File

@ -6,7 +6,7 @@ import java.time.Instant;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.TaskComment;
import pro.taskana.task.internal.models.TaskCommentImpl;

View File

@ -13,7 +13,7 @@ import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskCustomField;
import pro.taskana.task.api.TaskCustomIntField;
import pro.taskana.task.api.TaskService;

View File

@ -26,7 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.classification.api.ClassificationService;
import pro.taskana.classification.api.models.ClassificationSummary;
import pro.taskana.classification.rest.models.ClassificationSummaryRepresentationModel;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.task.api.TaskCustomIntField;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.TaskState;

View File

@ -20,9 +20,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.rest.ldap.LdapClient;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.testapi.security.JaasExtension;
import pro.taskana.testapi.security.WithAccessId;
import pro.taskana.user.api.UserService;
import pro.taskana.user.api.models.User;

View File

@ -2,7 +2,7 @@ package pro.taskana.user.rest;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static pro.taskana.common.test.rest.RestHelper.TEMPLATE;
import static pro.taskana.rest.test.RestHelper.TEMPLATE;
import java.util.Set;
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
@ -16,8 +16,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpStatusCodeException;
import pro.taskana.common.rest.RestEndpoints;
import pro.taskana.common.test.rest.RestHelper;
import pro.taskana.common.test.rest.TaskanaSpringBootTest;
import pro.taskana.rest.test.RestHelper;
import pro.taskana.rest.test.TaskanaSpringBootTest;
import pro.taskana.user.rest.models.UserCollectionRepresentationModel;
import pro.taskana.user.rest.models.UserRepresentationModel;

Some files were not shown because too many files have changed in this diff Show More