diff --git a/src/main/java/se/koc/trader/exchange/ExchangeConfig.java b/src/main/java/se/koc/trader/api/ExchangeConfig.java similarity index 89% rename from src/main/java/se/koc/trader/exchange/ExchangeConfig.java rename to src/main/java/se/koc/trader/api/ExchangeConfig.java index d31802e..376252b 100644 --- a/src/main/java/se/koc/trader/exchange/ExchangeConfig.java +++ b/src/main/java/se/koc/trader/api/ExchangeConfig.java @@ -1,4 +1,4 @@ -package se.koc.trader.exchange; +package se.koc.trader.api; import zutil.db.bean.DBBean; @@ -16,7 +16,7 @@ public abstract class ExchangeConfig extends DBBean { public abstract ExchangeMarket getExchangeMarket(); - public abstract ExchangeOrder getExchangeOrder(); + public abstract ExchangeWallet getExchangeOrder(); // ---------------------------------------------------- // Common logic diff --git a/src/main/java/se/koc/trader/exchange/ExchangeMarket.java b/src/main/java/se/koc/trader/api/ExchangeMarket.java similarity index 89% rename from src/main/java/se/koc/trader/exchange/ExchangeMarket.java rename to src/main/java/se/koc/trader/api/ExchangeMarket.java index 5d2d7cf..30671a7 100644 --- a/src/main/java/se/koc/trader/exchange/ExchangeMarket.java +++ b/src/main/java/se/koc/trader/api/ExchangeMarket.java @@ -1,4 +1,4 @@ -package se.koc.trader.exchange; +package se.koc.trader.api; import se.koc.trader.struct.Symbol; diff --git a/src/main/java/se/koc/trader/api/ExchangeWallet.java b/src/main/java/se/koc/trader/api/ExchangeWallet.java new file mode 100644 index 0000000..04539cf --- /dev/null +++ b/src/main/java/se/koc/trader/api/ExchangeWallet.java @@ -0,0 +1,4 @@ +package se.koc.trader.api; + +public interface ExchangeWallet { +} diff --git a/src/main/java/se/koc/trader/daemon/TraderMarketUpdateManager.java b/src/main/java/se/koc/trader/daemon/TraderMarketUpdateManager.java index cf1f435..9ef726c 100644 --- a/src/main/java/se/koc/trader/daemon/TraderMarketUpdateManager.java +++ b/src/main/java/se/koc/trader/daemon/TraderMarketUpdateManager.java @@ -1,8 +1,8 @@ package se.koc.trader.daemon; import se.koc.trader.TraderContext; -import se.koc.trader.exchange.ExchangeConfig; -import se.koc.trader.exchange.ExchangeMarket; +import se.koc.trader.api.ExchangeConfig; +import se.koc.trader.api.ExchangeMarket; import se.koc.trader.struct.Symbol; import zutil.db.DBConnection; import zutil.log.LogUtil; diff --git a/src/main/java/se/koc/trader/exchange/ExchangeOrder.java b/src/main/java/se/koc/trader/exchange/ExchangeOrder.java deleted file mode 100644 index b331517..0000000 --- a/src/main/java/se/koc/trader/exchange/ExchangeOrder.java +++ /dev/null @@ -1,4 +0,0 @@ -package se.koc.trader.exchange; - -public interface ExchangeOrder { -} diff --git a/src/main/java/se/koc/trader/exchange/binance/BinanceExchange.java b/src/main/java/se/koc/trader/exchange/binance/BinanceExchange.java index a6dd1cc..402a813 100644 --- a/src/main/java/se/koc/trader/exchange/binance/BinanceExchange.java +++ b/src/main/java/se/koc/trader/exchange/binance/BinanceExchange.java @@ -1,8 +1,8 @@ package se.koc.trader.exchange.binance; -import se.koc.trader.exchange.ExchangeConfig; -import se.koc.trader.exchange.ExchangeMarket; -import se.koc.trader.exchange.ExchangeOrder; +import se.koc.trader.api.ExchangeConfig; +import se.koc.trader.api.ExchangeMarket; +import se.koc.trader.api.ExchangeWallet; public class BinanceExchange extends ExchangeConfig { private BinanceMarket market; @@ -15,7 +15,7 @@ public class BinanceExchange extends ExchangeConfig { } @Override - public ExchangeOrder getExchangeOrder() { + public ExchangeWallet getExchangeOrder() { return null; } } diff --git a/src/main/java/se/koc/trader/exchange/binance/BinanceMarket.java b/src/main/java/se/koc/trader/exchange/binance/BinanceMarket.java index 6bed07a..3f49fe6 100644 --- a/src/main/java/se/koc/trader/exchange/binance/BinanceMarket.java +++ b/src/main/java/se/koc/trader/exchange/binance/BinanceMarket.java @@ -1,6 +1,6 @@ package se.koc.trader.exchange.binance; -import se.koc.trader.exchange.ExchangeMarket; +import se.koc.trader.api.ExchangeMarket; import se.koc.trader.struct.Symbol; import zutil.net.ws.rest.RESTClientFactory; diff --git a/src/main/java/se/koc/trader/exchange/binance/plugin.json b/src/main/java/se/koc/trader/exchange/binance/plugin.json index 3373f40..8514aa5 100644 --- a/src/main/java/se/koc/trader/exchange/binance/plugin.json +++ b/src/main/java/se/koc/trader/exchange/binance/plugin.json @@ -3,6 +3,6 @@ "name": "Exchange-Binance", "description": "Plugin contains core Binance connectivity.", "interfaces": [ - {"se.koc.trader.exchange.ExchangeConfig": "se.koc.trader.exchange.binance.BinanceExchange"} + {"se.koc.trader.api.ExchangeConfig": "se.koc.trader.exchange.binance.BinanceExchange"} ] } diff --git a/src/main/java/se/koc/trader/page/ExchangeConfigPage.java b/src/main/java/se/koc/trader/page/ExchangeConfigPage.java index 12ace39..e93a202 100644 --- a/src/main/java/se/koc/trader/page/ExchangeConfigPage.java +++ b/src/main/java/se/koc/trader/page/ExchangeConfigPage.java @@ -2,6 +2,7 @@ package se.koc.trader.page; import se.koc.trader.TraderContext; import se.koc.trader.api.TraderPage; +import se.koc.trader.struct.Exchange; import se.koc.trader.struct.Symbol; import zutil.ObjectUtil; import zutil.db.DBConnection; @@ -34,6 +35,50 @@ public class ExchangeConfigPage extends TraderPage { DBConnection db = TraderContext.getDB(); + if (request.containsKey("action")) { + int id = (ObjectUtil.isEmpty(request.get("id")) ? -1 : Integer.parseInt(request.get("id"))); + Exchange exchange = null; + + if (id >= 0) + exchange = Exchange.getExchange(db, id); + + switch(request.get("action")) { + case "create_exchange": + logger.info("Creating symbol: " + request.get("name")); + exchange = new Exchange(); + /* FALLTHROUGH */ + case "modify_exchange": + if (exchange != null) { + logger.info("Modifying exchange: " + exchange.getName()); + exchange.setName(request.get("name")); + exchange.getObjectConfigurator().setValues(request).applyConfiguration(); + exchange.save(db); + + TraderContext.getMessageManager().add(new UserMessage( + MessageLevel.SUCCESS, "Successfully saved exchange: " + exchange.getName(), MessageTTL.ONE_VIEW)); + } else { + logger.warning("Unknown exchange id: " + id); + TraderContext.getMessageManager().add(new UserMessage( + MessageLevel.ERROR, "Unknown exchange id: " + id, MessageTTL.ONE_VIEW)); + } + break; + + case "remove_exchange": + if (exchange != null) { + logger.warning("Removing exchange: " + exchange.getName()); + exchange.delete(db); + + TraderContext.getMessageManager().add(new UserMessage( + MessageLevel.SUCCESS, "Successfully removed exchange: " + exchange.getName(), MessageTTL.ONE_VIEW)); + } else { + logger.warning("Unknown exchange id: " + id); + TraderContext.getMessageManager().add(new UserMessage( + MessageLevel.ERROR, "Unknown exchange id: " + id, MessageTTL.ONE_VIEW)); + } + break; + } + } + // Output Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); tmpl.set("exchanges", Symbol.getSymbols(db)); diff --git a/src/main/java/se/koc/trader/page/SymbolConfigPage.java b/src/main/java/se/koc/trader/page/SymbolConfigPage.java index e6b11d0..e8c711c 100644 --- a/src/main/java/se/koc/trader/page/SymbolConfigPage.java +++ b/src/main/java/se/koc/trader/page/SymbolConfigPage.java @@ -43,11 +43,10 @@ public class SymbolConfigPage extends TraderPage { symbol = Symbol.getSymbol(db, id); switch(request.get("action")) { - // Local Sensors case "create_symbol": logger.info("Creating symbol: " + request.get("name")); symbol = new Symbol(); - + /* FALLTHROUGH */ case "modify_symbol": if (symbol != null) { logger.info("Modifying sensor: " + symbol.getName()); @@ -55,7 +54,7 @@ public class SymbolConfigPage extends TraderPage { symbol.save(db); TraderContext.getMessageManager().add(new UserMessage( - MessageLevel.SUCCESS, "Successfully saved symbol: "+symbol.getName(), MessageTTL.ONE_VIEW)); + MessageLevel.SUCCESS, "Successfully saved symbol: " + symbol.getName(), MessageTTL.ONE_VIEW)); } else { logger.warning("Unknown sensor id: " + id); TraderContext.getMessageManager().add(new UserMessage( diff --git a/src/main/java/se/koc/trader/struct/Exchange.java b/src/main/java/se/koc/trader/struct/Exchange.java new file mode 100644 index 0000000..624991e --- /dev/null +++ b/src/main/java/se/koc/trader/struct/Exchange.java @@ -0,0 +1,36 @@ +package se.koc.trader.struct; + +import se.koc.trader.api.ExchangeConfig; +import zutil.db.DBConnection; +import zutil.db.bean.DBBean; +import zutil.db.bean.DBBeanObjectDSO; + +import java.sql.SQLException; + +/** + * Object representing a single exchange endpoint. + */ +@DBBean.DBTable(value = "exchange", superBean = true) +public class Exchange extends DBBeanObjectDSO { + + private String name; + + + public static Exchange getExchange(DBConnection db, long id) throws SQLException { + return DBBean.load(db, Exchange.class, id); + } + + + public Exchange() { } + public Exchange(ExchangeConfig exchangeConfig) { + this.setObject(exchangeConfig); + } + + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/se/koc/trader/struct/Symbol.java b/src/main/java/se/koc/trader/struct/Symbol.java index e0f53eb..e4a211c 100644 --- a/src/main/java/se/koc/trader/struct/Symbol.java +++ b/src/main/java/se/koc/trader/struct/Symbol.java @@ -1,8 +1,9 @@ package se.koc.trader.struct; -import se.koc.trader.exchange.ExchangeConfig; +import se.koc.trader.api.ExchangeConfig; import zutil.db.DBConnection; import zutil.db.bean.DBBean; +import zutil.db.bean.DBBeanObjectDSO; import java.sql.SQLException; import java.util.List; diff --git a/src/main/resources/trader-default.db b/src/main/resources/trader-default.db index 38bd66b..c4c350d 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 new file mode 100644 index 0000000..3738078 --- /dev/null +++ b/src/main/resources/web/exchange_config.tmpl @@ -0,0 +1,98 @@ +
+ +
+
+
+
+ +
+
+
Exchange Instances
+
+ +
+
+ + + + + + + + + + + {{#exchanges}} + + + + + + + {{/exchanges}} + +
NameTypeConfigurationActions
{{.getName()}}{{.getClass().getSimpleName()}}{{.getDeviceConfig()}} +
+ + +
+ + + +
+
+
+
+
+
+ +
+ + + + + + diff --git a/src/main/resources/web/symbol_config.tmpl b/src/main/resources/web/symbol_config.tmpl index 920555e..f2dcd1c 100644 --- a/src/main/resources/web/symbol_config.tmpl +++ b/src/main/resources/web/symbol_config.tmpl @@ -1,12 +1,27 @@ -

Symbol Configuration

+
+
+
+
+
- +