From 2cd4292eb808958dc489b97f0d536572683d7c31 Mon Sep 17 00:00:00 2001 From: Ajay Bhat Date: Thu, 8 Jan 2015 08:16:29 +0530 Subject: [PATCH] OGM-640 Add support for Character type --- .../ogm/type/impl/CharacterType.java | 41 +++++++++++++++++++ .../ogm/type/impl/TypeTranslatorImpl.java | 4 +- .../ogm/backendtck/type/Bookmark.java | 9 ++++ .../ogm/backendtck/type/BuiltInTypeTest.java | 5 +++ 4 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/org/hibernate/ogm/type/impl/CharacterType.java diff --git a/core/src/main/java/org/hibernate/ogm/type/impl/CharacterType.java b/core/src/main/java/org/hibernate/ogm/type/impl/CharacterType.java new file mode 100644 index 0000000000..54fcd77ba6 --- /dev/null +++ b/core/src/main/java/org/hibernate/ogm/type/impl/CharacterType.java @@ -0,0 +1,41 @@ +/* + * Hibernate OGM, Domain model persistence for NoSQL datastores + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or . + */ + +package org.hibernate.ogm.type.impl; + +import org.hibernate.MappingException; +import org.hibernate.engine.spi.Mapping; +import org.hibernate.ogm.type.descriptor.impl.WrappedGridTypeDescriptor; +import org.hibernate.type.descriptor.java.CharacterTypeDescriptor; + +/** + * Represents a Character type + * + * @author Ajay Bhat + */ +public class CharacterType extends AbstractGenericBasicType { + public static CharacterType INSTANCE = new CharacterType(); + + public CharacterType() { + super( WrappedGridTypeDescriptor.INSTANCE, CharacterTypeDescriptor.INSTANCE ); + } + + @Override + public String[] getRegistrationKeys() { + return new String[] {getName(), char.class.getName(), Character.class.getName()}; + } + + @Override + public int getColumnSpan(Mapping mapping) throws MappingException { + return 1; + } + + @Override + public String getName() { + return "char"; + } +} diff --git a/core/src/main/java/org/hibernate/ogm/type/impl/TypeTranslatorImpl.java b/core/src/main/java/org/hibernate/ogm/type/impl/TypeTranslatorImpl.java index 2fc27200e7..d1424e8641 100644 --- a/core/src/main/java/org/hibernate/ogm/type/impl/TypeTranslatorImpl.java +++ b/core/src/main/java/org/hibernate/ogm/type/impl/TypeTranslatorImpl.java @@ -26,6 +26,7 @@ import org.hibernate.type.descriptor.java.ByteTypeDescriptor; import org.hibernate.type.descriptor.java.CalendarDateTypeDescriptor; import org.hibernate.type.descriptor.java.CalendarTypeDescriptor; +import org.hibernate.type.descriptor.java.CharacterTypeDescriptor; import org.hibernate.type.descriptor.java.ClassTypeDescriptor; import org.hibernate.type.descriptor.java.DoubleTypeDescriptor; import org.hibernate.type.descriptor.java.FloatTypeDescriptor; @@ -56,13 +57,14 @@ public class TypeTranslatorImpl implements TypeTranslator { public TypeTranslatorImpl(GridDialect dialect) { this.dialect = dialect; - Map, GridType> tmpMap = newHashMap( 17 ); + Map, GridType> tmpMap = newHashMap( 20 ); tmpMap.put( ClassTypeDescriptor.INSTANCE, ClassType.INSTANCE ); tmpMap.put( LongTypeDescriptor.INSTANCE, LongType.INSTANCE ); tmpMap.put( IntegerTypeDescriptor.INSTANCE, IntegerType.INSTANCE ); tmpMap.put( DoubleTypeDescriptor.INSTANCE, DoubleType.INSTANCE ); tmpMap.put( FloatTypeDescriptor.INSTANCE, FloatType.INSTANCE ); tmpMap.put( ShortTypeDescriptor.INSTANCE, ShortType.INSTANCE ); + tmpMap.put( CharacterTypeDescriptor.INSTANCE, CharacterType.INSTANCE ); tmpMap.put( StringTypeDescriptor.INSTANCE, StringType.INSTANCE ); tmpMap.put( UrlTypeDescriptor.INSTANCE, UrlType.INSTANCE ); tmpMap.put( BigDecimalTypeDescriptor.INSTANCE, BigDecimalType.INSTANCE ); diff --git a/core/src/test/java/org/hibernate/ogm/backendtck/type/Bookmark.java b/core/src/test/java/org/hibernate/ogm/backendtck/type/Bookmark.java index 84f22e4adb..2c12cb4bbb 100644 --- a/core/src/test/java/org/hibernate/ogm/backendtck/type/Bookmark.java +++ b/core/src/test/java/org/hibernate/ogm/backendtck/type/Bookmark.java @@ -56,6 +56,7 @@ public enum Classifier { private Classifier classifierAsOrdinal; private Float visitRatio; private Short urlPort; + private Character delimiter; @Id public String getId() { @@ -255,4 +256,12 @@ public Short getUrlPort() { public void setUrlPort(Short urlPort) { this.urlPort = urlPort; } + + public Character getDelimiter() { + return delimiter; + } + + public void setDelimiter(Character delimiter) { + this.delimiter = delimiter; + } } diff --git a/core/src/test/java/org/hibernate/ogm/backendtck/type/BuiltInTypeTest.java b/core/src/test/java/org/hibernate/ogm/backendtck/type/BuiltInTypeTest.java index 5d4a05e752..84d6f21d92 100644 --- a/core/src/test/java/org/hibernate/ogm/backendtck/type/BuiltInTypeTest.java +++ b/core/src/test/java/org/hibernate/ogm/backendtck/type/BuiltInTypeTest.java @@ -103,6 +103,8 @@ public void testTypesSupport() throws Exception { b.setUrlPort( urlPort ); final Float visitRatio = Float.valueOf( (float) 10.4 ); b.setVisitRatio( visitRatio ); + final Character delimiter = Character.valueOf( '/' ); + b.setDelimiter( delimiter ); b.setType( BookmarkType.URL ); b.setTaxPercentage( 12.34d ); session.persist( b ); @@ -123,6 +125,7 @@ public void testTypesSupport() throws Exception { assertEquals( "stock count incorrect", stockCount, b.getStockCount() ); assertEquals( "url port incorrect", urlPort, b.getUrlPort() ); assertEquals( "visit ratio incorrect", visitRatio, b.getVisitRatio() ); + assertEquals( "delimieter incorrect", delimiter, b.getDelimiter() ); assertEquals( "Tax percentage as double inscorrect", 0, b.getTaxPercentage().compareTo( 12.34d ) ); assertEquals( "Classifier as enum string is incorrect", Classifier.HOME, b.getClassifier() ); assertEquals( "Classifier stored as enum ordinal is incorrect", Classifier.WORK, b.getClassifierAsOrdinal() ); @@ -192,6 +195,8 @@ public void testStringMappedTypeSerialisation() throws Exception { b.setUrlPort( urlPort ); final Float visitRatio = Float.valueOf( (float) 10.4 ); b.setVisitRatio( visitRatio ); + final Character delimiter = Character.valueOf( '/' ); + b.setDelimiter( delimiter ); session.persist( b ); transaction.commit();