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