1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.efaps.admin.datamodel.attributetype;
22
23 import java.sql.SQLException;
24 import java.sql.Timestamp;
25 import java.util.ArrayList;
26 import java.util.Date;
27 import java.util.List;
28
29 import org.efaps.admin.EFapsSystemConfiguration;
30 import org.efaps.admin.KernelSettings;
31 import org.efaps.admin.datamodel.Attribute;
32 import org.efaps.db.Context;
33 import org.efaps.db.wrapper.AbstractSQLInsertUpdate;
34 import org.efaps.util.DateTimeUtil;
35 import org.efaps.util.EFapsException;
36 import org.joda.time.DateTime;
37 import org.joda.time.DateTimeZone;
38 import org.joda.time.ReadableDateTime;
39 import org.joda.time.chrono.ISOChronology;
40
41
42
43
44
45 public class DateTimeType
46 extends AbstractType
47 {
48
49
50
51 private static final long serialVersionUID = 1L;
52
53
54
55
56
57 @Override
58 public Object readValue(final Attribute _attribute,
59 final List<Object> _objectList)
60 throws EFapsException
61 {
62
63 final String timezoneID = EFapsSystemConfiguration.get().getAttributeValue(KernelSettings.DBTIMEZONE);
64 final ISOChronology chron;
65 if (timezoneID != null) {
66 final DateTimeZone timezone = DateTimeZone.forID(timezoneID);
67 chron = ISOChronology.getInstance(timezone);
68 } else {
69 chron = ISOChronology.getInstanceUTC();
70 }
71
72 final List<DateTime> ret = new ArrayList<DateTime>();
73 for (final Object object : _objectList) {
74 if (object instanceof Timestamp || object instanceof Date) {
75
76
77 final DateTime dateTime = new DateTime(object);
78 final DateTime unlocalized = new DateTime(dateTime.getYear(),
79 dateTime.getMonthOfYear(),
80 dateTime.getDayOfMonth(),
81 dateTime.getHourOfDay(),
82 dateTime.getMinuteOfHour(),
83 dateTime.getSecondOfMinute(),
84 dateTime.getMillisOfSecond(),
85 chron);
86 ret.add(unlocalized);
87 } else if (object != null) {
88 ret.add(new DateTime());
89 } else {
90 ret.add(null);
91 }
92 }
93 return _objectList.size() > 0 ? (ret.size() > 1 ? ret : ret.get(0)) : null;
94 }
95
96
97
98
99 @Override
100 protected void prepare(final AbstractSQLInsertUpdate<?> _insertUpdate,
101 final Attribute _attribute,
102 final Object... _values)
103 throws SQLException
104 {
105 checkSQLColumnSize(_attribute, 1);
106 try {
107 _insertUpdate.column(_attribute.getSqlColNames().get(0), eval(_values));
108 } catch (final EFapsException e) {
109 throw new SQLException(e);
110 }
111 }
112
113
114
115
116
117
118
119
120
121
122
123
124 protected Timestamp eval(final Object[] _value)
125 throws EFapsException
126 {
127 final Timestamp ret;
128 if ((_value == null) || (_value.length == 0) || (_value[0] == null)) {
129 ret = null;
130 } else {
131 final DateTime dateTime = DateTimeUtil.translateFromUI(_value[0]);
132
133
134
135
136
137 final DateTime localized = new DateTime(dateTime.getYear(),
138 dateTime.getMonthOfYear(),
139 dateTime.getDayOfMonth(),
140 dateTime.getHourOfDay(),
141 dateTime.getMinuteOfHour(),
142 dateTime.getSecondOfMinute(),
143 dateTime.getMillisOfSecond());
144 ret = (localized != null) ? new Timestamp(localized.getMillis()) : null;
145 }
146 return ret;
147 }
148
149
150
151
152 @Override
153 public String toString4Where(final Object _value)
154 throws EFapsException
155 {
156 String ret = "";
157 if (_value instanceof ReadableDateTime) {
158 ret = Context.getDbType().getStr4DateTime((ReadableDateTime) _value);
159 } else if (_value instanceof String) {
160 ret = (String) _value;
161 }
162 return ret;
163 }
164 }