You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2010/12/15 01:39:34 UTC
svn commit: r1049365 - in /incubator/isis/trunk:
core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/
viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/
viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/com...
Author: danhaywood
Date: Wed Dec 15 00:39:34 2010
New Revision: 1049365
URL: http://svn.apache.org/viewvc?rev=1049365&view=rev
Log:
more on ISIS-18; still failing under de_DE, but have put the infrastructure in place to pass the specified date/time format from the story over to the ValueSemanticsProvider's parser for dates and times
Modified:
incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java
incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/DateParser.java
incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/UsingIsisViewerPeer.java
Modified: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTemporal.java?rev=1049365&r1=1049364&r2=1049365&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTemporal.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTemporal.java Wed Dec 15 00:39:34 2010
@@ -40,13 +40,32 @@ import org.apache.isis.core.metamodel.fa
import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import com.google.inject.internal.Maps;
+
public abstract class ValueSemanticsProviderAbstractTemporal extends ValueSemanticsProviderAbstract implements DateValueFacet {
- //public static final String PREFERRED_FORMAT_KEY = ""
+ /**
+ * Introduced to allow BDD tests to provide a different format string
+ * "mid-flight".
+ */
+ public static void setFormat(String propertyType, String formatStr) {
+ FORMATS.get().put(propertyType, formatStr);
+ }
+
+ private final static ThreadLocal<Map<String,String>> FORMATS =
+ new ThreadLocal<Map<String,String>>() {
+ @Override
+ protected java.util.Map<String,String> initialValue() {
+ return Maps.newHashMap();
+ }
+ };
+
protected static final String ISO_ENCODING_FORMAT = "iso_encoding";
private static final TimeZone UTC_TIME_ZONE;
+ public final static String FORMAT_KEY_PREFIX = ConfigurationConstants.ROOT + "value.format.";
+
static {
TimeZone timeZone = TimeZone.getTimeZone("Etc/UTC");
if (timeZone == null) {
@@ -68,6 +87,9 @@ public abstract class ValueSemanticsProv
private final DateFormat encodingFormat;
protected DateFormat format;
+ private String configuredFormat;
+ private String formatKey;
+
/**
* Uses {@link #type()} as the facet type.
@@ -104,6 +126,16 @@ public abstract class ValueSemanticsProv
final RuntimeContext runtimeContext) {
super(facetType, holder, adaptedClass, typicalLength, immutable, equalByContent, defaultValue, configuration,
specificationLoader, runtimeContext);
+ configureFormats();
+
+ this.formatKey = FORMAT_KEY_PREFIX + propertyName;
+ configuredFormat = getConfiguration().getString(formatKey, defaultFormat());
+ buildFormat(configuredFormat);
+
+ encodingFormat = formats().get(ISO_ENCODING_FORMAT);
+ }
+
+ protected void configureFormats() {
final Map<String, DateFormat> formats = formats();
for (Map.Entry<String, DateFormat> mapEntry : formats.entrySet()) {
final DateFormat format = mapEntry.getValue();
@@ -112,15 +144,26 @@ public abstract class ValueSemanticsProv
format.setTimeZone(UTC_TIME_ZONE);
}
}
- final String defaultFormat = configuration.getString(ConfigurationConstants.ROOT + "value.format." + propertyName,
- defaultFormat());
- final String required = defaultFormat.toLowerCase().trim();
+ }
+
+ protected void buildDefaultFormatIfRequired() {
+ String currentlyConfiguredFormat = FORMATS.get().get(formatKey);
+ if ( currentlyConfiguredFormat==null || configuredFormat.equals(currentlyConfiguredFormat)) {
+ return;
+ }
+
+ // (re)create format
+ configuredFormat = currentlyConfiguredFormat;
+ buildFormat(configuredFormat);
+ }
+
+ protected void buildFormat(String configuredFormat) {
+ final Map<String, DateFormat> formats = formats();
+ final String required = configuredFormat.toLowerCase().trim();
format = formats.get(required);
if (format == null) {
- setMask(defaultFormat);
+ setMask(configuredFormat);
}
-
- encodingFormat = formats.get(ISO_ENCODING_FORMAT);
}
// //////////////////////////////////////////////////////////////////
@@ -129,6 +172,7 @@ public abstract class ValueSemanticsProv
@Override
protected Object doParse(final Object original, final String entry) {
+ buildDefaultFormatIfRequired();
final String dateString = entry.trim();
final String str = dateString.toLowerCase();
if (str.equals("today") || str.equals("now")) {
@@ -329,4 +373,5 @@ public abstract class ValueSemanticsProv
return false;
}
+
}
Modified: incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java?rev=1049365&r1=1049364&r2=1049365&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java (original)
+++ incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/Scenario.java Wed Dec 15 00:39:34 2010
@@ -15,6 +15,8 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
import org.apache.isis.core.metamodel.config.ConfigurationBuilder;
import org.apache.isis.core.metamodel.config.ConfigurationBuilderFileSystem;
+import org.apache.isis.core.metamodel.config.IsisConfiguration;
+import org.apache.isis.core.progmodel.facets.value.ValueSemanticsProviderAbstractTemporal;
import org.apache.isis.core.runtime.context.IsisContext;
import org.apache.isis.core.runtime.fixturesinstaller.FixturesInstallerNoop;
import org.apache.isis.core.runtime.installers.InstallerLookup;
@@ -32,9 +34,9 @@ import org.apache.isis.viewer.bdd.common
import org.apache.isis.viewer.bdd.common.components.BddInMemoryPersistenceMechanismInstaller;
import org.apache.isis.viewer.bdd.common.fixtures.DateParser;
import org.apache.isis.viewer.bdd.common.story.bootstrapping.OpenSession;
+import org.apache.isis.viewer.bdd.common.story.bootstrapping.RunViewer;
import org.apache.isis.viewer.bdd.common.story.bootstrapping.SetClock;
import org.apache.isis.viewer.bdd.common.story.bootstrapping.ShutdownIsis;
-import org.apache.isis.viewer.bdd.common.story.bootstrapping.RunViewer;
import org.apache.isis.viewer.bdd.common.story.registries.AliasRegistryDefault;
import org.apache.isis.viewer.bdd.common.story.registries.AliasRegistryHolder;
@@ -231,10 +233,20 @@ public class Scenario implements AliasRe
public void usingDateFormat(String dateFormatStr) {
dateParser.setDateFormat(dateFormatStr);
+ setTemporalFormat("date", dateFormatStr);
+ setTemporalFormat("datetime", dateParser.getCombinedMask());
+ setTemporalFormat("timestamp", dateParser.getCombinedMask());
}
public void usingTimeFormat(String timeFormatStr) {
dateParser.setTimeFormat(timeFormatStr);
+ setTemporalFormat("time", timeFormatStr);
+ setTemporalFormat("datetime", dateParser.getCombinedMask());
+ setTemporalFormat("timestamp", dateParser.getCombinedMask());
+ }
+
+ private void setTemporalFormat(String propertyType, String formatStr) {
+ ValueSemanticsProviderAbstractTemporal.setFormat(propertyType, formatStr);
}
public DateParser getDateParser() {
@@ -274,6 +286,10 @@ public class Scenario implements AliasRe
return IsisContext.getTransactionManager();
}
+ protected IsisConfiguration getConfiguration() {
+ return IsisContext.getConfiguration();
+ }
+
}
Modified: incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/DateParser.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/DateParser.java?rev=1049365&r1=1049364&r2=1049365&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/DateParser.java (original)
+++ incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/DateParser.java Wed Dec 15 00:39:34 2010
@@ -73,7 +73,7 @@ public class DateParser {
private DateFormat getDateAndTimeFormat() {
if (dateAndTimeFormat == null) {
- dateAndTimeFormat = getUTCDateFormat(combinedMask());
+ dateAndTimeFormat = getUTCDateFormat(getCombinedMask());
}
return dateAndTimeFormat;
}
@@ -98,13 +98,13 @@ public class DateParser {
return dateFormat;
}
- private String combinedMask() {
+ public String getCombinedMask() {
return MessageFormat.format("{0} {1}", dateMask, timeMask);
}
@Override
public String toString() {
- return combinedMask();
+ return getCombinedMask();
}
}
Modified: incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/UsingIsisViewerPeer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/UsingIsisViewerPeer.java?rev=1049365&r1=1049364&r2=1049365&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/UsingIsisViewerPeer.java (original)
+++ incubator/isis/trunk/viewer/bdd/common/src/main/java/org/apache/isis/viewer/bdd/common/fixtures/UsingIsisViewerPeer.java Wed Dec 15 00:39:34 2010
@@ -272,6 +272,7 @@ public class UsingIsisViewerPeer extends
performCommand.perform(performContext);
} catch (final RuntimeException ex) {
// handler should have colored in invalid cells.
+ Exception e = ex;
}
aliasResultFromPerformCommand(performCommand, aliasAs);
}