]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.datatypes.ontology/src/org/simantics/datatypes/SIGenerator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.datatypes.ontology / src / org / simantics / datatypes / SIGenerator.java
1 package org.simantics.datatypes;\r
2 \r
3 import java.io.File;\r
4 import java.io.PrintStream;\r
5 import java.io.UnsupportedEncodingException;\r
6 import java.net.MalformedURLException;\r
7 import java.net.URL;\r
8 import java.net.URLDecoder;\r
9 import java.util.ArrayList;\r
10 \r
11 public class SIGenerator {\r
12 \r
13         public static class Unit {\r
14                 \r
15                 public String name;\r
16                 public String shorthand;\r
17                 \r
18                 public Unit(String name, String shorthand) {\r
19                         this.name = name;\r
20                         this.shorthand = shorthand;\r
21                 }\r
22                 \r
23                 public Unit withPrefix(String namePrefix, String shorthandPrefix) {\r
24                         return new Unit(namePrefix+name, shorthandPrefix+shorthand);\r
25                 }\r
26                 \r
27         }\r
28         \r
29         public static final Unit[] baseUnits = {\r
30                 new Unit("Metre", "m"),\r
31                 // Easier this way..\r
32                 new Unit("gram", "g"),\r
33                 new Unit("Second", "s"),\r
34                 new Unit("Ampere", "A"),\r
35                 new Unit("Kelvin", "K"),\r
36                 new Unit("Candela", "cd"),\r
37                 new Unit("Mole", "mol"),\r
38         };\r
39         \r
40         public static final Unit[] baseUnitsPrefixed = prefix(baseUnits);\r
41         \r
42         public static final Unit[] derivedUnits = {\r
43                 new Unit("Hertz", "hz"),\r
44                 new Unit("Radian", "rad"),\r
45                 new Unit("Steradian", "sr"),\r
46                 new Unit("Newton", "N"),\r
47                 new Unit("Pascal", "Pa"),\r
48                 new Unit("Joule", "J"),\r
49                 new Unit("Watt", "W"),\r
50                 new Unit("Coulomb", "C"),\r
51                 new Unit("Volt", "V"),\r
52                 new Unit("Farad", "F"),\r
53                 new Unit("Ohm", "ohm"),\r
54                 new Unit("Siemens", "S"),\r
55                 new Unit("Weber", "Wb"),\r
56                 new Unit("Tesla", "T"),\r
57                 new Unit("Henry", "H"),\r
58                 new Unit("Celsius", "C"),\r
59                 new Unit("Lumen", "lm"),\r
60                 new Unit("Lux", "lx"),\r
61                 new Unit("Becquerel", "Bq"),\r
62                 new Unit("Gray", "Gy"),\r
63                 new Unit("Sievert", "Sv"),\r
64                 new Unit("Katal", "kat")\r
65         };\r
66 \r
67         public static final Unit[] derivedUnitsPrefixed = prefix(derivedUnits);\r
68 \r
69         public static final Unit[] scalableCompoundUnits = {\r
70                 new Unit("gramPerSecond", "g/s"),\r
71                 new Unit("gramPerLitre", "g/l"),\r
72                 new Unit("gramPerCubicMetre", "g/m3"),\r
73                 new Unit("NewtonPerMetre", "N/m"),\r
74                 new Unit("JoulePerKilogram", "J/kg"),\r
75                 new Unit("MetrePerSecond", "m/s"),\r
76                 new Unit("MolePerLitre", "mol/l"),\r
77                 new Unit("MolePerKilogram", "mol/kg"),\r
78         };\r
79 \r
80         public static final Unit[] scalableCompoundUnitsPrefixed = prefix(scalableCompoundUnits);\r
81 \r
82         public static final Unit[] compoundUnits = {\r
83                 new Unit("SquareMetre", "m2"),\r
84                 new Unit("CubicMetre", "m3"),\r
85         };\r
86 \r
87         public static final Unit[] specials = {\r
88                 new Unit("MassPercentage", "w-%"),\r
89                 new Unit("Percentage", "%"),\r
90                 new Unit("Degree", "deg"),\r
91                 new Unit("Minute", "min"),\r
92                 new Unit("Hour", "h"),\r
93                 new Unit("Litre", "l"),\r
94         };\r
95         \r
96         static Unit[] prefix(Unit[] units) {\r
97                 ArrayList<Unit> result = new ArrayList<Unit>();\r
98                 for(Unit unit : units) {\r
99                         result.add(unit.withPrefix("Tera", "T"));\r
100                         result.add(unit.withPrefix("Giga", "G"));\r
101                         result.add(unit.withPrefix("Mega", "M"));\r
102                         result.add(unit.withPrefix("Kilo", "k"));\r
103                         result.add(unit.withPrefix("Hecto", "h"));\r
104                         result.add(unit.withPrefix("", ""));\r
105                         result.add(unit.withPrefix("Centi", "c"));\r
106                         result.add(unit.withPrefix("Milli", "m"));\r
107                         result.add(unit.withPrefix("Micro", "u"));\r
108                 }\r
109                 return result.toArray(new Unit[result.size()]);\r
110         }\r
111         \r
112         static void print(PrintStream out, Unit unit) {\r
113                 out.println("SI." + unit.name + " <T SI.Unit");\r
114                 out.println("SI." + unit.name + ".Double <T L0.Double");\r
115                 out.println("  @L0.assert L0.HasDataType $Double(unit=\"" + unit.shorthand + "\")");\r
116                 out.println("SI." + unit.name + ".Float <T L0.Float");\r
117                 out.println("  @L0.assert L0.HasDataType $Float(unit=\"" + unit.shorthand + "\")");\r
118                 out.println("");\r
119         }\r
120         \r
121         static void create(File path) {\r
122                 \r
123                 try {\r
124 \r
125                         PrintStream out = new PrintStream(path + "/graph/SI.pgraph");\r
126                         out.println("L0 = <http://www.simantics.org/Layer0-1.1>");\r
127                         out.println("DATA = <http://www.simantics.org/Datatypes-1.1>");\r
128                         out.println("SI = DATA.SI : L0.Library");\r
129                         out.println("    L0.HasResourceClass \"org.simantics.datatypes.SIResource\"");\r
130                         out.println("");\r
131                         out.println("SI.Unit <T L0.Entity");\r
132                         out.println("");\r
133                         out.println("// SI base units");\r
134                         out.println("");\r
135                         \r
136                         for(Unit unit : baseUnitsPrefixed) {\r
137                                 print(out, unit);\r
138                         }\r
139 \r
140                         out.println("// SI derived units");\r
141                         out.println("");\r
142 \r
143                         for(Unit unit : derivedUnitsPrefixed) {\r
144                                 print(out, unit);\r
145                         }\r
146 \r
147                         out.println("// SI scalable compound units");\r
148                         out.println("");\r
149 \r
150                         for(Unit unit : scalableCompoundUnitsPrefixed) {\r
151                                 print(out, unit);\r
152                         }\r
153                         \r
154                         out.println("// SI compound units");\r
155                         out.println("");\r
156 \r
157                         for(Unit unit : compoundUnits) {\r
158                                 print(out, unit);\r
159                         }\r
160 \r
161                         out.println("// Special units");\r
162                         out.println("");\r
163 \r
164                         for(Unit unit : specials) {\r
165                                 print(out, unit);\r
166                         }\r
167                         \r
168                 } catch (Exception e) {\r
169                         \r
170                 }\r
171                 \r
172         }\r
173         \r
174         public static void main(String[] args) {\r
175                 \r
176         URL classLocation = SIGenerator.class.getResource(".");\r
177         if (classLocation != null) {\r
178             if (classLocation.getProtocol().equals("file")) {\r
179                 try {\r
180                     URL resource = new URL(classLocation, "../../../..");\r
181                     File path = new File(URLDecoder.decode(resource.getPath(), "UTF-8"));\r
182                     System.err.println("path=" + path.getAbsolutePath());\r
183                     create(path);\r
184                 } catch (MalformedURLException e) {\r
185                     e.printStackTrace();\r
186                 } catch (UnsupportedEncodingException e) {\r
187                     e.printStackTrace();\r
188                 }\r
189             }\r
190         }\r
191                 \r
192         }\r
193         \r
194 }\r