package com.bagri.xdm.cache.coherence.store; import com.tangosol.net.cache.CacheStore; //import oracle.sql.ARRAY; //import oracle.sql.ArrayDescriptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementSetter; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; /** * Abstract Cache Store class * User: dsukhoroslov * Date: 24.07.12 15:45 * * @param <K> Key * @param <V> Value */ public abstract class AbstractCacheStore<K, V> implements CacheStore { private final Logger logger; /** * @return JDBC template */ public JdbcTemplate getTemplate() { return template; } private JdbcTemplate template; /** * Class constructor */ public AbstractCacheStore() { this.logger = LoggerFactory.getLogger(getClass()); } public Logger getLogger() { return logger; } /** * @return Data keys */ public abstract List<K> getDataKeys(); /** * @return true if {@code loadAll(keys)} can load data in batch, else false */ public boolean isSupportBatchLoading() { return true; } /** * @param template JDBC template */ public void setJdbcTemplate(JdbcTemplate template) { this.template = template; } /** * Load one key * * @param key Key * @return Loaded key */ @Override public Object load(Object key) { logger.trace("load. key: {}", key); return null; } /** * Load all keys * * @param keys Key collection * @return Loaded keys */ @Override public Map loadAll(Collection keys) { logger.trace("loadAll. keys: {}", keys); return Collections.EMPTY_MAP; } /** * Delete one key * * @param key Key */ @Override public void erase(Object key) { logger.trace("erase. key: {}", key); } /** * Delete all keys * * @param keys Key collection */ @Override public void eraseAll(Collection keys) { logger.trace("eraseAll. keys: {}", keys); } @Override public void store(Object key, Object value) { logger.trace("store. key: {}, value: {}", key, value); } /** * @param entities Entity map */ @Override public void storeAll(Map entities) { logger.trace("storeAll. entities: {}", entities.size()); //storeAll(entities.values(), getStoreAllSql()); } /** * String IDs Setter class */ // static class StringIdsSetter implements PreparedStatementSetter { // // private Collection<String> ids; // // StringIdsSetter(Collection<String> ids) { // this.ids = ids; // } // // @Override // public void setValues(PreparedStatement ps) throws SQLException { // ArrayDescriptor aDesc = ArrayDescriptor.createDescriptor("SYS.ODCIVARCHAR2LIST", ps.getConnection()); // String[] keys = ids.toArray(new String[ids.size()]); // //logger.trace("converted ids: {}", Arrays.toString(keys)); // ARRAY dArray = new ARRAY(aDesc, ps.getConnection(), keys); // ps.setArray(1, dArray); // } // } /** * @param value Boolean value * @return Converted boolean value to database format */ public static String toDatabaseBoolean(boolean value) { return value ? "Y" : "N"; } /** * @param value Database boolean value * @return Java boolean value */ public static boolean fromDatabaseBoolean(String value) { return "Y".equals(value); } /** * @param arr Array * @param values Values * @param <T> Type class * @return Typed array */ public static <T> T[] add(T[] arr, T... values) { T[] res = Arrays.copyOf(arr, arr.length + values.length); System.arraycopy(values, 0, res, arr.length, values.length); return res; } }