1 /*
2    Copyright (c) 2010, 2021, Oracle and/or its affiliates.
3 
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License, version 2.0,
6    as published by the Free Software Foundation.
7 
8    This program is also distributed with certain software (including
9    but not limited to OpenSSL) that is licensed under separate terms,
10    as designated in a particular file or component or in included license
11    documentation.  The authors of MySQL hereby grant you an additional
12    permission to link the program and your derivative works with the
13    separately licensed software that they have included with MySQL.
14 
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License, version 2.0, for more details.
19 
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
23 */
24 
25 package com.mysql.clusterj.openjpa;
26 
27 import com.mysql.clusterj.ColumnMetadata;
28 import com.mysql.clusterj.core.CacheManager;
29 import com.mysql.clusterj.core.spi.DomainTypeHandler;
30 import com.mysql.clusterj.core.spi.ValueHandler;
31 import com.mysql.clusterj.core.util.Logger;
32 import com.mysql.clusterj.core.util.LoggerFactoryService;
33 
34 import java.lang.reflect.Method;
35 import java.math.BigDecimal;
36 import java.math.BigInteger;
37 import java.sql.Date;
38 import java.sql.Time;
39 import java.sql.Timestamp;
40 import java.util.BitSet;
41 import org.apache.openjpa.kernel.OpenJPAStateManager;
42 
43 /**
44  *
45  */
46 public class NdbOpenJPAValueHandler implements ValueHandler {
47 
48     protected OpenJPAStateManager sm;
49 
50     private NdbOpenJPAStoreManager store;
51 
52     /** My logger */
53     static final Logger logger = LoggerFactoryService.getFactory().getInstance(NdbOpenJPAValueHandler.class);
54 
release()55     public void release() {
56         this.sm = null;
57         this.store = null;
58     }
59 
wasReleased()60     public boolean wasReleased() {
61         return this.sm == null;
62     }
63 
getStateManager()64     protected OpenJPAStateManager getStateManager() {
65         return sm;
66     }
67 
getStoreManager()68     protected NdbOpenJPAStoreManager getStoreManager() {
69         return store;
70     }
71 
NdbOpenJPAValueHandler(OpenJPAStateManager sm)72     public NdbOpenJPAValueHandler(OpenJPAStateManager sm) {
73         this.sm = sm;
74     }
75 
NdbOpenJPAValueHandler(OpenJPAStateManager sm, NdbOpenJPAStoreManager store)76     public NdbOpenJPAValueHandler(OpenJPAStateManager sm, NdbOpenJPAStoreManager store) {
77         this.sm = sm;
78         this.store = store;
79     }
80 
isNull(int fieldNumber)81     public boolean isNull(int fieldNumber) {
82         return (sm.fetchObject(fieldNumber) == null);
83     }
84 
isModified(int fieldNumber)85     public boolean isModified(int fieldNumber) {
86         BitSet modified = sm.getDirty();
87         return modified.get(fieldNumber);
88     }
89 
resetModified()90     public void resetModified() {
91         throw new UnsupportedOperationException("Not supported yet.");
92     }
93 
markModified(int fieldNumber)94     public void markModified(int fieldNumber) {
95         throw new UnsupportedOperationException("Not supported yet.");
96     }
97 
getBoolean(int fieldNumber)98     public boolean getBoolean(int fieldNumber) {
99         return sm.fetchBoolean(fieldNumber);
100     }
101 
getBooleans(int fieldNumber)102     public boolean[] getBooleans(int fieldNumber) {
103         throw new UnsupportedOperationException("Not supported yet.");
104     }
105 
getObjectBoolean(int fieldNumber)106     public Boolean getObjectBoolean(int fieldNumber) {
107         return sm.fetchBoolean(fieldNumber);
108     }
109 
getByte(int fieldNumber)110     public byte getByte(int fieldNumber) {
111         return sm.fetchByte(fieldNumber);
112     }
113 
getBytes(int fieldNumber)114     public byte[] getBytes(int fieldNumber) {
115         return (byte[])sm.fetchObject(fieldNumber);
116     }
117 
getShort(int fieldNumber)118     public short getShort(int fieldNumber) {
119         return sm.fetchShort(fieldNumber);
120     }
121 
getInt(int fieldNumber)122     public int getInt(int fieldNumber) {
123         int value = sm.fetchInt(fieldNumber);
124         if (logger.isDetailEnabled()) logger.detail(" fieldNumber: " + fieldNumber + " value: " + value);
125         return value;
126     }
127 
getLong(int fieldNumber)128     public long getLong(int fieldNumber) {
129         long value = sm.fetchLong(fieldNumber);
130         if (logger.isDetailEnabled()) logger.detail(" fieldNumber: " + fieldNumber + " value: " + value);
131         return value;
132     }
133 
getFloat(int fieldNumber)134     public float getFloat(int fieldNumber) {
135         return sm.fetchFloat(fieldNumber);
136     }
137 
getDouble(int fieldNumber)138     public double getDouble(int fieldNumber) {
139         return sm.fetchDouble(fieldNumber);
140     }
141 
getObjectByte(int fieldNumber)142     public Byte getObjectByte(int fieldNumber) {
143         return (Byte)sm.fetchObject(fieldNumber);
144     }
145 
getObjectShort(int fieldNumber)146     public Short getObjectShort(int fieldNumber) {
147         return (Short)sm.fetchObject(fieldNumber);
148     }
149 
getObjectInt(int fieldNumber)150     public Integer getObjectInt(int fieldNumber) {
151         Integer value = (Integer)sm.fetchObject(fieldNumber);
152         if (logger.isDetailEnabled()) logger.detail(" fieldNumber: " + fieldNumber + " value: " + value);
153         return value;
154     }
155 
getObjectLong(int fieldNumber)156     public Long getObjectLong(int fieldNumber) {
157         return (Long)sm.fetchObject(fieldNumber);
158     }
159 
getObjectFloat(int fieldNumber)160     public Float getObjectFloat(int fieldNumber) {
161         return (Float)sm.fetchObject(fieldNumber);
162     }
163 
getObjectDouble(int fieldNumber)164     public Double getObjectDouble(int fieldNumber) {
165         return (Double)sm.fetchObject(fieldNumber);
166     }
167 
getBigDecimal(int fieldNumber)168     public BigDecimal getBigDecimal(int fieldNumber) {
169         return (BigDecimal)sm.fetchObject(fieldNumber);
170     }
171 
getBigInteger(int fieldNumber)172     public BigInteger getBigInteger(int fieldNumber) {
173         return (BigInteger)sm.fetchObject(fieldNumber);
174     }
175 
getString(int fieldNumber)176     public String getString(int fieldNumber) {
177         return sm.fetchString(fieldNumber);
178     }
179 
getJavaSqlDate(int fieldNumber)180     public Date getJavaSqlDate(int fieldNumber) {
181         return (java.sql.Date)sm.fetchObject(fieldNumber);
182     }
183 
getJavaUtilDate(int fieldNumber)184     public java.util.Date getJavaUtilDate(int fieldNumber) {
185         return (java.util.Date)sm.fetchObject(fieldNumber);
186     }
187 
getJavaSqlTime(int fieldNumber)188     public Time getJavaSqlTime(int fieldNumber) {
189         return (java.sql.Time)sm.fetchObject(fieldNumber);
190     }
191 
getJavaSqlTimestamp(int fieldNumber)192     public Timestamp getJavaSqlTimestamp(int fieldNumber) {
193         return (java.sql.Timestamp)sm.fetchObject(fieldNumber);
194     }
195 
setBoolean(int fieldNumber, boolean value)196     public void setBoolean(int fieldNumber, boolean value) {
197         sm.storeBoolean(fieldNumber, value);
198     }
199 
setBooleans(int fieldNumber, boolean[] value)200     public void setBooleans(int fieldNumber, boolean[] value) {
201         sm.storeObject(fieldNumber, value);
202     }
203 
setByte(int fieldNumber, byte value)204     public void setByte(int fieldNumber, byte value) {
205         sm.storeByte(fieldNumber, value);
206     }
207 
setBytes(int fieldNumber, byte[] value)208     public void setBytes(int fieldNumber, byte[] value) {
209         sm.storeObject(fieldNumber, value);
210     }
211 
setShort(int fieldNumber, short value)212     public void setShort(int fieldNumber, short value) {
213         sm.storeShort(fieldNumber, value);
214     }
215 
setInt(int fieldNumber, int value)216     public void setInt(int fieldNumber, int value) {
217         if (logger.isDetailEnabled()) logger.detail(" fieldNumber: " + fieldNumber + " value: " + value);
218 //        if (fieldNumber == 0) dumpStackTrace();
219         sm.storeInt(fieldNumber, value);
220     }
221 
setLong(int fieldNumber, long value)222     public void setLong(int fieldNumber, long value) {
223         sm.storeLong(fieldNumber, value);
224     }
225 
setFloat(int fieldNumber, float value)226     public void setFloat(int fieldNumber, float value) {
227         sm.storeFloat(fieldNumber, value);
228     }
229 
setDouble(int fieldNumber, double value)230     public void setDouble(int fieldNumber, double value) {
231         sm.storeDouble(fieldNumber, value);
232     }
233 
setObjectBoolean(int fieldNumber, Boolean value)234     public void setObjectBoolean(int fieldNumber, Boolean value) {
235         sm.storeObject(fieldNumber, value);
236     }
237 
setObjectByte(int fieldNumber, Byte value)238     public void setObjectByte(int fieldNumber, Byte value) {
239         sm.storeObject(fieldNumber, value);
240     }
241 
setObjectShort(int fieldNumber, Short value)242     public void setObjectShort(int fieldNumber, Short value) {
243         sm.storeObject(fieldNumber, value);
244     }
245 
setObjectInt(int fieldNumber, Integer value)246     public void setObjectInt(int fieldNumber, Integer value) {
247         if (logger.isDetailEnabled()) logger.detail(" fieldNumber: " + fieldNumber + " value: " + value);
248         sm.storeObject(fieldNumber, value);
249     }
250 
setObjectLong(int fieldNumber, Long value)251     public void setObjectLong(int fieldNumber, Long value) {
252         sm.storeObject(fieldNumber, value);
253     }
254 
setObjectFloat(int fieldNumber, Float value)255     public void setObjectFloat(int fieldNumber, Float value) {
256         sm.storeObject(fieldNumber, value);
257     }
258 
setObjectDouble(int fieldNumber, Double value)259     public void setObjectDouble(int fieldNumber, Double value) {
260         sm.storeObject(fieldNumber, value);
261     }
262 
setBigDecimal(int fieldNumber, BigDecimal value)263     public void setBigDecimal(int fieldNumber, BigDecimal value) {
264         sm.storeObject(fieldNumber, value);
265     }
266 
setBigInteger(int fieldNumber, BigInteger value)267     public void setBigInteger(int fieldNumber, BigInteger value) {
268         sm.storeObject(fieldNumber, value);
269     }
270 
setString(int fieldNumber, String value)271     public void setString(int fieldNumber, String value) {
272         sm.storeString(fieldNumber, value);
273     }
274 
setObject(int fieldNumber, Object value)275     public void setObject(int fieldNumber, Object value) {
276         sm.storeObject(fieldNumber, value);
277     }
278 
setJavaSqlDate(int fieldNumber, Date value)279     public void setJavaSqlDate(int fieldNumber, Date value) {
280         sm.storeObject(fieldNumber, value);
281     }
282 
setJavaUtilDate(int fieldNumber, java.util.Date value)283     public void setJavaUtilDate(int fieldNumber, java.util.Date value) {
284         sm.storeObject(fieldNumber, value);
285     }
286 
setJavaSqlTime(int fieldNumber, Time value)287     public void setJavaSqlTime(int fieldNumber, Time value) {
288         sm.storeObject(fieldNumber, value);
289     }
290 
setJavaSqlTimestamp(int fieldNumber, Timestamp value)291     public void setJavaSqlTimestamp(int fieldNumber, Timestamp value) {
292         sm.storeObject(fieldNumber, value);
293     }
294 
pkToString(DomainTypeHandler<?> domainTypeHandler)295     public String pkToString(DomainTypeHandler<?> domainTypeHandler) {
296         StringBuffer sb = new StringBuffer(" key: [");
297         int[] keys = domainTypeHandler.getKeyFieldNumbers();
298         String separator = "";
299         for (int i: keys) {
300             sb.append(separator);
301             sb.append(sm.fetch(i));
302             separator = ";";
303         }
304         sb.append("]");
305         return sb.toString();
306     }
307 
308     @SuppressWarnings("unused")
dumpStackTrace()309     private void dumpStackTrace() {
310         Throwable t = new Throwable();
311         t.printStackTrace();
312     }
313 
found(Boolean found)314     public void found(Boolean found) {
315         throw new UnsupportedOperationException("Not supported yet.");
316     }
317 
columnMetadata()318     public ColumnMetadata[] columnMetadata() {
319         throw new UnsupportedOperationException("Not supported yet.");
320     }
321 
found()322     public Boolean found() {
323         throw new UnsupportedOperationException("Not supported yet.");
324     }
325 
get(int columnNumber)326     public Object get(int columnNumber) {
327         throw new UnsupportedOperationException("Not supported yet.");
328     }
329 
set(int columnNumber, Object value)330     public void set(int columnNumber, Object value) {
331         throw new UnsupportedOperationException("Not supported yet.");
332     }
333 
getLobBytes(int fieldNumber)334     public byte[] getLobBytes(int fieldNumber) {
335         return (byte[])sm.fetchObject(fieldNumber);
336     }
337 
getLobString(int fieldNumber)338     public String getLobString(int fieldNumber) {
339         return sm.fetchString(fieldNumber);
340     }
341 
setCacheManager(CacheManager cm)342     public void setCacheManager(CacheManager cm) {
343         // we do not need a cache manager...
344     }
345 
setLobBytes(int fieldNumber, byte[] value)346     public void setLobBytes(int fieldNumber, byte[] value) {
347         sm.storeObject(fieldNumber, value);
348     }
349 
setLobString(int fieldNumber, String value)350     public void setLobString(int fieldNumber, String value) {
351         sm.storeString(fieldNumber, value);
352     }
353 
setProxy(Object proxy)354     public void setProxy(Object proxy) {
355         // we do not support Proxy domain model
356     }
357 
invoke(Object proxy, Method method, Object[] args)358     public Object invoke(Object proxy, Method method, Object[] args)
359             throws Throwable {
360         throw new UnsupportedOperationException("Not supported yet.");
361     }
362 
getProxy()363     public Object getProxy() {
364         throw new UnsupportedOperationException("Not supported yet.");
365     }
366 
367 }
368