]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/resourceFiles/ResourceFile.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.graph.compiler / src / org / simantics / graph / compiler / internal / resourceFiles / ResourceFile.java
diff --git a/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/resourceFiles/ResourceFile.java b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/resourceFiles/ResourceFile.java
new file mode 100644 (file)
index 0000000..2b3fd2b
--- /dev/null
@@ -0,0 +1,115 @@
+package org.simantics.graph.compiler.internal.resourceFiles;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.InputStream;\r
+import java.io.OutputStreamWriter;\r
+import java.io.StringWriter;\r
+import java.io.Writer;\r
+import java.net.URL;\r
+import java.util.Arrays;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import org.simantics.graph.IResourceFile;\r
+\r
+import freemarker.cache.URLTemplateLoader;\r
+import freemarker.template.Configuration;\r
+import freemarker.template.DefaultObjectWrapper;\r
+import freemarker.template.Template;\r
+\r
+public class ResourceFile implements IResourceFile {\r
+       String packageName;\r
+       String className;\r
+       List<ResourceRef> resources;\r
+       \r
+       public ResourceFile(String packageName, String className,\r
+                       List<ResourceRef> resources) {\r
+               this.packageName = packageName;\r
+               this.className = className;\r
+               this.resources = resources;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.simantics.graph.resourceFiles.IResourceFile#getPackageName()\r
+        */\r
+       @Override\r
+       public String getPackageName() {\r
+               return packageName;\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.simantics.graph.resourceFiles.IResourceFile#getClassName()\r
+        */\r
+       @Override\r
+       public String getClassName() {\r
+               return className;\r
+       }\r
+       \r
+       public Collection<ResourceRef> getResources() {\r
+               return resources;\r
+       }\r
+       \r
+       private static Configuration configuration = null;\r
+       private static Configuration getConfiguration() {\r
+               if(configuration == null) {\r
+                       configuration = new Configuration();\r
+                       configuration.setTemplateLoader(\r
+                                       new URLTemplateLoader() {                                               \r
+                                               @Override\r
+                                               protected URL getURL(String name) {\r
+                                                       return ResourceFile.class.getResource(name);\r
+                                               }\r
+                                       });\r
+                       configuration.setObjectWrapper(new DefaultObjectWrapper());\r
+               }\r
+               return configuration;\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.simantics.graph.resourceFiles.IResourceFile#write(java.io.Writer)\r
+        */\r
+       @Override\r
+       public void write(Writer writer) {\r
+               try {\r
+                       Template temp = \r
+                               getConfiguration().getTemplate("resourceFile.ftl");\r
+                        \r
+                       temp.process(this, writer);\r
+               } catch (Exception e) {\r
+                       // TODO Auto-generated catch block\r
+                       e.printStackTrace();\r
+               }  \r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.simantics.graph.resourceFiles.IResourceFile#getContent()\r
+        */\r
+       @Override\r
+       public InputStream getContent() {\r
+               StringWriter writer = new StringWriter();\r
+               write(writer);\r
+               return new ByteArrayInputStream(writer.toString().getBytes());\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.simantics.graph.resourceFiles.IResourceFile#getFileName()\r
+        */\r
+       @Override\r
+       public String getFileName() {\r
+               return "src/" + packageName.replace('.', '/') + "/" + className + ".java";\r
+       }\r
+       \r
+       public void sort() {\r
+               Collections.sort(resources);\r
+       }\r
+       \r
+       public static void main(String[] args) {\r
+               ResourceRef Foo = new ResourceRef("Foo", "http://www.dsf.sdf/Foo");\r
+               ResourceRef Bar = new ResourceRef("Foo", "http://www.dsf.sdf/Bar");\r
+               Bar.deprecated = true;\r
+               new ResourceFile("org.simantics.graph", "Testi", Arrays.<ResourceRef>asList(\r
+                               Foo, Bar\r
+                       )).write(new OutputStreamWriter(System.out));\r
+       }\r
+}\r