View Javadoc

1   package org.catacomb.act;
2   
3   import org.catacomb.report.E;
4   
5   
6   public class FunctionSignature implements BlockSignature {
7   
8       public int type;
9   
10      public int sourceType;
11  
12      public String info;
13      public String functionName;
14      public Object[] argTypes;
15  
16  
17      public FunctionSignature(String fn) {
18          this(fn, UNKNOWN);
19      }
20  
21  
22      public FunctionSignature(String fn, int typ) {
23          functionName = fn;
24          type = typ;
25          sourceType = USER_SOURCE;
26      }
27  
28      public void setUserSource() {
29          sourceType = USER_SOURCE;
30      }
31  
32      public void setSystemSource() {
33          sourceType = SYSTEM_SOURCE;
34      }
35  
36  
37      public int getTypeCode() {
38          return type;
39      }
40  
41  
42      public static String getTypeInfo(int itc) {
43          String ret = "";
44          if (itc == RECEIVE) {
45              ret = "Handlers: functions that are called when an event occurs in a connected component.";
46  
47          } else if (itc == SEND) {
48              ret = "Senders: these send an event to any connected components. The handler \n" +
49                    "on the receiving component will be called.";
50  
51  
52          } else if (itc == SETTER) {
53              ret = "Setters: these set a value for use later, but have no other effect: \n" +
54                    "the value is available to connected components if they ask for it";
55  
56          } else if (itc == GETTER) {
57              ret = "Getters: give access to quantities in connected components.";
58          }
59          return ret;
60      }
61  
62  
63      public void setInfo(String s) {
64          info = s;
65      }
66  
67  
68      public String getName() {
69          return functionName;
70      }
71  
72  
73      public String toJavaScriptStub() {
74          String ret = null;
75          if (sourceType == SYSTEM_SOURCE) {
76              ret = writeJsDoc();
77  
78          } else {
79              ret = writeEmptyJsFunction();
80  
81          }
82          return ret;
83      }
84  
85  
86      private String writeJsDoc() {
87          StringBuffer sb = new StringBuffer();
88  
89          if (info != null) {
90              if (info.indexOf("\n") > 0) {
91                  sb.append("/* Pre-defined function \n " + info + "\n*/\n");
92              } else {
93                  sb.append("// Pre-defined function: " + info + "\n");
94              }
95          } else {
96              sb.append("// Pre-defined  \n");
97          }
98          sb.append("//  ");
99          sb.append(functionName);
100         sb.append("(");
101         if (argTypes != null) {
102             E.missing();
103         }
104         sb.append(");\n");
105         return sb.toString();
106     }
107 
108 
109     private String writeEmptyJsFunction() {
110         StringBuffer sb = new StringBuffer();
111 
112         if (info != null) {
113             if (info.length() > 60 || info.indexOf("\n") > 0) {
114                 sb.append("/*\n");
115                 sb.append(info);
116                 sb.append("\n");
117 
118             } else {
119                 sb.append("//");
120                 sb.append(info);
121                 sb.append("\n");
122             }
123         }
124         sb.append("function ");
125         sb.append(functionName);
126         sb.append("(");
127         if (argTypes != null) {
128             E.missing();
129         }
130         sb.append(") {\n");
131         sb.append("}\n");
132         return sb.toString();
133     }
134 
135 }