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