From 0a20ef601d37fb8725bfb1180f87136e40acca25 Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Fri, 23 Aug 2019 02:27:36 +0200 Subject: [PATCH] client: Add database (#1424) * client: Add h2 and jooq * client: Add database manager * client: Add a helper to generate JOOQ classes * client: Add JOOQ classes * loottracker: Create database tables when they don't exist on startup * loottracker: Only migrate if datasource exists --- build.gradle | 1 + runelite-client/build.gradle | 4 + .../client/database/DatabaseManager.java | 87 +++++ .../client/database/GenerateClasses.java | 42 +++ .../client/database/data/DefaultCatalog.java | 62 ++++ .../client/database/data/Indexes.java | 55 +++ .../runelite/client/database/data/Keys.java | 76 +++++ .../runelite/client/database/data/Public.java | 95 ++++++ .../runelite/client/database/data/Tables.java | 47 +++ .../data/tables/Loottrackerevents.java | 189 +++++++++++ .../database/data/tables/Loottrackerlink.java | 212 ++++++++++++ .../database/data/tables/Loottrackerloot.java | 183 ++++++++++ .../client/database/data/tables/User.java | 178 ++++++++++ .../records/LoottrackereventsRecord.java | 318 ++++++++++++++++++ .../tables/records/LoottrackerlinkRecord.java | 317 +++++++++++++++++ .../tables/records/LoottrackerlootRecord.java | 262 +++++++++++++++ .../data/tables/records/UserRecord.java | 207 ++++++++++++ .../loottracker/LootTrackerPlugin.java | 304 ++++++++++++++--- 18 files changed, 2590 insertions(+), 49 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/GenerateClasses.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/DefaultCatalog.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/Indexes.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/Keys.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/Public.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/Tables.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerevents.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerlink.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerloot.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/tables/User.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackereventsRecord.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackerlinkRecord.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackerlootRecord.java create mode 100644 runelite-client/src/main/java/net/runelite/client/database/data/tables/records/UserRecord.java diff --git a/build.gradle b/build.gradle index 48e693c9a0..4793bbf30a 100644 --- a/build.gradle +++ b/build.gradle @@ -50,6 +50,7 @@ ext { jna = '5.4.0' jogamp = '2.3.2' jopt = '5.0.4' + jooq = '3.11.12' junit = '4.12' jupiter = '5.5.1' logback = '1.2.3' diff --git a/runelite-client/build.gradle b/runelite-client/build.gradle index 89b5bf51d4..2a0f3402c0 100644 --- a/runelite-client/build.gradle +++ b/runelite-client/build.gradle @@ -18,6 +18,7 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: gson implementation group: 'com.google.guava', name: 'guava', version: guava implementation group: 'com.google.inject', name: 'guice', version: guice, classifier: 'no_aop' + implementation group: 'com.h2database', name: 'h2', version: h2 implementation group: 'com.jakewharton.rxrelay2', name: 'rxrelay', version: rxrelay implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: okhttp3 implementation group: 'io.reactivex.rxjava2', name: 'rxjava', version: rxjava @@ -34,6 +35,9 @@ dependencies { implementation group: 'org.jetbrains', name: 'annotations', version: annotations implementation group: 'org.jogamp.gluegen', name: 'gluegen-rt', version: jogamp implementation group: 'org.jogamp.jogl', name: 'jogl-all', version: jogamp + implementation group: 'org.jooq', name: 'jooq', version: jooq + implementation group: 'org.jooq', name: 'jooq-codegen', version: jooq + implementation group: 'org.jooq', name: 'jooq-meta', version: jooq implementation group: 'org.ow2.asm', name: 'asm-tree', version: asm implementation group: 'org.slf4j', name: 'slf4j-api', version: slf4j implementation group: 'org.xeustechnologies', name: 'jcl-core', version: jclCore diff --git a/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java b/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java new file mode 100644 index 0000000000..2ed0f6ad5c --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java @@ -0,0 +1,87 @@ +package net.runelite.client.database; + +import java.io.File; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import javax.inject.Singleton; +import lombok.extern.slf4j.Slf4j; +import static net.runelite.client.RuneLite.RUNELITE_DIR; +import org.h2.jdbcx.JdbcDataSource; +import org.jooq.DSLContext; +import org.jooq.SQLDialect; +import org.jooq.impl.DSL; + +@Singleton +@Slf4j +public class DatabaseManager +{ + private static final String DB_URL = "jdbc:h2:" + RUNELITE_DIR + File.separator + "RunelitePlus;AUTO_SERVER=TRUE"; + + // Database credentials + private static final String USER = "RLP"; + private static final String PASS = ""; + + private Connection connection; + + DatabaseManager() + { + System.getProperties().setProperty("org.jooq.no-logo", "true"); + } + + private void connect() + { + if (connection != null) + { + return; + } + + JdbcDataSource ds = new JdbcDataSource(); + ds.setURL(DatabaseManager.DB_URL); + ds.setUser(DatabaseManager.USER); + ds.setPassword(DatabaseManager.PASS); + + try + { + connection = ds.getConnection(); + } + catch (SQLException e) + { + e.printStackTrace(); + } + } + + Connection getConnection() + { + connect(); + + return connection; + } + + public DSLContext getDsl() + { + return DSL.using(connection, SQLDialect.H2); + } + + public boolean checkTableExists(String table) + { + boolean tableExists = false; + + connect(); + + try + { + ResultSet rset = connection.getMetaData().getTables(null, null, table.toUpperCase(), null); + if (rset.next()) + { + tableExists = true; + } + } + catch (SQLException e) + { + e.printStackTrace(); + } + + return tableExists; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/GenerateClasses.java b/runelite-client/src/main/java/net/runelite/client/database/GenerateClasses.java new file mode 100644 index 0000000000..dc595527d5 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/GenerateClasses.java @@ -0,0 +1,42 @@ +package net.runelite.client.database; + +import java.sql.Connection; +import org.jooq.codegen.GenerationTool; +import org.jooq.meta.h2.H2Database; +import org.jooq.meta.jaxb.Configuration; +import org.jooq.meta.jaxb.Database; +import org.jooq.meta.jaxb.Generator; +import org.jooq.meta.jaxb.Target; + +public class GenerateClasses +{ + public static void main(String... args) + { + DatabaseManager databaseManager = new DatabaseManager(); + + try (Connection c = databaseManager.getConnection()) + { + Configuration configuration = new Configuration() + .withGenerator(new Generator() + .withDatabase(new Database() + .withName(H2Database.class.getCanonicalName()) + .withIncludes(".*") + .withExcludes("") + .withInputSchema("PUBLIC") + ) + .withTarget(new Target() + .withPackageName("net.runelite.client.database.data") + .withDirectory("runelite-client/src/main/java/net/runelite/client/database/data") + ) + ); + + GenerationTool tool = new GenerationTool(); + tool.setConnection(c); + tool.run(configuration); + } + catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/DefaultCatalog.java b/runelite-client/src/main/java/net/runelite/client/database/data/DefaultCatalog.java new file mode 100644 index 0000000000..4a2a9d4eff --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/DefaultCatalog.java @@ -0,0 +1,62 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data; + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.annotation.Generated; +import org.jooq.Schema; +import org.jooq.impl.CatalogImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class DefaultCatalog extends CatalogImpl +{ + + private static final long serialVersionUID = 836257769; + + /** + * The reference instance of + */ + public static final DefaultCatalog DEFAULT_CATALOG = new DefaultCatalog(); + + /** + * The schema PUBLIC. + */ + public final Public PUBLIC = net.runelite.client.database.data.Public.PUBLIC; + + /** + * No further instances allowed + */ + private DefaultCatalog() + { + super(""); + } + + @Override + public final List getSchemas() + { + List result = new ArrayList(); + result.addAll(getSchemas0()); + return result; + } + + private final List getSchemas0() + { + return Arrays.asList( + Public.PUBLIC); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/Indexes.java b/runelite-client/src/main/java/net/runelite/client/database/data/Indexes.java new file mode 100644 index 0000000000..b736e0093e --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/Indexes.java @@ -0,0 +1,55 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data; + + +import javax.annotation.Generated; +import net.runelite.client.database.data.tables.Loottrackerevents; +import net.runelite.client.database.data.tables.Loottrackerlink; +import net.runelite.client.database.data.tables.Loottrackerloot; +import net.runelite.client.database.data.tables.User; +import org.jooq.Index; +import org.jooq.OrderField; +import org.jooq.impl.Internal; + + +/** + * A class modelling indexes of tables of the PUBLIC schema. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class Indexes +{ + + // ------------------------------------------------------------------------- + // INDEX definitions + // ------------------------------------------------------------------------- + + public static final Index PRIMARY_KEY_B = Indexes0.PRIMARY_KEY_B; + public static final Index FK_LOOTTRACKEREVENT_INDEX_6 = Indexes0.FK_LOOTTRACKEREVENT_INDEX_6; + public static final Index FK_LOOTTRACKERLOOT_INDEX_6 = Indexes0.FK_LOOTTRACKERLOOT_INDEX_6; + public static final Index PRIMARY_KEY_6B = Indexes0.PRIMARY_KEY_6B; + public static final Index PRIMARY_KEY_6 = Indexes0.PRIMARY_KEY_6; + public static final Index PRIMARY_KEY_2 = Indexes0.PRIMARY_KEY_2; + + // ------------------------------------------------------------------------- + // [#1459] distribute members to avoid static initialisers > 64kb + // ------------------------------------------------------------------------- + + private static class Indexes0 + { + public static Index PRIMARY_KEY_B = Internal.createIndex("PRIMARY_KEY_B", Loottrackerevents.LOOTTRACKEREVENTS, new OrderField[]{Loottrackerevents.LOOTTRACKEREVENTS.UNIQUEID}, true); + public static Index FK_LOOTTRACKEREVENT_INDEX_6 = Internal.createIndex("FK_LOOTTRACKEREVENT_INDEX_6", Loottrackerlink.LOOTTRACKERLINK, new OrderField[]{Loottrackerlink.LOOTTRACKERLINK.EVENTUNIQUEID}, false); + public static Index FK_LOOTTRACKERLOOT_INDEX_6 = Internal.createIndex("FK_LOOTTRACKERLOOT_INDEX_6", Loottrackerlink.LOOTTRACKERLINK, new OrderField[]{Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID}, false); + public static Index PRIMARY_KEY_6B = Internal.createIndex("PRIMARY_KEY_6B", Loottrackerlink.LOOTTRACKERLINK, new OrderField[]{Loottrackerlink.LOOTTRACKERLINK.LINKUNIQUEID}, true); + public static Index PRIMARY_KEY_6 = Internal.createIndex("PRIMARY_KEY_6", Loottrackerloot.LOOTTRACKERLOOT, new OrderField[]{Loottrackerloot.LOOTTRACKERLOOT.UNIQUEID}, true); + public static Index PRIMARY_KEY_2 = Internal.createIndex("PRIMARY_KEY_2", User.USER, new OrderField[]{User.USER.UNIQUEID}, true); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/Keys.java b/runelite-client/src/main/java/net/runelite/client/database/data/Keys.java new file mode 100644 index 0000000000..fc561055c9 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/Keys.java @@ -0,0 +1,76 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data; + + +import javax.annotation.Generated; +import net.runelite.client.database.data.tables.Loottrackerevents; +import net.runelite.client.database.data.tables.Loottrackerlink; +import net.runelite.client.database.data.tables.Loottrackerloot; +import net.runelite.client.database.data.tables.User; +import net.runelite.client.database.data.tables.records.LoottrackereventsRecord; +import net.runelite.client.database.data.tables.records.LoottrackerlinkRecord; +import net.runelite.client.database.data.tables.records.LoottrackerlootRecord; +import net.runelite.client.database.data.tables.records.UserRecord; +import org.jooq.ForeignKey; +import org.jooq.UniqueKey; +import org.jooq.impl.Internal; + + +/** + * A class modelling foreign key relationships and constraints of tables of + * the PUBLIC schema. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class Keys +{ + + // ------------------------------------------------------------------------- + // IDENTITY definitions + // ------------------------------------------------------------------------- + + + // ------------------------------------------------------------------------- + // UNIQUE and PRIMARY KEY definitions + // ------------------------------------------------------------------------- + + public static final UniqueKey PK_EVENTUNIQUEID = UniqueKeys0.PK_EVENTUNIQUEID; + public static final UniqueKey PK_LOOTTRACKERLINK = UniqueKeys0.PK_LOOTTRACKERLINK; + public static final UniqueKey PK_LOOTUNIQUEID = UniqueKeys0.PK_LOOTUNIQUEID; + public static final UniqueKey PK_USER = UniqueKeys0.PK_USER; + + // ------------------------------------------------------------------------- + // FOREIGN KEY definitions + // ------------------------------------------------------------------------- + + public static final ForeignKey FK_LOOTTRACKEREVENT = ForeignKeys0.FK_LOOTTRACKEREVENT; + public static final ForeignKey FK_LOOTTRACKERLOOT = ForeignKeys0.FK_LOOTTRACKERLOOT; + public static final ForeignKey FK_USER = ForeignKeys0.FK_USER; + + // ------------------------------------------------------------------------- + // [#1459] distribute members to avoid static initialisers > 64kb + // ------------------------------------------------------------------------- + + private static class UniqueKeys0 + { + public static final UniqueKey PK_EVENTUNIQUEID = Internal.createUniqueKey(Loottrackerevents.LOOTTRACKEREVENTS, "PK_EVENTUNIQUEID", Loottrackerevents.LOOTTRACKEREVENTS.UNIQUEID); + public static final UniqueKey PK_LOOTTRACKERLINK = Internal.createUniqueKey(Loottrackerlink.LOOTTRACKERLINK, "PK_LOOTTRACKERLINK", Loottrackerlink.LOOTTRACKERLINK.LINKUNIQUEID); + public static final UniqueKey PK_LOOTUNIQUEID = Internal.createUniqueKey(Loottrackerloot.LOOTTRACKERLOOT, "PK_LOOTUNIQUEID", Loottrackerloot.LOOTTRACKERLOOT.UNIQUEID); + public static final UniqueKey PK_USER = Internal.createUniqueKey(User.USER, "PK_USER", User.USER.UNIQUEID); + } + + private static class ForeignKeys0 + { + public static final ForeignKey FK_LOOTTRACKEREVENT = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_EVENTUNIQUEID, Loottrackerlink.LOOTTRACKERLINK, "FK_LOOTTRACKEREVENT", Loottrackerlink.LOOTTRACKERLINK.EVENTUNIQUEID); + public static final ForeignKey FK_LOOTTRACKERLOOT = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_LOOTUNIQUEID, Loottrackerlink.LOOTTRACKERLINK, "FK_LOOTTRACKERLOOT", Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID); + public static final ForeignKey FK_USER = Internal.createForeignKey(net.runelite.client.database.data.Keys.PK_USER, Loottrackerlink.LOOTTRACKERLINK, "FK_USER", Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/Public.java b/runelite-client/src/main/java/net/runelite/client/database/data/Public.java new file mode 100644 index 0000000000..7120f8ad40 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/Public.java @@ -0,0 +1,95 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data; + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.annotation.Generated; +import net.runelite.client.database.data.tables.Loottrackerevents; +import net.runelite.client.database.data.tables.Loottrackerlink; +import net.runelite.client.database.data.tables.Loottrackerloot; +import net.runelite.client.database.data.tables.User; +import org.jooq.Catalog; +import org.jooq.Table; +import org.jooq.impl.SchemaImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class Public extends SchemaImpl +{ + + private static final long serialVersionUID = 1499404561; + + /** + * The reference instance of PUBLIC + */ + public static final Public PUBLIC = new Public(); + + /** + * The table PUBLIC.LOOTTRACKEREVENTS. + */ + public final Loottrackerevents LOOTTRACKEREVENTS = net.runelite.client.database.data.tables.Loottrackerevents.LOOTTRACKEREVENTS; + + /** + * The table PUBLIC.LOOTTRACKERLINK. + */ + public final Loottrackerlink LOOTTRACKERLINK = net.runelite.client.database.data.tables.Loottrackerlink.LOOTTRACKERLINK; + + /** + * The table PUBLIC.LOOTTRACKERLOOT. + */ + public final Loottrackerloot LOOTTRACKERLOOT = net.runelite.client.database.data.tables.Loottrackerloot.LOOTTRACKERLOOT; + + /** + * The table PUBLIC.USER. + */ + public final User USER = net.runelite.client.database.data.tables.User.USER; + + /** + * No further instances allowed + */ + private Public() + { + super("PUBLIC", null); + } + + + /** + * {@inheritDoc} + */ + @Override + public Catalog getCatalog() + { + return DefaultCatalog.DEFAULT_CATALOG; + } + + @Override + public final List> getTables() + { + List result = new ArrayList(); + result.addAll(getTables0()); + return result; + } + + private final List> getTables0() + { + return Arrays.>asList( + Loottrackerevents.LOOTTRACKEREVENTS, + Loottrackerlink.LOOTTRACKERLINK, + Loottrackerloot.LOOTTRACKERLOOT, + User.USER); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/Tables.java b/runelite-client/src/main/java/net/runelite/client/database/data/Tables.java new file mode 100644 index 0000000000..f55ce70631 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/Tables.java @@ -0,0 +1,47 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data; + + +import javax.annotation.Generated; +import net.runelite.client.database.data.tables.Loottrackerevents; +import net.runelite.client.database.data.tables.Loottrackerlink; +import net.runelite.client.database.data.tables.Loottrackerloot; +import net.runelite.client.database.data.tables.User; + + +/** + * Convenience access to all tables in PUBLIC + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class Tables +{ + + /** + * The table PUBLIC.LOOTTRACKEREVENTS. + */ + public static final Loottrackerevents LOOTTRACKEREVENTS = net.runelite.client.database.data.tables.Loottrackerevents.LOOTTRACKEREVENTS; + + /** + * The table PUBLIC.LOOTTRACKERLINK. + */ + public static final Loottrackerlink LOOTTRACKERLINK = net.runelite.client.database.data.tables.Loottrackerlink.LOOTTRACKERLINK; + + /** + * The table PUBLIC.LOOTTRACKERLOOT. + */ + public static final Loottrackerloot LOOTTRACKERLOOT = net.runelite.client.database.data.tables.Loottrackerloot.LOOTTRACKERLOOT; + + /** + * The table PUBLIC.USER. + */ + public static final User USER = net.runelite.client.database.data.tables.User.USER; +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerevents.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerevents.java new file mode 100644 index 0000000000..d139de8d1f --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerevents.java @@ -0,0 +1,189 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables; + + +import java.sql.Timestamp; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import javax.annotation.Generated; +import net.runelite.client.database.data.Indexes; +import net.runelite.client.database.data.Keys; +import net.runelite.client.database.data.Public; +import net.runelite.client.database.data.tables.records.LoottrackereventsRecord; +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class Loottrackerevents extends TableImpl +{ + + private static final long serialVersionUID = -824670812; + + /** + * The reference instance of PUBLIC.LOOTTRACKEREVENTS + */ + public static final Loottrackerevents LOOTTRACKEREVENTS = new Loottrackerevents(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() + { + return LoottrackereventsRecord.class; + } + + /** + * The column PUBLIC.LOOTTRACKEREVENTS.UNIQUEID. + */ + public final TableField UNIQUEID = createField("UNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + + /** + * The column PUBLIC.LOOTTRACKEREVENTS.EVENTID. + */ + public final TableField EVENTID = createField("EVENTID", org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, ""); + + /** + * The column PUBLIC.LOOTTRACKEREVENTS.TYPE. + */ + public final TableField TYPE = createField("TYPE", org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, ""); + + /** + * The column PUBLIC.LOOTTRACKEREVENTS.TIME. + */ + public final TableField TIME = createField("TIME", org.jooq.impl.SQLDataType.TIMESTAMP.precision(6).nullable(false), this, ""); + + /** + * Create a PUBLIC.LOOTTRACKEREVENTS table reference + */ + public Loottrackerevents() + { + this(DSL.name("LOOTTRACKEREVENTS"), null); + } + + /** + * Create an aliased PUBLIC.LOOTTRACKEREVENTS table reference + */ + public Loottrackerevents(String alias) + { + this(DSL.name(alias), LOOTTRACKEREVENTS); + } + + /** + * Create an aliased PUBLIC.LOOTTRACKEREVENTS table reference + */ + public Loottrackerevents(Name alias) + { + this(alias, LOOTTRACKEREVENTS); + } + + private Loottrackerevents(Name alias, Table aliased) + { + this(alias, aliased, null); + } + + private Loottrackerevents(Name alias, Table aliased, Field[] parameters) + { + super(alias, null, aliased, parameters, DSL.comment("")); + } + + public Loottrackerevents(Table child, ForeignKey key) + { + super(child, key, LOOTTRACKEREVENTS); + } + + /** + * {@inheritDoc} + */ + @Override + public Schema getSchema() + { + return Public.PUBLIC; + } + + /** + * {@inheritDoc} + */ + @Override + public List getIndexes() + { + return Arrays.asList(Indexes.PRIMARY_KEY_B); + } + + /** + * {@inheritDoc} + */ + @Override + public UniqueKey getPrimaryKey() + { + return Keys.PK_EVENTUNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public List> getKeys() + { + return Arrays.>asList(Keys.PK_EVENTUNIQUEID); + } + + /** + * {@inheritDoc} + */ + @Override + public Loottrackerevents as(String alias) + { + return new Loottrackerevents(DSL.name(alias), this); + } + + /** + * {@inheritDoc} + */ + @Override + public Loottrackerevents as(Name alias) + { + return new Loottrackerevents(alias, this); + } + + /** + * Rename this table + */ + @Override + public Loottrackerevents rename(String name) + { + return new Loottrackerevents(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public Loottrackerevents rename(Name name) + { + return new Loottrackerevents(name, null); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerlink.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerlink.java new file mode 100644 index 0000000000..c720d8e5f5 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerlink.java @@ -0,0 +1,212 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables; + + +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import javax.annotation.Generated; +import net.runelite.client.database.data.Indexes; +import net.runelite.client.database.data.Keys; +import net.runelite.client.database.data.Public; +import net.runelite.client.database.data.tables.records.LoottrackerlinkRecord; +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class Loottrackerlink extends TableImpl +{ + + private static final long serialVersionUID = 1145289106; + + /** + * The reference instance of PUBLIC.LOOTTRACKERLINK + */ + public static final Loottrackerlink LOOTTRACKERLINK = new Loottrackerlink(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() + { + return LoottrackerlinkRecord.class; + } + + /** + * The column PUBLIC.LOOTTRACKERLINK.LINKUNIQUEID. + */ + public final TableField LINKUNIQUEID = createField("LINKUNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + + /** + * The column PUBLIC.LOOTTRACKERLINK.EVENTUNIQUEID. + */ + public final TableField EVENTUNIQUEID = createField("EVENTUNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + + /** + * The column PUBLIC.LOOTTRACKERLINK.DROPUNIQUEID. + */ + public final TableField DROPUNIQUEID = createField("DROPUNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + + /** + * The column PUBLIC.LOOTTRACKERLINK.USERUNIQUEID. + */ + public final TableField USERUNIQUEID = createField("USERUNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + + /** + * Create a PUBLIC.LOOTTRACKERLINK table reference + */ + public Loottrackerlink() + { + this(DSL.name("LOOTTRACKERLINK"), null); + } + + /** + * Create an aliased PUBLIC.LOOTTRACKERLINK table reference + */ + public Loottrackerlink(String alias) + { + this(DSL.name(alias), LOOTTRACKERLINK); + } + + /** + * Create an aliased PUBLIC.LOOTTRACKERLINK table reference + */ + public Loottrackerlink(Name alias) + { + this(alias, LOOTTRACKERLINK); + } + + private Loottrackerlink(Name alias, Table aliased) + { + this(alias, aliased, null); + } + + private Loottrackerlink(Name alias, Table aliased, Field[] parameters) + { + super(alias, null, aliased, parameters, DSL.comment("")); + } + + public Loottrackerlink(Table child, ForeignKey key) + { + super(child, key, LOOTTRACKERLINK); + } + + /** + * {@inheritDoc} + */ + @Override + public Schema getSchema() + { + return Public.PUBLIC; + } + + /** + * {@inheritDoc} + */ + @Override + public List getIndexes() + { + return Arrays.asList(Indexes.FK_LOOTTRACKEREVENT_INDEX_6, Indexes.FK_LOOTTRACKERLOOT_INDEX_6, Indexes.PRIMARY_KEY_6B); + } + + /** + * {@inheritDoc} + */ + @Override + public UniqueKey getPrimaryKey() + { + return Keys.PK_LOOTTRACKERLINK; + } + + /** + * {@inheritDoc} + */ + @Override + public List> getKeys() + { + return Arrays.>asList(Keys.PK_LOOTTRACKERLINK); + } + + /** + * {@inheritDoc} + */ + @Override + public List> getReferences() + { + return Arrays.>asList(Keys.FK_LOOTTRACKEREVENT, Keys.FK_LOOTTRACKERLOOT, Keys.FK_USER); + } + + public Loottrackerevents loottrackerevents() + { + return new Loottrackerevents(this, Keys.FK_LOOTTRACKEREVENT); + } + + public Loottrackerloot loottrackerloot() + { + return new Loottrackerloot(this, Keys.FK_LOOTTRACKERLOOT); + } + + public User user() + { + return new User(this, Keys.FK_USER); + } + + /** + * {@inheritDoc} + */ + @Override + public Loottrackerlink as(String alias) + { + return new Loottrackerlink(DSL.name(alias), this); + } + + /** + * {@inheritDoc} + */ + @Override + public Loottrackerlink as(Name alias) + { + return new Loottrackerlink(alias, this); + } + + /** + * Rename this table + */ + @Override + public Loottrackerlink rename(String name) + { + return new Loottrackerlink(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public Loottrackerlink rename(Name name) + { + return new Loottrackerlink(name, null); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerloot.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerloot.java new file mode 100644 index 0000000000..6ea79852d8 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/Loottrackerloot.java @@ -0,0 +1,183 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables; + + +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import javax.annotation.Generated; +import net.runelite.client.database.data.Indexes; +import net.runelite.client.database.data.Keys; +import net.runelite.client.database.data.Public; +import net.runelite.client.database.data.tables.records.LoottrackerlootRecord; +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class Loottrackerloot extends TableImpl +{ + + private static final long serialVersionUID = 1952959378; + + /** + * The reference instance of PUBLIC.LOOTTRACKERLOOT + */ + public static final Loottrackerloot LOOTTRACKERLOOT = new Loottrackerloot(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() + { + return LoottrackerlootRecord.class; + } + + /** + * The column PUBLIC.LOOTTRACKERLOOT.UNIQUEID. + */ + public final TableField UNIQUEID = createField("UNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + + /** + * The column PUBLIC.LOOTTRACKERLOOT.ITEMID. + */ + public final TableField ITEMID = createField("ITEMID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.LOOTTRACKERLOOT.QUANTITY. + */ + public final TableField QUANTITY = createField("QUANTITY", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * Create a PUBLIC.LOOTTRACKERLOOT table reference + */ + public Loottrackerloot() + { + this(DSL.name("LOOTTRACKERLOOT"), null); + } + + /** + * Create an aliased PUBLIC.LOOTTRACKERLOOT table reference + */ + public Loottrackerloot(String alias) + { + this(DSL.name(alias), LOOTTRACKERLOOT); + } + + /** + * Create an aliased PUBLIC.LOOTTRACKERLOOT table reference + */ + public Loottrackerloot(Name alias) + { + this(alias, LOOTTRACKERLOOT); + } + + private Loottrackerloot(Name alias, Table aliased) + { + this(alias, aliased, null); + } + + private Loottrackerloot(Name alias, Table aliased, Field[] parameters) + { + super(alias, null, aliased, parameters, DSL.comment("")); + } + + public Loottrackerloot(Table child, ForeignKey key) + { + super(child, key, LOOTTRACKERLOOT); + } + + /** + * {@inheritDoc} + */ + @Override + public Schema getSchema() + { + return Public.PUBLIC; + } + + /** + * {@inheritDoc} + */ + @Override + public List getIndexes() + { + return Arrays.asList(Indexes.PRIMARY_KEY_6); + } + + /** + * {@inheritDoc} + */ + @Override + public UniqueKey getPrimaryKey() + { + return Keys.PK_LOOTUNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public List> getKeys() + { + return Arrays.>asList(Keys.PK_LOOTUNIQUEID); + } + + /** + * {@inheritDoc} + */ + @Override + public Loottrackerloot as(String alias) + { + return new Loottrackerloot(DSL.name(alias), this); + } + + /** + * {@inheritDoc} + */ + @Override + public Loottrackerloot as(Name alias) + { + return new Loottrackerloot(alias, this); + } + + /** + * Rename this table + */ + @Override + public Loottrackerloot rename(String name) + { + return new Loottrackerloot(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public Loottrackerloot rename(Name name) + { + return new Loottrackerloot(name, null); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/User.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/User.java new file mode 100644 index 0000000000..b9295a486d --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/User.java @@ -0,0 +1,178 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables; + + +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import javax.annotation.Generated; +import net.runelite.client.database.data.Indexes; +import net.runelite.client.database.data.Keys; +import net.runelite.client.database.data.Public; +import net.runelite.client.database.data.tables.records.UserRecord; +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class User extends TableImpl +{ + + private static final long serialVersionUID = 270848699; + + /** + * The reference instance of PUBLIC.USER + */ + public static final User USER = new User(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() + { + return UserRecord.class; + } + + /** + * The column PUBLIC.USER.UNIQUEID. + */ + public final TableField UNIQUEID = createField("UNIQUEID", org.jooq.impl.SQLDataType.UUID.nullable(false), this, ""); + + /** + * The column PUBLIC.USER.USERNAME. + */ + public final TableField USERNAME = createField("USERNAME", org.jooq.impl.SQLDataType.VARCHAR(12).nullable(false), this, ""); + + /** + * Create a PUBLIC.USER table reference + */ + public User() + { + this(DSL.name("USER"), null); + } + + /** + * Create an aliased PUBLIC.USER table reference + */ + public User(String alias) + { + this(DSL.name(alias), USER); + } + + /** + * Create an aliased PUBLIC.USER table reference + */ + public User(Name alias) + { + this(alias, USER); + } + + private User(Name alias, Table aliased) + { + this(alias, aliased, null); + } + + private User(Name alias, Table aliased, Field[] parameters) + { + super(alias, null, aliased, parameters, DSL.comment("")); + } + + public User(Table child, ForeignKey key) + { + super(child, key, USER); + } + + /** + * {@inheritDoc} + */ + @Override + public Schema getSchema() + { + return Public.PUBLIC; + } + + /** + * {@inheritDoc} + */ + @Override + public List getIndexes() + { + return Arrays.asList(Indexes.PRIMARY_KEY_2); + } + + /** + * {@inheritDoc} + */ + @Override + public UniqueKey getPrimaryKey() + { + return Keys.PK_USER; + } + + /** + * {@inheritDoc} + */ + @Override + public List> getKeys() + { + return Arrays.>asList(Keys.PK_USER); + } + + /** + * {@inheritDoc} + */ + @Override + public User as(String alias) + { + return new User(DSL.name(alias), this); + } + + /** + * {@inheritDoc} + */ + @Override + public User as(Name alias) + { + return new User(alias, this); + } + + /** + * Rename this table + */ + @Override + public User rename(String name) + { + return new User(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public User rename(Name name) + { + return new User(name, null); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackereventsRecord.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackereventsRecord.java new file mode 100644 index 0000000000..9bd71f4468 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackereventsRecord.java @@ -0,0 +1,318 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables.records; + + +import java.sql.Timestamp; +import java.util.UUID; +import javax.annotation.Generated; +import net.runelite.client.database.data.tables.Loottrackerevents; +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record4; +import org.jooq.Row4; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class LoottrackereventsRecord extends UpdatableRecordImpl implements Record4 +{ + + private static final long serialVersionUID = -1505143967; + + /** + * Setter for PUBLIC.LOOTTRACKEREVENTS.UNIQUEID. + */ + public void setUniqueid(UUID value) + { + set(0, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKEREVENTS.UNIQUEID. + */ + public UUID getUniqueid() + { + return (UUID) get(0); + } + + /** + * Setter for PUBLIC.LOOTTRACKEREVENTS.EVENTID. + */ + public void setEventid(String value) + { + set(1, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKEREVENTS.EVENTID. + */ + public String getEventid() + { + return (String) get(1); + } + + /** + * Setter for PUBLIC.LOOTTRACKEREVENTS.TYPE. + */ + public void setType(String value) + { + set(2, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKEREVENTS.TYPE. + */ + public String getType() + { + return (String) get(2); + } + + /** + * Setter for PUBLIC.LOOTTRACKEREVENTS.TIME. + */ + public void setTime(Timestamp value) + { + set(3, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKEREVENTS.TIME. + */ + public Timestamp getTime() + { + return (Timestamp) get(3); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Record1 key() + { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record4 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row4 fieldsRow() + { + return (Row4) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row4 valuesRow() + { + return (Row4) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() + { + return Loottrackerevents.LOOTTRACKEREVENTS.UNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() + { + return Loottrackerevents.LOOTTRACKEREVENTS.EVENTID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() + { + return Loottrackerevents.LOOTTRACKEREVENTS.TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() + { + return Loottrackerevents.LOOTTRACKEREVENTS.TIME; + } + + /** + * {@inheritDoc} + */ + @Override + public UUID component1() + { + return getUniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public String component2() + { + return getEventid(); + } + + /** + * {@inheritDoc} + */ + @Override + public String component3() + { + return getType(); + } + + /** + * {@inheritDoc} + */ + @Override + public Timestamp component4() + { + return getTime(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID value1() + { + return getUniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() + { + return getEventid(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() + { + return getType(); + } + + /** + * {@inheritDoc} + */ + @Override + public Timestamp value4() + { + return getTime(); + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackereventsRecord value1(UUID value) + { + setUniqueid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackereventsRecord value2(String value) + { + setEventid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackereventsRecord value3(String value) + { + setType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackereventsRecord value4(Timestamp value) + { + setTime(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackereventsRecord values(UUID value1, String value2, String value3, Timestamp value4) + { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached LoottrackereventsRecord + */ + public LoottrackereventsRecord() + { + super(Loottrackerevents.LOOTTRACKEREVENTS); + } + + /** + * Create a detached, initialised LoottrackereventsRecord + */ + public LoottrackereventsRecord(UUID uniqueid, String eventid, String type, Timestamp time) + { + super(Loottrackerevents.LOOTTRACKEREVENTS); + + set(0, uniqueid); + set(1, eventid); + set(2, type); + set(3, time); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackerlinkRecord.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackerlinkRecord.java new file mode 100644 index 0000000000..f4b9c0eb1e --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackerlinkRecord.java @@ -0,0 +1,317 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables.records; + + +import java.util.UUID; +import javax.annotation.Generated; +import net.runelite.client.database.data.tables.Loottrackerlink; +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record4; +import org.jooq.Row4; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class LoottrackerlinkRecord extends UpdatableRecordImpl implements Record4 +{ + + private static final long serialVersionUID = 1985117517; + + /** + * Setter for PUBLIC.LOOTTRACKERLINK.LINKUNIQUEID. + */ + public void setLinkuniqueid(UUID value) + { + set(0, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKERLINK.LINKUNIQUEID. + */ + public UUID getLinkuniqueid() + { + return (UUID) get(0); + } + + /** + * Setter for PUBLIC.LOOTTRACKERLINK.EVENTUNIQUEID. + */ + public void setEventuniqueid(UUID value) + { + set(1, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKERLINK.EVENTUNIQUEID. + */ + public UUID getEventuniqueid() + { + return (UUID) get(1); + } + + /** + * Setter for PUBLIC.LOOTTRACKERLINK.DROPUNIQUEID. + */ + public void setDropuniqueid(UUID value) + { + set(2, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKERLINK.DROPUNIQUEID. + */ + public UUID getDropuniqueid() + { + return (UUID) get(2); + } + + /** + * Setter for PUBLIC.LOOTTRACKERLINK.USERUNIQUEID. + */ + public void setUseruniqueid(UUID value) + { + set(3, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKERLINK.USERUNIQUEID. + */ + public UUID getUseruniqueid() + { + return (UUID) get(3); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Record1 key() + { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record4 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row4 fieldsRow() + { + return (Row4) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row4 valuesRow() + { + return (Row4) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() + { + return Loottrackerlink.LOOTTRACKERLINK.LINKUNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() + { + return Loottrackerlink.LOOTTRACKERLINK.EVENTUNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() + { + return Loottrackerlink.LOOTTRACKERLINK.DROPUNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() + { + return Loottrackerlink.LOOTTRACKERLINK.USERUNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public UUID component1() + { + return getLinkuniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID component2() + { + return getEventuniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID component3() + { + return getDropuniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID component4() + { + return getUseruniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID value1() + { + return getLinkuniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID value2() + { + return getEventuniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID value3() + { + return getDropuniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID value4() + { + return getUseruniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlinkRecord value1(UUID value) + { + setLinkuniqueid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlinkRecord value2(UUID value) + { + setEventuniqueid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlinkRecord value3(UUID value) + { + setDropuniqueid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlinkRecord value4(UUID value) + { + setUseruniqueid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlinkRecord values(UUID value1, UUID value2, UUID value3, UUID value4) + { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached LoottrackerlinkRecord + */ + public LoottrackerlinkRecord() + { + super(Loottrackerlink.LOOTTRACKERLINK); + } + + /** + * Create a detached, initialised LoottrackerlinkRecord + */ + public LoottrackerlinkRecord(UUID linkuniqueid, UUID eventuniqueid, UUID dropuniqueid, UUID useruniqueid) + { + super(Loottrackerlink.LOOTTRACKERLINK); + + set(0, linkuniqueid); + set(1, eventuniqueid); + set(2, dropuniqueid); + set(3, useruniqueid); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackerlootRecord.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackerlootRecord.java new file mode 100644 index 0000000000..d6b0cffa98 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/LoottrackerlootRecord.java @@ -0,0 +1,262 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables.records; + + +import java.util.UUID; +import javax.annotation.Generated; +import net.runelite.client.database.data.tables.Loottrackerloot; +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record3; +import org.jooq.Row3; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class LoottrackerlootRecord extends UpdatableRecordImpl implements Record3 +{ + + private static final long serialVersionUID = -1894768090; + + /** + * Setter for PUBLIC.LOOTTRACKERLOOT.UNIQUEID. + */ + public void setUniqueid(UUID value) + { + set(0, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKERLOOT.UNIQUEID. + */ + public UUID getUniqueid() + { + return (UUID) get(0); + } + + /** + * Setter for PUBLIC.LOOTTRACKERLOOT.ITEMID. + */ + public void setItemid(Integer value) + { + set(1, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKERLOOT.ITEMID. + */ + public Integer getItemid() + { + return (Integer) get(1); + } + + /** + * Setter for PUBLIC.LOOTTRACKERLOOT.QUANTITY. + */ + public void setQuantity(Integer value) + { + set(2, value); + } + + /** + * Getter for PUBLIC.LOOTTRACKERLOOT.QUANTITY. + */ + public Integer getQuantity() + { + return (Integer) get(2); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Record1 key() + { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record3 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row3 fieldsRow() + { + return (Row3) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row3 valuesRow() + { + return (Row3) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() + { + return Loottrackerloot.LOOTTRACKERLOOT.UNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() + { + return Loottrackerloot.LOOTTRACKERLOOT.ITEMID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() + { + return Loottrackerloot.LOOTTRACKERLOOT.QUANTITY; + } + + /** + * {@inheritDoc} + */ + @Override + public UUID component1() + { + return getUniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer component2() + { + return getItemid(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer component3() + { + return getQuantity(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID value1() + { + return getUniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value2() + { + return getItemid(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value3() + { + return getQuantity(); + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlootRecord value1(UUID value) + { + setUniqueid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlootRecord value2(Integer value) + { + setItemid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlootRecord value3(Integer value) + { + setQuantity(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LoottrackerlootRecord values(UUID value1, Integer value2, Integer value3) + { + value1(value1); + value2(value2); + value3(value3); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached LoottrackerlootRecord + */ + public LoottrackerlootRecord() + { + super(Loottrackerloot.LOOTTRACKERLOOT); + } + + /** + * Create a detached, initialised LoottrackerlootRecord + */ + public LoottrackerlootRecord(UUID uniqueid, Integer itemid, Integer quantity) + { + super(Loottrackerloot.LOOTTRACKERLOOT); + + set(0, uniqueid); + set(1, itemid); + set(2, quantity); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/UserRecord.java b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/UserRecord.java new file mode 100644 index 0000000000..b57e450a8e --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/database/data/tables/records/UserRecord.java @@ -0,0 +1,207 @@ +/* + * This file is generated by jOOQ. + */ +package net.runelite.client.database.data.tables.records; + + +import java.util.UUID; +import javax.annotation.Generated; +import net.runelite.client.database.data.tables.User; +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record2; +import org.jooq.Row2; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.11.12" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({"all", "unchecked", "rawtypes"}) +public class UserRecord extends UpdatableRecordImpl implements Record2 +{ + + private static final long serialVersionUID = 628808107; + + /** + * Setter for PUBLIC.USER.UNIQUEID. + */ + public void setUniqueid(UUID value) + { + set(0, value); + } + + /** + * Getter for PUBLIC.USER.UNIQUEID. + */ + public UUID getUniqueid() + { + return (UUID) get(0); + } + + /** + * Setter for PUBLIC.USER.USERNAME. + */ + public void setUsername(String value) + { + set(1, value); + } + + /** + * Getter for PUBLIC.USER.USERNAME. + */ + public String getUsername() + { + return (String) get(1); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Record1 key() + { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record2 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row2 fieldsRow() + { + return (Row2) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row2 valuesRow() + { + return (Row2) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() + { + return User.USER.UNIQUEID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() + { + return User.USER.USERNAME; + } + + /** + * {@inheritDoc} + */ + @Override + public UUID component1() + { + return getUniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public String component2() + { + return getUsername(); + } + + /** + * {@inheritDoc} + */ + @Override + public UUID value1() + { + return getUniqueid(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() + { + return getUsername(); + } + + /** + * {@inheritDoc} + */ + @Override + public UserRecord value1(UUID value) + { + setUniqueid(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public UserRecord value2(String value) + { + setUsername(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public UserRecord values(UUID value1, String value2) + { + value1(value1); + value2(value2); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached UserRecord + */ + public UserRecord() + { + super(User.USER); + } + + /** + * Create a detached, initialised UserRecord + */ + public UserRecord(UUID uniqueid, String username) + { + super(User.USER); + + set(0, uniqueid); + set(1, username); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index f9f1d33a91..3b9c90b191 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -34,12 +34,11 @@ import com.google.common.collect.Multisets; import com.google.gson.reflect.TypeToken; import com.google.inject.Provides; import java.awt.image.BufferedImage; -import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; -import java.nio.file.Files; +import java.sql.Timestamp; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; @@ -51,6 +50,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.UUID; import java.util.concurrent.ScheduledExecutorService; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -93,6 +93,11 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; +import net.runelite.client.database.DatabaseManager; +import static net.runelite.client.database.data.Tables.LOOTTRACKEREVENTS; +import static net.runelite.client.database.data.Tables.LOOTTRACKERLINK; +import static net.runelite.client.database.data.Tables.LOOTTRACKERLOOT; +import static net.runelite.client.database.data.Tables.USER; import net.runelite.client.eventbus.EventBus; import net.runelite.client.events.NpcLootReceived; import net.runelite.client.events.PlayerLootReceived; @@ -117,6 +122,13 @@ import net.runelite.http.api.loottracker.LootRecord; import net.runelite.http.api.loottracker.LootRecordType; import net.runelite.http.api.loottracker.LootTrackerClient; import org.apache.commons.lang3.ArrayUtils; +import org.jooq.DSLContext; +import org.jooq.Record; +import org.jooq.Record1; +import org.jooq.Record2; +import org.jooq.Result; +import static org.jooq.impl.DSL.constraint; +import org.jooq.impl.SQLDataType; @PluginDescriptor( name = "Loot Tracker", @@ -177,7 +189,7 @@ public class LootTrackerPlugin extends Plugin // Instant for showing session loot. this gets set on plugin startup - public static final Instant SESSION_START_TIME = Instant.now(); + static final Instant SESSION_START_TIME = Instant.now(); @Inject public Client client; @@ -208,6 +220,8 @@ public class LootTrackerPlugin extends Plugin private EventBus eventBus; @Inject private LootRecordWriter writer; + @Inject + private DatabaseManager databaseManager; private LootTrackerPanel panel; private NavigationButton navButton; private String eventType; @@ -221,6 +235,7 @@ public class LootTrackerPlugin extends Plugin private Map killCountMap = new HashMap<>(); private boolean gotPet = false; + private Map userUuidMap = new HashMap<>(); private static Collection stack(Collection items) { @@ -331,6 +346,7 @@ public class LootTrackerPlugin extends Plugin @Override protected void startUp() throws Exception { + initDatabase(); addSubscriptions(); @@ -352,8 +368,6 @@ public class LootTrackerPlugin extends Plugin clientToolbar.addNavigation(navButton); AccountSession accountSession = sessionManager.getAccountSession(); - LOOT_RECORDS_FILE.createNewFile(); - // BufferedReader bufferedReader = Files.newBufferedReader(LOOT_RECORDS_FILE.toPath()); if (accountSession != null || this.localPersistence) { @@ -383,22 +397,60 @@ public class LootTrackerPlugin extends Plugin log.debug("Unable to look up loot", e); return; } - log.debug("Loaded {} remote data entries", lootRecords.size()); + log.info("Loaded {} remote data entries", lootRecords.size()); } if (this.localPersistence) { - try + DSLContext dslContext = databaseManager.getDsl(); + + Result records = dslContext + .selectDistinct( + LOOTTRACKEREVENTS.UNIQUEID + ).select( + LOOTTRACKEREVENTS.EVENTID, + LOOTTRACKEREVENTS.TYPE, + LOOTTRACKEREVENTS.TIME, + USER.USERNAME + ) + .from(LOOTTRACKEREVENTS) + .join(LOOTTRACKERLINK).on(LOOTTRACKERLINK.EVENTUNIQUEID.eq(LOOTTRACKEREVENTS.UNIQUEID)) + .join(USER).on(LOOTTRACKERLINK.USERUNIQUEID.eq(USER.UNIQUEID)) + .fetch(); + + for (Record record : records) { - lootRecords.addAll(RuneLiteAPI.GSON.fromJson(new FileReader(LOOT_RECORDS_FILE), - new TypeToken>() - { - }.getType())); - } - catch (IOException | NullPointerException e) - { - log.info("Couldn't load any locally stored loots."); + Result> drops = dslContext + .select( + LOOTTRACKERLOOT.ITEMID, + LOOTTRACKERLOOT.QUANTITY + ) + .from(LOOTTRACKERLOOT) + .join(LOOTTRACKERLINK).on(LOOTTRACKERLOOT.UNIQUEID.eq(LOOTTRACKERLINK.DROPUNIQUEID)) + .where(LOOTTRACKERLINK.EVENTUNIQUEID.eq(record.getValue(LOOTTRACKEREVENTS.UNIQUEID))) + .fetch(); + + final List gameItems = new ArrayList<>(); + + for (Record drop : drops) + { + GameItem gameItem = new GameItem(); + gameItem.setId(drop.getValue(LOOTTRACKERLOOT.ITEMID)); + gameItem.setQty(drop.getValue(LOOTTRACKERLOOT.QUANTITY)); + + gameItems.add(gameItem); + } + + LootRecord lootRecord = new LootRecord(); + lootRecord.setEventId(record.getValue(LOOTTRACKEREVENTS.EVENTID)); + lootRecord.setUsername(record.getValue(USER.USERNAME)); + lootRecord.setType(record.getValue(LOOTTRACKEREVENTS.TYPE, LootRecordType.class)); + lootRecord.setDrops(gameItems); + lootRecord.setTime(record.getValue(LOOTTRACKEREVENTS.TIME).toInstant()); + + lootRecords.add(lootRecord); } + if (lootRecords.size() > 0) { log.info("Loaded {} locally stored loot records", lootRecords.size()); @@ -471,6 +523,8 @@ public class LootTrackerPlugin extends Plugin if (name != null) { writer.setPlayerUsername(name); + userUuid(name); + return true; } else @@ -685,12 +739,12 @@ public class LootTrackerPlugin extends Plugin final LootTrackerItem[] entries = buildEntries(stack(items)); + final int killCount = killCountMap.getOrDefault(eventType.toUpperCase(), -1); + SwingUtilities.invokeLater(() -> panel.add(eventType, client.getLocalPlayer().getName(), -1, entries)); LootRecord lootRecord = new LootRecord(eventType, client.getLocalPlayer().getName(), LootRecordType.EVENT, toGameItems(items), Instant.now()); - final int killCount = killCountMap.getOrDefault(eventType.toUpperCase(), -1); - if (lootTrackerClient != null && this.saveLoot) { lootTrackerClient.submit(lootRecord); @@ -929,42 +983,16 @@ public class LootTrackerPlugin extends Plugin private void saveLocalLootRecord(LootRecord lootRecord) { lootRecords.add(lootRecord); - try - { - BufferedWriter bufferedWriter = Files.newBufferedWriter(LOOT_RECORDS_FILE.toPath()); - - bufferedWriter.append(RuneLiteAPI.GSON.toJson(lootRecords)); - bufferedWriter.close(); - } - catch (IOException e) - { - if (e instanceof FileNotFoundException) - { - try - { - LOOT_RECORDS_FILE.createNewFile(); - } - catch (IOException ex) - { - ex.printStackTrace(); - } - } - e.printStackTrace(); - } + addLootRecord(databaseManager.getDsl(), lootRecord); } void deleteLocalRecords() { - try - { - lootRecords.clear(); - Files.deleteIfExists(LOOT_RECORDS_FILE.toPath()); - } - catch (IOException e) - { - log.error("Error deleting local loot records file."); - log.error(Arrays.toString(e.getStackTrace())); - } + lootRecords.clear(); + DSLContext dslContext = databaseManager.getDsl(); + dslContext.truncate(LOOTTRACKEREVENTS).execute(); + dslContext.truncate(LOOTTRACKERLOOT).execute(); + dslContext.truncate(LOOTTRACKERLINK).execute(); } /** @@ -1232,4 +1260,182 @@ public class LootTrackerPlugin extends Plugin this.getBlacklist = config.getBlacklist(); this.sendLootValueMessages = config.sendLootValueMessages(); } + + private void initDatabase() + { + boolean lootTrackerEvents = databaseManager.checkTableExists("LootTrackerEvents"); + boolean lootTrackerLoot = databaseManager.checkTableExists("LootTrackerLoot"); + boolean user = databaseManager.checkTableExists("User"); + boolean lootTrackerLink = databaseManager.checkTableExists("LootTrackerLink"); + + if (!lootTrackerEvents) + { + databaseManager.getDsl().createTable(LOOTTRACKEREVENTS) + .column(LOOTTRACKEREVENTS.UNIQUEID, SQLDataType.UUID.nullable(false)) + .column(LOOTTRACKEREVENTS.EVENTID, SQLDataType.VARCHAR.length(255).nullable(false)) + .column(LOOTTRACKEREVENTS.TYPE, SQLDataType.VARCHAR.length(255).nullable(false)) + .column(LOOTTRACKEREVENTS.TIME, SQLDataType.TIMESTAMP(0).nullable(false)) + .constraints( + constraint("PK_LOOTTRACKEREVENTS").primaryKey(LOOTTRACKEREVENTS.UNIQUEID) + ) + .execute(); + } + + if (!lootTrackerLoot) + { + databaseManager.getDsl().createTable(LOOTTRACKERLOOT) + .column(LOOTTRACKERLOOT.UNIQUEID, SQLDataType.UUID.nullable(false)) + .column(LOOTTRACKERLOOT.ITEMID, SQLDataType.INTEGER.nullable(false)) + .column(LOOTTRACKERLOOT.QUANTITY, SQLDataType.INTEGER.nullable(false)) + .constraints( + constraint("PK_LOOTTRACKERDROPS").primaryKey(LOOTTRACKERLOOT.UNIQUEID) + ) + .execute(); + } + + if (!user) + { + databaseManager.getDsl().createTable(USER) + .column(USER.UNIQUEID, SQLDataType.UUID.nullable(false)) + .column(USER.USERNAME, SQLDataType.VARCHAR(12).nullable(false)) + .constraints( + constraint("PK_USER").primaryKey(USER.UNIQUEID), + constraint("UN_USERNAME").unique(USER.USERNAME) + ) + .execute(); + } + + if (!lootTrackerLink) + { + databaseManager.getDsl().createTable(LOOTTRACKERLINK) + .column(LOOTTRACKERLINK.LINKUNIQUEID, SQLDataType.UUID.nullable(false)) + .column(LOOTTRACKERLINK.EVENTUNIQUEID, SQLDataType.UUID.nullable(false)) + .column(LOOTTRACKERLINK.DROPUNIQUEID, SQLDataType.UUID.nullable(false)) + .column(LOOTTRACKERLINK.USERUNIQUEID, SQLDataType.UUID.nullable(false)) + .constraints( + constraint("FK_LOOTTRACKEREVENT").foreignKey(LOOTTRACKERLINK.EVENTUNIQUEID).references(LOOTTRACKEREVENTS, LOOTTRACKEREVENTS.UNIQUEID).onDeleteCascade().onUpdateCascade(), + constraint("FK_LOOTTRACKERDROP").foreignKey(LOOTTRACKERLINK.DROPUNIQUEID).references(LOOTTRACKERLOOT, LOOTTRACKERLOOT.UNIQUEID).onDeleteCascade().onUpdateCascade(), + constraint("FK_USER").foreignKey(LOOTTRACKERLINK.USERUNIQUEID).references(USER, USER.UNIQUEID).onDeleteCascade().onUpdateCascade() + ) + .execute(); + } + + if (!lootTrackerEvents || !lootTrackerLoot || !lootTrackerLink || !user) + { + if (LOOT_RECORDS_FILE.exists()) + { + migrateData(); + } + } + } + + private void migrateData() + { + try + { + Collection lootRecords = new ArrayList<>(RuneLiteAPI.GSON.fromJson(new FileReader(LOOT_RECORDS_FILE), + new TypeToken>() + { + }.getType())); + + DSLContext dslContext = databaseManager.getDsl(); + + + for (LootRecord lootRecord : lootRecords) + { + addLootRecord(dslContext, lootRecord); + } + } + catch (FileNotFoundException e) + { + e.printStackTrace(); + } + } + + private void addLootRecord(DSLContext dslContext, LootRecord lootRecord) + { + String username = lootRecord.getUsername(); + userUuid(username); + + UUID eventUuid = UUID.randomUUID(); + dslContext + .insertInto( + LOOTTRACKEREVENTS, + LOOTTRACKEREVENTS.UNIQUEID, + LOOTTRACKEREVENTS.EVENTID, + LOOTTRACKEREVENTS.TYPE, + LOOTTRACKEREVENTS.TIME + ) + .values( + eventUuid, + lootRecord.getEventId(), + lootRecord.getType().toString(), + Timestamp.from(lootRecord.getTime()) + ) + .execute(); + + for (GameItem item : lootRecord.getDrops()) + { + UUID dropUuid = UUID.randomUUID(); + dslContext. + insertInto( + LOOTTRACKERLOOT, + LOOTTRACKERLOOT.UNIQUEID, + LOOTTRACKERLOOT.ITEMID, + LOOTTRACKERLOOT.QUANTITY + ) + .values( + dropUuid, + item.getId(), + item.getQty() + ) + .execute(); + + dslContext + .insertInto( + LOOTTRACKERLINK, + LOOTTRACKERLINK.LINKUNIQUEID, + LOOTTRACKERLINK.EVENTUNIQUEID, + LOOTTRACKERLINK.DROPUNIQUEID, + LOOTTRACKERLINK.USERUNIQUEID + ) + .values( + UUID.randomUUID(), + eventUuid, + dropUuid, + userUuidMap.get(username) + ) + .execute(); + } + } + + private void userUuid(String name) + { + if (userUuidMap.get(name) == null) + { + DSLContext dslContext = databaseManager.getDsl(); + + dslContext + .insertInto( + USER, + USER.UNIQUEID, + USER.USERNAME + ) + .values( + UUID.randomUUID(), + name + ) + .onConflict(USER.USERNAME) + .doNothing() + .execute(); + + Record1 user = dslContext + .select(USER.UNIQUEID) + .from(USER) + .where(USER.USERNAME.eq(name)) + .fetchOne(); + + userUuidMap.put(name, user.get(USER.UNIQUEID)); + } + } }