KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > spoon > examples > distcalc > template > ServicesImplTemplate


1 package spoon.examples.distcalc.template;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.List JavaDoc;
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 JavaDoc<CtParameter> _parameters_;
18
19     @Parameter("_nodes_")
20     String JavaDoc __nodes_;
21
22     @Parameter
23     String JavaDoc _serviceName_;
24
25     @Parameter
26     Class JavaDoc _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 JavaDoc returnType, String JavaDoc serviceName, List JavaDoc<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 JavaDoc<_NodeInterf_> _nodes_ = new ArrayList JavaDoc<_NodeInterf_>();
50
51     @Local
52     void initializer() {
53         ServicesImplTemplate._nodes_.add(new _NodeImpl_());
54     }
55
56     public _ReturnType_ _serviceName_(List JavaDoc<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 JavaDoc("cannot calculate");
74         }
75     }
76
77 }
78
Popular Tags