You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ke...@apache.org on 2011/04/01 20:15:17 UTC
svn commit: r1087836 - in
/incubator/isis/trunk/runtimes/dflt/objectstores/sql:
impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/
impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/
tests-common/src/main/java/org/ap...
Author: kevin
Date: Fri Apr 1 18:15:16 2011
New Revision: 1087836
URL: http://svn.apache.org/viewvc?rev=1087836&view=rev
Log:
Hopefully found workaround to bypass java.util.Date's dependence on local time-zone. Tests all seem to work against +ve and -ve time-zones wrt GMT.
Modified:
incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/FieldMappingLookup.java
incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/Results.java
incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/VersionMapping.java
incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcDateMapper.java
incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcResults.java
incubator/isis/trunk/runtimes/dflt/objectstores/sql/tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.java
Modified: incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/FieldMappingLookup.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/FieldMappingLookup.java?rev=1087836&r1=1087835&r2=1087836&view=diff
==============================================================================
--- incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/FieldMappingLookup.java (original)
+++ incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/FieldMappingLookup.java Fri Apr 1 18:15:16 2011
@@ -23,17 +23,17 @@ package org.apache.isis.runtimes.dflt.ob
import java.util.HashMap;
import java.util.Map;
+import org.apache.log4j.Logger;
+
+import org.apache.isis.core.commons.exceptions.NotYetImplementedException;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.JdbcGeneralValueMapper;
import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMappingFactory;
import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.ObjectReferenceMapping;
import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.ObjectReferenceMappingFactory;
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.exceptions.NotYetImplementedException;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.runtimes.dflt.runtime.context.IsisContext;
-import org.apache.log4j.Logger;
public class FieldMappingLookup {
@@ -52,12 +52,12 @@ public class FieldMappingLookup {
factory = new JdbcGeneralValueMapper.Factory("VARCHAR(65)");
addFieldMappingFactory(spec, factory);
return factory.createFieldMapping(field);
- } else if (true /* TODO test for reference */) {
+ } else {//if (true /* TODO test for reference */) {
factory = referenceFieldMappingfactory;
addFieldMappingFactory(spec, factory);
return factory.createFieldMapping(field);
- } else {
- throw new IsisException("No mapper for " + spec + " (no default mapper)");
+ //} else {
+ //throw new IsisException("No mapper for " + spec + " (no default mapper)");
}
}
@@ -72,16 +72,16 @@ public class FieldMappingLookup {
} else if (spec.isEncodeable()) {
// TODO add generic encodeable mapping
throw new NotYetImplementedException();
- } else if (true /* TODO test for reference */) {
+ } else {// if (true /* TODO test for reference */) {
factory = objectReferenceMappingfactory;
// add(spec, factory);
return factory.createReferenceMapping(columnName, spec); // TODO: here
- } else {
- throw new IsisException("No mapper for " + spec + " (no default mapper)");
+ //} else {
+ // throw new IsisException("No mapper for " + spec + " (no default mapper)");
}
}
- public void addFieldMappingFactory(final Class valueType, final FieldMappingFactory mapper) {
+ public void addFieldMappingFactory(final Class<?> valueType, final FieldMappingFactory mapper) {
ObjectSpecification spec = IsisContext.getSpecificationLoader().loadSpecification(valueType);
addFieldMappingFactory(spec, mapper);
}
Modified: incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/Results.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/Results.java?rev=1087836&r1=1087835&r2=1087836&view=diff
==============================================================================
--- incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/Results.java (original)
+++ incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/Results.java Fri Apr 1 18:15:16 2011
@@ -23,6 +23,7 @@ package org.apache.isis.runtimes.dflt.ob
import java.util.Date;
+
public interface Results {
void close();
@@ -35,7 +36,9 @@ public interface Results {
boolean next();
- Date getDate(String lastActivityDateColumn);
+ Date getJavaDateOnly(String lastActivityDateColumn);
+ Date getJavaDateTime(String lastActivityDateColumn);
Object getObject(String column);
+
}
Modified: incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/VersionMapping.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/VersionMapping.java?rev=1087836&r1=1087835&r2=1087836&view=diff
==============================================================================
--- incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/VersionMapping.java (original)
+++ incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/VersionMapping.java Fri Apr 1 18:15:16 2011
@@ -97,7 +97,7 @@ public class VersionMapping {
public Version getLock(Results rs) {
long number = rs.getLong(versionColumn);
String user = rs.getString(lastActivityUserColumn);
- Date time = rs.getDate(lastActivityDateColumn);
+ Date time = rs.getJavaDateTime(lastActivityDateColumn);
Version version = new SerialNumberVersion(number, user, time);
return version;
}
Modified: incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcDateMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcDateMapper.java?rev=1087836&r1=1087835&r2=1087836&view=diff
==============================================================================
--- incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcDateMapper.java (original)
+++ incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcDateMapper.java Fri Apr 1 18:15:16 2011
@@ -23,6 +23,7 @@ package org.apache.isis.runtimes.dflt.ob
import org.joda.time.LocalDate;
import org.apache.isis.applib.ApplicationException;
+import org.apache.isis.applib.PersistFailedException;
import org.apache.isis.applib.value.Date;
import org.apache.isis.core.commons.exceptions.IsisApplicationException;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -74,26 +75,25 @@ public class JdbcDateMapper extends Abst
java.util.Date javaDateValue;
String columnName = Sql.sqlFieldName(field.getId());
- String encodedValue = (String) rs.getString(columnName);
-
- javaDateValue = rs.getDate(columnName);
-
+ javaDateValue = rs.getJavaDateOnly(columnName);
ObjectAdapter restoredValue;
if (javaDateValue == null) {
restoredValue = null;
} else {
- if (field.getSpecification().getFullIdentifier() == "java.sql.Date"){
- // 2011-04-08 = 1302220800000L
+ final Class<?> correspondingClass = field.getSpecification().getCorrespondingClass();
+ if (correspondingClass == java.util.Date.class || correspondingClass == java.sql.Date.class){
+ // 2011-04-08 = 1270684800000
restoredValue = IsisContext.getPersistenceSession().getAdapterManager().
- adapterFor(javaDateValue);
- } else if (field.getSpecification().getFullIdentifier() == Date.class.getCanonicalName()){
- // 2010-3-5 = 1267747200000 millis
- Date newDateValue = new Date(javaDateValue.getTime());
+ adapterFor(javaDateValue);
+ } else if (correspondingClass == Date.class){
+ // 2010-03-05 = 1267747200000
+ Date dateValue;
+ dateValue = new Date(javaDateValue);
restoredValue = IsisContext.getPersistenceSession().getAdapterManager().
- adapterFor(newDateValue);
+ adapterFor(dateValue);
} else {
- throw new ApplicationException("Unhandled date type: "+field.getSpecification().getFullIdentifier());
+ throw new PersistFailedException("Unhandled date type: "+correspondingClass.getCanonicalName());
}
}
((OneToOneAssociation) field).initAssociation(object, restoredValue);
@@ -102,20 +102,6 @@ public class JdbcDateMapper extends Abst
@Override
public ObjectAdapter setFromDBColumn(final String encodedValue, final ObjectAssociation field) {
throw new ApplicationException("Should never get called!");
- /*
- String valueString, year, month, day;
- if (encodedValue.length() > 9) {
- // convert date to yyyymmdd
- year = encodedValue.substring(0, 4);
- month = encodedValue.substring(5, 7);
- day = encodedValue.substring(8, 10);
- valueString = year + month + day;
- } else {
- valueString = encodedValue;
- }
- // Caution: ValueSemanticsProviderAbstractTemporal explicitly sets the timezone to UTC
- return field.getSpecification().getFacet(EncodableFacet.class).fromEncodedString(valueString);
- */
}
public String columnType() {
Modified: incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcResults.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcResults.java?rev=1087836&r1=1087835&r2=1087836&view=diff
==============================================================================
--- incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcResults.java (original)
+++ incubator/isis/trunk/runtimes/dflt/objectstores/sql/impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcResults.java Fri Apr 1 18:15:16 2011
@@ -23,9 +23,10 @@ package org.apache.isis.runtimes.dflt.ob
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.Calendar;
import java.util.Date;
-import java.util.TimeZone;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
import org.apache.isis.runtimes.dflt.objectstores.sql.SqlObjectStoreException;
@@ -80,9 +81,24 @@ public class JdbcResults implements Resu
}
}
- public Date getDate(final String columnName) {
+ public Date getJavaDateOnly(final String columnName) {
+ try {
+ // 2010-03-05 = 1267747200000
+ // 2010-04-08 = 1270684800000
+ // This is really painful! Java refuses to create java.util.Date in UTC!
+ // It creates java.util.Dates in Local time-zone, but assumes the DB date is UTC.
+ String string = set.getString(columnName);
+ final DateTime utcDate = new DateTime(string, DateTimeZone.UTC);
+ final java.sql.Date date = new java.sql.Date(utcDate.getMillis());
+ return date;
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException(e);
+ }
+ }
+
+ public java.util.Date getJavaDateTime(String columnName){
try {
- return set.getDate(columnName, Calendar.getInstance(TimeZone.getTimeZone("UTC")));
+ return set.getDate(columnName);
} catch (SQLException e) {
throw new SqlObjectStoreException(e);
}
Modified: incubator/isis/trunk/runtimes/dflt/objectstores/sql/tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/runtimes/dflt/objectstores/sql/tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.java?rev=1087836&r1=1087835&r2=1087836&view=diff
==============================================================================
--- incubator/isis/trunk/runtimes/dflt/objectstores/sql/tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.java (original)
+++ incubator/isis/trunk/runtimes/dflt/objectstores/sql/tests-common/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/common/SqlIntegrationTestCommon.java Fri Apr 1 18:15:16 2011
@@ -69,7 +69,6 @@ public abstract class SqlIntegrationTest
private static final Logger LOG = Logger.getLogger(SqlIntegrationTestCommon.class);
- //private static final TimeZone UTC_TIME_ZONE;
//private static final TimeZone GMTm2_TIME_ZONE;
// Helper values
@@ -80,8 +79,12 @@ public abstract class SqlIntegrationTest
*
// For testing -ve offset timezone local regions.
GMTm2_TIME_ZONE = TimeZone.getTimeZone("GMT-0200");
+ //GMTm2_TIME_ZONE = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(GMTm2_TIME_ZONE);
+ *
+ */
+ /*
TimeZone timeZone = TimeZone.getTimeZone("Etc/UTC");
if (timeZone == null) {
timeZone = TimeZone.getTimeZone("UTC");
@@ -98,12 +101,13 @@ public abstract class SqlIntegrationTest
cal.set(Calendar.MONTH, 4-1);
cal.set(Calendar.DAY_OF_MONTH, 8);
*/
- // 2011-4-8 = 1302220800000
- sqlDate = new java.sql.Date( 1302220800000L);// cal.getTimeInMillis());
+ // 2011-4-8 = 1270684800000
+ Date date20100308 = new Date(2010, 4, 8);
+ sqlDate = new java.sql.Date( date20100308.getMillisSinceEpoch());
}
//{{ Setup
- private static final Date applibDate = new Date(2010, 3, 5);
+ private static final Date applibDate = new Date(2010, 3, 5); // 2010-03-05 = 1267747200000
private static final DateTime dateTime = new DateTime(2010, 3, 5, 1, 23);
private static final TimeStamp timeStamp = new TimeStamp(
dateTime.longValue());
@@ -347,10 +351,10 @@ public abstract class SqlIntegrationTest
LOG.log(Level.INFO, "sqlDataClass.getDate().getTime() as Long: "+sqlDataClass.getDate().getMillisSinceEpoch());
if (!applibDate.isEqualTo(sqlDataClass.getDate())){
- //fail("Applib date: Test '2011-3-5', expected " + applibDate.toString() + ", but got "
- // + sqlDataClass.getDate().toString()+". Check log for more info.");
- LOG.log(Level.INFO, "Applib date: Test '2011-3-5', expected " + applibDate.toString() + ", but got "
+ fail("Applib date: Test '2011-3-5', expected " + applibDate.toString() + ", but got "
+ sqlDataClass.getDate().toString()+". Check log for more info.");
+ //LOG.log(Level.INFO, "Applib date: Test '2011-3-5', expected " + applibDate.toString() + ", but got "
+ // + sqlDataClass.getDate().toString()+". Check log for more info.");
} else {
LOG.log(Level.INFO, "SQL applib.value.date: test passed! Woohoo!");
}
@@ -379,11 +383,10 @@ public abstract class SqlIntegrationTest
LOG.log(Level.INFO, "sqlDataClass.getSqlDate().getTime() as Long:"+sqlDataClass.getSqlDate().getTime());
if (sqlDate.compareTo(sqlDataClass.getSqlDate()) != 0){
- //TODO: Must still confirm about the timezone shift.
- //fail("SQL date: Test '2011-4-8', expected " + sqlDate.toString() + ", but got "
- // + sqlDataClass.getSqlDate().toString() +". Check log for more info.");
- LOG.log(Level.INFO, "SQL date: Test '2011-4-8', expected " + sqlDate.toString() + ", and got "
- + sqlDataClass.getSqlDate().toString() +". Check log for more info.");
+ fail("SQL date: Test '2011-4-8', expected " + sqlDate.toString() + ", but got "
+ + sqlDataClass.getSqlDate().toString() +". Check log for more info.");
+ //LOG.log(Level.INFO, "SQL date: Test '2011-4-8', expected " + sqlDate.toString() + ", and got "
+ // + sqlDataClass.getSqlDate().toString() +". Check log for more info.");
} else {
LOG.log(Level.INFO, "SQL date: test passed! Woohoo!");
}
@@ -401,17 +404,19 @@ public abstract class SqlIntegrationTest
*
*/
/*
+ * *
SqlDataClass sqlDataClass = SqlIntegrationTestSingleton.getPerson();
DateTime dateTime = sqlDataClass.getDateTime(); // new DateTime(2010, 3, 5, 1, 23);
Date date = sqlDataClass.getDate(); // new Date(2010, 3, 5);
- java.sql.Date sqlDate = sqlDataClass.getSqlDate(); // "2010-03-05"
-
+
+ //java.sql.Date sqlDate = sqlDataClass.getSqlDate(); // "2010-03-05"
//assertTrue("dateTime's value ("+dateTime.dateValue()+
- // ") should be after java.sql.date's ("+ date +")", dateTime.dateValue().after(sqlDate));
+ // ") should be after java.sql.date's ("+ sqlDate +")", dateTime.dateValue().after(sqlDate));
- //assertTrue("dateTime's value ("+dateTime.dateValue()+
- // ") should be after date's ("+ date +")", dateTime.dateValue().after(date.dateValue()));
+ assertTrue("dateTime's value ("+dateTime.dateValue()+
+ ") should be after date's ("+ date +")", dateTime.dateValue().after(date.dateValue()));
+ *
*/
}