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);
     }