Mercurial > hg > Database > Christie
view src/main/java/christie/codegear/CodeGear.java @ 221:7e5f18a5e612
add RemoteEditor & TextEditor
author | ichikitakahiro <e165713@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 19 Nov 2019 16:51:26 +0900 |
parents | 3bddbfd6ea02 |
children |
line wrap: on
line source
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.*; import christie.datagear.dg.DataGear; import java.lang.reflect.Field; import java.util.ArrayList; /** * Created by e125769 on 12/7/17. * Annotationからのinputコマンドの生成、揃ったDataGearの値を返す */ public abstract class CodeGear{ private InputDataGear idg = new InputDataGear(this); private ArrayList<Command> commandList = new ArrayList<Command>(); private CodeGearManager cgm; private DataGearManager localDGM; private CodeGearExecutor cge; protected abstract void run(CodeGearManager cgm); public void setup(CodeGearManager cgm){ setup(cgm, Thread.NORM_PRIORITY); } public void setup(CodeGearManager cgm, int priority){ this.cgm = cgm; this.cge = new CodeGearExecutor(this, this.cgm, priority); this.localDGM = cgm.getLocalDGM(); for (Field field : this.getClass().getDeclaredFields()) {//AnnotationからInputDataGearをセット if (field.isAnnotationPresent(Take.class)) { //Take ano = field.getAnnotation(Take.class); setCommand(CommandType.TAKE, "local", field.getName(), new DataGear(field.getType())); } else if (field.isAnnotationPresent(Peek.class)) { //Peek ano = field.getAnnotation(Peek.class); setCommand(CommandType.PEEK,"local", field.getName(), new DataGear(field.getType())); } else if (field.isAnnotationPresent(TakeFrom.class)) { TakeFrom ano = field.getAnnotation(TakeFrom.class); setCommand(CommandType.TAKE, ano.value(), field.getName(), new DataGear(field.getType())); } else if (field.isAnnotationPresent(PeekFrom.class)) { PeekFrom ano = field.getAnnotation(PeekFrom.class); setCommand(CommandType.PEEK,ano.value(), field.getName(), new DataGear(field.getType())); } } idg.finishInput(cgm, commandList); } public void setCommand(CommandType type, String toDgmName, String key, DataGear dg){ Command command = new CommandBuilder().init(type).cg(this) .cgmID(cgm.cgmID) .toDgmName(toDgmName) .key(key) .dg(dg) .build(); commandList.add(command); } public DataGearManager getLocalDGM() { return localDGM; } public DataGearManager getDGM(String dgmName) { return cgm.getDGM(dgmName); } public CodeGear put(String dgmName, String key, Object data){ getDGM(dgmName).put(key, data); return this; } public CodeGear put(String key, Object value){ localDGM.put(key, value); return this; } public Boolean containsDGM(String dgmName){ return cgm.containsDGM(dgmName);} public void finish(String managerKey) { if (cgm.getDGMList().contains(managerKey)) cgm.getDGMList().get(managerKey).finish(); } public void flip(String dgmName, String key){//ToDo: これ値を編集できるからflipできてない。初期値をflipしたい。 for (Field field : this.getClass().getDeclaredFields()) { if (field.getName() == key){ try { getDGM(dgmName).put(key, field.get(this)); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } public InputDataGear getIdg() { return idg; } public CodeGearExecutor getCge() { return cge; } }