diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java index 501519a47..d119bc9da 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java @@ -27,6 +27,9 @@ import com.djrapitops.plan.utilities.html.structure.SessionAccordion; import com.djrapitops.plan.utilities.html.tables.HtmlTables; import com.djrapitops.plugin.api.TimeAmount; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -42,22 +45,43 @@ public class AnalysisContainer extends DataContainer { private final ServerContainer serverContainer; - // TODO - private String version; - private PlanConfig config; - private Theme theme; - private Database database; - private ServerProperties serverProperties; - private Formatters formatters; - private Graphs graphs; - private HtmlTables tables; - private Accordions accordions; - private AnalysisPluginsTabContentCreator pluginsTabContentCreator; + private final String version; + private final PlanConfig config; + private final Theme theme; + private final Database database; + private final ServerProperties serverProperties; + private final Formatters formatters; + private final Graphs graphs; + private final HtmlTables tables; + private final Accordions accordions; + private final AnalysisPluginsTabContentCreator pluginsTabContentCreator; private static final Key> serverNames = new Key<>(new Type>() {}, "SERVER_NAMES"); - public AnalysisContainer(ServerContainer serverContainer) { + public AnalysisContainer( + ServerContainer serverContainer, + String version, + PlanConfig config, + Theme theme, + Database database, + ServerProperties serverProperties, + Formatters formatters, + Graphs graphs, + HtmlTables tables, + Accordions accordions, + AnalysisPluginsTabContentCreator pluginsTabContentCreator + ) { this.serverContainer = serverContainer; + this.version = version; + this.config = config; + this.theme = theme; + this.database = database; + this.serverProperties = serverProperties; + this.formatters = formatters; + this.graphs = graphs; + this.tables = tables; + this.accordions = accordions; + this.pluginsTabContentCreator = pluginsTabContentCreator; addAnalysisSuppliers(); } @@ -438,4 +462,60 @@ public class AnalysisContainer extends DataContainer { putSupplier(AnalysisKeys.PLUGINS_TAB_NAV, () -> getUnsafe(navAndTabs)[0]); putSupplier(AnalysisKeys.PLUGINS_TAB, () -> getUnsafe(navAndTabs)[1]); } + + @Singleton + public static class Factory { + + private final String version; + private final PlanConfig config; + private final Theme theme; + private final Database database; + private final ServerProperties serverProperties; + private final Formatters formatters; + private final Graphs graphs; + private final HtmlTables tables; + private final Accordions accordions; + private final AnalysisPluginsTabContentCreator pluginsTabContentCreator; + + @Inject + public Factory( + @Named("currentVersion") String version, + PlanConfig config, + Theme theme, + Database database, + ServerProperties serverProperties, + Formatters formatters, + Graphs graphs, + HtmlTables tables, + Accordions accordions, + AnalysisPluginsTabContentCreator pluginsTabContentCreator + ) { + this.version = version; + this.config = config; + this.theme = theme; + this.database = database; + this.serverProperties = serverProperties; + this.formatters = formatters; + this.graphs = graphs; + this.tables = tables; + this.accordions = accordions; + this.pluginsTabContentCreator = pluginsTabContentCreator; + } + + public AnalysisContainer forServerContainer(ServerContainer serverContainer) { + return new AnalysisContainer( + serverContainer, + version, + config, + theme, + database, + serverProperties, + formatters, + graphs, + tables, + accordions, + pluginsTabContentCreator + ); + } + } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PageFactory.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PageFactory.java index cfab8262c..f153612dd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PageFactory.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PageFactory.java @@ -45,6 +45,7 @@ public class PageFactory { private final Lazy tables; private final Lazy accordions; private final Lazy formatters; + private final Lazy analysisContainerFactory; private final Lazy hookHandler; private final Lazy debugLogger; private final Lazy timings; @@ -63,6 +64,7 @@ public class PageFactory { Lazy tables, Lazy accordions, Lazy formatters, + Lazy analysisContainerFactory, Lazy hookHandler, Lazy debugLogger, Lazy timings, @@ -79,6 +81,7 @@ public class PageFactory { this.tables = tables; this.accordions = accordions; this.formatters = formatters; + this.analysisContainerFactory = analysisContainerFactory; this.hookHandler = hookHandler; this.debugLogger = debugLogger; this.timings = timings; @@ -100,7 +103,8 @@ public class PageFactory { } public AnalysisPage analysisPage(UUID serverUUID) { - AnalysisContainer analysisContainer = new AnalysisContainer(database.get().fetch().getServerContainer(serverUUID)); + AnalysisContainer analysisContainer = analysisContainerFactory.get() + .forServerContainer(database.get().fetch().getServerContainer(serverUUID)); return new AnalysisPage(analysisContainer, fileSystem.get(), formatters.get().decimals(), timings.get()); } diff --git a/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java b/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java index e96e805ef..bd8f7448b 100644 --- a/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java +++ b/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java @@ -1004,8 +1004,10 @@ public class SQLiteTest { @Test public void analysisContainerSupportsAllAnalysisKeys() throws IllegalAccessException, NoSuchAlgorithmException { serverContainerSupportsAllServerKeys(); - AnalysisContainer analysisContainer = new AnalysisContainer(db.fetch().getServerContainer(TestConstants.SERVER_UUID)); - + AnalysisContainer.Factory factory = null; + AnalysisContainer analysisContainer = factory.forServerContainer( + db.fetch().getServerContainer(TestConstants.SERVER_UUID) + ); List unsupported = new ArrayList<>(); for (Field field : AnalysisKeys.class.getDeclaredFields()) { if (!Modifier.isPublic(field.getModifiers())) {