TSK-1650: Reworked the WorkbasketAccessSqlProvider

This commit is contained in:
Tristan Eisermann 2021-08-09 10:55:43 +02:00 committed by Mustapha Zorgati
parent 72b00a8c32
commit 8e94de6a42
4 changed files with 120 additions and 88 deletions

View File

@ -1,7 +1,5 @@
package pro.taskana.workbasket.api;
import java.util.Arrays;
import pro.taskana.common.api.QueryColumnName;
/**

View File

@ -112,23 +112,23 @@ public interface WorkbasketAccessMapper {
@Result(property = "workbasketId", column = "WORKBASKET_ID")
@Result(property = "accessId", column = "ACCESS_ID")
@Result(property = "accessName", column = "ACCESS_NAME")
@Result(property = "permRead", column = "P_READ")
@Result(property = "permOpen", column = "P_OPEN")
@Result(property = "permAppend", column = "P_APPEND")
@Result(property = "permTransfer", column = "P_TRANSFER")
@Result(property = "permDistribute", column = "P_DISTRIBUTE")
@Result(property = "permCustom1", column = "P_CUSTOM_1")
@Result(property = "permCustom2", column = "P_CUSTOM_2")
@Result(property = "permCustom3", column = "P_CUSTOM_3")
@Result(property = "permCustom4", column = "P_CUSTOM_4")
@Result(property = "permCustom5", column = "P_CUSTOM_5")
@Result(property = "permCustom6", column = "P_CUSTOM_6")
@Result(property = "permCustom7", column = "P_CUSTOM_7")
@Result(property = "permCustom8", column = "P_CUSTOM_8")
@Result(property = "permCustom9", column = "P_CUSTOM_9")
@Result(property = "permCustom10", column = "P_CUSTOM_10")
@Result(property = "permCustom11", column = "P_CUSTOM_11")
@Result(property = "permCustom12", column = "P_CUSTOM_12")
@Result(property = "permRead", column = "PERM_READ")
@Result(property = "permOpen", column = "PERM_OPEN")
@Result(property = "permAppend", column = "PERM_APPEND")
@Result(property = "permTransfer", column = "PERM_TRANSFER")
@Result(property = "permDistribute", column = "PERM_DISTRIBUTE")
@Result(property = "permCustom1", column = "PERM_CUSTOM_1")
@Result(property = "permCustom2", column = "PERM_CUSTOM_2")
@Result(property = "permCustom3", column = "PERM_CUSTOM_3")
@Result(property = "permCustom4", column = "PERM_CUSTOM_4")
@Result(property = "permCustom5", column = "PERM_CUSTOM_5")
@Result(property = "permCustom6", column = "PERM_CUSTOM_6")
@Result(property = "permCustom7", column = "PERM_CUSTOM_7")
@Result(property = "permCustom8", column = "PERM_CUSTOM_8")
@Result(property = "permCustom9", column = "PERM_CUSTOM_9")
@Result(property = "permCustom10", column = "PERM_CUSTOM_10")
@Result(property = "permCustom11", column = "PERM_CUSTOM_11")
@Result(property = "permCustom12", column = "PERM_CUSTOM_12")
WorkbasketAccessItemImpl findByWorkbasketAndAccessId(
@Param("workbasketId") String workbasketId, @Param("accessIds") List<String> accessIds);
@ -138,23 +138,23 @@ public interface WorkbasketAccessMapper {
@Result(property = "workbasketId", column = "WORKBASKET_ID")
@Result(property = "accessId", column = "ACCESS_ID")
@Result(property = "accessName", column = "ACCESS_NAME")
@Result(property = "permRead", column = "P_READ")
@Result(property = "permOpen", column = "P_OPEN")
@Result(property = "permAppend", column = "P_APPEND")
@Result(property = "permTransfer", column = "P_TRANSFER")
@Result(property = "permDistribute", column = "P_DISTRIBUTE")
@Result(property = "permCustom1", column = "P_CUSTOM_1")
@Result(property = "permCustom2", column = "P_CUSTOM_2")
@Result(property = "permCustom3", column = "P_CUSTOM_3")
@Result(property = "permCustom4", column = "P_CUSTOM_4")
@Result(property = "permCustom5", column = "P_CUSTOM_5")
@Result(property = "permCustom6", column = "P_CUSTOM_6")
@Result(property = "permCustom7", column = "P_CUSTOM_7")
@Result(property = "permCustom8", column = "P_CUSTOM_8")
@Result(property = "permCustom9", column = "P_CUSTOM_9")
@Result(property = "permCustom10", column = "P_CUSTOM_10")
@Result(property = "permCustom11", column = "P_CUSTOM_11")
@Result(property = "permCustom12", column = "P_CUSTOM_12")
@Result(property = "permRead", column = "PERM_READ")
@Result(property = "permOpen", column = "PERM_OPEN")
@Result(property = "permAppend", column = "PERM_APPEND")
@Result(property = "permTransfer", column = "PERM_TRANSFER")
@Result(property = "permDistribute", column = "PERM_DISTRIBUTE")
@Result(property = "permCustom1", column = "PERM_CUSTOM_1")
@Result(property = "permCustom2", column = "PERM_CUSTOM_2")
@Result(property = "permCustom3", column = "PERM_CUSTOM_3")
@Result(property = "permCustom4", column = "PERM_CUSTOM_4")
@Result(property = "permCustom5", column = "PERM_CUSTOM_5")
@Result(property = "permCustom6", column = "PERM_CUSTOM_6")
@Result(property = "permCustom7", column = "PERM_CUSTOM_7")
@Result(property = "permCustom8", column = "PERM_CUSTOM_8")
@Result(property = "permCustom9", column = "PERM_CUSTOM_9")
@Result(property = "permCustom10", column = "PERM_CUSTOM_10")
@Result(property = "permCustom11", column = "PERM_CUSTOM_11")
@Result(property = "permCustom12", column = "PERM_CUSTOM_12")
WorkbasketAccessItemImpl findByWorkbasketKeyDomainAndAccessId(
@Param("workbasketKey") String workbasketKey,
@Param("domain") String domain,

View File

@ -1,13 +1,40 @@
package pro.taskana.workbasket.internal;
import java.util.Arrays;
import java.util.Objects;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import pro.taskana.workbasket.api.WorkbasketPermission;
import pro.taskana.common.internal.util.Pair;
public class WorkbasketAccessSqlProvider {
public static final List<Pair<String, String>> COLUMNS =
Arrays.asList(
Pair.of("WORKBASKET_ID", "#{workbasketAccessItem.workbasketId}"),
Pair.of("ACCESS_ID", "#{workbasketAccessItem.accessId}"),
Pair.of("ACCESS_NAME", "#{workbasketAccessItem.accessName}"));
public static final List<Pair<String, String>> PERMISSIONS =
Arrays.asList(
Pair.of("PERM_READ", "#{workbasketAccessItem.permRead}"),
Pair.of("PERM_OPEN", "#{workbasketAccessItem.permOpen}"),
Pair.of("PERM_APPEND", "#{workbasketAccessItem.permAppend}"),
Pair.of("PERM_TRANSFER", "#{workbasketAccessItem.permTransfer}"),
Pair.of("PERM_DISTRIBUTE", "#{workbasketAccessItem.permDistribute}"),
Pair.of("PERM_CUSTOM_1", "#{workbasketAccessItem.permCustom1}"),
Pair.of("PERM_CUSTOM_2", "#{workbasketAccessItem.permCustom2}"),
Pair.of("PERM_CUSTOM_3", "#{workbasketAccessItem.permCustom3}"),
Pair.of("PERM_CUSTOM_4", "#{workbasketAccessItem.permCustom4}"),
Pair.of("PERM_CUSTOM_5", "#{workbasketAccessItem.permCustom5}"),
Pair.of("PERM_CUSTOM_6", "#{workbasketAccessItem.permCustom6}"),
Pair.of("PERM_CUSTOM_7", "#{workbasketAccessItem.permCustom7}"),
Pair.of("PERM_CUSTOM_8", "#{workbasketAccessItem.permCustom8}"),
Pair.of("PERM_CUSTOM_9", "#{workbasketAccessItem.permCustom9}"),
Pair.of("PERM_CUSTOM_10", "#{workbasketAccessItem.permCustom10}"),
Pair.of("PERM_CUSTOM_11", "#{workbasketAccessItem.permCustom11}"),
Pair.of("PERM_CUSTOM_12", "#{workbasketAccessItem.permCustom1}"));
public static String findById() {
return "<script>"
+ "SELECT "
@ -45,40 +72,14 @@ public class WorkbasketAccessSqlProvider {
public static String insert() {
return "INSERT INTO WORKBASKET_ACCESS_LIST (ID, "
+ commonSelectStatements()
+ ") VALUES (#{workbasketAccessItem.id},"
+ " #{workbasketAccessItem.workbasketId}, #{workbasketAccessItem.accessId},"
+ " #{workbasketAccessItem.accessName}, #{workbasketAccessItem.permRead},"
+ " #{workbasketAccessItem.permOpen}, #{workbasketAccessItem.permAppend},"
+ " #{workbasketAccessItem.permTransfer}, #{workbasketAccessItem.permDistribute},"
+ " #{workbasketAccessItem.permCustom1}, #{workbasketAccessItem.permCustom2},"
+ " #{workbasketAccessItem.permCustom3}, #{workbasketAccessItem.permCustom4},"
+ " #{workbasketAccessItem.permCustom5}, #{workbasketAccessItem.permCustom6},"
+ " #{workbasketAccessItem.permCustom7}, #{workbasketAccessItem.permCustom8},"
+ " #{workbasketAccessItem.permCustom9}, #{workbasketAccessItem.permCustom10},"
+ " #{workbasketAccessItem.permCustom11}, #{workbasketAccessItem.permCustom12})";
+ ") VALUES (#{workbasketAccessItem.id}, "
+ insertValues()
+ ")";
}
public static String update() {
return "UPDATE WORKBASKET_ACCESS_LIST SET "
+ "WORKBASKET_ID = #{workbasketAccessItem."
+ "workbasketId}, ACCESS_ID = #{workbasketAccessItem.accessId}, "
+ "ACCESS_NAME = #{workbasketAccessItem.accessName}, "
+ "PERM_READ = #{workbasketAccessItem.permRead}, PERM_OPEN = #{workbasketAccessItem."
+ "permOpen}, PERM_APPEND = #{workbasketAccessItem.permAppend}, "
+ "PERM_TRANSFER = #{workbasketAccessItem.permTransfer}, "
+ "PERM_DISTRIBUTE = #{workbasketAccessItem.permDistribute}, "
+ "PERM_CUSTOM_1 = #{workbasketAccessItem.permCustom1}, "
+ "PERM_CUSTOM_2 = #{workbasketAccessItem.permCustom2}, "
+ "PERM_CUSTOM_3 = #{workbasketAccessItem.permCustom3}, "
+ "PERM_CUSTOM_4 = #{workbasketAccessItem.permCustom4}, "
+ "PERM_CUSTOM_5 = #{workbasketAccessItem.permCustom5}, "
+ "PERM_CUSTOM_6 = #{workbasketAccessItem.permCustom6}, "
+ "PERM_CUSTOM_7 = #{workbasketAccessItem.permCustom7}, "
+ "PERM_CUSTOM_8 = #{workbasketAccessItem.permCustom8}, "
+ "PERM_CUSTOM_9 = #{workbasketAccessItem.permCustom9}, "
+ "PERM_CUSTOM_10 = #{workbasketAccessItem.permCustom10}, "
+ "PERM_CUSTOM_11 = #{workbasketAccessItem.permCustom11}, "
+ "PERM_CUSTOM_12 = #{workbasketAccessItem.permCustom12} "
+ commonUpdateStatement()
+ "WHERE id = #{workbasketAccessItem.id}";
}
@ -123,31 +124,49 @@ public class WorkbasketAccessSqlProvider {
+ "<otherwise>"
+ "SELECT "
+ getMaximumPermissionStatement(true)
+ "</otherwise></choose>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(<foreach item='item' collection='accessIds'"
+ " separator=',' >#{item}</foreach>)<if test=\"_databaseId == 'db2'\">with UR</if>"
+ "</otherwise>"
+ "</choose>"
+ "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"
+ "(<foreach item='item' collection='accessIds' separator=',' >#{item}</foreach>)"
+ "<if test=\"_databaseId == 'db2'\">with UR</if>"
+ "</script>";
}
private static String commonUpdateStatement() {
return Stream.concat(COLUMNS.stream(), PERMISSIONS.stream())
.map(col -> col.getLeft() + " = " + col.getRight())
.collect(Collectors.joining(", ", "", " "));
}
private static String insertValues() {
return Stream.concat(COLUMNS.stream(), PERMISSIONS.stream())
.map(Pair::getRight)
.collect(Collectors.joining(", ", "", " "));
}
private static String getMaximumPermissionStatement(boolean isNotDb2) {
return Arrays.stream(WorkbasketPermission.values())
return PERMISSIONS.stream()
.map(
perm -> {
String temp = "MAX(PERM_" + perm;
String temp = "MAX(" + perm.getLeft();
if (isNotDb2) {
temp += "::int";
}
temp += ") AS P_" + perm;
temp += ") AS " + perm.getLeft();
return temp;
})
.collect(Collectors.joining(", "));
.collect(Collectors.joining(", ", "", " "));
}
private static String commonSelectStatements() {
return "WORKBASKET_ID, ACCESS_ID, ACCESS_NAME, "
+ Arrays.stream(WorkbasketPermission.values())
.map(Objects::toString)
.collect(Collectors.joining(", PERM_", "PERM_", " "));
return Stream.concat(COLUMNS.stream(), PERMISSIONS.stream())
.map(Pair::getLeft)
.collect(Collectors.joining(", ", "", " "));
}
}

View File

@ -8,7 +8,7 @@ import pro.taskana.common.internal.util.Pair;
public class WorkbasketSqlProvider {
public static final List<Pair<String, String>> columns =
public static final List<Pair<String, String>> COLUMNS =
Arrays.asList(
Pair.of("ID", "#{workbasket.id}"),
Pair.of("KEY", "#{workbasket.key}"),
@ -95,13 +95,16 @@ public class WorkbasketSqlProvider {
}
public static String update() {
return "UPDATE WORKBASKET " + "SET " + updateSetStatement() + " WHERE id = #{workbasket.id}";
return "UPDATE WORKBASKET "
+ "SET "
+ updateSetStatement(false)
+ " WHERE id = #{workbasket.id}";
}
public static String updateByKeyAndDomain() {
return "UPDATE WORKBASKET "
+ "SET "
+ updateSetStatement()
+ updateSetStatement(true)
+ " WHERE KEY = #{workbasket.key} AND DOMAIN = #{workbasket.domain}";
}
@ -109,21 +112,33 @@ public class WorkbasketSqlProvider {
return "DELETE FROM WORKBASKET where id = #{id}";
}
private static String updateSetStatement() {
return columns.stream()
private static String updateSetStatement(boolean byKeyAndDomain) {
return COLUMNS.stream()
.filter(
col -> {
if (byKeyAndDomain) {
String name = col.getLeft();
return !(name.contains("ID")
|| name.contains("KEY")
|| name.contains("DOMAIN")
|| name.contains("CREATED"));
} else {
return true;
}
})
.map(col -> col.getLeft() + " = " + col.getRight())
.collect(Collectors.joining(", "));
}
private static String commonSelectFields(boolean excludeMarkedForDeletion) {
int limit = columns.size();
int limit = COLUMNS.size();
if (excludeMarkedForDeletion) {
limit -= 1;
}
return columns.stream().limit(limit).map(Pair::getLeft).collect(Collectors.joining(", "));
return COLUMNS.stream().limit(limit).map(Pair::getLeft).collect(Collectors.joining(", "));
}
private static String valueReferences() {
return columns.stream().map(Pair::getRight).collect(Collectors.joining(", "));
return COLUMNS.stream().map(Pair::getRight).collect(Collectors.joining(", "));
}
}