]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/Date.java
Using XML ontology as base of converted XML schemas
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / datatypes / literal / Date.java
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