]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/resourceFiles/ResourceFile.java
2b3fd2b71e74580bb36c0471c83648baa4041e8a
[simantics/platform.git] / bundles / org.simantics.graph.compiler / src / org / simantics / graph / compiler / internal / resourceFiles / ResourceFile.java
1 package org.simantics.graph.compiler.internal.resourceFiles;\r
2 \r
3 import java.io.ByteArrayInputStream;\r
4 import java.io.InputStream;\r
5 import java.io.OutputStreamWriter;\r
6 import java.io.StringWriter;\r
7 import java.io.Writer;\r
8 import java.net.URL;\r
9 import java.util.Arrays;\r
10 import java.util.Collection;\r
11 import java.util.Collections;\r
12 import java.util.List;\r
13 \r
14 import org.simantics.graph.IResourceFile;\r
15 \r
16 import freemarker.cache.URLTemplateLoader;\r
17 import freemarker.template.Configuration;\r
18 import freemarker.template.DefaultObjectWrapper;\r
19 import freemarker.template.Template;\r
20 \r
21 public class ResourceFile implements IResourceFile {\r
22         String packageName;\r
23         String className;\r
24         List<ResourceRef> resources;\r
25         \r
26         public ResourceFile(String packageName, String className,\r
27                         List<ResourceRef> resources) {\r
28                 this.packageName = packageName;\r
29                 this.className = className;\r
30                 this.resources = resources;\r
31         }\r
32 \r
33         /* (non-Javadoc)\r
34          * @see org.simantics.graph.resourceFiles.IResourceFile#getPackageName()\r
35          */\r
36         @Override\r
37         public String getPackageName() {\r
38                 return packageName;\r
39         }\r
40         \r
41         /* (non-Javadoc)\r
42          * @see org.simantics.graph.resourceFiles.IResourceFile#getClassName()\r
43          */\r
44         @Override\r
45         public String getClassName() {\r
46                 return className;\r
47         }\r
48         \r
49         public Collection<ResourceRef> getResources() {\r
50                 return resources;\r
51         }\r
52         \r
53         private static Configuration configuration = null;\r
54         private static Configuration getConfiguration() {\r
55                 if(configuration == null) {\r
56                         configuration = new Configuration();\r
57                         configuration.setTemplateLoader(\r
58                                         new URLTemplateLoader() {                                               \r
59                                                 @Override\r
60                                                 protected URL getURL(String name) {\r
61                                                         return ResourceFile.class.getResource(name);\r
62                                                 }\r
63                                         });\r
64                         configuration.setObjectWrapper(new DefaultObjectWrapper());\r
65                 }\r
66                 return configuration;\r
67         }\r
68         \r
69         /* (non-Javadoc)\r
70          * @see org.simantics.graph.resourceFiles.IResourceFile#write(java.io.Writer)\r
71          */\r
72         @Override\r
73         public void write(Writer writer) {\r
74                 try {\r
75                         Template temp = \r
76                                 getConfiguration().getTemplate("resourceFile.ftl");\r
77                          \r
78                         temp.process(this, writer);\r
79                 } catch (Exception e) {\r
80                         // TODO Auto-generated catch block\r
81                         e.printStackTrace();\r
82                 }  \r
83         }\r
84         \r
85         /* (non-Javadoc)\r
86          * @see org.simantics.graph.resourceFiles.IResourceFile#getContent()\r
87          */\r
88         @Override\r
89         public InputStream getContent() {\r
90                 StringWriter writer = new StringWriter();\r
91                 write(writer);\r
92                 return new ByteArrayInputStream(writer.toString().getBytes());\r
93         }\r
94         \r
95         /* (non-Javadoc)\r
96          * @see org.simantics.graph.resourceFiles.IResourceFile#getFileName()\r
97          */\r
98         @Override\r
99         public String getFileName() {\r
100                 return "src/" + packageName.replace('.', '/') + "/" + className + ".java";\r
101         }\r
102         \r
103         public void sort() {\r
104                 Collections.sort(resources);\r
105         }\r
106         \r
107         public static void main(String[] args) {\r
108                 ResourceRef Foo = new ResourceRef("Foo", "http://www.dsf.sdf/Foo");\r
109                 ResourceRef Bar = new ResourceRef("Foo", "http://www.dsf.sdf/Bar");\r
110                 Bar.deprecated = true;\r
111                 new ResourceFile("org.simantics.graph", "Testi", Arrays.<ResourceRef>asList(\r
112                                 Foo, Bar\r
113                         )).write(new OutputStreamWriter(System.out));\r
114         }\r
115 }\r