+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