diff --git a/src/main/java/se/koc/trader/TraderContext.java b/src/main/java/se/koc/trader/TraderContext.java index a330bed..961a357 100644 --- a/src/main/java/se/koc/trader/TraderContext.java +++ b/src/main/java/se/koc/trader/TraderContext.java @@ -15,9 +15,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; +import java.util.*; import java.util.logging.Logger; /** @@ -49,7 +47,6 @@ public class TraderContext { private static Properties dbConf = new Properties(); - public static void initialize(){ try { // Read conf @@ -76,7 +73,10 @@ public class TraderContext { dbConf = db.exec("SELECT * FROM conf", new PropertiesSQLResult()); } - // Upgrade DB needed? + // -------------------------------------------- + // Upgrade DB + // -------------------------------------------- + DBConnection referenceDB = new DBConnection(DBConnection.DBMS.SQLite, DEFAULT_DB_FILE); Properties defaultDBConf = referenceDB.exec("SELECT * FROM conf", new PropertiesSQLResult()); diff --git a/src/main/java/se/koc/trader/TraderServer.java b/src/main/java/se/koc/trader/TraderServer.java index fd28c40..6f75689 100644 --- a/src/main/java/se/koc/trader/TraderServer.java +++ b/src/main/java/se/koc/trader/TraderServer.java @@ -1,8 +1,10 @@ package se.koc.trader; +import se.koc.trader.api.ExchangeConfig; import se.koc.trader.endpoint.AlertEndpoint; import se.koc.trader.api.TraderApiEndpoint; import se.koc.trader.daemon.TraderMarketUpdateManager; +import se.koc.trader.struct.Exchange; import se.koc.trader.struct.PluginConfig; import se.koc.trader.api.TraderPage; import zutil.db.DBConnection; @@ -15,6 +17,7 @@ import zutil.plugin.PluginData; import zutil.plugin.PluginManager; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.Executors; @@ -29,6 +32,7 @@ public class TraderServer { private static ScheduledExecutorService daemonExecutor; private static HttpServer http; + private static List> availableExchangeConfigs = new ArrayList<>(); public static void main(String[] args) throws SQLException { // init logging @@ -69,6 +73,16 @@ public class TraderServer { TraderMarketUpdateManager marketUpdateManager = new TraderMarketUpdateManager(); marketUpdateManager.initialize(daemonExecutor); + // ------------------------------------ + // Init plugins configurations + // ------------------------------------ + + // Exchange + + for (Iterator> it = pluginManager.getClassIterator(ExchangeConfig.class); it.hasNext(); ) { + availableExchangeConfigs.add(it.next()); + } + // ------------------------------------ // Init http server // ------------------------------------ @@ -98,4 +112,9 @@ public class TraderServer { public static void registerPage(TraderPage page){ http.setPage(page.getId(), page); } + + + public static List> getAvailableExchangeConfigs() { + return availableExchangeConfigs; + } } diff --git a/src/main/java/se/koc/trader/page/ExchangeConfigPage.java b/src/main/java/se/koc/trader/page/ExchangeConfigPage.java index e93a202..d5c093f 100644 --- a/src/main/java/se/koc/trader/page/ExchangeConfigPage.java +++ b/src/main/java/se/koc/trader/page/ExchangeConfigPage.java @@ -1,7 +1,9 @@ package se.koc.trader.page; import se.koc.trader.TraderContext; +import se.koc.trader.TraderServer; import se.koc.trader.api.TraderPage; +import se.koc.trader.struct.ClassConfigurationData; import se.koc.trader.struct.Exchange; import se.koc.trader.struct.Symbol; import zutil.ObjectUtil; @@ -10,6 +12,7 @@ import zutil.io.file.FileUtil; import zutil.log.LogUtil; import zutil.parser.Templator; +import java.util.ArrayList; import java.util.Map; import java.util.logging.Logger; @@ -20,10 +23,14 @@ public class ExchangeConfigPage extends TraderPage { private static final Logger logger = LogUtil.getLogger(); private static final String TEMPLATE = TraderContext.RESOURCE_WEB_ROOT + "/exchange_config.tmpl"; + private ArrayList classConfigurations = new ArrayList<>(); public ExchangeConfigPage() { super("exchange_config"); super.getRootNav().createSubNav("Settings").createSubNav(this.getId(), "Exchange Settings").setWeight(100); + + for (Class c : TraderServer.getAvailableExchangeConfigs()) + classConfigurations.add(new ClassConfigurationData(c)); } @Override @@ -51,6 +58,7 @@ public class ExchangeConfigPage extends TraderPage { if (exchange != null) { logger.info("Modifying exchange: " + exchange.getName()); exchange.setName(request.get("name")); + exchange.setObjectClass(request.get("type")); exchange.getObjectConfigurator().setValues(request).applyConfiguration(); exchange.save(db); @@ -81,7 +89,9 @@ public class ExchangeConfigPage extends TraderPage { // Output Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); - tmpl.set("exchanges", Symbol.getSymbols(db)); + tmpl.set("exchanges", Exchange.getExchanges(db)); + tmpl.set("exchangeConfigClasses", TraderServer.getAvailableExchangeConfigs()); + tmpl.set("exchangeObjectConfigs", classConfigurations); return tmpl; diff --git a/src/main/java/se/koc/trader/struct/ClassConfigurationData.java b/src/main/java/se/koc/trader/struct/ClassConfigurationData.java new file mode 100644 index 0000000..28cbdb2 --- /dev/null +++ b/src/main/java/se/koc/trader/struct/ClassConfigurationData.java @@ -0,0 +1,18 @@ +package se.koc.trader.struct; + +import zutil.ui.Configurator; +import zutil.ui.Configurator.ConfigurationParam; + +/** + * A Data class used by the dynamic class configuration pages + */ +public class ClassConfigurationData { + public Class clazz; + public ConfigurationParam[] params; + + + public ClassConfigurationData(Class clazz) { + this.clazz = clazz; + this.params = Configurator.getConfiguration(clazz); + } +} \ No newline at end of file diff --git a/src/main/java/se/koc/trader/struct/Exchange.java b/src/main/java/se/koc/trader/struct/Exchange.java index 624991e..da56156 100644 --- a/src/main/java/se/koc/trader/struct/Exchange.java +++ b/src/main/java/se/koc/trader/struct/Exchange.java @@ -6,6 +6,7 @@ import zutil.db.bean.DBBean; import zutil.db.bean.DBBeanObjectDSO; import java.sql.SQLException; +import java.util.List; /** * Object representing a single exchange endpoint. @@ -16,6 +17,9 @@ public class Exchange extends DBBeanObjectDSO { private String name; + public static List getExchanges(DBConnection db) throws SQLException { + return DBBean.load(db, Exchange.class); + } public static Exchange getExchange(DBConnection db, long id) throws SQLException { return DBBean.load(db, Exchange.class, id); } diff --git a/src/main/resources/trader-default.db b/src/main/resources/trader-default.db index c4c350d..4fc8c73 100644 Binary files a/src/main/resources/trader-default.db and b/src/main/resources/trader-default.db differ diff --git a/src/main/resources/web/exchange_config.tmpl b/src/main/resources/web/exchange_config.tmpl index 3738078..f96bf1e 100644 --- a/src/main/resources/web/exchange_config.tmpl +++ b/src/main/resources/web/exchange_config.tmpl @@ -5,8 +5,8 @@
@@ -21,7 +21,7 @@ Name Type Configuration - Actions + Actions @@ -30,26 +30,25 @@ {{.getName()}} {{.getClass().getSimpleName()}} {{.getDeviceConfig()}} - +
-
- -
@@ -67,28 +66,41 @@ -