[infinispan-commits] Infinispan SVN: r2200 - trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Wed Aug 11 10:23:21 EDT 2010
Author: mircea.markus
Date: 2010-08-11 10:23:21 -0400 (Wed, 11 Aug 2010)
New Revision: 2200
Added:
trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapper.java
trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/TwoWayKey2StringMapper.java
Log:
migrated 2186 from trunk
Copied: trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapper.java (from rev 2186, branches/4.1.x/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapper.java)
===================================================================
--- trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapper.java (rev 0)
+++ trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapper.java 2010-08-11 14:23:21 UTC (rev 2200)
@@ -0,0 +1,91 @@
+package org.infinispan.loaders.jdbc.stringbased;
+
+/**
+ * Default implementation for {@link org.infinispan.loaders.jdbc.stringbased.TwoWayKey2StringMapper} that knows how to
+ * handle all primitive wrapper keys and Strings.
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+public class DefaultTwoWayKey2StringMapper implements TwoWayKey2StringMapper {
+
+ private static final String STRING_IDENTIFIER = "0";
+ private static final String SHORT_IDENTIFIER = "1";
+ private static final String BYTE_IDENTIFIER = "2";
+ private static final String LONG_IDENTIFIER = "3";
+ private static final String INTEGER_IDENTIFIER = "4";
+ private static final String DOUBLE_IDENTIFIER = "5";
+ private static final String FLOAT_IDENTIFIER = "6";
+ private static final String BOOLEAN_IDENTIFIER = "7";
+
+
+ @Override
+ public String getStringMapping(Object key) {
+ String identifier;
+ if (key.getClass().equals(String.class)) {
+ identifier = STRING_IDENTIFIER;
+ } else if (key.getClass().equals(Short.class)) {
+ identifier = SHORT_IDENTIFIER;
+ } else if (key.getClass().equals(Byte.class)) {
+ identifier = BYTE_IDENTIFIER;
+ } else if (key.getClass().equals(Long.class)) {
+ identifier = LONG_IDENTIFIER;
+ } else if (key.getClass().equals(Integer.class)) {
+ identifier = INTEGER_IDENTIFIER;
+ } else if (key.getClass().equals(Double.class)) {
+ identifier = DOUBLE_IDENTIFIER;
+ } else if (key.getClass().equals(Float.class)) {
+ identifier = FLOAT_IDENTIFIER;
+ } else if (key.getClass().equals(Boolean.class)) {
+ identifier = BOOLEAN_IDENTIFIER;
+ } else {
+ throw new IllegalArgumentException("Unsupported key type: " + key.getClass().getName());
+ }
+ return generateString(identifier, key.toString());
+ }
+
+ @Override
+ public Object getKeyMapping(String key) {
+ String type = String.valueOf(key.charAt(0));
+ String value = key.substring(1);
+ if (type.equals(STRING_IDENTIFIER)) {
+ return value;
+ } else if (type.equals(SHORT_IDENTIFIER)) {
+ return Short.parseShort(value);
+ } else if (type.equals(BYTE_IDENTIFIER)) {
+ return Byte.parseByte(value);
+ } else if (type.equals(LONG_IDENTIFIER)) {
+ return Long.parseLong(value);
+ } else if (type.equals(INTEGER_IDENTIFIER)) {
+ return Integer.parseInt(value);
+ } else if (type.equals(DOUBLE_IDENTIFIER)) {
+ return Double.parseDouble(value);
+ } else if (type.equals(FLOAT_IDENTIFIER)) {
+ return Float.parseFloat(value);
+ } else if (type.equals(BOOLEAN_IDENTIFIER)) {
+ return Boolean.parseBoolean(value);
+ } else {
+ throw new IllegalArgumentException("Unsupported type code: " + type);
+ }
+ }
+
+ @Override
+ public boolean isSupportedType(Class keyType) {
+ return isPrimitive(keyType);
+ }
+
+ private String generateString(String identifier, String s) {
+ return identifier + s;
+ }
+
+ static boolean isPrimitive(Class key) {
+ return key == String.class ||
+ key == Short.class ||
+ key == Byte.class ||
+ key == Long.class ||
+ key == Integer.class ||
+ key == Double.class ||
+ key == Float.class ||
+ key == Boolean.class;
+ }
+}
Copied: trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/TwoWayKey2StringMapper.java (from rev 2186, branches/4.1.x/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/TwoWayKey2StringMapper.java)
===================================================================
--- trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/TwoWayKey2StringMapper.java (rev 0)
+++ trunk/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/stringbased/TwoWayKey2StringMapper.java 2010-08-11 14:23:21 UTC (rev 2200)
@@ -0,0 +1,16 @@
+package org.infinispan.loaders.jdbc.stringbased;
+
+/**
+ * Extends {@link org.infinispan.loaders.jdbc.stringbased.Key2StringMapper} and allows a bidirectional transformation
+ * between keys and strings. This is needed for supporting preload and rehashing during distribution. See {@link
+ * org.infinispan.loaders.jdbc.stringbased.JdbcStringBasedCacheStore} for more info on these limitations. Following
+ * condition should be satisfied by implementations of this interface:
+ * <p/>
+ * <b>k1.equals(getKeyMapping(getStringMapping(k1)))</b>
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+public interface TwoWayKey2StringMapper extends Key2StringMapper {
+ Object getKeyMapping(String key);
+}
More information about the infinispan-commits
mailing list