changeset 32:307ac87ddcf7

add TakeFrom annotation
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Thu, 15 Feb 2018 15:48:23 +0900
parents e29900328fff
children e7bf1506810c
files src/main/java/christie/annotation/PeekFrom.java src/main/java/christie/annotation/Take.java src/main/java/christie/annotation/TakeFrom.java src/main/java/christie/codegear/CodeGear.java src/main/java/christie/codegear/InputDataGear.java src/main/java/christie/daemon/IncomingTcpConnection.java src/main/java/christie/datagear/Command/PutCommand.java src/main/java/christie/datagear/Command/RemotePeekCommand.java src/main/java/christie/datagear/Command/RemoteTakeCommand.java src/main/java/christie/datagear/Command/ReplyCommand.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/dg/DataGear.java src/main/java/christie/datagear/dg/MessagePackDataGear.java src/main/java/christie/test/Remote/CreateRemotePutTest.java src/main/java/christie/test/Remote/RemotePutTest.java src/main/java/christie/test/RemoteTake/CreateRemoteTakeTest.java src/main/java/christie/test/RemoteTake/RemoteTakeTest.java src/main/java/christie/test/TestLocal/TestCodeGear.java
diffstat 20 files changed, 153 insertions(+), 99 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/annotation/PeekFrom.java	Thu Feb 15 15:48:23 2018 +0900
@@ -0,0 +1,12 @@
+package christie.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PeekFrom {
+    String value();
+}
--- a/src/main/java/christie/annotation/Take.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/annotation/Take.java	Thu Feb 15 15:48:23 2018 +0900
@@ -11,5 +11,4 @@
 @Target(ElementType.FIELD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Take {
-    String value();
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/annotation/TakeFrom.java	Thu Feb 15 15:48:23 2018 +0900
@@ -0,0 +1,13 @@
+package christie.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TakeFrom {
+    String value();
+}
+
--- a/src/main/java/christie/codegear/CodeGear.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/codegear/CodeGear.java	Thu Feb 15 15:48:23 2018 +0900
@@ -1,7 +1,9 @@
 package christie.codegear;
 
 import christie.annotation.Peek;
+import christie.annotation.PeekFrom;
 import christie.annotation.Take;
+import christie.annotation.TakeFrom;
 import christie.datagear.*;
 import christie.datagear.command.Command;
 import christie.datagear.command.PeekCommand;
@@ -32,12 +34,17 @@
         for (Field field : this.getClass().getDeclaredFields()) {//AnnotationからInputDataGearをセット
             if (field.isAnnotationPresent(Take.class)) {
                 Take ano = field.getAnnotation(Take.class);
-                setTakeCommand(ano.value(), field.getName(), new DataGear(field.getType()));
+                setTakeCommand("local", field.getName(), new DataGear(field.getType()));
             } else if (field.isAnnotationPresent(Peek.class)) {
                 Peek ano = field.getAnnotation(Peek.class);
+                setPeekCommand("local", field.getName(), new DataGear(field.getType()));
+            } if (field.isAnnotationPresent(TakeFrom.class)) {
+                TakeFrom ano = field.getAnnotation(TakeFrom.class);
+                setTakeCommand(ano.value(), field.getName(), new DataGear(field.getType()));
+            } else if (field.isAnnotationPresent(PeekFrom.class)) {
+                PeekFrom ano = field.getAnnotation(PeekFrom.class);
                 setPeekCommand(ano.value(), field.getName(), new DataGear(field.getType()));
             }
-            //ToDo:add remote peek
         }
 
         idg.finishInput(cgm, commandList);
--- a/src/main/java/christie/codegear/InputDataGear.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/codegear/InputDataGear.java	Thu Feb 15 15:48:23 2018 +0900
@@ -1,7 +1,9 @@
 package christie.codegear;
 
 import christie.annotation.Peek;
+import christie.annotation.PeekFrom;
 import christie.annotation.Take;
+import christie.annotation.TakeFrom;
 import christie.datagear.command.Command;
 import christie.datagear.dg.DataGear;
 
@@ -33,8 +35,7 @@
         }
 
         for(Command cm : commandList){
-            cgm.getDGM(cm.toDgmName).take(cm);
-            //ToDo:add peek
+            cgm.getDGM(cm.toDgmName).runCommand(cm);
         }
     }
 
@@ -63,7 +64,13 @@
             } else if (field.isAnnotationPresent(Peek.class)){
                 Peek ano = field.getAnnotation(Peek.class);
                 setField(field);
-            } //ToDo:implements RemotePut
+            }  else if (field.isAnnotationPresent(TakeFrom.class)){
+                TakeFrom ano = field.getAnnotation(TakeFrom.class);
+                setField(field);
+            } else if (field.isAnnotationPresent(PeekFrom.class)){
+                PeekFrom ano = field.getAnnotation(PeekFrom.class);
+                setField(field);
+            }
         }
     }
 
--- a/src/main/java/christie/daemon/IncomingTcpConnection.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/daemon/IncomingTcpConnection.java	Thu Feb 15 15:48:23 2018 +0900
@@ -7,6 +7,7 @@
 import christie.datagear.command.Command;
 import christie.datagear.command.CommandType;
 import christie.datagear.RemoteMessage;
+import christie.datagear.command.RemotePeekCommand;
 import christie.datagear.command.RemoteTakeCommand;
 import christie.datagear.dg.MessagePackDataGear;
 import org.msgpack.MessagePack;
@@ -61,29 +62,19 @@
                         break;
 
                     case REMOTEPEEK:
+                        cgm.getLocalDGM().runCommand(new RemotePeekCommand(msg, connection));
+                        break;
                     case REMOTETAKE:
-
-                        RemoteTakeCommand cmd = null;
-                        try {
-                            cmd = new RemoteTakeCommand(msg.fromDgmName, msg.key, Class.forName(msg.clazz), connection);
-                        } catch (ClassNotFoundException e) {
-                            e.printStackTrace();
-                        }
-
-                        cgm.getLocalDGM().take(cmd);
+                        cgm.getLocalDGM().runCommand(new RemoteTakeCommand(msg, connection));
 
                         break;
                     case REPLY://待っていたwaitListに渡してcsにセット
                         data = new byte[unpacker.readInt()];
                         connection.socket.getInputStream().read(data);
+
                         try {
                             MessagePackDataGear dg = new MessagePackDataGear(data, Class.forName(msg.clazz));
-
-                            DataGearManager dgm = cgm.getDGM(msg.fromDgmName);
-                            Command cm = dgm.waitList.getAndRemoveCommand(msg.key);
-                            cm.dg = dg;
-                            dgm.runCommand(cm);
-
+                            cgm.getDGM(msg.fromDgmName).resolveWaitCommand(msg.key, dg);
                         } catch (ClassNotFoundException e) {
                             e.printStackTrace();
                         }
--- a/src/main/java/christie/datagear/Command/PutCommand.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/Command/PutCommand.java	Thu Feb 15 15:48:23 2018 +0900
@@ -25,7 +25,7 @@
 
         try {
             byte[] command = packer.write(createRemoteMessage());
-            byte[] data = new MessagePackDataGear(dg.getData(), dg.getClazz()).getMessagePack();
+            byte[] data = new MessagePackDataGear(dg.getData()).getMessagePack();
             byte[] dataSize = packer.write(data.length);
 
             buf = ByteBuffer.allocate(command.length+dataSize.length+data.length);
--- a/src/main/java/christie/datagear/Command/RemotePeekCommand.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/Command/RemotePeekCommand.java	Thu Feb 15 15:48:23 2018 +0900
@@ -1,10 +1,16 @@
 package christie.datagear.command;
 
 import christie.daemon.Connection;
+import christie.datagear.RemoteMessage;
 
 public class RemotePeekCommand extends RemoteTakeCommand {
-    public RemotePeekCommand(String fromDgmName, String key, Class clazz, Connection cn) {
-        super(fromDgmName, key, clazz, cn);
+    public RemotePeekCommand(RemoteMessage msg, Connection cn) {
+        super(msg, cn);
+        this.type = CommandType.REMOTEPEEK;
+    }
+
+    public RemotePeekCommand(String fromDgmName, Command cm, Connection cn) {
+        super(fromDgmName, cm, cn);
         this.type = CommandType.REMOTEPEEK;
     }
 }
--- a/src/main/java/christie/datagear/Command/RemoteTakeCommand.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/Command/RemoteTakeCommand.java	Thu Feb 15 15:48:23 2018 +0900
@@ -1,6 +1,7 @@
 package christie.datagear.command;
 
 import christie.daemon.Connection;
+import christie.datagear.RemoteMessage;
 import christie.datagear.dg.MessagePackDataGear;
 import org.msgpack.MessagePack;
 
@@ -9,12 +10,25 @@
 
 public class RemoteTakeCommand extends Command {
 
-    public RemoteTakeCommand(String fromDgmName, String key, Class clazz, Connection cn) {
+    public RemoteTakeCommand(RemoteMessage msg, Connection cn) {
+        this.type = CommandType.REMOTETAKE;
+        this.fromDgmName = msg.fromDgmName;
+        this.key = msg.key;
+        try {
+            this.clazz = Class.forName(msg.clazz);
+        } catch (ClassNotFoundException e) {
+            e.printStackTrace();
+        }
+        this.dg = new MessagePackDataGear(this.clazz);
+        this.connection = cn;
+    }
+
+    public RemoteTakeCommand(String fromDgmName, Command cm, Connection cn) {
         this.type = CommandType.REMOTETAKE;
         this.fromDgmName = fromDgmName;
-        this.key = key;
+        this.key = cm.key;
+        this.clazz = cm.clazz;
         this.dg = new MessagePackDataGear(clazz);
-        this.clazz = clazz;
         this.connection = cn;
     }
 
--- a/src/main/java/christie/datagear/Command/ReplyCommand.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/Command/ReplyCommand.java	Thu Feb 15 15:48:23 2018 +0900
@@ -5,11 +5,11 @@
 
 public class ReplyCommand extends PutCommand {
 
-    public ReplyCommand(String fromDgmName, String key, DataGear dg, Connection cn){
-        super(0, null, key, dg);
-        this.fromDgmName = fromDgmName;
+    public ReplyCommand(Command cm){
+        super(0, null, cm.key, cm.dg);
+        this.fromDgmName = cm.fromDgmName;
         this.type = CommandType.REPLY;
-        this.connection = cn;
+        this.connection = cm.connection;
     }
 
     public void setData(Object data){
--- a/src/main/java/christie/datagear/DataGearManager.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/DataGearManager.java	Thu Feb 15 15:48:23 2018 +0900
@@ -1,6 +1,7 @@
 package christie.datagear;
 
 import christie.datagear.command.Command;
+import christie.datagear.dg.DataGear;
 
 /**
  * Created by e125769 on 12/7/17.
@@ -9,9 +10,7 @@
 public abstract class DataGearManager {
     protected DataGears dataGears = new DataGears();
     public WaitList waitList = new WaitList();
-    public abstract void take(Command cm);
     public abstract void put(String key, Object data);
-    public abstract void metaPut(int cgmID, String key, Object data);//this is used from local only
     public abstract void runCommand(Command cm);
-
+    public abstract void resolveWaitCommand(String key, DataGear dg);
 }
--- a/src/main/java/christie/datagear/LocalDataGearManager.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/LocalDataGearManager.java	Thu Feb 15 15:48:23 2018 +0900
@@ -8,25 +8,11 @@
  */
 public class LocalDataGearManager extends DataGearManager {
 
-    public void take(Command cm) {
-        if (dataGears.containsKey(cm.key)) {
-            runCommand(cm);
-        } else {
-            waitList.add(cm);
-        }
-    }
-
     public void put(String key, Object data) {//main use
-        DataGear dg = new DataGear(data, data.getClass());
+        DataGear dg = new DataGear(data);
         put(key, dg);
     }
 
-    @Override
-    public void metaPut(int cgmID, String key, Object data) {
-        DataGear dg = new DataGear(data, data.getClass());
-        runCommand(new PutCommand(cgmID, "local", key, dg));
-    }
-
     public void put(String key, DataGear dg){
         runCommand(new PutCommand(1, "local", key, dg));
     }
@@ -42,23 +28,40 @@
 
                 break;
             case TAKE:
-                takeAndSetData(cm);
-                cm.setInputs();
+                if (dataGears.containsKey(cm.key)) {
+                    takeAndSetData(cm);
+                    cm.setInputs();
+                } else {
+                    waitList.add(cm);
+                }
 
                 break;
             case REMOTETAKE:
-                takeAndSetData(cm);
-                runCommand(new ReplyCommand(cm.fromDgmName, cm.key, cm.dg, cm.connection));
+                if (dataGears.containsKey(cm.key)) {
+                    takeAndSetData(cm);
+                    runCommand(new ReplyCommand(cm));
+                } else {
+                    waitList.add(cm);
+                }
 
                 break;
             case PEEK:
-                peekAndSetData(cm);
-                cm.setInputs();
+                if (dataGears.containsKey(cm.key)) {
+                    peekAndSetData(cm);
+                    cm.setInputs();
+                } else {
+                    waitList.add(cm);
+                }
 
                 break;
-            case REMOTEPEEK://ToDo:implement
-                //peekAndSetData(cm);
-                //runCommand(new RemotePeekCommand(cm.cgmID, cm.fromDgmName, cm.key, cm.dg, cm.connection));
+            case REMOTEPEEK:
+                if (dataGears.containsKey(cm.key)) {
+                    peekAndSetData(cm);
+                    runCommand(new ReplyCommand(cm));
+                } else {
+                    waitList.add(cm);
+                }
+
                 break;
             case REPLY:
                 cm.connection.write(cm);
@@ -66,6 +69,11 @@
         }
     }
 
+    @Override
+    public void resolveWaitCommand(String key, DataGear dg) {
+
+    }
+
     private void takeAndSetData(Command cm){
         cm.dg.setData(dataGears.take(cm.key));
     }
--- a/src/main/java/christie/datagear/RemoteDataGearManager.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/RemoteDataGearManager.java	Thu Feb 15 15:48:23 2018 +0900
@@ -54,31 +54,31 @@
     }
 
     @Override
-    public void take(Command cm) {
-        waitList.add(cm);
-        RemoteTakeCommand remoteCmd = new RemoteTakeCommand(connection.name, cm.key, cm.clazz, connection);
-        connection.write(remoteCmd);
-    }
-
-    public void metaPut(int cgmID, String key, Object data){//meta
-        Command cm = new PutCommand(0, null, key, new DataGear(data, data.getClass()));
+    public void put(String key, Object data) {
+        Command cm = new PutCommand(0, null, key, new DataGear(data));
         connection.write(cm);
     }
 
     @Override
-    public void put(String key, Object data) {
-        metaPut(1, key, data);//don't use cgmID
+    public void runCommand(Command cm) {
+        waitList.add(cm);
+        Command remoteCmd = null;
+        switch (cm.type) {
+            case PEEK:
+                remoteCmd = new RemotePeekCommand(connection.name, cm, connection);
+                break;
+            case TAKE:
+                remoteCmd = new RemoteTakeCommand(connection.name, cm, connection);
+                break;
+        }
+        connection.write(remoteCmd);
     }
 
     @Override
-    public void runCommand(Command cm) {
-        switch (cm.type) {
-            case PUT:
-                break;
-            case TAKE:
-                cm.cg.getIdg().setInputs(cm.key, cm.dg);
-                break;
-        }
+    public void resolveWaitCommand(String key, DataGear dg) {
+        Command cm = waitList.getAndRemoveCommand(key);
+        cm.dg = dg;
+        cm.setInputs();
     }
 
 }
--- a/src/main/java/christie/datagear/dg/DataGear.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/dg/DataGear.java	Thu Feb 15 15:48:23 2018 +0900
@@ -6,8 +6,8 @@
     protected T data = null;
     protected Class<T> clazz = null;
 
-    public DataGear(T data, Class clazz) {//for normal
-        setClazz(clazz);
+    public DataGear(T data) {//for normal
+        setClazz(data.getClass());
         setData(data);
     }
 
--- a/src/main/java/christie/datagear/dg/MessagePackDataGear.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/datagear/dg/MessagePackDataGear.java	Thu Feb 15 15:48:23 2018 +0900
@@ -9,8 +9,8 @@
     private int dataSize;
     private MessagePack packer = new MessagePack();
 
-    public MessagePackDataGear(T data, Class clazz){
-        super(data, clazz);
+    public MessagePackDataGear(T data){
+        super(data);
         getMessagePack();
     }
 
--- a/src/main/java/christie/test/Remote/CreateRemotePutTest.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/test/Remote/CreateRemotePutTest.java	Thu Feb 15 15:48:23 2018 +0900
@@ -8,7 +8,7 @@
     @Override
     protected void run(CodeGearManager cgm) {//できるだけ並列に走らせるためにStartCodeGearには書かない
         cgm.setup(new RemotePutTest());
-        getDGM("remote").put("hoge", 1);
+        getDGM("remote").put("count", 1);
         getDGM("remote").put("cgmID", cgm.cgmID);
     }
 }
--- a/src/main/java/christie/test/Remote/RemotePutTest.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/test/Remote/RemotePutTest.java	Thu Feb 15 15:48:23 2018 +0900
@@ -3,22 +3,21 @@
 import christie.annotation.Take;
 import christie.codegear.CodeGear;
 import christie.codegear.CodeGearManager;
-import christie.datagear.dg.DataGear;
 
 public class RemotePutTest extends CodeGear {
 
-    @Take("local")
-    public int hoge;
+    @Take
+    public int count;
 
-    @Take("local")
+    @Take
     public int cgmID;
 
     @Override
     protected void run(CodeGearManager cgm) {
-        if (hoge != 10){
-            System.out.println(cgmID + " : " + hoge);
+        if (count != 10){
+            System.out.println(cgmID + " : " + count);
             cgm.setup(new RemotePutTest());
-            getDGM("remote").put("hoge", hoge + 1);
+            getDGM("remote").put("count", count + 1);
             getDGM("remote").put("cgmID", cgm.cgmID);
         }
     }
--- a/src/main/java/christie/test/RemoteTake/CreateRemoteTakeTest.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/test/RemoteTake/CreateRemoteTakeTest.java	Thu Feb 15 15:48:23 2018 +0900
@@ -9,7 +9,7 @@
     @Override
     protected void run(CodeGearManager cgm) {
         cgm.setup(new RemoteTakeTest());
-        getLocalDGM().put("hoge", 1);
+        getLocalDGM().put("count", 1);
         getLocalDGM().put("cgmID", cgm.cgmID);
     }
 }
--- a/src/main/java/christie/test/RemoteTake/RemoteTakeTest.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/test/RemoteTake/RemoteTakeTest.java	Thu Feb 15 15:48:23 2018 +0900
@@ -1,27 +1,26 @@
 package christie.test.RemoteTake;
 
-import christie.annotation.Take;
+import christie.annotation.TakeFrom;
 import christie.codegear.CodeGear;
 import christie.codegear.CodeGearManager;
-import christie.datagear.dg.DataGear;
 
 public class RemoteTakeTest extends CodeGear{
 
-    @Take("remote")
-    public int hoge;
+    @TakeFrom("remote")
+    int count;
 
-    @Take("remote")
-    public int cgmID;
+    @TakeFrom("remote")
+    int cgmID;
 
     @Override
     protected void run(CodeGearManager cgm) {
 
-        if (hoge <= 10){
-            System.out.println(cgmID + " : " +hoge);
+        if (count <= 10){
+            System.out.println(cgmID + " : " + count);
             cgm.setup(new RemoteTakeTest());
         }
 
-        getLocalDGM().put("hoge", hoge + 1);
+        getLocalDGM().put("count", count + 1);
         getLocalDGM().put("cgmID", cgm.cgmID);
     }
 }
--- a/src/main/java/christie/test/TestLocal/TestCodeGear.java	Tue Feb 13 18:29:37 2018 +0900
+++ b/src/main/java/christie/test/TestLocal/TestCodeGear.java	Thu Feb 15 15:48:23 2018 +0900
@@ -11,7 +11,7 @@
  */
 public class TestCodeGear extends CodeGear {
 
-    @Take("local")
+    @Take
     int hoge;
 
     public void run(CodeGearManager cgm){