diff options
author | Eike Stepper | 2009-04-26 16:20:13 +0000 |
---|---|---|
committer | Eike Stepper | 2009-04-26 16:20:13 +0000 |
commit | d2fb30e856c3bd7d0bdc0ebdd66c2b7bb5a632b0 (patch) | |
tree | c1b43ff20149bea1978cdd2551b61509105e522f /plugins/org.eclipse.emf.cdo.common | |
parent | 9e2f1741e0673b1600fcb99a703f85d077ae1722 (diff) | |
download | cdo-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')
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 |