]> gerrit.simantics Code Review - simantics/interop.git/commitdiff
Using XML ontology as base of converted XML schemas
authorluukkainen <luukkainen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Wed, 9 Nov 2016 14:41:24 +0000 (14:41 +0000)
committerMarko Luukkainen <marko.luukkainen@vtt.fi>
Thu, 2 Feb 2017 12:01:34 +0000 (14:01 +0200)
Date/Time literal implementations

refs #6801

git-svn-id: https://www.simantics.org/svn/simantics/interoperability/trunk@33376 ac1ea38d-2e2b-0410-8846-a27921b304fc

17 files changed:
org.simantics.xml.sax.base/META-INF/MANIFEST.MF
org.simantics.xml.sax.base/adapters.xml [new file with mode: 0644]
org.simantics.xml.sax.base/build.properties
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/DateRelatedAdapter.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/DateTimeRelatedAdapter.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/TimeRelatedAdapter.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/Date.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/DateTime.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/Time.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/Date.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/DateTime.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/Time.java [new file with mode: 0644]
org.simantics.xml.sax.ontology/build.properties
org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java
org.simantics.xml.sax/src/org/simantics/xml/sax/OntologyGenerator.java
org.simantics.xml.sax/src/org/simantics/xml/sax/SchemaConversionBase.java

index b84603634ae9fc52f380656ab3fe2176c597f839..a27afd70d389e2d4fd2e0628a47cf8516681dddf 100644 (file)
@@ -9,5 +9,9 @@ Require-Bundle: org.eclipse.core.runtime,
  org.simantics.db;bundle-version="1.1.0",
  org.simantics.db.common;bundle-version="1.1.0",
  org.simantics.db.layer0;bundle-version="1.1.0",
- org.simantics.message;bundle-version="1.1.0"
-Export-Package: org.simantics.xml.sax.base
+ org.simantics.message;bundle-version="1.1.0",
+ org.simantics.xml.sax.ontology;bundle-version="1.0.0"
+Export-Package: org.simantics.xml.sax.base,
+ org.simantics.xml.sax.base.datatypes.adapter,
+ org.simantics.xml.sax.base.datatypes.adt,
+ org.simantics.xml.sax.base.datatypes.literal
diff --git a/org.simantics.xml.sax.base/adapters.xml b/org.simantics.xml.sax.base/adapters.xml
new file mode 100644 (file)
index 0000000..e697ba7
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>\r<!--\r
+    Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+    in Industry THTH ry.\r
+    All rights reserved. This program and the accompanying materials\r
+    are made available under the terms of the Eclipse Public License v1.0\r
+    which accompanies this distribution, and is available at\r
+    http://www.eclipse.org/legal/epl-v10.html\r
+   \r
+    Contributors:\r
+        VTT Technical Research Centre of Finland - initial API and implementation\r
+ -->\r
+
+<adapters>\r
+\r      <target interface="org.simantics.xml.sax.base.datatypes.adt.DateTime">\r         <adapter uri="http://www.simantics.org/XML-0.0/DateTime"\r                       contextClass="org.simantics.db.RelationContext" adapterClass="org.simantics.xml.sax.base.datatypes.adapter.DateTimeRelatedAdapter" />\r  </target>\r      <target interface="org.simantics.xml.sax.base.datatypes.adt.Date">\r             <adapter uri="http://www.simantics.org/XML-0.0/Date"\r                   contextClass="org.simantics.db.RelationContext" adapterClass="org.simantics.xml.sax.base.datatypes.adapter.DateRelatedAdapter" />\r      </target>\r      <target interface="org.simantics.xml.sax.base.datatypes.adt.Time">\r             <adapter uri="http://www.simantics.org/XML-0.0/Time"\r                   contextClass="org.simantics.db.RelationContext" adapterClass="org.simantics.xml.sax.base.datatypes.adapter.TimeRelatedAdapter" />\r      </target>\r\r
+</adapters>
\ No newline at end of file
index 41eb6ade2b4f20b43023591aff3c2d34c4d95883..d7586c21ab4f398385f66e8422ee9cde9b04139f 100644 (file)
@@ -1,4 +1,5 @@
 source.. = src/\r
 output.. = bin/\r
 bin.includes = META-INF/,\\r
-               .\r
+               .,\\r
+               adapters.xml\r
index 9e0d57dac8a0f6acb8aafbc3e99d8f07262fccf5..f175fc4b5a204dd658bb5f20f475f71b019f6ed5 100644 (file)
@@ -57,6 +57,8 @@ public abstract class AbstractImporter {
 \r
                @Override\r
                public void perform(WriteGraph graph) throws DatabaseException {\r
+                       Layer0Utils.addCommentMetadata(graph, "Import file " + file.getName());\r
+                       graph.markUndoPoint();\r
                        result = doImport(graph);\r
                }\r
                \r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/DateRelatedAdapter.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/DateRelatedAdapter.java
new file mode 100644 (file)
index 0000000..36594af
--- /dev/null
@@ -0,0 +1,16 @@
+package org.simantics.xml.sax.base.datatypes.adapter;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RelationContext;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.adaption.SimpleContextualAdapter;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.xml.sax.base.datatypes.adt.Date;\r
+\r
+public class DateRelatedAdapter extends SimpleContextualAdapter<Date, RelationContext> {\r
+\r
+       @Override\r
+       public Date adapt(ReadGraph g, Resource source, RelationContext context) throws DatabaseException {\r
+               return g.getValue(context.getStatement().getObject(), org.simantics.xml.sax.base.datatypes.literal.Date.BINDING);\r
+       }\r
+}\r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/DateTimeRelatedAdapter.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/DateTimeRelatedAdapter.java
new file mode 100644 (file)
index 0000000..7b5a167
--- /dev/null
@@ -0,0 +1,16 @@
+package org.simantics.xml.sax.base.datatypes.adapter;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RelationContext;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.adaption.SimpleContextualAdapter;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.xml.sax.base.datatypes.adt.DateTime;\r
+\r
+public class DateTimeRelatedAdapter extends SimpleContextualAdapter<DateTime, RelationContext> {\r
+\r
+       @Override\r
+       public DateTime adapt(ReadGraph g, Resource source, RelationContext context) throws DatabaseException {\r
+               return g.getValue(context.getStatement().getObject(), org.simantics.xml.sax.base.datatypes.literal.DateTime.BINDING);\r
+       }\r
+}\r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/TimeRelatedAdapter.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adapter/TimeRelatedAdapter.java
new file mode 100644 (file)
index 0000000..487ca24
--- /dev/null
@@ -0,0 +1,17 @@
+package org.simantics.xml.sax.base.datatypes.adapter;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RelationContext;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.adaption.SimpleContextualAdapter;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.xml.sax.base.datatypes.adt.Time;\r
+\r
+public class TimeRelatedAdapter extends SimpleContextualAdapter<Time, RelationContext> {\r
+\r
+       \r
+       @Override\r
+       public Time adapt(ReadGraph g, Resource source, RelationContext context) throws DatabaseException {\r
+               return g.getValue(context.getStatement().getObject(), org.simantics.xml.sax.base.datatypes.literal.Time.BINDING);\r
+       }\r
+}\r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/Date.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/Date.java
new file mode 100644 (file)
index 0000000..9bd392d
--- /dev/null
@@ -0,0 +1,14 @@
+package org.simantics.xml.sax.base.datatypes.adt;\r
+\r
+public interface Date {\r
+       \r
+       public java.util.Date getJavaDate();\r
+       \r
+       public int getYear();\r
+       public int getMonth();\r
+       public int getDate();\r
+       public int getTimezoneOffset();\r
+       \r
+       public int compare(Date date);\r
+       \r
+}\r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/DateTime.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/DateTime.java
new file mode 100644 (file)
index 0000000..57e32d6
--- /dev/null
@@ -0,0 +1,19 @@
+package org.simantics.xml.sax.base.datatypes.adt;\r
+\r
+import java.util.Date;\r
+\r
+public interface DateTime {\r
+       \r
+       public Date getJavaDate();\r
+       \r
+       public int getYear();\r
+       public int getMonth();\r
+       public int getDate();\r
+       public int getHours();\r
+       public int getMinutes();\r
+       public int getSeconds();\r
+       public int getTimezoneOffset();\r
+       \r
+       public int compare(DateTime dateTime);\r
+       \r
+}\r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/Time.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/adt/Time.java
new file mode 100644 (file)
index 0000000..5f86675
--- /dev/null
@@ -0,0 +1,16 @@
+package org.simantics.xml.sax.base.datatypes.adt;\r
+\r
+import java.util.Date;\r
+\r
+public interface Time {\r
+       \r
+       public Date getJavaDate();\r
+       \r
+       public int getHours();\r
+       public int getMinutes();\r
+       public int getSeconds();\r
+       public int getTimezoneOffset();\r
+       \r
+       public int compare(Time time);\r
+       \r
+}\r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/Date.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/Date.java
new file mode 100644 (file)
index 0000000..8f0f2c2
--- /dev/null
@@ -0,0 +1,103 @@
+package org.simantics.xml.sax.base.datatypes.literal;\r
+\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Calendar;\r
+import java.util.Locale;\r
+import java.util.TimeZone;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.util.Bean;\r
+\r
+public class Date extends Bean implements org.simantics.xml.sax.base.datatypes.adt.Date {\r
+\r
+       public static final Binding BINDING = Bindings.getBindingUnchecked(Date.class);\r
+\r
+       public int year;\r
+       public byte month;\r
+       public byte day;\r
+       public int offset;\r
+       \r
+       public Date(){\r
+               super(BINDING);\r
+       }\r
+\r
+       public Date(int year, int month, int day) {\r
+               this(year,month,day, java.lang.Integer.MIN_VALUE);\r
+       }\r
+       \r
+       public Date(int year, int month, int day, int offset) {\r
+               super(BINDING);\r
+               if (month <= 0 || month > 12) throw new IllegalArgumentException("Month must be between 1 - 12, got " + month);\r
+               if (day <= 0 || day > 31) throw new IllegalArgumentException("Day must be between 1 - 31, got " + day);\r
+               this.year = year;\r
+               this.month = (byte)month;\r
+               this.day = (byte)day;\r
+               this.offset = offset;\r
+       }\r
+\r
+       @Override\r
+       public int getYear() {\r
+               return year;\r
+       }\r
+\r
+       @Override\r
+       public int getMonth() {\r
+               return month;\r
+       }\r
+\r
+       @Override\r
+       public int getDate() {\r
+               return day;\r
+       }\r
+\r
+       @Override\r
+       public int getTimezoneOffset() {\r
+               return offset;\r
+       }\r
+\r
+       @Override\r
+       public java.util.Date getJavaDate() {\r
+               Calendar c = Calendar.getInstance();\r
+               c.set(year, month, day);\r
+               if (offset != Integer.MIN_VALUE) {\r
+                       c.setTimeZone(TimeZone.getTimeZone(TimeZone.getAvailableIDs(offset*60*1000)[0]));\r
+               }\r
+               return c.getTime();\r
+       }\r
+       \r
+       @Override\r
+       public int compare(org.simantics.xml.sax.base.datatypes.adt.Date o) {\r
+               if (getYear() != o.getYear())\r
+                       return getYear() - o.getYear();\r
+               if (getMonth() != o.getMonth())\r
+                       return getMonth() - o.getMonth();\r
+               if (getDate() != o.getDate())\r
+                       return getDate() - o.getDate();\r
+               return 0;\r
+       }\r
+       \r
+       public static Date parseDate(String dateString) {\r
+               String[] formats = new String[]{"yyyy-MM-ddXXX", "yyyy-MM-dd"};\r
+               boolean[] timezone = new boolean[]{true, false};\r
+               for (int i = 0; i< formats.length; i++) {\r
+                       String format = formats[i];\r
+                       try {\r
+                               SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.ROOT);\r
+                               java.util.Date n = dateFormat.parse(dateString);\r
+                               if (timezone[i]) {\r
+                                       return new Date(n.getYear()+1900, n.getMonth()+1, n.getDate(), n.getTimezoneOffset());\r
+                               }\r
+                               return new Date(n.getYear()+1900, n.getMonth()+1, n.getDate());\r
+                       }  catch (ParseException e) {\r
+                               \r
+                       }\r
+               }\r
+\r
+               throw new IllegalArgumentException("Time is not in proper format " + dateString);\r
+               \r
+       }\r
+       \r
+       \r
+}\r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/DateTime.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/DateTime.java
new file mode 100644 (file)
index 0000000..ba50b20
--- /dev/null
@@ -0,0 +1,134 @@
+package org.simantics.xml.sax.base.datatypes.literal;\r
+\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+import java.util.TimeZone;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.util.Bean;\r
+\r
+public class DateTime extends Bean implements org.simantics.xml.sax.base.datatypes.adt.DateTime {\r
+\r
+       public static final Binding BINDING = Bindings.getBindingUnchecked(DateTime.class);\r
+\r
+       public int year;\r
+       public byte month;\r
+       public byte day;\r
+       public byte hours;\r
+       public byte minutes;\r
+       public byte seconds;\r
+       public int offset;\r
+       \r
+       public DateTime(){\r
+               super(BINDING);\r
+       }\r
+\r
+       public DateTime(int year, int month, int day, int hours, int minutes, int seconds) {\r
+               this(year, month, day, hours, minutes, seconds, java.lang.Integer.MIN_VALUE);\r
+       }\r
+       \r
+       public DateTime(int year, int month, int day, int hours, int minutes, int seconds, int offset) {\r
+               super(BINDING);\r
+               if (month <= 0 || month > 12) throw new IllegalArgumentException("Month must be between 1 - 12, got " + month);\r
+               if (day <= 0 || day > 31) throw new IllegalArgumentException("Day must be between 1 - 31, got " + day);\r
+               if (hours < 0 || hours > 23) throw new IllegalArgumentException("Hours must be between 0 - 23, got " + hours);\r
+               if (minutes < 0 || minutes > 59) throw new IllegalArgumentException("Minutes must be between 0 - 59, got " + minutes);\r
+               if (seconds < 0 || seconds > 59) throw new IllegalArgumentException("Seconds must be between 0 - 59, got " + seconds);\r
+               this.year = year;\r
+               this.month = (byte)month;\r
+               this.day = (byte)day;\r
+               this.hours = (byte)hours;\r
+               this.minutes = (byte)minutes;\r
+               this.seconds = (byte)seconds;\r
+               this.offset = offset;\r
+       }\r
+\r
+       @Override\r
+       public int getYear() {\r
+               return year;\r
+       }\r
+\r
+       @Override\r
+       public int getMonth() {\r
+               return month;\r
+       }\r
+\r
+       @Override\r
+       public int getDate() {\r
+               return day;\r
+       }\r
+\r
+       @Override\r
+       public int getHours() {\r
+               return hours;\r
+       }\r
+\r
+       @Override\r
+       public int getMinutes() {\r
+               return minutes;\r
+       }\r
+\r
+       @Override\r
+       public int getSeconds() {\r
+               return seconds;\r
+       }\r
+\r
+       @Override\r
+       public int getTimezoneOffset() {\r
+               return offset;\r
+       }\r
+\r
+       @Override\r
+       public Date getJavaDate() {\r
+               Calendar c = Calendar.getInstance();\r
+               c.set(year, month, day, hours, minutes, seconds);\r
+               if (offset != Integer.MIN_VALUE) {\r
+                       c.setTimeZone(TimeZone.getTimeZone(TimeZone.getAvailableIDs(offset*60*1000)[0]));\r
+               }\r
+               return c.getTime();\r
+       }\r
+       \r
+       @Override\r
+       public int compare(org.simantics.xml.sax.base.datatypes.adt.DateTime o) {\r
+               // FIXME: take account time offset \r
+               if (getYear() != o.getYear())\r
+                       return getYear() - o.getYear();\r
+               if (getMonth() != o.getMonth())\r
+                       return getMonth() - o.getMonth();\r
+               if (getDate() != o.getDate())\r
+                       return getDate() - o.getDate();\r
+               if (getHours() != o.getHours())\r
+                       return getHours() - o.getHours();\r
+               if (getMinutes() != o.getMinutes())\r
+                       return getMinutes() - o.getMinutes();\r
+               if (getSeconds() != o.getSeconds())\r
+                       return getSeconds() - o.getSeconds();\r
+               return 0;\r
+       }\r
+       \r
+       public static DateTime parseDateTime(String dateString) {\r
+               // FIXME: XML specification allows any number of second decimals!\r
+               // FIXME: endOfDayFrag handling is missing.\r
+               String[] formats = new String[]{"yyyy-MM-dd'T'HH:mm:ssXXX", "yyyy-MM-dd'T'HH:mm:ssSSSSSSSXXX","yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ssSSSSSSS"};\r
+               boolean[] timezone = new boolean[]{true, true,false,false};\r
+               for (int i = 0; i< formats.length; i++) {\r
+                       String format = formats[i];\r
+                       try {\r
+                               SimpleDateFormat dateFormat = new SimpleDateFormat(format);\r
+                               java.util.Date n = dateFormat.parse(dateString);\r
+                               if (timezone[i]) {\r
+                                       return new DateTime(n.getYear()+1900, n.getMonth()+1, n.getDate(), n.getHours(),n.getMinutes(), n.getSeconds(), n.getTimezoneOffset());\r
+                               }\r
+                               return new DateTime(n.getYear()+1900, n.getMonth()+1, n.getDate(), n.getHours(),n.getMinutes(), n.getSeconds());\r
+                       }  catch (ParseException e) {\r
+                               \r
+                       }\r
+               }\r
+\r
+               throw new IllegalArgumentException("Time is not in proper format " + dateString);\r
+       }\r
+\r
+}\r
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/Time.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/Time.java
new file mode 100644 (file)
index 0000000..03b3911
--- /dev/null
@@ -0,0 +1,108 @@
+package org.simantics.xml.sax.base.datatypes.literal;\r
+\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+import java.util.TimeZone;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.util.Bean;\r
+\r
+public class Time extends Bean implements org.simantics.xml.sax.base.datatypes.adt.Time {\r
+\r
+       public static final Binding BINDING = Bindings.getBindingUnchecked(Time.class);\r
+\r
+       public byte hours;\r
+       public byte minutes;\r
+       public byte seconds;\r
+       public int offset;\r
+       \r
+       \r
+       public Time(){\r
+               super(BINDING);\r
+       }\r
+\r
+       public Time(int hours, int minutes, int seconds) {\r
+               this(hours,minutes,seconds, java.lang.Integer.MIN_VALUE);\r
+       }\r
+       \r
+       public Time(int hours, int minutes, int seconds, int offset) {\r
+               super(BINDING);\r
+               if (hours < 0 || hours > 23) throw new IllegalArgumentException("Hours must be between 0 - 23, got " + hours);\r
+               if (minutes < 0 || minutes > 59) throw new IllegalArgumentException("Minutes must be between 0 - 59, got " + minutes);\r
+               if (seconds < 0 || seconds > 59) throw new IllegalArgumentException("Seconds must be between 0 - 59, got " + seconds);\r
+               this.hours = (byte)hours;\r
+               this.minutes = (byte)minutes;\r
+               this.seconds = (byte)seconds;\r
+               this.offset = offset;\r
+       }\r
+\r
+       @Override\r
+       public int getHours() {\r
+               return hours;\r
+       }\r
+\r
+       @Override\r
+       public int getMinutes() {\r
+               return minutes;\r
+       }\r
+\r
+       @Override\r
+       public int getSeconds() {\r
+               return seconds;\r
+       }\r
+\r
+       @Override\r
+       public int getTimezoneOffset() {\r
+               return offset;\r
+       }\r
+\r
+       @Override\r
+       public Date getJavaDate() {\r
+               Calendar c = Calendar.getInstance();\r
+               c.set(Calendar.HOUR_OF_DAY, hours);\r
+               c.set(Calendar.MINUTE, minutes);\r
+               c.set(Calendar.SECOND, seconds);\r
+               if (offset != Integer.MIN_VALUE) {\r
+                       c.setTimeZone(TimeZone.getTimeZone(TimeZone.getAvailableIDs(offset*60*1000)[0]));\r
+               }\r
+               return c.getTime();\r
+       }\r
+       \r
+       @Override\r
+       public int compare(org.simantics.xml.sax.base.datatypes.adt.Time o) {\r
+               // FIXME: take account time offset \r
+               if (getHours() != o.getHours())\r
+                       return getHours() - o.getHours();\r
+               if (getMinutes() != o.getMinutes())\r
+                       return getMinutes() - o.getMinutes();\r
+               if (getSeconds() != o.getSeconds())\r
+                       return getSeconds() - o.getSeconds();\r
+               return 0;\r
+       }\r
+       \r
+       public static Time parseTime(String timeString) {\r
+               // FIXME: XML specification allows any number of second decimals!\r
+               String[] formats = new String[]{"HH:mm:ss.SSSSSSSXXX","HH:mm:ss.SSSSSSS","HH:mm:ss.SSXXX","HH:mm:ss.SS","HH:mm:ssXXX", "HH:mm:ss"};\r
+               boolean[] timezone = new boolean[]{true, false,true,false,true,false};\r
+               for (int i = 0; i< formats.length; i++) {\r
+                       String format = formats[i];\r
+                       try {\r
+                               SimpleDateFormat dateFormat = new SimpleDateFormat(format);\r
+                               Date n = dateFormat.parse(timeString);\r
+                               if (timezone[i]) {\r
+                                       return new Time(n.getHours(), n.getMinutes(), n.getSeconds(), n.getTimezoneOffset());\r
+                               }\r
+                               return new Time(n.getHours(), n.getMinutes(), n.getSeconds());\r
+                       }  catch (ParseException e) {\r
+                               \r
+                       }\r
+               }\r
+\r
+               throw new IllegalArgumentException("Time is not in proper format " + timeString);\r
+               \r
+       }\r
+\r
+}\r
index 41eb6ade2b4f20b43023591aff3c2d34c4d95883..ecdc7c302aa463b9939d114ba5cd6b88ce6f02a1 100644 (file)
@@ -1,4 +1,5 @@
 source.. = src/\r
 output.. = bin/\r
 bin.includes = META-INF/,\\r
-               .\r
+               .,\\r
+               graph.tg\r
index c312ab829d96afc952f6b5728cd5bc2494a2a510..f3279e25ad4ffea031c61057cd38be0b10c00d1e 100644 (file)
@@ -113,36 +113,45 @@ public class ImporterGenerator extends SchemaConversionBase{
                return writer;\r
        }\r
        \r
-       protected String getValueGetter(String binding,String name) {\r
+//     protected String getValueGetter(String binding,String name) {\r
+//             if (binding == null)\r
+//                     return name+".getValue()";\r
+//             if ("STRING".equals(binding))\r
+//                     return name+".getValue()";\r
+//             if ("BOOLEAN".equals(binding))\r
+//                     return "Boolean.parseBoolean("+name+".getValue())";\r
+//             if ("INTEGER".equals(binding))\r
+//                     return "Integer.parseInt("+name+".getValue())";\r
+//             if ("DOUBLE".equals(binding))\r
+//                     return "Double.parseDouble("+name+".getValue())";\r
+//             if ("FLOAT".equals(binding))\r
+//                     return "Float.parseFloat("+name+".getValue())";\r
+//             return name+".getValue()";\r
+//     }\r
+//     protected String getValueGetter(String binding) {\r
+//             if (binding == null)\r
+//                     return "value";\r
+//             if ("STRING".equals(binding))\r
+//                     return "value";\r
+//             if ("BOOLEAN".equals(binding))\r
+//                     return "Boolean.parseBoolean(value)";\r
+//             if ("INTEGER".equals(binding))\r
+//                     return "Integer.parseInt(value)";\r
+//             if ("DOUBLE".equals(binding))\r
+//                     return "Double.parseDouble(value)";\r
+//             if ("FLOAT".equals(binding))\r
+//                     return "Float.parseFloat(value)";\r
+//             return "value";\r
+//     }\r
+       protected String getValueGetter(TypeEntry binding,String name) {\r
                if (binding == null)\r
                        return name+".getValue()";\r
-               if ("STRING".equals(binding))\r
-                       return name+".getValue()";\r
-               if ("BOOLEAN".equals(binding))\r
-                       return "Boolean.parseBoolean("+name+".getValue())";\r
-               if ("INTEGER".equals(binding))\r
-                       return "Integer.parseInt("+name+".getValue())";\r
-               if ("DOUBLE".equals(binding))\r
-                       return "Double.parseDouble("+name+".getValue())";\r
-               if ("FLOAT".equals(binding))\r
-                       return "Float.parseFloat("+name+".getValue())";\r
-               return name+".getValue()";\r
+               return binding.getValueGetter(name);\r
        }\r
-       \r
-       protected String getValueGetter(String binding) {\r
+       protected String getValueGetter(TypeEntry binding) {\r
                if (binding == null)\r
                        return "value";\r
-               if ("STRING".equals(binding))\r
-                       return "value";\r
-               if ("BOOLEAN".equals(binding))\r
-                       return "Boolean.parseBoolean(value)";\r
-               if ("INTEGER".equals(binding))\r
-                       return "Integer.parseInt(value)";\r
-               if ("DOUBLE".equals(binding))\r
-                       return "Double.parseDouble(value)";\r
-               if ("FLOAT".equals(binding))\r
-                       return "Float.parseFloat(value)";\r
-               return "value";\r
+               return binding.getValueGetter();\r
        }\r
        \r
        protected void handle(TopLevelAttribute topLevelAttribute) {\r
@@ -363,10 +372,13 @@ public class ImporterGenerator extends SchemaConversionBase{
                        if (useOriginalList(parent, indicator,element, reference, ref, refType)) {\r
                        // generic list\r
                        fw.delayedWriter.println("            {");\r
-                       fw.delayedWriter.println("               Resource list = graph.getPossibleObject(element.getData(),"+ontShort+"XML_hasOriginalElementList);");\r
+                       //fw.delayedWriter.println("               Resource list = graph.getPossibleObject(element.getData(),"+ontShort+"XML_hasOriginalElementList);");\r
+                       fw.delayedWriter.println("               XMLResource XML = XMLResource.getInstance(graph);");\r
+                       fw.delayedWriter.println("               Resource list = graph.getPossibleObject(element.getData(), XML.hasOriginalElementList);");\r
                        fw.delayedWriter.println("               if (list == null) {");\r
                        fw.delayedWriter.println("                  list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));");\r
-                       fw.delayedWriter.println("                  graph.claim(element.getData(),"+ontShort+"XML_hasOriginalElementList,list);");\r
+                       //fw.delayedWriter.println("                  graph.claim(element.getData(),"+ontShort+"XML_hasOriginalElementList,list);");\r
+                       fw.delayedWriter.println("                  graph.claim(element.getData(), XML.hasOriginalElementList,list);");\r
                        fw.delayedWriter.println("               } else {");\r
                        fw.delayedWriter.println("                  org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));");\r
                        fw.delayedWriter.println("               }");\r
@@ -381,7 +393,7 @@ public class ImporterGenerator extends SchemaConversionBase{
                        \r
                        fw.delayedWriter2.println("   public static class " + getName(parent) +"_" +ref+" extends org.simantics.xml.sax.base.ValueElementParser {");\r
                        fw.delayedWriter2.println("      "+ getName(parent) +"_" +ref +"(){");\r
-                       fw.delayedWriter2.println("           super(\""+ref+"\"," +this.ontologyClassName+".URIs."+getName(parent) + "_has"+ref+", Bindings."+binding+");");\r
+                       fw.delayedWriter2.println("           super(\""+ref+"\"," +this.ontologyClassName+".URIs."+getName(parent) + "_has"+ref+", "+binding+");");\r
                        fw.delayedWriter2.println("       }");\r
                        fw.delayedWriter2.println("   }");\r
                }\r
@@ -427,10 +439,13 @@ public class ImporterGenerator extends SchemaConversionBase{
                if (useOriginalList(parent, indicator,element, reference, ref, new QName(obj.getName()))) {\r
                // generic list\r
                fw.delayedWriter.println("            {");\r
-               fw.delayedWriter.println("               Resource list = graph.getPossibleObject(element.getData(),"+ontShort+"XML_hasOriginalElementList);");\r
+               //fw.delayedWriter.println("               Resource list = graph.getPossibleObject(element.getData(),"+ontShort+"XML_hasOriginalElementList);");\r
+               fw.delayedWriter.println("               XMLResource XML = XMLResource.getInstance(graph);");\r
+               fw.delayedWriter.println("               Resource list = graph.getPossibleObject(element.getData(), XML.hasOriginalElementList);");\r
                fw.delayedWriter.println("               if (list == null) {");\r
                fw.delayedWriter.println("                  list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));");\r
-               fw.delayedWriter.println("                  graph.claim(element.getData(),"+ontShort+"XML_hasOriginalElementList,list);");\r
+               //fw.delayedWriter.println("                  graph.claim(element.getData(),"+ontShort+"XML_hasOriginalElementList,list);");\r
+               fw.delayedWriter.println("                  graph.claim(element.getData(), XML.hasOriginalElementList,list);");\r
                fw.delayedWriter.println("               } else {");\r
                fw.delayedWriter.println("                  org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));");\r
                fw.delayedWriter.println("               }");\r
@@ -502,7 +517,8 @@ public class ImporterGenerator extends SchemaConversionBase{
                FileWriter fw = getWriter(parent);\r
                if (primitiveType != null) {\r
                        \r
-                       String binding = getBindingFromPrimitiveType(primitiveType);\r
+                       //String binding = getBindingFromPrimitiveType(primitiveType);\r
+                       TypeEntry binding = getTypeEntry(primitiveType);\r
                        \r
                        if (binding != null) {\r
                                writeAttribute(fw, attrName, relationName, binding, isReference);\r
@@ -522,21 +538,24 @@ public class ImporterGenerator extends SchemaConversionBase{
                        QName base = restriction.getBase();\r
                        \r
                        \r
-                       String binding = getBindingFromPrimitiveType(base);\r
+                       //String binding = getBindingFromPrimitiveType(base);\r
+                       TypeEntry binding = getTypeEntry(base);\r
                        writeAttribute(fw, attrName, relationName, binding, isReference);\r
                } else {\r
                        // TODO : using default String attribute should be configured with rules.\r
                        //throw new RuntimeException("Cannot resolve type for Attribute " + attrName + " -> " + primitiveType.getLocalPart());\r
                        fw.writer.println("    //FIXME: Cannot resolve type for Attribute " + attrName + " Using default type String");\r
-                       writeAttribute(fw, attrName, relationName, "STRING", isReference);\r
+                       //writeAttribute(fw, attrName, relationName, "STRING", isReference);\r
+                       writeAttribute(fw, attrName, relationName, getTypeEntry("string"), isReference);\r
                }\r
        }\r
        \r
-       private void writeAttribute(FileWriter fw, String attrName, String relationName, String binding, boolean isReference) {\r
+       //private void writeAttribute(FileWriter fw, String attrName, String relationName, String binding, boolean isReference) {\r
+       private void writeAttribute(FileWriter fw, String attrName, String relationName, TypeEntry binding, boolean isReference) {\r
                fw.writer.println("      {");\r
                fw.writer.println("         Attribute a = element.getAttribute(\"" +attrName+"\");");\r
                fw.writer.println("         if (a != null) {");\r
-               fw.writer.println("            graph.claimLiteral(element.getData(),"+relationName+","+getValueGetter(binding,"a")+", Bindings."+binding+");");\r
+               fw.writer.println("            graph.claimLiteral(element.getData(),"+relationName+","+getValueGetter(binding,"a")+", "+binding.binding+");");\r
                if (isReference)\r
                fw.writer.println("            idProviderValue = a.getValue();");       \r
                fw.writer.println("         }");\r
@@ -555,10 +574,12 @@ public class ImporterGenerator extends SchemaConversionBase{
                QName base = restriction.getBase();\r
                \r
                \r
-               String binding = getBindingFromPrimitiveType(base);\r
+               //String binding = getBindingFromPrimitiveType(base);\r
+               TypeEntry binding = getTypeEntry(base);\r
                fw.writer.println("   @Override");\r
                fw.writer.println("   public void configure(WriteGraph graph, Element element, java.lang.String value) throws DatabaseException {");\r
-               fw.writer.println("      graph.claimValue(element.getData(),"+getValueGetter(binding)+", Bindings."+binding+");");\r
+               //fw.writer.println("      graph.claimValue(element.getData(),"+getValueGetter(binding)+", Bindings."+binding+");");\r
+               fw.writer.println("      graph.claimValue(element.getData(),"+getValueGetter(binding)+", "+binding.binding +");");\r
                fw.writer.println("   }");\r
                \r
        }\r
@@ -616,7 +637,8 @@ public class ImporterGenerator extends SchemaConversionBase{
                        if (defaultValue == null)\r
                            defaultValue = getDefaultValue(atype);\r
                                \r
-                       String binding = getBindingFromPrimitiveType(atype);\r
+                       //String binding = getBindingFromPrimitiveType(atype);\r
+                       TypeEntry binding = getTypeEntry(atype);\r
                        if (i > 0)\r
                                fw.writer.print(",");\r
                        if (defaultValue != null)\r
@@ -625,7 +647,7 @@ public class ImporterGenerator extends SchemaConversionBase{
                                fw.writer.print(getValueGetter(binding,"a"+(i++)));\r
                }\r
                fw.writer.println("};");\r
-               fw.writer.println("         graph.claimLiteral(element.getData(),"+relationName+", value, Bindings."+arrayBinding+");");\r
+               fw.writer.println("         graph.claimLiteral(element.getData(),"+relationName+", value, "+arrayBinding+");");\r
                fw.writer.println("      }");\r
                \r
        }\r
@@ -911,6 +933,7 @@ public class ImporterGenerator extends SchemaConversionBase{
                writer.println("import org.simantics.db.exception.DatabaseException;");\r
                writer.println("import org.simantics.xml.sax.base.Attribute;");\r
                writer.println("import org.simantics.xml.sax.base.Element;");\r
+               writer.println("import org.simantics.xml.sax.ontology.XMLResource;");\r
                if (!isList) {\r
                writer.println("import org.simantics.layer0.Layer0;");\r
            } else {\r
index 0b7aa3c00aefa89263005c0a2fd87bf2fd3f849a..5ecb02e0e948b8555aeae87b7aaae6876893f074 100644 (file)
@@ -109,6 +109,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                }\r
                writer.println();\r
                writer.println("L0 = <http://www.simantics.org/Layer0-1.1>");\r
+               writer.println("XML = <http://www.simantics.org/XML-1.0>");\r
                writer.println();\r
                writer.println(ontRoot + " = <" + ontologyName +"-"+ version+"> : L0.Ontology");\r
                writer.println("   @L0.new");\r
@@ -118,24 +119,24 @@ public class OntologyGenerator extends SchemaConversionBase {
                \r
                ontRoot += ".";\r
                // TODO : these could be created in separate base ontology.\r
-               writer.println(commentTag + " Built-in types");\r
-               writer.println();\r
-               writer.println(ontRoot+"XML : L0.Library");\r
-               writer.println(ontRoot+"XML.hasAttribute <R L0.HasProperty");\r
-               writer.println(ontRoot+"XML.hasID <R "+ontRoot+"XML.hasAttribute : L0.FunctionalRelation");\r
-               writer.println("  --> L0.String");\r
-               writer.println(ontRoot+"XML.ComplexType <T L0.Entity");\r
-               writer.println(ontRoot+"XML.hasComplexType <R L0.IsComposedOf");\r
-               writer.println(ontRoot+"XML.AttributeGroup  <T L0.Entity");\r
-               writer.println(ontRoot+"XML.Element <T L0.Entity");\r
-               writer.println(ontRoot+"XML.hasElement <R L0.IsComposedOf");\r
-               writer.println(ontRoot+"XML.ElementList <T L0.List");\r
-               writer.println(ontRoot+"XML.hasElementList <R L0.IsComposedOf");\r
-               writer.println(ontRoot+"XML.hasOriginalElementList <R " + ontRoot+"XML.hasElementList");\r
-               writer.println(ontRoot+"XML.hasReference <R L0.IsRelatedTo");\r
-               writer.println(ontRoot+"XML.hasExternalReference <R L0.IsRelatedTo");\r
-               writer.println("   L0.InverseOf " + ontRoot+"XML.externalReferenceOf <R L0.IsRelatedTo");\r
-               writer.println();\r
+//             writer.println(commentTag + " Built-in types");\r
+//             writer.println();\r
+//             writer.println(ontRoot+"XML : L0.Library");\r
+//             writer.println(ontRoot+"XML.hasAttribute <R L0.HasProperty");\r
+//             writer.println(ontRoot+"XML.hasID <R "+ontRoot+"XML.hasAttribute : L0.FunctionalRelation");\r
+//             writer.println("  --> L0.String");\r
+//             writer.println(ontRoot+"XML.ComplexType <T L0.Entity");\r
+//             writer.println(ontRoot+"XML.hasComplexType <R L0.IsComposedOf");\r
+//             writer.println(ontRoot+"XML.AttributeGroup  <T L0.Entity");\r
+//             writer.println(ontRoot+"XML.Element <T L0.Entity");\r
+//             writer.println(ontRoot+"XML.hasElement <R L0.IsComposedOf");\r
+//             writer.println(ontRoot+"XML.ElementList <T L0.List");\r
+//             writer.println(ontRoot+"XML.hasElementList <R L0.IsComposedOf");\r
+//             writer.println(ontRoot+"XML.hasOriginalElementList <R " + ontRoot+"XML.hasElementList");\r
+//             writer.println(ontRoot+"XML.hasReference <R L0.IsRelatedTo");\r
+//             writer.println(ontRoot+"XML.hasExternalReference <R L0.IsRelatedTo");\r
+//             writer.println("   L0.InverseOf " + ontRoot+"XML.externalReferenceOf <R L0.IsRelatedTo");\r
+//             writer.println();\r
                writer.println(ontRoot+"ComplexTypes : L0.Library");\r
                writer.println(ontRoot+"AttributeGroups : L0.Library");\r
                writer.println();\r
@@ -221,7 +222,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                                        writer.print(" <R " + type);\r
                                }\r
                        } else {\r
-                               writer.print(" <R " +  ontRoot+"XML.hasElement");\r
+                               writer.print(" <R XML.hasElement");\r
                        }\r
                        \r
                        writer.println();\r
@@ -242,9 +243,9 @@ public class OntologyGenerator extends SchemaConversionBase {
                                }\r
                        }\r
                        if (!single) {\r
-                               writer.println(ontRoot+name+ "List <T "+ontRoot+"XML.ElementList");\r
+                               writer.println(ontRoot+name+ "List <T XML.ElementList");\r
                                if (types.size() == 0) {\r
-                               writer.println(relationName+ "List <R "+ontRoot+"XML.hasElementList : L0.FunctionalRelation");\r
+                               writer.println(relationName+ "List <R XML.hasElementList : L0.FunctionalRelation");\r
                                } else {\r
                                        writer.print(relationName+ "List");\r
                                        for (String type : types) {\r
@@ -270,18 +271,18 @@ public class OntologyGenerator extends SchemaConversionBase {
                        writer.println(ontRoot+getName(parent)+".has"+refName + " <R " +  ontRoot+ getName(obj,"has"));\r
                        writer.println("   --> " + ontRoot+getName(obj));\r
                } else {\r
-                       writer.println(ontRoot+getName(parent)+".has"+refName + " <R " +  ontRoot+"XML.hasElement");\r
+                       writer.println(ontRoot+getName(parent)+".has"+refName + " <R XML.hasElement");\r
                        writer.println("   --> " + getType(refType));\r
                }\r
                \r
                if (useElementList(parent, indicator,element, reference, refName, refType)) {\r
                        \r
                        if (type == null) {\r
-                               writer.println(ontRoot+getName(parent)+"."+refName + "List <T "  + ontRoot+"XML.ElementList");\r
+                               writer.println(ontRoot+getName(parent)+"."+refName + "List <T XML.ElementList");\r
                                writer.println(ontRoot+getName(parent)+".has"+refName + "List <R " +  ontRoot+getName(obj,"has")+"List : L0.FunctionalRelation");\r
                        } else {\r
-                               writer.println(ontRoot+getName(parent)+"."+refName + "List <T "  + ontRoot+"XML.ElementList");\r
-                               writer.println(ontRoot+getName(parent)+".has"+refName + "List <R " +  ontRoot+"XML.hasElementList : L0.FunctionalRelation");    \r
+                               writer.println(ontRoot+getName(parent)+"."+refName + "List <T XML.ElementList");\r
+                               writer.println(ontRoot+getName(parent)+".has"+refName + "List <R XML.hasElementList : L0.FunctionalRelation");  \r
                        }\r
                }\r
        }\r
@@ -290,7 +291,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                writer.println(ontRoot+getName(parent)+".has"+refName + " <R " +  ontRoot+ getName(obj,"has"));\r
                writer.println("   --> " + ontRoot+getName(obj));\r
                if (useElementList(parent, indicator,element, reference, refName, new QName(obj.getName()))) {\r
-                       writer.println(ontRoot+getName(parent)+"."+refName + "List <T "  + ontRoot+"XML.ElementList");\r
+                       writer.println(ontRoot+getName(parent)+"."+refName + "List <T XML.ElementList");\r
                        writer.println(ontRoot+getName(parent)+".has"+refName + "List <R " +  ontRoot+getName(obj,"has")+"List : L0.FunctionalRelation");\r
                }\r
        }\r
@@ -313,7 +314,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                        relationName = ontRoot+"has"+name;\r
                        if (parent != null)\r
                                relationName = ontRoot+getName(parent)+".has"+name;\r
-                       relationType = ontRoot+"XML.hasAttribute";\r
+                       relationType = "XML.hasAttribute";\r
                }\r
                else if (ref != null && parent != null) {\r
                        relationName = ontRoot+getName(parent)+".has"+ref.getLocalPart();\r
@@ -328,7 +329,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                        if (ontType != null) {\r
                                id = getTypeEntry(primitiveType).id;\r
                                if (id)\r
-                                       relationType = ontRoot+"XML.hasID";\r
+                                       relationType = "XML.hasID";\r
                        } else {\r
                                \r
                        }\r
@@ -373,7 +374,7 @@ public class OntologyGenerator extends SchemaConversionBase {
        protected void handle(SchemaObject parent, AttributeGroup attributeGroup) {\r
                if (parent == null) {\r
                        NamedAttributeGroup group = (NamedAttributeGroup)attributeGroup;\r
-                       writer.println(ontRoot+getAttributeGroupPrefix()+group.getName()+ " <T " + ontRoot +"XML.AttributeGroup");\r
+                       writer.println(ontRoot+getAttributeGroupPrefix()+group.getName()+ " <T XML.AttributeGroup");\r
                        SchemaObject obj = new SchemaObject(parent,attributeGroup);\r
                        for (Annotated annotated : group.getAttributeOrAttributeGroup()) {\r
                                if (annotated instanceof Attribute) {\r
@@ -411,7 +412,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                if (parent != null)\r
                        relationName = ontRoot+getName(parent)+".has"+name;\r
                \r
-               writer.println(relationName+ " <R "+ontRoot+"XML.hasAttribute : L0.FunctionalRelation");\r
+               writer.println(relationName+ " <R XML.hasAttribute : L0.FunctionalRelation");\r
                \r
                String ontType = getL0Type(base);\r
                writer.println("   --> " + ontType);\r
@@ -427,12 +428,12 @@ public class OntologyGenerator extends SchemaConversionBase {
                \r
                String relationName = ontRoot+getName(topLevelComplexType,"has");//ontRoot+"has"+name;\r
                \r
-               writer.println(relationName+ " <R "+ontRoot+"XML.hasComplexType");\r
-               writer.println(relationName+ "List <R "+ontRoot+"XML.hasElementList");\r
+               writer.println(relationName+ " <R XML.hasComplexType");\r
+               writer.println(relationName+ "List <R XML.hasElementList");\r
                //writer.println("   --> " + ontRoot+getComplexTypePrefix()+name);\r
                writer.println("   --> " + ontRoot+name);\r
                writer.println();\r
-               String baseType = ontRoot+"XML.ComplexType";\r
+               String baseType = "XML.ComplexType";\r
 \r
                QName base = getComplexTypeBase(topLevelComplexType.getComplexType());\r
                if (base != null) {\r
@@ -459,7 +460,7 @@ public class OntologyGenerator extends SchemaConversionBase {
 //             if (parent != null)\r
 //                     name = parent +"_"+name;\r
                \r
-               String type = ontRoot+"XML.Element";\r
+               String type = "XML.Element";\r
                Set<String> types = new LinkedHashSet<String>();\r
                if (element.getType() != null) {\r
                        types.add(getType(element.getType()));\r
@@ -492,8 +493,8 @@ public class OntologyGenerator extends SchemaConversionBase {
 //                     //relationName = ontRoot+getComplexTypePrefix()+"has"+name.substring(getComplexTypePrefix().length());\r
 //                     relationName = ontRoot+getName(elementObj.getParent()) + "has"+element.getName();\r
 //             }\r
-               writer.println(relationName+ " <R "+ontRoot+"XML.hasElement");\r
-               writer.println(relationName+ "List <R "+ontRoot+"XML.hasElementList");\r
+               writer.println(relationName+ " <R XML.hasElement");\r
+               writer.println(relationName+ "List <R XML.hasElementList");\r
                \r
                writer.println(ontRoot+name+ " <T "+type);\r
                \r
@@ -512,7 +513,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                List<IDReference> references = getIDReferences(element);\r
        \r
                for (IDReference ref : references) {\r
-                       writer.println(ontRoot+name+"."+ref.getReference().getName()+ " <R " +ontRoot+"XML.hasReference");\r
+                       writer.println(ontRoot+name+"."+ref.getReference().getName()+ " <R XML.hasReference");\r
                }\r
                \r
                writer.println();\r
index f523076ee7a8f00162238f20d905d306f68bbf6f..e04b0931fb115fb9f96d9ce5427b4105a6732498 100644 (file)
@@ -62,36 +62,37 @@ public abstract class SchemaConversionBase {
                Map<String,TypeEntry> l0Types = new HashMap<String, SchemaConversionBase.TypeEntry>();\r
                typeMap.put(CONVERSION_NS, l0Types);\r
                \r
-               schemaTypes.put("string",               new TypeEntry("L0.String",                      "STRING", "String", ""));\r
-               schemaTypes.put("NMTOKEN",              new TypeEntry("L0.String",                      "STRING", "String", ""));\r
-               schemaTypes.put("token",                new TypeEntry("L0.String",                      "STRING", "String", ""));\r
-               schemaTypes.put("ID",                   new TypeEntry("L0.String",                      "STRING", "String", "",true));\r
-               schemaTypes.put("IDREF",                new TypeEntry("L0.String",                      "STRING", "String", ""));\r
-               schemaTypes.put("date",                 new TypeEntry("L0.String",                      "STRING", "String", ""));\r
-               schemaTypes.put("time",                 new TypeEntry("L0.String",                      "STRING", "String", ""));\r
-               schemaTypes.put("anyURI",               new TypeEntry("L0.URI",                         "STRING", "String", ""));\r
-               schemaTypes.put("double",               new TypeEntry("L0.Double",                      "DOUBLE", "double", "Double.NaN"));\r
-               schemaTypes.put("float",                new TypeEntry("L0.Float",                       "FLOAT",  "float",  "Float.NaN"));\r
-               schemaTypes.put("decimal",              new TypeEntry("L0.Double",                      "DOUBLE", "double", "Double.NaN"));\r
-               schemaTypes.put("boolean",              new TypeEntry("L0.Boolean",                     "BOOLEAN", "boolean", "false"));\r
-               schemaTypes.put("integer",              new TypeEntry("L0.Integer",             "INTEGER", "int", "0"));\r
-               schemaTypes.put("positiveInteger", new TypeEntry("L0.Integer",          "INTEGER", "int", "0"));\r
-               schemaTypes.put("nonPositiveInteger", new TypeEntry("L0.Integer",       "INTEGER", "int", "0"));\r
-               schemaTypes.put("nonNegativeInteger", new TypeEntry("L0.Integer",       "INTEGER", "int", "0"));\r
-               schemaTypes.put("negativeInteger", new TypeEntry("L0.Integer",          "INTEGER", "int", "0"));\r
-               schemaTypes.put("unsignedInt",  new TypeEntry("L0.Integer",             "INTEGER", "int", "0"));\r
-               schemaTypes.put("int",                  new TypeEntry("L0.Integer",                     "INTEGER", "int", "0"));\r
-               schemaTypes.put("short",                new TypeEntry("L0.Integer",                     "INTEGER", "int", "0"));\r
-               schemaTypes.put("unsignedShort",new TypeEntry("L0.Integer",                     "INTEGER", "int", "0"));\r
-               schemaTypes.put("byte",                 new TypeEntry("L0.Byte",                        "BYTE", "byte", "0"));\r
-               schemaTypes.put("unsignedByte", new TypeEntry("L0.Byte",                        "BYTE", "byte", "0"));\r
-               schemaTypes.put("long",                 new TypeEntry("L0.Long",                        "LONG", "long", "0"));\r
-               schemaTypes.put("unsignedLong", new TypeEntry("L0.Long",                        "LONG", "long", "0"));\r
+               schemaTypes.put("string",               new TypeEntry("L0.String",                      "Bindings.STRING", "String", "","",""));\r
+               schemaTypes.put("NMTOKEN",              new TypeEntry("L0.String",                      "Bindings.STRING", "String", "","",""));\r
+               schemaTypes.put("token",                new TypeEntry("L0.String",                      "Bindings.STRING", "String", "","",""));\r
+               schemaTypes.put("ID",                   new TypeEntry("L0.String",                      "Bindings.STRING", "String", "","","",true));\r
+               schemaTypes.put("IDREF",                new TypeEntry("L0.String",                      "Bindings.STRING", "String", "","",""));\r
+               schemaTypes.put("date",                 new TypeEntry("XML.Date",                       "org.simantics.xml.sax.base.datatypes.literal.Date.BINDING", "org.simantics.xml.sax.base.datatypes.literal.Date", "","org.simantics.xml.sax.base.datatypes.literal.Date.parseDate(",")"));\r
+               schemaTypes.put("time",                 new TypeEntry("XML.Time",                       "org.simantics.xml.sax.base.datatypes.literal.Time.BINDING", "org.simantics.xml.sax.base.datatypes.literal.Time", "","org.simantics.xml.sax.base.datatypes.literal.Time.parseTime(",")"));\r
+               schemaTypes.put("dateTime",             new TypeEntry("XML.DateTime",           "org.simantics.xml.sax.base.datatypes.literal.DateTime.BINDING", "org.simantics.xml.sax.base.datatypes.literal.DateTime", "","org.simantics.xml.sax.base.datatypes.literal.DateTime.parseDateTime(",")"));\r
+               schemaTypes.put("anyURI",               new TypeEntry("L0.URI",                         "Bindings.STRING", "String", "","",""));\r
+               schemaTypes.put("double",               new TypeEntry("L0.Double",                      "Bindings.DOUBLE", "double", "Double.NaN","Double.parseDouble(",")"));\r
+               schemaTypes.put("float",                new TypeEntry("L0.Float",                       "Bindings.FLOAT",  "float",  "Float.NaN","Float.parseFloat(",")"));\r
+               schemaTypes.put("decimal",              new TypeEntry("L0.Double",                      "Bindings.DOUBLE", "double", "Double.NaN","Double.parseDouble(",")"));\r
+               schemaTypes.put("boolean",              new TypeEntry("L0.Boolean",                     "Bindings.BOOLEAN", "boolean", "false","Boolean.parseBoolean(",")"));\r
+               schemaTypes.put("integer",              new TypeEntry("L0.Integer",             "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("positiveInteger", new TypeEntry("L0.Integer",          "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("nonPositiveInteger", new TypeEntry("L0.Integer",       "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("nonNegativeInteger", new TypeEntry("L0.Integer",       "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("negativeInteger", new TypeEntry("L0.Integer",          "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("unsignedInt",  new TypeEntry("L0.Integer",             "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("int",                  new TypeEntry("L0.Integer",                     "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("short",                new TypeEntry("L0.Integer",                     "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("unsignedShort",new TypeEntry("L0.Integer",                     "Bindings.INTEGER", "int", "0","Integer.parseInt(",")"));\r
+               schemaTypes.put("byte",                 new TypeEntry("L0.Byte",                        "Bindings.BYTE", "byte", "0","Byte.parseByte(",")"));\r
+               schemaTypes.put("unsignedByte", new TypeEntry("L0.Byte",                        "Bindings.BYTE", "byte", "0","Byte.parseByte(",")"));\r
+               schemaTypes.put("long",                 new TypeEntry("L0.Long",                        "Bindings.LONG", "long", "0","Long.parseLong(",")"));\r
+               schemaTypes.put("unsignedLong", new TypeEntry("L0.Long",                        "Bindings.LONG", "long", "0","Long.parseLong(",")"));\r
                \r
                \r
                \r
-               l0Types.put("doubleArray",              new TypeEntry("L0.DoubleArray",  "DOUBLE_ARRAY", "double[]", null));\r
-               l0Types.put("stringArray",              new TypeEntry("L0.StringArray",  "STRING_ARRAY", "string[]", null));\r
+               l0Types.put("doubleArray",              new TypeEntry("L0.DoubleArray",  "Bindings.DOUBLE_ARRAY", "double[]", null,null,null));\r
+               l0Types.put("stringArray",              new TypeEntry("L0.StringArray",  "Bindings.STRING_ARRAY", "string[]", null,null,null));\r
        }\r
        \r
        \r
@@ -101,7 +102,14 @@ public abstract class SchemaConversionBase {
                        return null;\r
                TypeEntry entry = types.get(type.getLocalPart());\r
                return entry;\r
-               \r
+       }\r
+       protected TypeEntry getTypeEntry(String type) {\r
+               for (Map<String,TypeEntry> types : typeMap.values()) {\r
+                       TypeEntry entry = types.get(type);\r
+                       if (entry != null)\r
+                               return entry;\r
+               }\r
+               return null;\r
        }\r
        \r
        protected String getL0TypeFromPrimitiveType(QName primitiveType) {\r
@@ -930,22 +938,36 @@ public abstract class SchemaConversionBase {
                String javaType;\r
                String defaultValue;\r
                boolean id;\r
-               public TypeEntry(String l0Type, String binding, String javaType, String defaultValue) {\r
+               String getterPrefix;\r
+               String getterPostfix;\r
+               public TypeEntry(String l0Type, String binding, String javaType, String defaultValue, String getterPrefix, String getterPostfix) {\r
                        super();\r
                        this.l0Type = l0Type;\r
                        this.binding = binding;\r
                        this.javaType = javaType;\r
                        this.defaultValue = defaultValue;\r
                        this.id = false;\r
+                       this.getterPrefix = getterPrefix;\r
+                       this.getterPostfix = getterPostfix;\r
+                       \r
                }\r
                \r
-               public TypeEntry(String l0Type, String binding, String javaType, String defaultValue, boolean id) {\r
+               public TypeEntry(String l0Type, String binding, String javaType, String defaultValue, String getterPrefix, String getterPostfix, boolean id) {\r
                        super();\r
                        this.l0Type = l0Type;\r
                        this.binding = binding;\r
                        this.javaType = javaType;\r
                        this.defaultValue = defaultValue;\r
                        this.id = id;\r
+                       this.getterPrefix = getterPrefix;\r
+                       this.getterPostfix = getterPostfix;\r
+               }\r
+               \r
+               public String getValueGetter(String name) {\r
+                       return getterPrefix + name + ".getValue()"+getterPostfix;\r
+               }\r
+               public String getValueGetter() {\r
+                       return getterPrefix + "value"+getterPostfix;\r
                }\r
                \r
        }\r