]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/html/HTMLDocument.java
Externalize org.simantics.document.linking.ui
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / html / HTMLDocument.java
index 11cc7a8f1cbfd333ada4dc28871385ce62bdb5ec..cd62f25ad0820410a474ff438da9426cddffa27d 100644 (file)
-package org.simantics.document.linking.report.html;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.PrintStream;\r
-import java.net.URL;\r
-import java.net.URLDecoder;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import org.eclipse.core.runtime.FileLocator;\r
-import org.eclipse.core.runtime.Path;\r
-import org.eclipse.core.runtime.Platform;\r
-import org.osgi.framework.Bundle;\r
-import org.simantics.document.linking.Activator;\r
-import org.simantics.document.linking.report.Document;\r
-import org.simantics.document.linking.report.DocumentElement;\r
-import org.simantics.document.linking.report.DocumentItem;\r
-import org.simantics.document.linking.report.DocumentTitlePage;\r
-import org.simantics.document.linking.report.Table;\r
-import org.simantics.document.linking.report.TableOfContents;\r
-import org.simantics.document.linking.report.TextItem;\r
-import org.simantics.document.linking.report.URLItem;\r
-import org.simantics.document.linking.report.base.TextItemImpl;\r
-import org.simantics.utils.datastructures.Arrays;\r
-\r
-\r
-/**\r
- * HTML format reporter.\r
- * \r
- * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
- *\r
- */\r
-public class HTMLDocument extends HTMLStreamElement implements Document {\r
-       \r
-       \r
-       boolean referCSS = false;  // if true, generated report refers to bas css in the plug-in. Otherwise the base css's contents are copied to report file.\r
-       \r
-       int currentPage = 0;\r
-       int currentLine = 1;\r
-\r
-       HTMLStreamElement content;\r
-       \r
-       private Map<Class<? extends HTMLElement>, Integer> uniqueIndex = new HashMap<Class<? extends HTMLElement>, Integer>();\r
-       \r
-       \r
-       @Override\r
-       public String getId() {\r
-               return null;\r
-       }\r
-       \r
-       public HTMLDocument(File file) throws Exception {\r
-               super(file);\r
-               content = new HTMLStreamElement(this);\r
-       }\r
-       \r
-       String getUniqueId(Class<? extends HTMLElement> cls) {\r
-               Integer index = uniqueIndex.get(cls);\r
-               if (index == null)\r
-                       index = 1;\r
-               else\r
-                       index = index + 1;\r
-               uniqueIndex.put(cls,index);\r
-               \r
-               return cls.getSimpleName() +"_"+index;\r
-       }\r
-       String getUniqueId(HTMLElement element) {\r
-               Class<? extends HTMLElement> cls = element.getClass();\r
-               return getUniqueId(cls);\r
-       }\r
-       \r
-       private static String getDataUrl() throws IOException {\r
-                Bundle b = Platform.getBundle(Activator.PLUGIN_ID);\r
-                URL dataUrl = FileLocator.find(b, new Path("report"), null);\r
-                URL fileUrl = FileLocator.toFileURL(dataUrl);\r
-                return URLDecoder.decode(fileUrl.getPath(), "UTF-8"); \r
-       }\r
-       \r
-       private void copyBaseCSS(String cssUrl) throws Exception {\r
-               File f = new File(URLDecoder.decode(cssUrl, "UTF-8")).getAbsoluteFile();\r
-               copyData(f, os);\r
-       }\r
-\r
-       \r
-       private void header() throws Exception {\r
-               PrintStream resultOs = os;\r
-               String cssUrl = getDataUrl() +"/report.css";\r
-               resultOs.println("<!DOCTYPE html>");\r
-               resultOs.println("<html lang=\"en\">");\r
-               resultOs.println("<head>");\r
-               resultOs.println("  <meta charset=\"utf-8\">");\r
-               resultOs.println("  <title>Report</title>");\r
-               if (referCSS)\r
-                       resultOs.println("  <link rel=\"stylesheet\" href=\"" + cssUrl + "\" type=\"text/css\">");\r
-               resultOs.println("  <style>");\r
-               if (!referCSS) {\r
-                       copyBaseCSS(cssUrl);\r
-               }\r
-               \r
-               resultOs.println("  </style>");\r
-               resultOs.println("</head>");\r
-               resultOs.println("<body>");\r
-       }\r
-\r
-       private void footer() throws Exception{\r
-               if (currentTable != null)\r
-                       currentTable.endTable();\r
-               if (toc != null)\r
-                       toc.close();\r
-               content.close();\r
-               PrintStream resultOs = os;\r
-               resultOs.println("</body>");\r
-               resultOs.println("</html>");\r
-       }\r
-       \r
-       @Override\r
-       public void close() throws Exception {\r
-               footer();\r
-               super.close();\r
-       }\r
-       \r
-\r
-       @Override\r
-       public int getCurrentLine() {\r
-               return currentLine;\r
-       }\r
-       \r
-       @Override\r
-       public int getAvailableLines() {\r
-               return Integer.MAX_VALUE;\r
-       }\r
-       \r
-       @Override\r
-       public void nextPage() throws Exception {\r
-               if (currentPage == 0)\r
-                       header();       \r
-               currentPage++;\r
-               currentLine = 1;\r
-       }\r
-       \r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public <T extends DocumentElement> T newElement(Class<T> cls,String...options) throws Exception {\r
-               if (cls == Table.class) {\r
-                       return (T)newTable(Arrays.contains(options, Document.TOC));\r
-               } else if (cls == TableOfContents.class) {\r
-                       return (T)getOrCreateToc();\r
-               } else if (cls == DocumentTitlePage.class) {\r
-                       if (titlePage != null)\r
-                               throw new Exception("Document many have only one title page");\r
-                       titlePage = new HTMLTitlePage(this);\r
-                       return (T)titlePage;\r
-               }\r
-               return null;\r
-       }\r
-       \r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public <T extends DocumentElement> T nextElement(Class<T> cls,String...options) throws Exception {\r
-               if (cls == Table.class) {\r
-                       return (T)nextTable(Arrays.contains(options, Document.TOC));\r
-               } else if (cls == TableOfContents.class) {\r
-                       return (T)getOrCreateToc();\r
-               }\r
-               return null;\r
-       }\r
-       \r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public <T extends DocumentElement> T getCurrentElement(Class<T> cls) {\r
-               if (cls == Table.class) {\r
-                       return (T)getCurrentTable();\r
-               } else if (cls == TableOfContents.class) {\r
-                       return (T)toc;\r
-               } else if (cls == DocumentTitlePage.class) {\r
-                       return (T)titlePage;\r
-               }\r
-               return null;\r
-       }\r
-       \r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public <T extends DocumentItem> T newItem(Class<T> cls, String... options)\r
-                       throws Exception {\r
-               if (cls == TextItem.class)\r
-                       return (T)new TextItemImpl();\r
-               if (cls == URLItem.class)\r
-                       return (T)new HTMLURLItemImpl();\r
-               return null;\r
-       }\r
-       \r
-       private HTMLTable currentTable;\r
-       \r
-       \r
-       public Table nextTable(boolean id) throws Exception {\r
-               if (currentTable != null) {\r
-                       currentTable.endTable();\r
-                       currentTable = new HTMLTable(currentTable,id);\r
-                       return currentTable;\r
-               } else {\r
-                       return currentTable;\r
-               }\r
-               \r
-       }\r
-       \r
-       \r
-       public Table newTable(boolean id) throws Exception {\r
-               if (currentTable != null) {\r
-                       currentTable.endTable();\r
-               }\r
-               currentTable = new HTMLTable(this,content.os,id);\r
-               return currentTable;\r
-       }\r
-       \r
-       \r
-       public Table getCurrentTable() {\r
-               return currentTable;\r
-       }\r
-       \r
-       HTMLTocElement toc;\r
-       \r
-       public TableOfContents getOrCreateToc() throws Exception{\r
-               if (toc == null) {\r
-                       toc = new HTMLTocElement(this);\r
-               }\r
-               return toc;\r
-       }\r
-       \r
-       HTMLTitlePage titlePage;\r
-\r
-}\r
+package org.simantics.document.linking.report.html;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.osgi.framework.Bundle;
+import org.simantics.document.linking.Activator;
+import org.simantics.document.linking.report.Document;
+import org.simantics.document.linking.report.DocumentElement;
+import org.simantics.document.linking.report.DocumentItem;
+import org.simantics.document.linking.report.DocumentTitlePage;
+import org.simantics.document.linking.report.Table;
+import org.simantics.document.linking.report.TableOfContents;
+import org.simantics.document.linking.report.TextItem;
+import org.simantics.document.linking.report.URLItem;
+import org.simantics.document.linking.report.base.TextItemImpl;
+import org.simantics.utils.datastructures.Arrays;
+
+
+/**
+ * HTML format reporter.
+ * 
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
+ *
+ */
+public class HTMLDocument extends HTMLStreamElement implements Document {
+       
+       
+       boolean referCSS = false;  // if true, generated report refers to bas css in the plug-in. Otherwise the base css's contents are copied to report file.
+       
+       int currentPage = 0;
+       int currentLine = 1;
+
+       HTMLStreamElement content;
+       
+       private Map<Class<? extends HTMLElement>, Integer> uniqueIndex = new HashMap<Class<? extends HTMLElement>, Integer>();
+       
+       
+       @Override
+       public String getId() {
+               return null;
+       }
+       
+       public HTMLDocument(File file) throws Exception {
+               super(file);
+               content = new HTMLStreamElement(this);
+       }
+       
+       String getUniqueId(Class<? extends HTMLElement> cls) {
+               Integer index = uniqueIndex.get(cls);
+               if (index == null)
+                       index = 1;
+               else
+                       index = index + 1;
+               uniqueIndex.put(cls,index);
+               
+               return cls.getSimpleName() +"_"+index; //$NON-NLS-1$
+       }
+       String getUniqueId(HTMLElement element) {
+               Class<? extends HTMLElement> cls = element.getClass();
+               return getUniqueId(cls);
+       }
+       
+       private static String getDataUrl() throws IOException {
+                Bundle b = Platform.getBundle(Activator.PLUGIN_ID);
+                URL dataUrl = FileLocator.find(b, new Path("report"), null); //$NON-NLS-1$
+                URL fileUrl = FileLocator.toFileURL(dataUrl);
+                return URLDecoder.decode(fileUrl.getPath(), "UTF-8");  //$NON-NLS-1$
+       }
+       
+       private void copyBaseCSS(String cssUrl) throws Exception {
+               File f = new File(URLDecoder.decode(cssUrl, "UTF-8")).getAbsoluteFile(); //$NON-NLS-1$
+               copyData(f, os);
+       }
+
+       
+       private void header() throws Exception {
+               PrintStream resultOs = os;
+               String cssUrl = getDataUrl() +"/report.css"; //$NON-NLS-1$
+               resultOs.println("<!DOCTYPE html>"); //$NON-NLS-1$
+               resultOs.println("<html lang=\"en\">"); //$NON-NLS-1$
+               resultOs.println("<head>"); //$NON-NLS-1$
+               resultOs.println("  <meta charset=\"utf-8\">"); //$NON-NLS-1$
+               resultOs.println("  <title>Report</title>"); //$NON-NLS-1$
+               if (referCSS)
+                       resultOs.println("  <link rel=\"stylesheet\" href=\"" + cssUrl + "\" type=\"text/css\">"); //$NON-NLS-1$ //$NON-NLS-2$
+               resultOs.println("  <style>"); //$NON-NLS-1$
+               if (!referCSS) {
+                       copyBaseCSS(cssUrl);
+               }
+               
+               resultOs.println("  </style>"); //$NON-NLS-1$
+               resultOs.println("</head>"); //$NON-NLS-1$
+               resultOs.println("<body>"); //$NON-NLS-1$
+       }
+
+       private void footer() throws Exception{
+               if (currentTable != null)
+                       currentTable.endTable();
+               if (toc != null)
+                       toc.close();
+               content.close();
+               PrintStream resultOs = os;
+               resultOs.println("</body>"); //$NON-NLS-1$
+               resultOs.println("</html>"); //$NON-NLS-1$
+       }
+       
+       @Override
+       public void close() throws Exception {
+               footer();
+               super.close();
+       }
+       
+
+       @Override
+       public int getCurrentLine() {
+               return currentLine;
+       }
+       
+       @Override
+       public int getAvailableLines() {
+               return Integer.MAX_VALUE;
+       }
+       
+       @Override
+       public void nextPage() throws Exception {
+               if (currentPage == 0)
+                       header();       
+               currentPage++;
+               currentLine = 1;
+       }
+       
+       @SuppressWarnings("unchecked")
+       @Override
+       public <T extends DocumentElement> T newElement(Class<T> cls,String...options) throws Exception {
+               if (cls == Table.class) {
+                       return (T)newTable(Arrays.contains(options, Document.TOC));
+               } else if (cls == TableOfContents.class) {
+                       return (T)getOrCreateToc();
+               } else if (cls == DocumentTitlePage.class) {
+                       if (titlePage != null)
+                               throw new Exception("Document many have only one title page"); //$NON-NLS-1$
+                       titlePage = new HTMLTitlePage(this);
+                       return (T)titlePage;
+               }
+               return null;
+       }
+       
+       @SuppressWarnings("unchecked")
+       @Override
+       public <T extends DocumentElement> T nextElement(Class<T> cls,String...options) throws Exception {
+               if (cls == Table.class) {
+                       return (T)nextTable(Arrays.contains(options, Document.TOC));
+               } else if (cls == TableOfContents.class) {
+                       return (T)getOrCreateToc();
+               }
+               return null;
+       }
+       
+       @SuppressWarnings("unchecked")
+       @Override
+       public <T extends DocumentElement> T getCurrentElement(Class<T> cls) {
+               if (cls == Table.class) {
+                       return (T)getCurrentTable();
+               } else if (cls == TableOfContents.class) {
+                       return (T)toc;
+               } else if (cls == DocumentTitlePage.class) {
+                       return (T)titlePage;
+               }
+               return null;
+       }
+       
+       @SuppressWarnings("unchecked")
+       @Override
+       public <T extends DocumentItem> T newItem(Class<T> cls, String... options)
+                       throws Exception {
+               if (cls == TextItem.class)
+                       return (T)new TextItemImpl();
+               if (cls == URLItem.class)
+                       return (T)new HTMLURLItemImpl();
+               return null;
+       }
+       
+       private HTMLTable currentTable;
+       
+       
+       public Table nextTable(boolean id) throws Exception {
+               if (currentTable != null) {
+                       currentTable.endTable();
+                       currentTable = new HTMLTable(currentTable,id);
+                       return currentTable;
+               } else {
+                       return currentTable;
+               }
+               
+       }
+       
+       
+       public Table newTable(boolean id) throws Exception {
+               if (currentTable != null) {
+                       currentTable.endTable();
+               }
+               currentTable = new HTMLTable(this,content.os,id);
+               return currentTable;
+       }
+       
+       
+       public Table getCurrentTable() {
+               return currentTable;
+       }
+       
+       HTMLTocElement toc;
+       
+       public TableOfContents getOrCreateToc() throws Exception{
+               if (toc == null) {
+                       toc = new HTMLTocElement(this);
+               }
+               return toc;
+       }
+       
+       HTMLTitlePage titlePage;
+
+}