diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQueryColumnName.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQueryColumnName.java
index f6258bd09..fd9d6811f 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQueryColumnName.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/api/WorkbasketQueryColumnName.java
@@ -1,5 +1,7 @@
package pro.taskana.workbasket.api;
+import java.util.Arrays;
+
import pro.taskana.common.api.QueryColumnName;
/**
diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessSqlProvider.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessSqlProvider.java
index 7e31cdef9..89e8c93ad 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessSqlProvider.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketAccessSqlProvider.java
@@ -99,11 +99,11 @@ public class WorkbasketAccessSqlProvider {
+ ""
+ ""
+ "SELECT "
- + getMaximumPermissionStatement(true)
+ + getMaximumPermissionStatement(false)
+ ""
+ ""
+ "SELECT "
- + getMaximumPermissionStatement(false)
+ + getMaximumPermissionStatement(true)
+ ""
+ ""
+ "FROM WORKBASKET_ACCESS_LIST "
@@ -118,19 +118,15 @@ public class WorkbasketAccessSqlProvider {
+ ""
+ ""
+ "SELECT "
- + getMaximumPermissionStatement(true)
+ + getMaximumPermissionStatement(false)
+ ""
+ ""
+ "SELECT "
- + getMaximumPermissionStatement(false)
- + ""
- + ""
- + "FROM WORKBASKET_ACCESS_LIST "
- + "WHERE WORKBASKET_ID in "
- + "(SELECT ID FROM WORKBASKET WHERE UPPER(KEY) = UPPER(#{workbasketKey}) AND UPPER(DOMAIN) = UPPER(#{domain}) )"
- + "AND ACCESS_ID IN"
- + "(#{item})"
- + "with UR"
+ + getMaximumPermissionStatement(true)
+ + "FROM WORKBASKET_ACCESS_LIST WHERE WORKBASKET_ID in (SELECT ID FROM"
+ + " WORKBASKET WHERE UPPER(KEY) = UPPER(#{workbasketKey}) AND UPPER(DOMAIN) ="
+ + " UPPER(#{domain}) )AND ACCESS_ID IN(#{item})with UR"
+ "";
}
diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketMapper.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketMapper.java
index 84152dce4..1cfb243c2 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketMapper.java
@@ -1,13 +1,13 @@
package pro.taskana.workbasket.internal;
import java.util.List;
-import org.apache.ibatis.annotations.Delete;
-import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.DeleteProvider;
+import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.UpdateProvider;
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
import pro.taskana.workbasket.internal.models.WorkbasketSummaryImpl;
@@ -16,10 +16,7 @@ import pro.taskana.workbasket.internal.models.WorkbasketSummaryImpl;
@SuppressWarnings("checkstyle:LineLength")
public interface WorkbasketMapper {
- @Select(
- "")
+ @SelectProvider(type = WorkbasketSqlProvider.class, method = "findById")
@Result(property = "id", column = "ID")
@Result(property = "key", column = "KEY")
@Result(property = "created", column = "CREATED")
@@ -40,10 +37,7 @@ public interface WorkbasketMapper {
@Result(property = "markedForDeletion", column = "MARKED_FOR_DELETION")
WorkbasketImpl findById(@Param("id") String id);
- @Select(
- "")
+ @SelectProvider(type = WorkbasketSqlProvider.class, method = "findByKeyAndDomain")
@Result(property = "id", column = "ID")
@Result(property = "key", column = "KEY")
@Result(property = "created", column = "CREATED")
@@ -64,10 +58,7 @@ public interface WorkbasketMapper {
@Result(property = "markedForDeletion", column = "MARKED_FOR_DELETION")
WorkbasketImpl findByKeyAndDomain(@Param("key") String key, @Param("domain") String domain);
- @Select(
- "")
+ @SelectProvider(type = WorkbasketSqlProvider.class, method = "findDistributionTargets")
@Result(property = "id", column = "ID")
@Result(property = "key", column = "KEY")
@Result(property = "name", column = "NAME")
@@ -85,11 +76,7 @@ public interface WorkbasketMapper {
@Result(property = "orgLevel4", column = "ORG_LEVEL_4")
List findDistributionTargets(@Param("id") String id);
- @Select(
- "")
+ @SelectProvider(type = WorkbasketSqlProvider.class, method = "findDistributionSources")
@Result(property = "id", column = "ID")
@Result(property = "key", column = "KEY")
@Result(property = "name", column = "NAME")
@@ -107,10 +94,7 @@ public interface WorkbasketMapper {
@Result(property = "orgLevel4", column = "ORG_LEVEL_4")
List findDistributionSources(@Param("id") String id);
- @Select(
- "")
+ @SelectProvider(type = WorkbasketSqlProvider.class, method = "findSummaryById")
@Result(property = "id", column = "ID")
@Result(property = "key", column = "KEY")
@Result(property = "name", column = "NAME")
@@ -128,10 +112,7 @@ public interface WorkbasketMapper {
@Result(property = "orgLevel4", column = "ORG_LEVEL_4")
List findSummaryById(@Param("key") String id);
- @Select(
- "")
+ @SelectProvider(type = WorkbasketSqlProvider.class, method = "findAll")
@Result(property = "id", column = "ID")
@Result(property = "key", column = "KEY")
@Result(property = "name", column = "NAME")
@@ -149,20 +130,16 @@ public interface WorkbasketMapper {
@Result(property = "orgLevel4", column = "ORG_LEVEL_4")
List findAll();
- @Insert(
- "")
+ @InsertProvider(type = WorkbasketSqlProvider.class, method = "insert")
@Options(keyProperty = "id", keyColumn = "ID")
void insert(@Param("workbasket") WorkbasketImpl workbasket);
- @Update(
- "UPDATE WORKBASKET SET MODIFIED = #{workbasket.modified}, KEY = #{workbasket.key}, NAME = #{workbasket.name}, DOMAIN = #{workbasket.domain}, TYPE = #{workbasket.type}, DESCRIPTION = #{workbasket.description}, OWNER = #{workbasket.owner}, CUSTOM_1 = #{workbasket.custom1}, CUSTOM_2 = #{workbasket.custom2}, CUSTOM_3 = #{workbasket.custom3}, CUSTOM_4 = #{workbasket.custom4}, ORG_LEVEL_1 = #{workbasket.orgLevel1}, ORG_LEVEL_2 = #{workbasket.orgLevel2}, ORG_LEVEL_3 = #{workbasket.orgLevel3}, ORG_LEVEL_4 = #{workbasket.orgLevel4}, MARKED_FOR_DELETION = #{workbasket.markedForDeletion} WHERE id = #{workbasket.id}")
+ @UpdateProvider(type = WorkbasketSqlProvider.class, method = "update")
void update(@Param("workbasket") WorkbasketImpl workbasket);
- @Update(
- "UPDATE WORKBASKET SET MODIFIED = #{workbasket.modified}, NAME = #{workbasket.name}, TYPE = #{workbasket.type}, DESCRIPTION = #{workbasket.description}, OWNER = #{workbasket.owner}, CUSTOM_1 = #{workbasket.custom1}, CUSTOM_2 = #{workbasket.custom2}, CUSTOM_3 = #{workbasket.custom3}, CUSTOM_4 = #{workbasket.custom4}, ORG_LEVEL_1 = #{workbasket.orgLevel1}, ORG_LEVEL_2 = #{workbasket.orgLevel2}, ORG_LEVEL_3 = #{workbasket.orgLevel3}, ORG_LEVEL_4 = #{workbasket.orgLevel4}, MARKED_FOR_DELETION = #{workbasket.markedForDeletion} WHERE KEY = #{workbasket.key} AND DOMAIN = #{workbasket.domain}")
+ @UpdateProvider(type = WorkbasketSqlProvider.class, method = "updateByKeyAndDomain")
void updateByKeyAndDomain(@Param("workbasket") WorkbasketImpl workbasket);
- @Delete("DELETE FROM WORKBASKET where id = #{id}")
+ @DeleteProvider(type = WorkbasketSqlProvider.class, method = "delete")
void delete(@Param("id") String id);
}
diff --git a/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketSqlProvider.java b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketSqlProvider.java
new file mode 100644
index 000000000..b49bdae36
--- /dev/null
+++ b/lib/taskana-core/src/main/java/pro/taskana/workbasket/internal/WorkbasketSqlProvider.java
@@ -0,0 +1,129 @@
+package pro.taskana.workbasket.internal;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import pro.taskana.common.internal.util.Pair;
+
+public class WorkbasketSqlProvider {
+
+ public static final List> columns =
+ Arrays.asList(
+ Pair.of("ID", "#{workbasket.id}"),
+ Pair.of("KEY", "#{workbasket.key}"),
+ Pair.of("CREATED", "#{workbasket.created}"),
+ Pair.of("MODIFIED", "#{workbasket.modified}"),
+ Pair.of("NAME", "#{workbasket.name}"),
+ Pair.of("DOMAIN", "#{workbasket.domain}"),
+ Pair.of("TYPE", "#{workbasket.type}"),
+ Pair.of("DESCRIPTION", "#{workbasket.description}"),
+ Pair.of("OWNER", "#{workbasket.owner}"),
+ Pair.of("CUSTOM_1", "#{workbasket.custom1}"),
+ Pair.of("CUSTOM_2", "#{workbasket.custom2}"),
+ Pair.of("CUSTOM_3", "#{workbasket.custom3}"),
+ Pair.of("CUSTOM_4", "#{workbasket.custom4}"),
+ Pair.of("ORG_LEVEL_1", "#{workbasket.orgLevel1}"),
+ Pair.of("ORG_LEVEL_2", "#{workbasket.orgLevel2}"),
+ Pair.of("ORG_LEVEL_3", "#{workbasket.orgLevel3}"),
+ Pair.of("ORG_LEVEL_4", "#{workbasket.orgLevel4}"),
+ Pair.of("MARKED_FOR_DELETION", "#{workbasket.markedForDeletion}"));
+
+ public static String findById() {
+ return "";
+ }
+
+ public static String findSummaryById() {
+ return "";
+ }
+
+ public static String findByKeyAndDomain() {
+ return "";
+ }
+
+ public static String findDistributionTargets() {
+ return "";
+ }
+
+ public static String findDistributionSources() {
+ return "";
+ }
+
+ public static String findAll() {
+ return "";
+ }
+
+ public static String insert() {
+ return "";
+ }
+
+ public static String update() {
+ return "UPDATE WORKBASKET " + "SET " + updateSetStatement() + " WHERE id = #{workbasket.id}";
+ }
+
+ public static String updateByKeyAndDomain() {
+ return "UPDATE WORKBASKET "
+ + "SET "
+ + updateSetStatement()
+ + " WHERE KEY = #{workbasket.key} AND DOMAIN = #{workbasket.domain}";
+ }
+
+ public static String delete() {
+ return "DELETE FROM WORKBASKET where id = #{id}";
+ }
+
+ private static String updateSetStatement() {
+ return columns.stream()
+ .map(col -> col.getLeft() + " = " + col.getRight())
+ .collect(Collectors.joining(", "));
+ }
+
+ private static String commonSelectFields(boolean excludeMarkedForDeletion) {
+ int limit = columns.size();
+ if (excludeMarkedForDeletion) {
+ limit -= 1;
+ }
+ return columns.stream().limit(limit).map(Pair::getLeft).collect(Collectors.joining(", "));
+ }
+
+ private static String valueReferences() {
+ return columns.stream().map(Pair::getRight).collect(Collectors.joining(", "));
+ }
+}