ffead.server.doc
CfusionEngine.cpp
1 /*
2  Copyright 2009-2012, Sumeet Chhetri
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 */
16 /*
17  * CfusionEngine.cpp
18  *
19  * Created on: Nov 12, 2009
20  * Author: sumeet
21  */
22 
23 #include "CfusionEngine.h"
24 
25 CfusionEngine::CfusionEngine() {
26  // TODO Auto-generated constructor stub
27 
28 }
29 
30 CfusionEngine::~CfusionEngine() {
31  // TODO Auto-generated destructor stub
32 }
33 
34 void CfusionEngine::execute(string file)
35 {
36  string codeh,codem,pub,pri,pro;
37  string path = file.substr(0,file.find_last_of("/")+1);
38  XmlParser parser("Parser");
39  Element root = parser.getDocument(file).getRootElement();
40  ElementList eles = root.getChildElements();
41  string className = root.getAttribute("name");
42  StringUtil::toUpper(className);
43  codeh += ("#ifndef "+className+"_H_\n");
44  codeh += ("#define "+className+"_H_\n");
45  codem += ("#include \""+root.getAttribute("name")+".h\"\n\n");
46  for (unsigned int var = 0; var < eles.size(); var++)
47  {
48  if(eles.at(var).getTagName()=="includes")
49  {
50  string inc = eles.at(var).getAttribute("names");
51  strVec incs;
52  StringUtil::split(incs, inc, (";"));
53  for (unsigned int i = 0; i < incs.size(); i++)
54  {
55  codeh += ("#include \"" + incs.at(i) + "\"\n");
56  }
57  }
58  else if(eles.at(var).getTagName()=="using")
59  {
60  codeh += ("using namespace " + eles.at(var).getAttribute("ns") + ";\n"+"class " + root.getAttribute("name") + "{\n");
61  }
62  else if(eles.at(var).getTagName()=="constructor")
63  {
64  if(eles.at(var).getAttribute("access")=="public" || eles.at(var).getAttribute("access")=="")
65  {
66  pub += (root.getAttribute("name") + "("+eles.at(var).getAttribute("args")+");\n");
67  }
68  else if(eles.at(var).getAttribute("access")=="private")
69  {
70  pri += (root.getAttribute("name") + "("+eles.at(var).getAttribute("args")+");\n");
71  }
72  else if(eles.at(var).getAttribute("access")=="protected")
73  {
74  pro += (root.getAttribute("name") + "("+eles.at(var).getAttribute("args")+");\n");
75  }
76  //codeh += (root.getAttribute("name") + "("+eles.at(var).getAttribute("args")+");\n");
77  codem += (root.getAttribute("name")+"::"+root.getAttribute("name")+"("+eles.at(var).getAttribute("args")+")\n{\n}\n");
78  }
79  else if(eles.at(var).getTagName()=="property")
80  {
81  if(eles.at(var).getAttribute("access")=="public" || eles.at(var).getAttribute("access")=="")
82  {
83  pub += (eles.at(var).getAttribute("type") + " " + eles.at(var).getAttribute("name"));
84  /*if(eles.at(var).getAttribute("initVal")!="")
85  {
86  if(eles.at(var).getAttribute("type")!="string")
87  pub += (" = " + eles.at(var).getAttribute("initVal"));
88  else
89  pub += (" = \"" + eles.at(var).getAttribute("initVal") + "\"");
90  }*/
91  pub += ";\n";
92  }
93  else if(eles.at(var).getAttribute("access")=="private")
94  {
95  pri += (eles.at(var).getAttribute("type") + " " + eles.at(var).getAttribute("name"));
96  /*if(eles.at(var).getAttribute("initVal")!="")
97  {
98  if(eles.at(var).getAttribute("type")!="string")
99  pri += (" = " + eles.at(var).getAttribute("initVal"));
100  else
101  pri += (" = \"" + eles.at(var).getAttribute("initVal") + "\"");
102  }*/
103  pri += ";\n";
104  }
105  else if(eles.at(var).getAttribute("access")=="protected")
106  {
107  pro += (eles.at(var).getAttribute("type") + " " + eles.at(var).getAttribute("name"));
108  /*if(eles.at(var).getAttribute("initVal")!="")
109  {
110  if(eles.at(var).getAttribute("type")!="string")
111  pro += (" = " + eles.at(var).getAttribute("initVal"));
112  else
113  pro += (" = \"" + eles.at(var).getAttribute("initVal") + "\"");
114  }*/
115  pro += ";\n";
116  }
117  }
118  else if(eles.at(var).getTagName()=="member")
119  {
120  map<string,string> vars;
121  if(eles.at(var).getAttribute("access")=="public" || eles.at(var).getAttribute("access")=="")
122  {
123  pub += (eles.at(var).getAttribute("return") + " " + eles.at(var).getAttribute("name")
124  + "(" + eles.at(var).getAttribute("args") + ");\n");
125  codem += (eles.at(var).getAttribute("return") + " " + root.getAttribute("name")+"::"+
126  eles.at(var).getAttribute("name")+"("+eles.at(var).getAttribute("args")+")\n{\n");
127  }
128  else if(eles.at(var).getAttribute("access")=="private")
129  {
130  pri += (eles.at(var).getAttribute("return") + " " + eles.at(var).getAttribute("name")
131  + "(" + eles.at(var).getAttribute("args") + ");\n");
132  codem += (eles.at(var).getAttribute("return") + " " + root.getAttribute("name")+"::"+
133  eles.at(var).getAttribute("name")+"("+eles.at(var).getAttribute("args")+")\n{\n");
134  }
135  else if(eles.at(var).getAttribute("access")=="protected")
136  {
137  pro += (eles.at(var).getAttribute("return") + " " + eles.at(var).getAttribute("name")
138  + "(" + eles.at(var).getAttribute("args") + ");\n");
139  codem += (eles.at(var).getAttribute("return") + " " + root.getAttribute("name")+"::"+
140  eles.at(var).getAttribute("name")+"("+eles.at(var).getAttribute("args")+")\n{\n");
141  }
142  ElementList elesc = eles.at(var).getChildElements();
143  for (unsigned int var1 = 0; var1 < elesc.size(); var1++)
144  {
145  if(elesc.at(var1).getTagName()=="new")
146  {
147  vars[elesc.at(var1).getAttribute("name")] = elesc.at(var1).getAttribute("type");
148  codem += (elesc.at(var1).getAttribute("type")+ " "+elesc.at(var1).getAttribute("name"));
149  if(elesc.at(var1).getAttribute("initVal")!="")
150  {
151  if(elesc.at(var1).getAttribute("type")!="string")
152  codem += (" = " + elesc.at(var1).getAttribute("initVal"));
153  else
154  codem += (" = \"" + elesc.at(var1).getAttribute("initVal") + "\"");
155  }
156  else if(elesc.at(var1).getText()!="")
157  {
158  if(elesc.at(var1).getAttribute("type")!="string")
159  codem += (" = " + elesc.at(var1).getText());
160  else
161  codem += (" = \"" + elesc.at(var1).getText() + "\"");
162  }
163  codem += ";\n";
164  }
165  else if(elesc.at(var1).getTagName()=="assign")
166  {
167  string clasprop = elesc.at(var1).getAttribute("name");
168  StringUtil::replaceFirst(clasprop,"this:","this->");
169  if(elesc.at(var1).getText()!="")
170  {
171  codem += (clasprop);
172  if(vars[elesc.at(var1).getAttribute("name")]!="string")
173  codem += (" = " + elesc.at(var1).getText());
174  else
175  codem += (" = \"" + elesc.at(var1).getText() + "\"");
176  codem += ";\n";
177  }
178  else
179  {
180  codem += (clasprop + " = ");
181  if(elesc.at(var1).getChildElements().at(0).getTagName()=="value")
182  {
183  if(elesc.at(var1).getChildElements().at(0).getChildElements().size()==1)
184  {
185  Element ele = elesc.at(var1).getChildElements().at(0);
186  if(ele.getTagName()=="call")
187  {
188  codem += (ele.getAttribute("name"));
189  codem += ("("+ele.getChildElements().at(0).getText()+")");
190  }
191  }
192  /*else
193  {
194  if(vars[elesc.at(var1).getAttribute("name")]!="string")
195  codem += (elesce.at(var2).getText());
196  else
197  codem += ("\"" + elesce.at(var2).getText() + "\"");
198  }*/
199  }
200  else if(elesc.at(var1).getChildElements().at(0).getTagName()=="var")
201  {
202  clasprop = elesc.at(var1).getChildElements().at(0).getAttribute("name");
203  StringUtil::replaceFirst(clasprop,"this:","this->");
204  codem += (clasprop);
205  }
206  codem += ";\n";
207  }
208  }
209  else if(elesc.at(var1).getTagName()=="assignAdd" && elesc.at(var1).getAttribute("name")!="")
210  {
211  string clasprop = elesc.at(var1).getAttribute("name");
212  StringUtil::replaceFirst(clasprop,"this:","this->");
213  if(elesc.at(var1).getAttribute("rhs")!="" && elesc.at(var1).getAttribute("lhs")!="")
214  {
215  codem += (clasprop + " = " + elesc.at(var1).getAttribute("rhs") + " + " + elesc.at(var1).getAttribute("lhs") + ";\n");
216  }
217  else
218  {
219  codem += (clasprop + " = ");
220  ElementList elesce = elesc.at(var1).getChildElements();
221  for (unsigned int var2 = 0; var2 < elesce.size(); var2++)
222  {
223  if(elesce.at(var2).getTagName()=="value")
224  {
225  if(elesce.at(var2).getChildElements().size()==1)
226  {
227  if(elesce.at(var2).getChildElements().at(0).getTagName()=="call")
228  {
229  codem += (elesce.at(var2).getChildElements().at(0).getAttribute("name"));
230  codem += ("("+elesce.at(var2).getChildElements().at(0).getChildElements().at(0).getText()+")");
231  }
232  }
233  else
234  {
235  if(vars[elesc.at(var1).getAttribute("name")]!="string")
236  codem += (elesce.at(var2).getText());
237  else
238  codem += ("\"" + elesce.at(var2).getText() + "\"");
239  }
240  }
241  else if(elesce.at(var2).getTagName()=="var")
242  {
243  clasprop = elesce.at(var2).getAttribute("name");
244  StringUtil::replaceFirst(clasprop,"this:","this->");
245  codem += (clasprop);
246  }
247  if(var2!=elesce.size()-1)
248  codem += " + ";
249  }
250  codem += ";\n";
251  }
252  }
253  else if(elesc.at(var1).getTagName()=="return")
254  {
255  string clasprop = elesc.at(var1).getAttribute("name");
256  StringUtil::replaceFirst(clasprop,"this:","this->");
257  if(eles.at(var).getAttribute("return")=="string" && elesc.at(var1).getText()!="")
258  codem += "return \""+elesc.at(var1).getText()+"\";\n";
259  else if(clasprop!="")
260  codem += "return "+clasprop+";\n";
261  else if(elesc.at(var1).getText()!="")
262  codem += "return "+elesc.at(var1).getText()+";\n";
263  }
264  }
265  codem += "}\n";
266  }
267  }
268  codeh += ("private:\n"+pri+"protected:\n"+pro+"public:\n"+pub+"};\n#endif");
269  path = "/home/sumeet/workspace/inter/";
270  AfcUtil::writeTofile((path+root.getAttribute("name")+".h"),codeh,true);
271  AfcUtil::writeTofile((path+root.getAttribute("name")+".cpp"),codem,true);
272 }