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 static final Function<String, String> ToString = Function.identity();
|
||||
public static final Function<File, String> ToStaticWarGear = __ -> "WarGear";
|
||||
public static final Function<File, String> ToInternalName = file -> file != null ? file.getName().replace(".yml", "") : "WarGear";
|
||||
public static final Function<File, String> ToStaticWarGear = GameModeConfig::constWarGear;
|
||||
public static final Function<File, String> ToInternalName = GameModeConfig::internalName;
|
||||
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm");
|
||||
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>> byGameName;
|
||||
private static final Map<SchematicType, GameModeConfig<?, String>> bySchematicType;
|
||||
|
||||
@@ -33,14 +33,14 @@ import kotlin.jvm.optionals.getOrNull
|
||||
|
||||
object NodeMemberTable : CompositeIdTable("NodeMember") {
|
||||
val node = reference("NodeId", SchematicNodeTable)
|
||||
val nodeOwner = reference("NodeOwner", SteamwarUserTable)
|
||||
val parentNode = optReference("ParentNodeId", SchematicNodeTable)
|
||||
val userId = reference("UserId", SteamwarUserTable)
|
||||
val parentNode = optReference("ParentId", SchematicNodeTable)
|
||||
|
||||
override val primaryKey = PrimaryKey(node, nodeOwner)
|
||||
override val primaryKey = PrimaryKey(node, userId)
|
||||
|
||||
init {
|
||||
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 {
|
||||
NodeMemberTable.insertIgnore {
|
||||
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")
|
||||
}
|
||||
@@ -60,7 +60,7 @@ class NodeMember(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
||||
|
||||
@JvmStatic
|
||||
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
|
||||
@@ -70,14 +70,14 @@ class NodeMember(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
||||
fun getNodeMembers(node: Int) = useDb { find { NodeMemberTable.node eq node }.toSet() }
|
||||
|
||||
@JvmStatic
|
||||
fun getSchematics(member: Int) = useDb { find { NodeMemberTable.nodeOwner eq member }.toSet() }
|
||||
fun getSchematics(member: Int) = useDb { find { NodeMemberTable.userId eq member }.toSet() }
|
||||
|
||||
@JvmStatic
|
||||
fun init() = Unit
|
||||
}
|
||||
|
||||
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(
|
||||
{ it.map { EntityID(it, SchematicNodeTable) }.getOrNull() },
|
||||
{ Optional.ofNullable(it?.value) })
|
||||
|
||||
@@ -206,7 +206,7 @@ class SchematicNode(id: EntityID<Int>) : IntEntity(id) {
|
||||
|
||||
@JvmStatic
|
||||
fun getAllAccessibleSchematicsOfType(user: Int, type: String) =
|
||||
accessibleByUserType(SteamwarUser.byId(user)!!, SchematicType.fromDB(type))
|
||||
accessibleByUserType(SteamwarUser.byId(user)!!, SchematicType.fromDB(type)!!)
|
||||
|
||||
@JvmStatic
|
||||
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
|
||||
var schemtype: SchematicType
|
||||
get() = checkDir { SchematicType.fromDB(nodeType!!) }
|
||||
get() = checkDir { SchematicType.fromDB(nodeType!!)!! }
|
||||
set(value) = checkDir { useDb { nodeType = value.toDB() } }
|
||||
var config by SchematicNodeTable.config
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ data class SchematicType(
|
||||
val Normal = SchematicType("Normal", "", Type.NORMAL, null, "STONE_BUTTON", false)
|
||||
|
||||
private val types: List<SchematicType>
|
||||
private val fromDB: Map<String, SchematicType>
|
||||
private val fromDB: Map<String, SchematicType>?
|
||||
|
||||
init {
|
||||
val tmpTypes = mutableListOf<SchematicType>()
|
||||
@@ -85,8 +85,7 @@ data class SchematicType(
|
||||
fun values() = types
|
||||
|
||||
@JvmStatic
|
||||
fun fromDB(value: String) =
|
||||
fromDB[value.lowercase()] ?: throw IllegalArgumentException("Unknown SchematicType: $value")
|
||||
fun fromDB(value: String) = fromDB?.let { it[value] }
|
||||
}
|
||||
|
||||
fun name() = name
|
||||
|
||||
Reference in New Issue
Block a user