TSK-1650: Reworked the WorkbasketAccessSqlProvider
This commit is contained in:
parent
72b00a8c32
commit
8e94de6a42
|
@ -1,7 +1,5 @@
|
|||
package pro.taskana.workbasket.api;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import pro.taskana.common.api.QueryColumnName;
|
||||
|
||||
/**
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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(", ", "", " "));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(", "));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue