Mercurial > hg > Database > Alice
view src/main/java/alice/codesegment/CodeSegment.java @ 635:0423eb7fd9ee
work create Receiver from Annotation.
Please invoke setKey after create all Receiver.
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 03 Dec 2017 00:09:04 +0900 |
parents | 69f9c5ff1df9 |
children | 33f300d0720a |
line wrap: on
line source
package alice.codesegment; import java.io.IOException; import java.lang.reflect.*; import java.util.ArrayList; import alice.Annotation.Take; import alice.codesegment.InputDataSegment; import alice.datasegment.CommandType; import alice.datasegment.Receiver; import javassist.*; import javassist.tools.reflect.Sample; import sun.jvm.hotspot.oops.Instance; public abstract class CodeSegment implements Runnable { public InputDataSegment ids = new InputDataSegment(this); public OutputDataSegment ods = new OutputDataSegment(); private ArrayList<Receiver> list = new ArrayList<Receiver>(); private ArrayList<Receiver> metaReceivers = new ArrayList<Receiver>(); private int priority = Thread.NORM_PRIORITY;//? public CodeSegment(){ createReceiver(); setKey(); } public void createReceiver(){ for (Field field : this.getClass().getDeclaredFields()) { if (field.isAnnotationPresent(Take.class)){ metaReceivers.add(ids.create(CommandType.TAKE)); } } } public void setKey(){ int i = 0; for (Field field : this.getClass().getDeclaredFields()) { if (field.isAnnotationPresent(Take.class)){ Take ano = field.getAnnotation(Take.class); field.setAccessible(true); metaReceivers.get(i).setKey(ano.value()); try { field.set(this, metaReceivers.get(i)); i++; } catch (IllegalAccessException e) { e.printStackTrace(); } } } } public void execute() { ids.receive(); } public void register(Receiver receiver) { list.add(receiver); }//Receiverを作成? public void recycle(){//idsのリセット ids.init(); ids.setCounter(list.size()); for (Receiver receiver : list) { receiver.index = 0; ids.recommand(receiver); } } public int getPriority() { return priority; } public void setPriority(int priority) { this.priority = priority; } }