1 package spoon.examples.distcalc.template; 2 3 import java.util.ArrayList ; 4 import java.util.List ; 5 6 import spoon.examples.distcalc.MemoryCell; 7 import spoon.examples.distcalc.processing._NodeInterf_; 8 import spoon.reflect.declaration.CtParameter; 9 import spoon.reflect.reference.CtTypeReference; 10 import spoon.template.Local; 11 import spoon.template.Parameter; 12 import spoon.template.Template; 13 14 public class ServicesImplTemplate implements Template { 15 16 @Parameter 17 List <CtParameter> _parameters_; 18 19 @Parameter("_nodes_") 20 String __nodes_; 21 22 @Parameter 23 String _serviceName_; 24 25 @Parameter 26 Class _ReturnType_; 27 28 @Parameter 29 CtTypeReference _NodeInterf_; 30 31 @Parameter 32 CtTypeReference _NodeImpl_; 33 34 @Parameter 35 CtTypeReference _MemoryCellType_; 36 37 @Local 38 public ServicesImplTemplate(CtTypeReference nodeImplType, CtTypeReference nodeType, CtTypeReference memType, 39 Class returnType, String serviceName, List <CtParameter> parameters) { 40 this._parameters_ = parameters; 41 this.__nodes_ = serviceName + "_" + "nodes"; 42 this._ReturnType_ = returnType; 43 this._NodeInterf_ = nodeImplType; 44 this._NodeImpl_ = nodeType; 45 this._serviceName_ = serviceName; 46 this._MemoryCellType_ = memType; 47 } 48 49 public static List <_NodeInterf_> _nodes_ = new ArrayList <_NodeInterf_>(); 50 51 @Local 52 void initializer() { 53 ServicesImplTemplate._nodes_.add(new _NodeImpl_()); 54 } 55 56 public _ReturnType_ _serviceName_(List <CtParameter> _parameters_) { 57 _NodeInterf_ node = null; 58 for (_NodeInterf_ f : _nodes_) { 59 if (f.canProceed(_parameters_)) { 60 node = f; 61 break; 62 } 63 } 64 if (node != null) { 65 if (node instanceof MemoryCell) { 66 return node.proceed(_parameters_); 67 } else { 68 _ReturnType_ result = node.proceed(_parameters_); 69 _nodes_.add(0, new _MemoryCellType_(result,_parameters_)); 70 return result; 71 } 72 } else { 73 throw new RuntimeException ("cannot calculate"); 74 } 75 } 76 77 } 78 | Popular Tags |