cdmlib-model/README.TXT -text
cdmlib-model/pom.xml -text
cdmlib-model/src/main/java/eu/etaxonomy/cdm/aspectj/PropertyChangeAspect.aj -text
+cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/BigDecimalUserType.java -text
cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/DOIUserType.java -text
cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/EnumUserType.java -text
cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/HibernateProxyHelper.java -text
cdmlib-model/src/main/resources/update/update_term_r2.4.2.1-r2.4.2.2.mysql.sql -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/aspectj/PropertyChangeTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/datagenerator/TaxonGenerator.java -text
+cdmlib-model/src/test/java/eu/etaxonomy/cdm/hibernate/BigDecimalUserTypeTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/DatabaseInitialiser.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/agent/AgentValidationTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/agent/InstitutionalMembershipTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/parser/ParserProblemTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/parser/TimePeriodParserTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/parser/location/CoordinateConverterTest.java -text
+cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/BigDecimalTesting.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestFullReferenceParser.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestModel.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/test/function/TestRegExs.java -text
--- /dev/null
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.cdm.hibernate;\r
+\r
+import java.io.Serializable;\r
+import java.math.BigDecimal;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.sql.Types;\r
+\r
+import org.hibernate.HibernateException;\r
+import org.hibernate.engine.spi.SessionImplementor;\r
+import org.hibernate.type.StandardBasicTypes;\r
+import org.hibernate.usertype.UserType;\r
+\r
+/**\r
+ * This software is public domain and carries NO WARRANTY.\r
+ *\r
+ * Patches, bug reports and feature requests welcome:\r
+ *\r
+ * https://bitbucket.org/ratkins/bigdecimalusertype/\r
+ */\r
+public class BigDecimalUserType implements UserType {\r
+\r
+ private static final int[] SQL_TYPES = new int[] {Types.DECIMAL, Types.INTEGER};\r
+\r
+ @Override\r
+ public Object assemble(Serializable arg0, Object arg1) throws HibernateException {\r
+ return deepCopy(arg0);\r
+ }\r
+\r
+ @Override\r
+ public Object deepCopy(Object arg0) throws HibernateException {\r
+ return arg0;\r
+ }\r
+\r
+ @Override\r
+ public Serializable disassemble(Object arg0) throws HibernateException {\r
+ return (Serializable) arg0;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object arg0, Object arg1) throws HibernateException {\r
+ return arg0.equals(arg1);\r
+ }\r
+\r
+ @Override\r
+ public int hashCode(Object arg0) throws HibernateException {\r
+ return arg0.hashCode();\r
+ }\r
+\r
+ @Override\r
+ public boolean isMutable() {\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {\r
+ BigDecimal bigDecimal = (BigDecimal) StandardBasicTypes.BIG_DECIMAL.nullSafeGet(rs, names, session, owner);\r
+\r
+// BigDecimal bigDecimal = rs.getBigDecimal(names[0]);\r
+ if (bigDecimal == null) {\r
+ return null;\r
+ }\r
+ return bigDecimal.setScale(rs.getInt(names[1]), BigDecimal.ROUND_HALF_UP);\r
+ }\r
+ \r
+\r
+ @Override\r
+ public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException {\r
+ if (value == null) {\r
+ StandardBasicTypes.BIG_DECIMAL.nullSafeSet(st, null, index, session);\r
+ StandardBasicTypes.INTEGER.nullSafeSet(st, null, index, session);\r
+ \r
+// st.setNull(index, Types.DECIMAL);\r
+// st.setNull(index + 1, Types.INTEGER);\r
+ } else {\r
+ BigDecimal bdec = (BigDecimal)value;\r
+// st.setBigDecimal(index, bdec);\r
+// st.setInt(index + 1, bdec.scale());\r
+ StandardBasicTypes.BIG_DECIMAL.nullSafeSet(st, bdec, index, session);\r
+ StandardBasicTypes.INTEGER.nullSafeSet(st, bdec.scale(), index + 1, session);\r
+ }\r
+ }\r
+ \r
+\r
+ @Override\r
+ public Object replace(Object arg0, Object arg1, Object arg2) throws HibernateException {\r
+ return arg0;\r
+ }\r
+\r
+ @Override\r
+ public Class<?> returnedClass() {\r
+ return BigDecimal.class;\r
+ }\r
+\r
+ @Override\r
+ public int[] sqlTypes() {\r
+ return SQL_TYPES;\r
+ }\r
+\r
+\r
+\r
+}\r
--- /dev/null
+//package eu.etaxonomy.cdm.hibernate;\r
+//\r
+//import static org.junit.Assert.*;\r
+//\r
+//import org.junit.Test;\r
+//\r
+//import static org.hamcrest.Matchers.*;\r
+//import static org.junit.Assert.*;\r
+//import static org.mockito.Mockito.*;\r
+//\r
+//import java.math.*;\r
+//import java.sql.*;\r
+//\r
+//import org.hibernate.usertype.*;\r
+//import org.junit.*;\r
+//import org.junit.runner.*;\r
+//import org.mockito.*;\r
+//import org.mockito.runners.*;\r
+//\r
+///**\r
+// * This software is public domain and carries NO WARRANTY.\r
+// *\r
+// * Patches, bug reports and feature requests welcome:\r
+// *\r
+// * https://bitbucket.org/ratkins/bigdecimalusertype/\r
+// */\r
+//@RunWith(MockitoJUnitRunner.class)\r
+//public class BigDecimalUserTypeTest {\r
+// \r
+// @Mock ResultSet rs;\r
+// @Mock PreparedStatement st;\r
+// \r
+// private UserType userType;\r
+//\r
+// @Before\r
+// public void setUp() throws Exception {\r
+// userType = new BigDecimalUserType();\r
+// }\r
+// \r
+// @Test\r
+// public void testNotMutable() throws Exception {\r
+// assertThat(userType.isMutable(), equalTo(false));\r
+// }\r
+// \r
+// @Test\r
+// public void testDeepCopyReturnsSelf() throws Exception {\r
+// BigDecimal foo = new BigDecimal("1.0");\r
+// assertThat((BigDecimal) userType.deepCopy(foo), sameInstance(foo));\r
+// }\r
+// \r
+// @Test\r
+// public void testReturnedClassIsBigDecimal() throws Exception {\r
+//// The Eclipse compiler passes this, the jdk on the command line one doesn't\r
+//// assertThat(userType.returnedClass(), equalTo(BigDecimal.class));\r
+// assertTrue(userType.returnedClass() == BigDecimal.class);\r
+// }\r
+// \r
+// @Test\r
+// public void testEqualsDelegatesToBigDecimalEquals() throws Exception {\r
+// assertThat(userType.equals(new BigDecimal("1.0"), new BigDecimal("1.0")), equalTo(true));\r
+// assertThat(userType.equals(new BigDecimal("1.0"), new BigDecimal("2.0")), equalTo(false));\r
+// assertThat(userType.equals(new BigDecimal("1.0"), new BigDecimal("1.00")), equalTo(false));\r
+// }\r
+// \r
+// @Test\r
+// public void testHashCodeDelegatesToBigDecimalHashCode() throws Exception {\r
+// assertThat(userType.hashCode(new BigDecimal("1.0")), equalTo(new BigDecimal("1.0").hashCode()));\r
+// assertThat(userType.hashCode(new BigDecimal("1.00")), not(equalTo(new BigDecimal("1.0").hashCode())));\r
+// assertThat(userType.hashCode(new BigDecimal("1.0")), not(equalTo(new BigDecimal("2.0").hashCode())));\r
+// }\r
+// \r
+// @Test\r
+// public void testAssembleReturnsSelf() throws Exception {\r
+// BigDecimal foo = new BigDecimal("1.0");\r
+// assertThat((BigDecimal) userType.assemble(foo, null), sameInstance(foo));\r
+// }\r
+// \r
+// @Test\r
+// public void testDisassembleReturnsSelf() throws Exception {\r
+// BigDecimal foo = new BigDecimal("1.0");\r
+// assertThat((BigDecimal) userType.disassemble(foo), sameInstance(foo));\r
+// assertThat((BigDecimal) userType.disassemble(null), equalTo((BigDecimal) null));\r
+// }\r
+// \r
+// @Test\r
+// public void testReplaceReturnsSelf() throws Exception {\r
+// BigDecimal foo = new BigDecimal("1.0");\r
+// assertThat((BigDecimal) userType.replace(foo, null, null), sameInstance(foo));\r
+// assertThat((BigDecimal) userType.disassemble(null), equalTo((BigDecimal) null));\r
+// }\r
+// \r
+// @Test\r
+// public void testSqlTypesAreNumberAndInteger() throws Exception {\r
+// assertThat(userType.sqlTypes().length, equalTo(2));\r
+// assertThat(userType.sqlTypes()[0], equalTo(Types.DECIMAL));\r
+// assertThat(userType.sqlTypes()[1], equalTo(Types.INTEGER));\r
+// }\r
+// \r
+// @Test\r
+// public void testNullSafeGet() throws Exception {\r
+// when(rs.getBigDecimal("a")).thenReturn(new BigDecimal("1.000000"));\r
+// when(rs.getInt("b")).thenReturn(1);\r
+// \r
+// assertThat((BigDecimal) userType.nullSafeGet(rs, new String[] {"a", "b"}, null), equalTo(new BigDecimal("1.0")));\r
+// }\r
+//\r
+// @Test\r
+// public void testNullSafeGetWithNull() throws Exception {\r
+// when(rs.getBigDecimal("a")).thenReturn(null);\r
+// when(rs.getInt("b")).thenReturn(0);\r
+// \r
+// assertThat((BigDecimal) userType.nullSafeGet(rs, new String[] {"a", "b"}, null), equalTo((BigDecimal) null));\r
+// }\r
+// \r
+// @Test\r
+// public void testNullSafeSet() throws Exception {\r
+// userType.nullSafeSet(st, new BigDecimal("1.000"), 17);\r
+// \r
+// verify(st).setBigDecimal(17, new BigDecimal("1.000"));\r
+// verify(st).setInt(18, 3);\r
+// }\r
+//\r
+// @Test\r
+// public void testNullSafeSetWithNull() throws Exception {\r
+// userType.nullSafeSet(st, null, 17);\r
+// \r
+// verify(st).setNull(17, Types.DECIMAL);\r
+// verify(st).setNull(18, Types.INTEGER);\r
+// }\r
+//}
\ No newline at end of file
--- /dev/null
+package eu.etaxonomy.cdm.test.function;\r
+\r
+import java.math.BigDecimal;\r
+\r
+public class BigDecimalTesting {\r
+\r
+ public static void main (String[] args){\r
+ BigDecimal a = new BigDecimal(2.05);\r
+// a = a.round(MathContext.DECIMAL128);\r
+ \r
+ System.out.println(a.toPlainString());\r
+ \r
+// a = a.multiply(BigDecimal);\r
+ System.out.println(a.toPlainString());\r
+ \r
+ System.out.println(a.toString());\r
+ \r
+ System.out.println(a.toEngineeringString());\r
+ BigDecimal b = a.setScale(7, BigDecimal.ROUND_HALF_DOWN);\r
+ \r
+ BigDecimal c = new BigDecimal(33.12345).setScale(7, BigDecimal.ROUND_HALF_UP);\r
+ a = a.add(c);\r
+ \r
+ \r
+ \r
+ System.out.println(a.toPlainString());\r
+ System.out.println(b.add(c).toPlainString());\r
+ \r
+ BigDecimal d = c.add(new BigDecimal(100));\r
+ System.out.println(d.toPlainString());\r
+\r
+ \r
+ }\r
+}\r