JAL-3032 adds Java 8 functionality (2/2)
[jalview.git] / src2 / fr / orsay / lri / varna / utils / XMLUtils.java
diff --git a/src2/fr/orsay/lri/varna/utils/XMLUtils.java b/src2/fr/orsay/lri/varna/utils/XMLUtils.java
new file mode 100644 (file)
index 0000000..e3acefc
--- /dev/null
@@ -0,0 +1,148 @@
+package fr.orsay.lri.varna.utils;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.util.ArrayList;
+import java.util.Formatter;
+
+import javax.xml.transform.sax.TransformerHandler;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+
+import fr.orsay.lri.varna.models.rna.ModeleBase;
+import fr.orsay.lri.varna.models.rna.RNA;
+
+public class XMLUtils {
+       public static String toHTMLNotation(Color c)
+       {
+               Formatter f = new Formatter();
+               f.format("#%02X%02X%02X", c.getRed(),c.getGreen(),c.getBlue());
+               return f.toString();
+       }
+
+       public static void toXML(TransformerHandler hd, Font f) throws SAXException
+       {
+               toXML(hd, f,"");
+       }
+       
+
+       public static String XML_BASELIST_ELEMENT_NAME = "baselist";
+       public static String XML_FONT_ELEMENT_NAME = "font";
+       public static String XML_ROLE_NAME = "role";
+       public static String XML_NAME_NAME = "name";
+       public static String XML_FAMILY_NAME = "family";
+       public static String XML_STYLE_NAME = "style";
+       public static String XML_SIZE_NAME = "size";
+       
+       public static void toXML(TransformerHandler hd, Font f, String role) throws SAXException
+       {
+               AttributesImpl atts = new AttributesImpl();
+               if (!role.equals(""))
+                 atts.addAttribute("","",XML_ROLE_NAME,"CDATA",""+role);
+               atts.addAttribute("","",XML_NAME_NAME,"CDATA",""+f.getName());
+               //atts.addAttribute("","",XML_FAMILY_NAME,"CDATA",""+f.getFamily());
+               atts.addAttribute("","",XML_STYLE_NAME,"CDATA",""+f.getStyle());
+               atts.addAttribute("","",XML_SIZE_NAME,"CDATA",""+f.getSize2D());
+               hd.startElement("","",XML_FONT_ELEMENT_NAME,atts);
+               hd.endElement("","",XML_FONT_ELEMENT_NAME);
+       }
+
+       public static Font getFont(String qName, Attributes attributes)
+       {
+               if (qName.equals(XMLUtils.XML_FONT_ELEMENT_NAME)){
+                       int style = Integer.parseInt(attributes.getValue(XMLUtils.XML_STYLE_NAME));                     
+                       String name = (attributes.getValue(XMLUtils.XML_NAME_NAME));                    
+                       double size = Double.parseDouble(attributes.getValue(XMLUtils.XML_SIZE_NAME));
+                       Font f = new Font(name, style, (int)size);
+                       return f.deriveFont((float)size);
+               }
+               return null;
+       }
+       
+
+       public static void toXML(TransformerHandler hd, ModeleBase mb) throws SAXException
+       {
+               ArrayList<ModeleBase> m = new ArrayList<ModeleBase>();
+               m.add(mb);
+               toXML(hd, m);
+       }
+
+
+       public static void toXML(TransformerHandler hd, ArrayList<ModeleBase> m) throws SAXException
+       {               
+               AttributesImpl atts = new AttributesImpl();
+               String result = "";
+               for (ModeleBase mb: m)
+               {
+                       if (!result.equals(""))
+                               result+= ",";
+                       result += mb.getIndex();
+                                       
+               }
+               hd.startElement("","",XML_BASELIST_ELEMENT_NAME,atts);
+               exportCDATAString(hd, result);
+               hd.endElement("","",XML_BASELIST_ELEMENT_NAME);
+       }
+
+       public static ArrayList<ModeleBase> toModeleBaseArray(String baselist, RNA rna)
+       {
+               ArrayList<ModeleBase> result = new ArrayList<ModeleBase>();
+               String[] data = baselist.trim().split(",");
+               for(int i=0;i<data.length;i++)
+               {
+                       int index = Integer.parseInt(data[i]);
+                       result.add(rna.getBaseAt(index));
+               }
+                       
+               return result;
+       }
+       
+       public static void exportCDATAElem(TransformerHandler hd,String elem, String s) throws SAXException
+       {
+               char[] t = s.toCharArray();
+               AttributesImpl atts = new AttributesImpl();
+               hd.startElement("","",elem,atts);
+               hd.startCDATA();
+               hd.characters(t, 0, t.length);
+               hd.endCDATA();
+               hd.endElement("","",elem);
+       }
+       
+       public static void exportCDATAString(TransformerHandler hd, String s) throws SAXException
+       {
+               char[] t = s.toCharArray();
+               hd.startCDATA();
+               hd.characters(t, 0, t.length);
+               hd.endCDATA();
+       }
+       public static boolean getBoolean(Attributes attributes, String attName, boolean defVal)
+       {
+               String val = attributes.getValue(attName);
+               if (val!=null)
+               {
+                       return Boolean.parseBoolean(val);
+               }
+               return defVal;
+       }
+       public static int getInt(Attributes attributes, String attName, int defVal)
+       {
+               String val = attributes.getValue(attName);
+               if (val!=null)
+               {
+                       return Integer.parseInt(val);
+               }
+               return defVal;
+       }
+       public static double getDouble(Attributes attributes, String attName, double defVal)
+       {
+               String val = attributes.getValue(attName);
+               if (val!=null)
+               {
+                       return Double.parseDouble(val);
+               }
+               return defVal;
+       }
+       
+}