From 9008eed00b975e01382119b7b7c88897ddc58f74 Mon Sep 17 00:00:00 2001 From: 7u83 <7u83@mail.ru> Date: Wed, 12 Dec 2018 19:58:10 +0100 Subject: [PATCH] Trader creator using JSON --- nbproject/project.properties | 2 +- src/opensesim/gui/SeSimApplication.java | 5 ++++- src/opensesim/trader/SimpleTrader.java | 7 ++++--- src/opensesim/world/AbstractTrader.java | 2 +- src/opensesim/world/Account.java | 2 +- src/opensesim/world/GodWorld.java | 25 ++++++++++++++++++++----- 6 files changed, 31 insertions(+), 12 deletions(-) diff --git a/nbproject/project.properties b/nbproject/project.properties index 9e73e5d..4be0904 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -1,4 +1,4 @@ -#Mon, 10 Dec 2018 11:28:07 +0100 +#Wed, 12 Dec 2018 19:31:33 +0100 annotation.processing.enabled=true annotation.processing.enabled.in.editor=false annotation.processing.processors.list= diff --git a/src/opensesim/gui/SeSimApplication.java b/src/opensesim/gui/SeSimApplication.java index 090f326..c3e8e8d 100644 --- a/src/opensesim/gui/SeSimApplication.java +++ b/src/opensesim/gui/SeSimApplication.java @@ -594,7 +594,10 @@ public class SeSimApplication extends javax.swing.JFrame { GodWorld world = new GodWorld(Globals.getWorld()); - + JSONObject cfg = new JSONObject("{" + + "strategy: opensesim.trader.SimpleTrader" + + "}"); + world.createTrader(cfg); diff --git a/src/opensesim/trader/SimpleTrader.java b/src/opensesim/trader/SimpleTrader.java index 15e812c..b055bea 100644 --- a/src/opensesim/trader/SimpleTrader.java +++ b/src/opensesim/trader/SimpleTrader.java @@ -27,6 +27,7 @@ package opensesim.trader; import opensesim.world.AbstractTrader; import opensesim.world.World; +import org.json.JSONObject; /** * @@ -40,12 +41,12 @@ public class SimpleTrader extends AbstractTrader{ } - SimpleTrader(World world){ - super(world); + SimpleTrader(World world, JSONObject cfg){ + super(world,cfg); } SimpleTrader(){ - this(null); + this(null,null); } diff --git a/src/opensesim/world/AbstractTrader.java b/src/opensesim/world/AbstractTrader.java index 89ea701..0637336 100644 --- a/src/opensesim/world/AbstractTrader.java +++ b/src/opensesim/world/AbstractTrader.java @@ -85,7 +85,7 @@ public abstract class AbstractTrader implements Trader { this.name = name; } - public AbstractTrader(World world) { + public AbstractTrader(World world, JSONObject cfg) { this.world=world; } diff --git a/src/opensesim/world/Account.java b/src/opensesim/world/Account.java index f21a0ae..4066402 100644 --- a/src/opensesim/world/Account.java +++ b/src/opensesim/world/Account.java @@ -38,7 +38,7 @@ public class Account { ConcurrentHashMap assets = new ConcurrentHashMap<>(); Trader owner; - Exchange exchange; + Exchange exchange=null; public Map getAssets() { return Collections.unmodifiableMap(assets); diff --git a/src/opensesim/world/GodWorld.java b/src/opensesim/world/GodWorld.java index 32738e3..35b90b7 100644 --- a/src/opensesim/world/GodWorld.java +++ b/src/opensesim/world/GodWorld.java @@ -208,7 +208,6 @@ public class GodWorld implements GetJson, World { return Collections.unmodifiableCollection(assetPairs); } - public void add(AssetPair pair) { assetPairs.add(pair); } @@ -307,15 +306,28 @@ public class GodWorld implements GetJson, World { public World getWorld() { return new RealWorld(this); } - + // -------------------------------------------------------------------- // Stuff belonging to traders // -------------------------------------------------------------------- - - private final HashSet traders = new HashSet<>(); public Trader createTrader(JSONObject cfg) { + AbstractTrader trader; + String strategy = cfg.optString("strategy", null); + if (strategy == null) { + return null; + } + + Class cls; + try { + cls = (Class) Class.forName(strategy); + trader = (AbstractTrader) cls.getConstructor(JSONObject.class).newInstance(cfg); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { + Logger.getLogger(GodWorld.class.getName()).log(Level.SEVERE, null, ex); + return null; + } + return null; } @@ -324,5 +336,8 @@ public class GodWorld implements GetJson, World { public Collection getTradersCollection() { return Collections.unmodifiableCollection(traders); } - + + // -------------------------------------------------------------------- + // Stuff belonging to accounts + // -------------------------------------------------------------------- }