changeset 2:bacdcb5e6dcf

change StartCodeGear static
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Tue, 12 Dec 2017 16:48:30 +0900
parents 3ea61d0bfc34
children e3bb0eea73f2
files src/main/java/christie/codegear/CodeGear.java src/main/java/christie/codegear/InputDataGear.java src/main/java/christie/codegear/OutputDataGear.java src/main/java/christie/codegear/StartCodeGear.java src/main/java/christie/test/StartTest.java src/main/java/christie/test/TestCodeGear.java
diffstat 6 files changed, 38 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/christie/codegear/CodeGear.java	Mon Dec 11 21:19:25 2017 +0900
+++ b/src/main/java/christie/codegear/CodeGear.java	Tue Dec 12 16:48:30 2017 +0900
@@ -16,12 +16,15 @@
 public interface CodeGear extends Runnable{
     InputDataGear idg = new InputDataGear();
     OutputDataGear odg = new OutputDataGear();
-    //CodeGearManager cgm = null;
     ArrayList<Command> commandList = new ArrayList<Command>();
 
-    default void setKey(CodeGearManager cgm){//AnnotationからInputDataGearをセット
+    default void start(CodeGearManager cgm){//AnnotationからInputDataGearをセット
+        odg.initODG(cgm, this);
         for (Field field : this.getClass().getDeclaredFields()) {
             if (field.isAnnotationPresent(Take.class)){//何故かここに入らない
+                if (!field.getType().isInterface()){
+                    System.out.println("DataGearではありません");
+                }
                 Take ano = field.getAnnotation(Take.class);
                 System.out.println(ano.value());
                 commandList.add(new Command(this, null, "local", ano.value(), CommandType.TAKE));
@@ -30,13 +33,13 @@
         idg.finishInput(cgm, this, commandList);
     }
 
-    default void setValue(){//Annotationから揃ったInputDataGearの値をキャスト
+    default void setInputValue(){//Annotationから揃ったInputDataGearの値をキャスト
         for (Field field : this.getClass().getDeclaredFields()) {
             field.setAccessible(true);
             if (field.isAnnotationPresent(Take.class)){
                 Take ano = field.getAnnotation(Take.class);
                 try {
-                    field.set(this, idg.inputs.get(ano.value()));//ダウンキャストできるか?
+                    field.set(this, idg.inputValue.get(ano.value()));//ダウンキャストできるか?
                 } catch (IllegalAccessException e) {
                     e.printStackTrace();
                 }
@@ -45,11 +48,11 @@
     }
 
     default void put(String key, Object data){
-        //cgm.getDGM("local").put(key, new DataGear(data));
+        odg.put(key, data);
     }
 
     default void put(String dist, String key, Object data){
-        //cgm.getDGM(dist).put(key, new DataGear(data));
+        odg.put(dist, key, data);
     }
 
 }
--- a/src/main/java/christie/codegear/InputDataGear.java	Mon Dec 11 21:19:25 2017 +0900
+++ b/src/main/java/christie/codegear/InputDataGear.java	Tue Dec 12 16:48:30 2017 +0900
@@ -10,10 +10,10 @@
  * inputDataGearの待ち合わせの管理
  */
 public class InputDataGear {
-    HashMap<String, DataGear> inputs = new HashMap<String, DataGear>();//受け皿
-    CodeGearManager cgm;
-    CodeGear cg;
-    int count = 0;
+    public HashMap<String, DataGear> inputValue = new HashMap<String, DataGear>();//受け皿
+    public CodeGearManager cgm;
+    public CodeGear cg;
+    private int count = 0;
 
     void finishInput(CodeGearManager cgm, CodeGear cg, ArrayList<Command> commandList){
         this.cgm = cgm;
@@ -28,19 +28,19 @@
             if (cgm.getDGM(cm.dest).dataGears.containsKey(cm.key)) {
                 this.cgm.getDGM(cm.dest).runCommand(cm);
             } else {
-                this.cgm.getDGM(cm.dest).addWaitList(cm);//全体のinputにこのCGのinputを追加
+                this.cgm.getDGM(cm.dest).addWaitList(cm);
             }
         }
     }
 
     public void setInputs(String key, DataGear value){
-        inputs.put(key, value);
+        inputValue.put(key, value);
         count();
     }
 
     public void count(){//Commandが実行されるたびにデクリメント
         if (--count == 0){
-            cg.setValue();
+            cg.setInputValue();
             submitCG();
         }
     }
--- a/src/main/java/christie/codegear/OutputDataGear.java	Mon Dec 11 21:19:25 2017 +0900
+++ b/src/main/java/christie/codegear/OutputDataGear.java	Tue Dec 12 16:48:30 2017 +0900
@@ -14,7 +14,11 @@
         this.cg = cg;
     }
 
-    public void put(String key,DataGear dg){
-        cgm.getDGM("local").put(key, dg);
+    public void put(String key, Object dg){
+        cgm.getDGM("local").put(key, dg);//interfaceはnewできない
+    }
+
+    public void put(String dist, String key, Object dg){
+        cgm.getDGM(dist).put(key, dg);
     }
 }
--- a/src/main/java/christie/codegear/StartCodeGear.java	Mon Dec 11 21:19:25 2017 +0900
+++ b/src/main/java/christie/codegear/StartCodeGear.java	Tue Dec 12 16:48:30 2017 +0900
@@ -1,19 +1,25 @@
 package christie.codegear;
 
+import java.util.HashMap;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 public interface StartCodeGear {
-    default CodeGearManager createCodeGearManager(ThreadPoolExecutor exe){
-        return new CodeGearManager(exe);
+    HashMap<String, CodeGearManager> cgms = new HashMap<String, CodeGearManager>();
+    ThreadPoolExecutor threadPool = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), // initial number of threads
+            Runtime.getRuntime().availableProcessors(),
+            Integer.MAX_VALUE, // keepAliveTime
+            TimeUnit.SECONDS,
+            new LinkedBlockingQueue<Runnable>());
+
+    static CodeGearManager createCGM(String name){
+        CodeGearManager cgm = new CodeGearManager(threadPool);
+        cgms.put(name, cgm);
+        return cgm;
     }
 
-    default ThreadPoolExecutor createThreadPool(){
-        return new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), // initial number of threads
-                Runtime.getRuntime().availableProcessors(),
-                Integer.MAX_VALUE, // keepAliveTime
-                TimeUnit.SECONDS,
-                new LinkedBlockingQueue<Runnable>());
+    static CodeGearManager getCGM(String name){
+        return cgms.get(name);
     }
 }
--- a/src/main/java/christie/test/StartTest.java	Mon Dec 11 21:19:25 2017 +0900
+++ b/src/main/java/christie/test/StartTest.java	Tue Dec 12 16:48:30 2017 +0900
@@ -1,18 +1,12 @@
 package christie.test;
 
-import christie.codegear.CodeGearManager;
 import christie.codegear.StartCodeGear;
 import christie.datagear.StringData;
 
-import java.util.concurrent.ThreadPoolExecutor;
-
 public class StartTest implements StartCodeGear{
     public static void main(String args[]){
-        StartTest start = new StartTest();
         TestCodeGear test = new TestCodeGear();
-        CodeGearManager cgm = start.createCodeGearManager(start.createThreadPool());
-        test.setKey(cgm);
-        test.odg.initODG(cgm, test);
-        test.odg.put("hoge", new StringData("hogehogehoge"));
+        test.start(StartCodeGear.createCGM("first"));
+        test.put("hoge", new StringData("hogehogehoge"));
     }
 }
--- a/src/main/java/christie/test/TestCodeGear.java	Mon Dec 11 21:19:25 2017 +0900
+++ b/src/main/java/christie/test/TestCodeGear.java	Tue Dec 12 16:48:30 2017 +0900
@@ -14,14 +14,6 @@
     @Take("hoge")
     StringData hoge;
 
-    /*public static void main(String args[]){
-        TestCodeGear test = new TestCodeGear();
-        CodeGearManager cgm = new CodeGearManager();
-        test.setKey(cgm);
-        test.odg.initODG(cgm, test);
-        odg.put("hoge", new StringData("hogehogehoge"));
-    }*/
-
     public void run() {
         System.out.println("in run!");
         System.out.println(hoge.getData());