Mercurial > hg > Database > Christie
view src/main/java/christie/codegear/CodeGear.java @ 36:4479d37c8e53
change put syntax
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 28 Feb 2018 20:32:36 +0900 |
parents | 307ac87ddcf7 |
children | 20f7270e997d |
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.Command; import christie.datagear.command.PeekCommand; import christie.datagear.command.TakeCommand; 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){ this.cgm = cgm; this.cge = new CodeGearExecutor(this, this.cgm); this.localDGM = cgm.getLocalDGM(); for (Field field : this.getClass().getDeclaredFields()) {//AnnotationからInputDataGearをセット if (field.isAnnotationPresent(Take.class)) { Take ano = field.getAnnotation(Take.class); 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())); } else 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())); } } idg.finishInput(cgm, commandList); } public void setTakeCommand(String toDgmName, String key, DataGear dg){ commandList.add(new TakeCommand(this, cgm.cgmID, toDgmName, key, dg)); } public void setPeekCommand(String toDgmName, String key, DataGear dg){ commandList.add(new PeekCommand(this, cgm.cgmID, toDgmName, key, dg)); } public DataGearManager getLocalDGM() { return localDGM; } public DataGearManager getDGM(String dgmName) { return cgm.getDGM(dgmName); } public void put(String dgmName, String key, Object data){ getDGM(dgmName).put(key, data); } public void put(String key, Object value){ localDGM.put(key, value); } 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; } }