]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.datatypes.ontology/src/org/simantics/datatypes/SIGenerator.java b/bundles/org.simantics.datatypes.ontology/src/org/simantics/datatypes/SIGenerator.java
new file mode 100644 (file)
index 0000000..eb31b0c
--- /dev/null
@@ -0,0 +1,194 @@
+package org.simantics.datatypes;\r
+\r
+import java.io.File;\r
+import java.io.PrintStream;\r
+import java.io.UnsupportedEncodingException;\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
+import java.net.URLDecoder;\r
+import java.util.ArrayList;\r
+\r
+public class SIGenerator {\r
+\r
+       public static class Unit {\r
+               \r
+               public String name;\r
+               public String shorthand;\r
+               \r
+               public Unit(String name, String shorthand) {\r
+                       this.name = name;\r
+                       this.shorthand = shorthand;\r
+               }\r
+               \r
+               public Unit withPrefix(String namePrefix, String shorthandPrefix) {\r
+                       return new Unit(namePrefix+name, shorthandPrefix+shorthand);\r
+               }\r
+               \r
+       }\r
+       \r
+       public static final Unit[] baseUnits = {\r
+               new Unit("Metre", "m"),\r
+               // Easier this way..\r
+               new Unit("gram", "g"),\r
+               new Unit("Second", "s"),\r
+               new Unit("Ampere", "A"),\r
+               new Unit("Kelvin", "K"),\r
+               new Unit("Candela", "cd"),\r
+               new Unit("Mole", "mol"),\r
+       };\r
+       \r
+       public static final Unit[] baseUnitsPrefixed = prefix(baseUnits);\r
+       \r
+       public static final Unit[] derivedUnits = {\r
+               new Unit("Hertz", "hz"),\r
+               new Unit("Radian", "rad"),\r
+               new Unit("Steradian", "sr"),\r
+               new Unit("Newton", "N"),\r
+               new Unit("Pascal", "Pa"),\r
+               new Unit("Joule", "J"),\r
+               new Unit("Watt", "W"),\r
+               new Unit("Coulomb", "C"),\r
+               new Unit("Volt", "V"),\r
+               new Unit("Farad", "F"),\r
+               new Unit("Ohm", "ohm"),\r
+               new Unit("Siemens", "S"),\r
+               new Unit("Weber", "Wb"),\r
+               new Unit("Tesla", "T"),\r
+               new Unit("Henry", "H"),\r
+               new Unit("Celsius", "C"),\r
+               new Unit("Lumen", "lm"),\r
+               new Unit("Lux", "lx"),\r
+               new Unit("Becquerel", "Bq"),\r
+               new Unit("Gray", "Gy"),\r
+               new Unit("Sievert", "Sv"),\r
+               new Unit("Katal", "kat")\r
+       };\r
+\r
+       public static final Unit[] derivedUnitsPrefixed = prefix(derivedUnits);\r
+\r
+       public static final Unit[] scalableCompoundUnits = {\r
+               new Unit("gramPerSecond", "g/s"),\r
+               new Unit("gramPerLitre", "g/l"),\r
+               new Unit("gramPerCubicMetre", "g/m3"),\r
+               new Unit("NewtonPerMetre", "N/m"),\r
+               new Unit("JoulePerKilogram", "J/kg"),\r
+               new Unit("MetrePerSecond", "m/s"),\r
+               new Unit("MolePerLitre", "mol/l"),\r
+               new Unit("MolePerKilogram", "mol/kg"),\r
+       };\r
+\r
+       public static final Unit[] scalableCompoundUnitsPrefixed = prefix(scalableCompoundUnits);\r
+\r
+       public static final Unit[] compoundUnits = {\r
+               new Unit("SquareMetre", "m2"),\r
+               new Unit("CubicMetre", "m3"),\r
+       };\r
+\r
+       public static final Unit[] specials = {\r
+               new Unit("MassPercentage", "w-%"),\r
+               new Unit("Percentage", "%"),\r
+               new Unit("Degree", "deg"),\r
+               new Unit("Minute", "min"),\r
+               new Unit("Hour", "h"),\r
+               new Unit("Litre", "l"),\r
+       };\r
+       \r
+       static Unit[] prefix(Unit[] units) {\r
+               ArrayList<Unit> result = new ArrayList<Unit>();\r
+               for(Unit unit : units) {\r
+                       result.add(unit.withPrefix("Tera", "T"));\r
+                       result.add(unit.withPrefix("Giga", "G"));\r
+                       result.add(unit.withPrefix("Mega", "M"));\r
+                       result.add(unit.withPrefix("Kilo", "k"));\r
+                       result.add(unit.withPrefix("Hecto", "h"));\r
+                       result.add(unit.withPrefix("", ""));\r
+                       result.add(unit.withPrefix("Centi", "c"));\r
+                       result.add(unit.withPrefix("Milli", "m"));\r
+                       result.add(unit.withPrefix("Micro", "u"));\r
+               }\r
+               return result.toArray(new Unit[result.size()]);\r
+       }\r
+       \r
+       static void print(PrintStream out, Unit unit) {\r
+               out.println("SI." + unit.name + " <T SI.Unit");\r
+               out.println("SI." + unit.name + ".Double <T L0.Double");\r
+               out.println("  @L0.assert L0.HasDataType $Double(unit=\"" + unit.shorthand + "\")");\r
+               out.println("SI." + unit.name + ".Float <T L0.Float");\r
+               out.println("  @L0.assert L0.HasDataType $Float(unit=\"" + unit.shorthand + "\")");\r
+               out.println("");\r
+       }\r
+       \r
+       static void create(File path) {\r
+               \r
+               try {\r
+\r
+                       PrintStream out = new PrintStream(path + "/graph/SI.pgraph");\r
+                       out.println("L0 = <http://www.simantics.org/Layer0-1.1>");\r
+                       out.println("DATA = <http://www.simantics.org/Datatypes-1.1>");\r
+                       out.println("SI = DATA.SI : L0.Library");\r
+                       out.println("    L0.HasResourceClass \"org.simantics.datatypes.SIResource\"");\r
+                       out.println("");\r
+                       out.println("SI.Unit <T L0.Entity");\r
+                       out.println("");\r
+                       out.println("// SI base units");\r
+                       out.println("");\r
+                       \r
+                       for(Unit unit : baseUnitsPrefixed) {\r
+                               print(out, unit);\r
+                       }\r
+\r
+                       out.println("// SI derived units");\r
+                       out.println("");\r
+\r
+                       for(Unit unit : derivedUnitsPrefixed) {\r
+                               print(out, unit);\r
+                       }\r
+\r
+                       out.println("// SI scalable compound units");\r
+                       out.println("");\r
+\r
+                       for(Unit unit : scalableCompoundUnitsPrefixed) {\r
+                               print(out, unit);\r
+                       }\r
+                       \r
+                       out.println("// SI compound units");\r
+                       out.println("");\r
+\r
+                       for(Unit unit : compoundUnits) {\r
+                               print(out, unit);\r
+                       }\r
+\r
+                       out.println("// Special units");\r
+                       out.println("");\r
+\r
+                       for(Unit unit : specials) {\r
+                               print(out, unit);\r
+                       }\r
+                       \r
+               } catch (Exception e) {\r
+                       \r
+               }\r
+               \r
+       }\r
+       \r
+       public static void main(String[] args) {\r
+               \r
+        URL classLocation = SIGenerator.class.getResource(".");\r
+        if (classLocation != null) {\r
+            if (classLocation.getProtocol().equals("file")) {\r
+                try {\r
+                    URL resource = new URL(classLocation, "../../../..");\r
+                    File path = new File(URLDecoder.decode(resource.getPath(), "UTF-8"));\r
+                    System.err.println("path=" + path.getAbsolutePath());\r
+                    create(path);\r
+                } catch (MalformedURLException e) {\r
+                    e.printStackTrace();\r
+                } catch (UnsupportedEncodingException e) {\r
+                    e.printStackTrace();\r
+                }\r
+            }\r
+        }\r
+               \r
+       }\r
+       \r
+}\r