forked from SteamWar/SteamWar
Refactor SQL classes: update GameModeConfig functions, improve null safety in SchematicNode and SchematicType, and adjust NodeMemberTable structure.
Signed-off-by: Chaoscaot <max@maxsp.de>
This commit is contained in:
@@ -35,11 +35,19 @@ import java.util.stream.Collectors;
|
|||||||
public final class GameModeConfig<M, W> {
|
public final class GameModeConfig<M, W> {
|
||||||
|
|
||||||
public static final Function<String, String> ToString = Function.identity();
|
public static final Function<String, String> ToString = Function.identity();
|
||||||
public static final Function<File, String> ToStaticWarGear = __ -> "WarGear";
|
public static final Function<File, String> ToStaticWarGear = GameModeConfig::constWarGear;
|
||||||
public static final Function<File, String> ToInternalName = file -> file != null ? file.getName().replace(".yml", "") : "WarGear";
|
public static final Function<File, String> ToInternalName = GameModeConfig::internalName;
|
||||||
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm");
|
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm");
|
||||||
private static final Random random = new Random();
|
private static final Random random = new Random();
|
||||||
|
|
||||||
|
private static String constWarGear(File f) {
|
||||||
|
return "WarGear";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String internalName(File f) {
|
||||||
|
return f.getName().replace(".yml", "");
|
||||||
|
}
|
||||||
|
|
||||||
private static final Map<String, GameModeConfig<?, String>> byFileName;
|
private static final Map<String, GameModeConfig<?, String>> byFileName;
|
||||||
private static final Map<String, GameModeConfig<?, String>> byGameName;
|
private static final Map<String, GameModeConfig<?, String>> byGameName;
|
||||||
private static final Map<SchematicType, GameModeConfig<?, String>> bySchematicType;
|
private static final Map<SchematicType, GameModeConfig<?, String>> bySchematicType;
|
||||||
|
|||||||
@@ -33,14 +33,14 @@ import kotlin.jvm.optionals.getOrNull
|
|||||||
|
|
||||||
object NodeMemberTable : CompositeIdTable("NodeMember") {
|
object NodeMemberTable : CompositeIdTable("NodeMember") {
|
||||||
val node = reference("NodeId", SchematicNodeTable)
|
val node = reference("NodeId", SchematicNodeTable)
|
||||||
val nodeOwner = reference("NodeOwner", SteamwarUserTable)
|
val userId = reference("UserId", SteamwarUserTable)
|
||||||
val parentNode = optReference("ParentNodeId", SchematicNodeTable)
|
val parentNode = optReference("ParentId", SchematicNodeTable)
|
||||||
|
|
||||||
override val primaryKey = PrimaryKey(node, nodeOwner)
|
override val primaryKey = PrimaryKey(node, userId)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
addIdColumn(node)
|
addIdColumn(node)
|
||||||
addIdColumn(nodeOwner)
|
addIdColumn(userId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ class NodeMember(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
|||||||
fun createNodeMember(node: Int, member: Int): NodeMember = useDb {
|
fun createNodeMember(node: Int, member: Int): NodeMember = useDb {
|
||||||
NodeMemberTable.insertIgnore {
|
NodeMemberTable.insertIgnore {
|
||||||
it[this.node] = EntityID(node, SchematicNodeTable)
|
it[this.node] = EntityID(node, SchematicNodeTable)
|
||||||
it[this.nodeOwner] = EntityID(member, SteamwarUserTable)
|
it[this.userId] = EntityID(member, SteamwarUserTable)
|
||||||
}
|
}
|
||||||
getNodeMember(node, member) ?: throw IllegalStateException("NodeMember not created")
|
getNodeMember(node, member) ?: throw IllegalStateException("NodeMember not created")
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ class NodeMember(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
|||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getNodeMember(node: Int, member: Int) = useDb {
|
fun getNodeMember(node: Int, member: Int) = useDb {
|
||||||
find { (NodeMemberTable.node eq node) and (NodeMemberTable.nodeOwner eq member) }.firstOrNull()
|
find { (NodeMemberTable.node eq node) and (NodeMemberTable.userId eq member) }.firstOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@@ -70,14 +70,14 @@ class NodeMember(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
|||||||
fun getNodeMembers(node: Int) = useDb { find { NodeMemberTable.node eq node }.toSet() }
|
fun getNodeMembers(node: Int) = useDb { find { NodeMemberTable.node eq node }.toSet() }
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getSchematics(member: Int) = useDb { find { NodeMemberTable.nodeOwner eq member }.toSet() }
|
fun getSchematics(member: Int) = useDb { find { NodeMemberTable.userId eq member }.toSet() }
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun init() = Unit
|
fun init() = Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
val node by NodeMemberTable.node.transform({ EntityID(it, SchematicNodeTable) }, { it.value })
|
val node by NodeMemberTable.node.transform({ EntityID(it, SchematicNodeTable) }, { it.value })
|
||||||
val member by NodeMemberTable.nodeOwner.transform({ EntityID(it, SteamwarUserTable) }, { it.value })
|
val member by NodeMemberTable.userId.transform({ EntityID(it, SteamwarUserTable) }, { it.value })
|
||||||
var parent by NodeMemberTable.parentNode.transform(
|
var parent by NodeMemberTable.parentNode.transform(
|
||||||
{ it.map { EntityID(it, SchematicNodeTable) }.getOrNull() },
|
{ it.map { EntityID(it, SchematicNodeTable) }.getOrNull() },
|
||||||
{ Optional.ofNullable(it?.value) })
|
{ Optional.ofNullable(it?.value) })
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ class SchematicNode(id: EntityID<Int>) : IntEntity(id) {
|
|||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getAllAccessibleSchematicsOfType(user: Int, type: String) =
|
fun getAllAccessibleSchematicsOfType(user: Int, type: String) =
|
||||||
accessibleByUserType(SteamwarUser.byId(user)!!, SchematicType.fromDB(type))
|
accessibleByUserType(SteamwarUser.byId(user)!!, SchematicType.fromDB(type)!!)
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getAllSchematicsAccessibleByUser(user: Int) = getAll(SteamwarUser.byId(user)!!)
|
fun getAllSchematicsAccessibleByUser(user: Int) = getAll(SteamwarUser.byId(user)!!)
|
||||||
@@ -328,7 +328,7 @@ class SchematicNode(id: EntityID<Int>) : IntEntity(id) {
|
|||||||
}
|
}
|
||||||
private var nodeType by SchematicNodeTable.type
|
private var nodeType by SchematicNodeTable.type
|
||||||
var schemtype: SchematicType
|
var schemtype: SchematicType
|
||||||
get() = checkDir { SchematicType.fromDB(nodeType!!) }
|
get() = checkDir { SchematicType.fromDB(nodeType!!)!! }
|
||||||
set(value) = checkDir { useDb { nodeType = value.toDB() } }
|
set(value) = checkDir { useDb { nodeType = value.toDB() } }
|
||||||
var config by SchematicNodeTable.config
|
var config by SchematicNodeTable.config
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ data class SchematicType(
|
|||||||
val Normal = SchematicType("Normal", "", Type.NORMAL, null, "STONE_BUTTON", false)
|
val Normal = SchematicType("Normal", "", Type.NORMAL, null, "STONE_BUTTON", false)
|
||||||
|
|
||||||
private val types: List<SchematicType>
|
private val types: List<SchematicType>
|
||||||
private val fromDB: Map<String, SchematicType>
|
private val fromDB: Map<String, SchematicType>?
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val tmpTypes = mutableListOf<SchematicType>()
|
val tmpTypes = mutableListOf<SchematicType>()
|
||||||
@@ -85,8 +85,7 @@ data class SchematicType(
|
|||||||
fun values() = types
|
fun values() = types
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun fromDB(value: String) =
|
fun fromDB(value: String) = fromDB?.let { it[value] }
|
||||||
fromDB[value.lowercase()] ?: throw IllegalArgumentException("Unknown SchematicType: $value")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun name() = name
|
fun name() = name
|
||||||
|
|||||||
Reference in New Issue
Block a user