changeset 215:3bddbfd6ea02

fix command builder
author akahori
date Tue, 12 Mar 2019 21:51:14 +0900
parents 7d08e76d2553
children 176d0b94c1c5
files src/main/java/christie/codegear/CodeGear.java src/main/java/christie/daemon/IncomingTcpConnection.java src/main/java/christie/datagear/DataGearManager.java src/main/java/christie/datagear/LocalDataGearManager.java src/main/java/christie/datagear/RemoteDataGearManager.java src/main/java/christie/datagear/command/Command.java src/main/java/christie/datagear/command/CommandBuilder.java src/main/java/christie/datagear/command/PutCommand.java src/main/java/christie/datagear/command/TakeCommand.java src/main/java/christie/datagear/dg/DataGear.java
diffstat 10 files changed, 81 insertions(+), 93 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/christie/codegear/CodeGear.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/codegear/CodeGear.java	Tue Mar 12 21:51:14 2019 +0900
@@ -21,7 +21,6 @@
     private CodeGearManager cgm;
     private DataGearManager localDGM;
     private CodeGearExecutor cge;
-    private static final CommandBuilder cb = new CommandBuilder();
 
 
     protected abstract void run(CodeGearManager cgm);
@@ -55,12 +54,12 @@
     }
 
     public void setCommand(CommandType type, String toDgmName, String key, DataGear dg){
-        Command command = cb.init(type).cg(this)
-                                       .cgmID(cgm.cgmID)
-                                       .toDgmName(toDgmName)
-                                       .key(key)
-                                       .dg(dg)
-                                       .build();
+        Command command = new CommandBuilder().init(type).cg(this)
+                                                         .cgmID(cgm.cgmID)
+                                                         .toDgmName(toDgmName)
+                                                         .key(key)
+                                                         .dg(dg)
+                                                         .build();
         commandList.add(command);
     }
 
--- a/src/main/java/christie/daemon/IncomingTcpConnection.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/daemon/IncomingTcpConnection.java	Tue Mar 12 21:51:14 2019 +0900
@@ -20,8 +20,6 @@
     CodeGearManager cgm;
     Connection connection;
     private MessagePack packer = new MessagePack();
-    private static final CommandBuilder cb = new CommandBuilder();
-
 
     public IncomingTcpConnection(Connection connection) {
         this.connection = connection;
@@ -53,9 +51,12 @@
                     case PUT:
                         data = new byte[unpacker.readInt()];
                         connection.socket.getInputStream().read(data);
+
                         try {
                             MessagePackDataGear dg = new MessagePackDataGear(data, Class.forName(msg.clazz));
+                            //System.out.println(Class.forName(msg.clazz));
                             cgm.getLocalDGM().put(msg.key, dg);
+
                         } catch (ClassNotFoundException e) {
                             e.printStackTrace();
                         }
@@ -64,11 +65,16 @@
 
                     case REMOTEPEEK:
                     case REMOTETAKE:
-                        Command cm = cb.init(type).fromDgmName(msg.fromDgmName)
-                                .key(msg.key)
-                                .clazz(Class.forName(msg.clazz))
-                                .connection(connection).build();
-                        cgm.getLocalDGM().runCommand(cm);
+                        try {
+                            Command cm = new CommandBuilder().init(type).fromDgmName(msg.fromDgmName)
+                                    .key(msg.key)
+                                    .clazz(Class.forName(msg.clazz))
+                                    .connection(connection).build();
+                            cgm.getLocalDGM().runCommand(cm);
+
+                        } catch (ClassNotFoundException e) {
+                            e.printStackTrace();
+                        }
 
                         break;
                     case REPLY://待っていたwaitListに渡してcsにセット
@@ -92,8 +98,6 @@
                 return;
             } catch (IOException e) {
                 e.printStackTrace();
-            } catch (ClassNotFoundException e) {
-                e.printStackTrace();
             }
         }
     }
--- a/src/main/java/christie/datagear/DataGearManager.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/datagear/DataGearManager.java	Tue Mar 12 21:51:14 2019 +0900
@@ -12,7 +12,6 @@
 public abstract class DataGearManager {
     protected DataGears dataGears = new DataGears();
     public WaitList waitList = new WaitList();
-    protected CommandBuilder cb = new CommandBuilder();
     public abstract void put(String key, Object data);
     public abstract void runCommand(Command cm);
     public abstract void resolveWaitCommand(String key, DataGear dg);
--- a/src/main/java/christie/datagear/LocalDataGearManager.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/datagear/LocalDataGearManager.java	Tue Mar 12 21:51:14 2019 +0900
@@ -16,7 +16,12 @@
     }
 
     public void put(String key, DataGear dg) {
-        runCommand(cb.init(CommandType.PUT).cgmID(1).toDgmName("local").key(key).dg(dg).build());
+        Command cm = new CommandBuilder().init(CommandType.PUT).cgmID(1)
+                                                               .toDgmName("local")
+                                                               .key(key)
+                                                               .dg(dg)
+                                                               .build();
+        runCommand(cm);
     }
 
     public void runCommand(Command cm){
--- a/src/main/java/christie/datagear/RemoteDataGearManager.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/datagear/RemoteDataGearManager.java	Tue Mar 12 21:51:14 2019 +0900
@@ -61,9 +61,9 @@
 
     @Override
     public void put(String key, Object data) {
-        Command cm = cb.init(CommandType.PUT).key(key)
-                                             .dg(new DataGear(data))
-                                             .build();
+        Command cm = new CommandBuilder().init(CommandType.PUT).key(key)
+                                         .dg(new DataGear(data))
+                                         .build();
         // これ入れないと, connectionがnullの時があるのでしょうがなくwait.
         // コンストラクタで呼び出されるThreadをやめて実効すればいんだけどね...
         if(!connect) connectWait();
@@ -83,11 +83,11 @@
                 type = CommandType.REMOTETAKE;
                 break;
         }
-        Command remoteCmd = cb.init(type).fromDgmName(connection.name)
-                                         .key(cm.key)
-                                         .clazz(cm.clazz)
-                                            .connection(connection)
-                                            .build();
+        Command remoteCmd = new CommandBuilder().init(type).fromDgmName(connection.name)
+                                                           .key(cm.key)
+                                                           .clazz(cm.clazz)
+                                                           .connection(connection)
+                                                           .build();
 
         connection.write(remoteCmd);
     }
@@ -102,13 +102,13 @@
 
     @Override
     public void finish() {
-        Command cmd = cb.init(CommandType.FINISH).build();
+        Command cmd = new CommandBuilder().init(CommandType.FINISH).build();
         connection.sendCommand(cmd);
     }
 
     @Override
     public void close() {
-        Command cmd = cb.init(CommandType.CLOSE).connection(connection).build();
+        Command cmd = new CommandBuilder().init(CommandType.CLOSE).connection(connection).build();
         connection.sendCommand(cmd);
     }
 
--- a/src/main/java/christie/datagear/command/Command.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/datagear/command/Command.java	Tue Mar 12 21:51:14 2019 +0900
@@ -12,7 +12,7 @@
     public String key = null;
     public String toDgmName = null;// for take
     public String fromDgmName = "local";//for remotetake/reply
-    public int cgmID = -1;// for local meta
+    public Integer cgmID = -1;// for local meta
     public CodeGear cg = null;//for localtake
     public DataGear dg = null;//for put/localtake/reply
     public Class clazz = null;// for remote
@@ -52,7 +52,12 @@
         this.dg.setData(obj);
     }
 
-
+    @Override
+    public String toString() {
+        return "Command : type = " + type + ", key = " + key + " toDgmName = " +
+                toDgmName + " fromDgmName = " + fromDgmName + " cgmID = " + cgmID
+                + " cg = " + cg + " dg = " + dg + " clazz = " + clazz + " coonection = " + connection ;
+    }
 
     //public void removeInputs(){
         //cg.getIdg().removeInputs(key);
--- a/src/main/java/christie/datagear/command/CommandBuilder.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/datagear/command/CommandBuilder.java	Tue Mar 12 21:51:14 2019 +0900
@@ -6,25 +6,23 @@
 
 public class CommandBuilder {
     protected CommandType type; // need
-    protected String key;
-    protected String toDgmName;// for take
-    protected String fromDgmName;//for remotetake/reply
-    protected int cgmID = -1;// for local meta
+    protected String key = null;
+    protected String toDgmName = null;// for take
+    protected String fromDgmName = "local";//for remotetake/reply
+    protected Integer cgmID = null;// for local meta
     protected CodeGear cg = null;//for localtake
     protected DataGear dg = null;//for put/localtake/reply
     protected Class clazz = null;// for remote
     protected Connection connection = null;//for reply
 
-    private Object _lock = new Object();
-    private Boolean sync = false;
+    private CommandFactory factory = new CommandFactory();
 
-    public synchronized CommandBuilder init(CommandType type){
-        //lock();
+    public CommandBuilder init(CommandType type){
         this.type = type;
         this.key = null;
         this.toDgmName = null;
         this.fromDgmName = "local";
-        this.cgmID = -1;
+        this.cgmID = null;
         this.cg = null;
         this.dg = null;
         this.clazz = null;
@@ -75,68 +73,39 @@
 
     public Command build(){
         if(type == null) throw new NullPointerException();
-        return CommandFactory.getCommand(type, this);
+        return factory.getCommand(type, this);
     }
 
-    public void lock(){
-        synchronized (_lock){
-            while(sync){
-                try {
-                    _lock.wait();
-                } catch (InterruptedException e) {
-                }
-            }
-        }
-        sync = true;
-    }
+    private class CommandFactory{
 
-    public void unLock(){
-        synchronized (_lock){
-            _lock.notify();
-            sync = false;
-        }
-    }
-
-    private static class CommandFactory{
-
-        public static Command getCommand(CommandType type, CommandBuilder cb) {
+        public Command getCommand(CommandType type, CommandBuilder cb) {
             switch (type) {
                 case PUT:
                     //check need param
-                    if (cb.key == null || cb.dg == null) {
-                        throw new NullPointerException();
-                    }
+
+                    checkNull(cb.key, cb.dg);
                     return new PutCommand(cb);
                 case TAKE:
                     //check need param
-                    if (cb.cg == null || cb.cgmID == -1 || cb.toDgmName == null || cb.key == null || cb.dg == null) {
-                        throw new NullPointerException();
-                    }
+                    checkNull(cb.cgmID, cb.cg, cb.toDgmName, cb.key, cb.dg);
                     return new TakeCommand(cb);
                 case PEEK:
-                    if (cb.cg == null || cb.cgmID == -1 || cb.toDgmName == null || cb.key == null || cb.dg == null) {
-                        throw new NullPointerException();
-                    }
+                    checkNull(cb.cgmID, cb.cg, cb.toDgmName, cb.key, cb.dg);
                     return new PeekCommand(cb);
                 case REMOTETAKE:
-                    if (cb.fromDgmName.equals("local") || cb.key == null || cb.connection == null || cb.clazz == null) {
-                        throw new NullPointerException();
-                    }
+                    if (cb.fromDgmName.equals("local")) throw new NullPointerException();
+                    checkNull(cb.key, cb.connection, cb.clazz);
                     return new RemoteTakeCommand(cb);
                 case REMOTEPEEK:
-                    if (cb.fromDgmName.equals("local") || cb.key == null || cb.connection == null || cb.clazz == null) {
-                        throw new NullPointerException();
-                    }
+                    if (cb.fromDgmName.equals("local")) throw new NullPointerException();
+                    checkNull(cb.key, cb.connection, cb.clazz);
                     return new RemotePeekCommand(cb);
                 case REPLY:
-                    if (cb.fromDgmName.equals("local") || cb.key == null || cb.dg == null || cb.connection == null) {
-                        throw new NullPointerException();
-                    }
+                    if (cb.fromDgmName.equals("local")) throw new NullPointerException();
+                    checkNull(cb.key, cb.connection, cb.dg);
                     return new ReplyCommand(cb);
                 case CLOSE:
-                    if (cb.connection == null) {
-                        throw new NullPointerException();
-                    }
+                    checkNull(cb.connection);
                     return new CloseCommand(cb);
                 case FINISH:
                     return new FinishCommand(cb);
@@ -144,6 +113,16 @@
             //cb.unLock();
             return null;
         }
+
+        public void checkNull(Object... params){
+            for(Object param: params){
+                if(param == null){
+                    System.out.println(key + dg);
+                    throw new NullPointerException();
+
+                }
+            }
+        }
     }
 
 }
--- a/src/main/java/christie/datagear/command/PutCommand.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/datagear/command/PutCommand.java	Tue Mar 12 21:51:14 2019 +0900
@@ -13,7 +13,9 @@
 
     public PutCommand(CommandBuilder cb){
         super(cb);
+        if(dg == null) System.out.println(toString());
         this.clazz = dg.getClazz();
+
     }
 
     @Override
--- a/src/main/java/christie/datagear/command/TakeCommand.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/datagear/command/TakeCommand.java	Tue Mar 12 21:51:14 2019 +0900
@@ -10,7 +10,7 @@
 
 public class TakeCommand extends Command {
 
-    public TakeCommand(CommandBuilder cb){
+    public TakeCommand(CommandBuilder cb) {
         super(cb);
         this.clazz = dg.getClazz();
     }
@@ -22,16 +22,7 @@
 
     @Override
     public void execute() {
-        setInputs();
-    }
+        cg.getIdg().setInputs(key, dg);
 
-    /*@Override
-    public void run(Object dataGear) {
-        setDg(dataGear);
-
-    }*/
-
-    public void setInputs(){
-        cg.getIdg().setInputs(key, dg);
     }
 }
--- a/src/main/java/christie/datagear/dg/DataGear.java	Tue Mar 12 19:35:10 2019 +0900
+++ b/src/main/java/christie/datagear/dg/DataGear.java	Tue Mar 12 21:51:14 2019 +0900
@@ -62,4 +62,8 @@
         return data;
     }
 
+    @Override
+    public String toString() {
+        return "DataGear : classname " + clazz;
+    }
 }