Mercurial > hg > Database > Christie
view src/main/java/christie/codegear/InputDataGear.java @ 196:ad49723367c2
add priority
author | akahori |
---|---|
date | Sat, 09 Mar 2019 14:03:06 +0900 |
parents | 7b405f622c5c |
children | e486c13d9ea9 |
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.DataGears; import christie.datagear.command.Command; import christie.datagear.dg.DataGear; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; /** * Created by e125769 on 12/7/17. * inputDataGearの待ち合わせの管理 */ public class InputDataGear { public DataGears dataGears; public ConcurrentHashMap<String, DataGear> inputValue = new ConcurrentHashMap<String, DataGear>();//受け皿 public CodeGearManager cgm; public CodeGear cg; private AtomicInteger count = new AtomicInteger(0); public InputDataGear(CodeGear cg){ this.cg = cg; } void finishInput(CodeGearManager cgm, ArrayList<Command> commandList){ this.cgm = cgm; count = new AtomicInteger(commandList.size()); if(count.get() == 0){ submitCG(); } for(Command cm : commandList){ cgm.getDGM(cm.toDgmName).runCommand(cm); } } public void setInputs(String key, DataGear dg){ inputValue.put(key, dg); decriment(); } public synchronized void decriment(){//Commandが実行されるたびにデクリメント if (count.decrementAndGet() == 0){ setInputValue(); submitCG(); } } void submitCG(){ cgm.submit(cg); } public void setInputValue(){//Annotationから揃ったInputDataGearの値をキャスト for (Field field : cg.getClass().getDeclaredFields()) { field.setAccessible(true); if (field.isAnnotationPresent(Take.class) || field.isAnnotationPresent(TakeFrom.class) || field.isAnnotationPresent(Peek.class) || field.isAnnotationPresent(PeekFrom.class)){ try { field.set(cg, typeCheck(field.getName())); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } public Object typeCheck(String key){ if (inputValue.get(key).getData() != null){ return inputValue.get(key).getData(); } else { throw new IllegalArgumentException("'" + key + "' is null! this DataGear required type of " + inputValue.get(key).getClazz()); } } }