Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2009-04-26 16:20:13 +0000
committerEike Stepper2009-04-26 16:20:13 +0000
commitd2fb30e856c3bd7d0bdc0ebdd66c2b7bb5a632b0 (patch)
treec1b43ff20149bea1978cdd2551b61509105e522f /plugins/org.eclipse.emf.cdo.common
parent9e2f1741e0673b1600fcb99a703f85d077ae1722 (diff)
downloadcdo-d2fb30e856c3bd7d0bdc0ebdd66c2b7bb5a632b0.tar.gz
cdo-d2fb30e856c3bd7d0bdc0ebdd66c2b7bb5a632b0.tar.xz
cdo-d2fb30e856c3bd7d0bdc0ebdd66c2b7bb5a632b0.zip
[269789] Support EMF BigInteger and BigDecimal data types
https://bugs.eclipse.org/bugs/show_bug.cgi?id=269789
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java11
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java58
3 files changed, 71 insertions, 2 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
index d8330e05f9..ef9d1efbc5 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
@@ -75,8 +75,8 @@ public final class CDOModelUtil
static
{
List<CDOType> types = new ArrayList<CDOType>();
- registerCoreType(types, EcorePackage.eINSTANCE.getEBigDecimal(), CDOType.CUSTOM);
- registerCoreType(types, EcorePackage.eINSTANCE.getEBigInteger(), CDOType.CUSTOM);
+ registerCoreType(types, EcorePackage.eINSTANCE.getEBigDecimal(), CDOType.BIG_DECIMAL);
+ registerCoreType(types, EcorePackage.eINSTANCE.getEBigInteger(), CDOType.BIG_INTEGER);
registerCoreType(types, EcorePackage.eINSTANCE.getEBooleanObject(), CDOType.BOOLEAN_OBJECT);
registerCoreType(types, EcorePackage.eINSTANCE.getEBoolean(), CDOType.BOOLEAN);
registerCoreType(types, EcorePackage.eINSTANCE.getEByteArray(), CDOType.BYTE_ARRAY);
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java
index 9c1ed56cf5..0b49ac7323 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java
@@ -21,6 +21,7 @@ import java.io.IOException;
/**
* @author Eike Stepper
* @noimplement This interface is not intended to be implemented by clients.
+ * @since 2.0
*/
public interface CDOType
{
@@ -67,6 +68,16 @@ public interface CDOType
/**
* @since 2.0
*/
+ public static final CDOType BIG_DECIMAL = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.BIG_DECIMAL;
+
+ /**
+ * @since 2.0
+ */
+ public static final CDOType BIG_INTEGER = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.BIG_INTEGER;
+
+ /**
+ * @since 2.0
+ */
public static final CDOType ENUM = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.ENUM;
public static final CDOType CUSTOM = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.CUSTOM;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java
index 774d4588ae..45d407aa88 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java
@@ -24,6 +24,8 @@ import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -164,6 +166,62 @@ public abstract class CDOTypeImpl implements CDOType
}
};
+ public static final CDOType BIG_DECIMAL = new CDOTypeImpl("BIG_DECIMAL", EcorePackage.EBIG_DECIMAL, true)
+ {
+ public void writeValue(CDODataOutput out, Object value) throws IOException
+ {
+ if (value == null)
+ {
+ out.writeByteArray(null);
+ }
+ else
+ {
+ BigDecimal bigDecimal = (BigDecimal)value;
+ out.writeByteArray(bigDecimal.unscaledValue().toByteArray());
+ out.writeInt(bigDecimal.scale());
+ }
+ }
+
+ public Object readValue(CDODataInput in) throws IOException
+ {
+ byte[] array = in.readByteArray();
+ if (array == null)
+ {
+ return null;
+ }
+
+ BigInteger unscaled = new BigInteger(array);
+ int scale = in.readInt();
+ return new BigDecimal(unscaled, scale);
+ }
+ };
+
+ public static final CDOType BIG_INTEGER = new CDOTypeImpl("BIG_INTEGER", EcorePackage.EBIG_INTEGER, true)
+ {
+ public void writeValue(CDODataOutput out, Object value) throws IOException
+ {
+ if (value == null)
+ {
+ out.writeByteArray(null);
+ }
+ else
+ {
+ out.writeByteArray(((BigInteger)value).toByteArray());
+ }
+ }
+
+ public Object readValue(CDODataInput in) throws IOException
+ {
+ byte[] array = in.readByteArray();
+ if (array == null)
+ {
+ return null;
+ }
+
+ return new BigInteger(array);
+ }
+ };
+
public static final CDOType OBJECT = new CDOTypeImpl("OBJECT", EcorePackage.EOBJECT, true, CDOID.NULL)
{
public void writeValue(CDODataOutput out, Object value) throws IOException

Back to the top