Math2mat

/home/ythoma/docs/math2mat/svn/wp1/framework/m2mGUI/src/m2m/backend/structure/Element.java

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Enumerations