Math2mat
|
00001 /****************************************************************************** 00002 * Element 00003 ****************************************************************************** 00004 * Auteur : Trolliet Gregory 00005 * Date : 8. janvier 2008, 16:11 00006 * Description : 00007 ******************************************************************************/ 00008 package m2m.backend.structure; 00009 00010 import java.util.HashMap; 00011 00012 import m2m.backend.buildingblocks.BuildingBlock; 00013 import m2m.backend.utils.XMLUtils; 00014 00015 00023 public abstract class Element implements Cloneable { 00024 00028 protected String name; 00032 protected boolean monitor; 00033 00034 public abstract String getXmlTagName(); 00035 00036 public org.w3c.dom.Element toXml(org.w3c.dom.Document dom, boolean shortRef) { 00037 org.w3c.dom.Element el; 00038 el=dom.createElement(getXmlTagName()); 00039 insideToXml(el,dom,shortRef); 00040 return el; 00041 } 00042 /* 00043 class myMap extends HashMap<String,Class<?>> { 00044 00045 public myMap() { 00046 put("add",Addition.class); 00047 put("aff",Assignment.class); 00048 put("delay",Delay.class); 00049 put("div",Division.class); 00050 put("dotdiv",DotDivision.class); 00051 put("dotmult",DotMultiplication.class); 00052 } 00053 } 00054 00055 static myMap map=new myMap(); 00056 */ 00057 00058 public Element getElement(org.w3c.dom.Element el,Function newFunc) { 00059 HashMap<String,Class<?>> OperationMap=new HashMap<String,Class<?>>(); 00060 OperationMap.put(Addition.OPNAME,Addition.class); 00061 OperationMap.put(Assignment.OPNAME,Assignment.class); 00062 OperationMap.put(Delay.OPNAME,Delay.class); 00063 OperationMap.put(Division.OPNAME,Division.class); 00064 OperationMap.put(DotDivision.OPNAME,DotDivision.class); 00065 OperationMap.put(DotMultiplication.OPNAME,DotMultiplication.class); 00066 OperationMap.put(Equal.OPNAME,Equal.class); 00067 OperationMap.put(Greater.OPNAME,Greater.class); 00068 OperationMap.put(GreaterEqual.OPNAME,GreaterEqual.class); 00069 OperationMap.put(Less.OPNAME,Less.class); 00070 OperationMap.put(LessEqual.OPNAME,LessEqual.class); 00071 OperationMap.put(Multiplication.OPNAME,Multiplication.class); 00072 OperationMap.put(Negation.OPNAME,Negation.class); 00073 OperationMap.put(Power.OPNAME,Power.class); 00074 OperationMap.put(SQRT.OPNAME,SQRT.class); 00075 OperationMap.put(Subtraction.OPNAME,Subtraction.class); 00076 00077 00078 HashMap<String,Class<?>> LogicOperationMap=new HashMap<String,Class<?>>(); 00079 LogicOperationMap.put(And.OPNAME,And.class); 00080 LogicOperationMap.put(Or.OPNAME,Or.class); 00081 LogicOperationMap.put(Not.OPNAME,Not.class); 00082 00083 // A traiter: Comparison 00084 00085 if (el.getTagName().equalsIgnoreCase("Operation")) { 00086 String name=XMLUtils.getTextValue(el,"OpName",""); 00087 Class<?> cl=OperationMap.get(name); 00088 if (cl!=null) { 00089 try { 00090 Element e=(Element)cl.newInstance(); 00091 e.insideFromXml(el,newFunc); 00092 return e; 00093 } 00094 catch (InstantiationException e) { 00095 System.out.println("Error at instantiation"); 00096 } 00097 catch (IllegalAccessException e) { 00098 System.out.println("Error at instantiation 2"); 00099 } 00100 } 00101 } 00102 else if (el.getTagName().equalsIgnoreCase("LogicOperation")) { 00103 String name=XMLUtils.getTextValue(el,"OpName",""); 00104 Class<?> cl=LogicOperationMap.get(name); 00105 if (cl!=null) { 00106 try { 00107 Element e=(Element)cl.newInstance(); 00108 e.insideFromXml(el,newFunc); 00109 return e; 00110 } 00111 catch (InstantiationException e) { 00112 System.out.println("Error at instantiation"); 00113 } 00114 catch (IllegalAccessException e) { 00115 System.out.println("Error at instantiation 2"); 00116 } 00117 } 00118 } 00119 else if (el.getTagName().equalsIgnoreCase("Case")) { 00120 Case var=new Case(); 00121 var.insideFromXml(el,newFunc); 00122 return var; 00123 } 00124 else if (el.getTagName().equalsIgnoreCase("IfThenElse")) { 00125 IfThenElse var=new IfThenElse(); 00126 var.insideFromXml(el,newFunc); 00127 return var; 00128 } 00129 else if (el.getTagName().equalsIgnoreCase("LoopFor")) { 00130 LoopFor var=new LoopFor(); 00131 var.insideFromXml(el,newFunc); 00132 return var; 00133 } 00134 else if (el.getTagName().equalsIgnoreCase("LoopWhile")) { 00135 LoopWhile var=new LoopWhile(); 00136 var.insideFromXml(el,newFunc); 00137 return var; 00138 } 00139 else if (el.getTagName().equalsIgnoreCase("Multiplexer")) { 00140 Multiplexer var=new Multiplexer(); 00141 var.insideFromXml(el,newFunc); 00142 return var; 00143 } 00144 else if (el.getTagName().equalsIgnoreCase("Switch")) { 00145 Switch var=new Switch(); 00146 var.insideFromXml(el,newFunc); 00147 return var; 00148 } 00149 else if (el.getTagName().equalsIgnoreCase("SimpleVariable")) { 00150 SimpleVariable var=new SimpleVariable(); 00151 var.insideFromXml(el,newFunc); 00152 Element newEl=newFunc.findElement(var.getName()); 00153 // The variable already exist 00154 if (newEl!=null) 00155 return newEl; 00156 return var; 00157 } 00158 else if (el.getTagName().equalsIgnoreCase("VectorVariable")) { 00159 VectorVariable var=new VectorVariable(); 00160 var.insideFromXml(el,newFunc); 00161 Element newEl=newFunc.findElement(var.getName()); 00162 // The variable already exist 00163 if (newEl!=null) 00164 return newEl; 00165 return var; 00166 } 00167 else if (el.getTagName().equalsIgnoreCase("GenericOperation")) { 00168 GenericOperation var=new GenericOperation(); 00169 var.insideFromXml(el,newFunc); 00170 return var; 00171 // Should be a generic operation 00172 } 00173 return null; 00174 } 00175 00176 public boolean insideFromXml(org.w3c.dom.Element el,Function newFunc) { 00177 name=XMLUtils.getTextValue(el,"Name",""); 00178 monitor=XMLUtils.getBoolValue(el,"Monitor",false); 00179 if (name.isEmpty()) 00180 return false; 00181 return true; 00182 } 00183 00184 public void insideToXml(org.w3c.dom.Element el,org.w3c.dom.Document dom,boolean shortRef) { 00185 el.appendChild(XMLUtils.createTextElement(dom,"Name",name)); 00186 el.appendChild(XMLUtils.createBoolElement(dom, "Monitor",monitor)); 00187 } 00188 00192 public Element() { 00193 this.name = new String(); 00194 // Don't monitor the element by default 00195 this.monitor = false; 00196 } 00197 00198 abstract public Element copy(Function newFunc); 00199 00200 public Element findElement(String name) { 00201 if (this.name.equals(name)) 00202 return this; 00203 return null; 00204 } 00205 00206 protected void copyTo(Element e,Function newFunc) { 00207 e.name=this.name; 00208 e.monitor=this.monitor; 00209 } 00210 00215 public void setName(String n) { 00216 this.name = n; 00217 } 00218 00223 public String getName() { 00224 return this.name; 00225 } 00226 00232 protected String tab(int nb) { 00233 String sTab = new String(); 00234 for (int i = 0; i < nb; i++) { 00235 sTab += "\t"; 00236 } 00237 return sTab; 00238 } 00239 00245 public String toString(int level) { 00246 String s = new String(); 00247 s += tab(level) + "[Element]\tName: " + this.name + "\n"; 00248 return s; 00249 } 00250 00259 public String toSchematic(int level, String prefix, String boxFormat, 00260 String color) { 00261 String s = new String(); 00262 return s; 00263 } 00264 00270 public String toOctave(int level) { 00271 String s = new String(); 00272 return s; 00273 } 00274 00279 public boolean getMonitor() { 00280 return monitor; 00281 } 00282 00287 public void setMonitor(boolean monitor,StructTreatment struct) { 00288 if (this.monitor!=monitor) 00289 struct.modifyMonitor(monitor); 00290 this.monitor = monitor; 00291 } 00292 00293 public void modifyNumType(BuildingBlock.NumType type) { 00294 } 00295 }