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 2015/04/24 13:19:23 UTC

isis git commit: ISIS-1138: extending IsisConverterLocator to use Isis API for value types...

Repository: isis
Updated Branches:
  refs/heads/ISIS-1138 [created] 099608dcc


ISIS-1138: extending IsisConverterLocator to use Isis API for value types...

... however this doesn't seem to be sufficient for this particular issue, as the converterLocator is never called.  Not sure why; the ValuePanel's setText on the Wicket model isn't called either, that's probably the root cause


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/099608dc
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/099608dc
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/099608dc

Branch: refs/heads/ISIS-1138
Commit: 099608dccc75116e92bc6b7c38d0a327035253c6
Parents: ee834d9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 24 12:19:08 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Apr 24 12:19:08 2015 +0100

----------------------------------------------------------------------
 .../scalars/IsisConverterLocator.java           | 50 +++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/099608dc/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java
index 95e1d23..a1dbfa1 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/IsisConverterLocator.java
@@ -18,13 +18,23 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
+import java.util.Locale;
+import java.util.TimeZone;
+
 import org.apache.wicket.Application;
 import org.apache.wicket.IConverterLocator;
+import org.apache.wicket.util.convert.ConversionException;
 import org.apache.wicket.util.convert.IConverter;
+
+import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
 import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.DateConverterForApplibDate;
 import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.DateConverterForApplibDateTime;
@@ -68,6 +78,8 @@ public class IsisConverterLocator {
         final RenderedAdjustedFacet renderedAdjustedFacet = objectSpecification.getFacet(RenderedAdjustedFacet.class);
         final int adjustBy = renderedAdjustedFacet != null ? renderedAdjustedFacet.value() : 0;
 
+        final ParseableFacet parseableFacet = objectSpecification.getFacet(ParseableFacet.class);
+
         IConverter converter = null;
         if (java.util.Date.class == correspondingClass) {
             converter = new DateConverterForJavaUtilDate(wicketViewerSettings, adjustBy);
@@ -94,11 +106,47 @@ public class IsisConverterLocator {
                 scale = facet.getScale();
             }
             converter = new BigDecimalConverterWithScale(scale).forViewMode();
+        } else if(parseableFacet != null){
+            // try to parse (as a value object) using the Isis API.
+            converter = new IConverter() {
+                @Override public Object convertToObject(final String value, final Locale locale) throws ConversionException {
+                    if(value == null) {
+                        return null;
+                    }
+                    final ObjectAdapter parsedObjectAdapter = parseableFacet.parseTextEntry(objectAdapter, value, new Localization() {
+                        @Override public Locale getLocale() {
+                            return locale;
+                        }
+
+                        @Override public TimeZone getTimeZone() {
+                            // TODO: need a TimeZoneProvider service, cf LocaleProvider.
+                            return TimeZone.getDefault();
+                        }
+                    });
+                    return parsedObjectAdapter != null? parsedObjectAdapter.getObject(): null;
+                }
+
+                @Override public String convertToString(final Object value, final Locale locale) {
+                    if(value == null) {
+                        return null;
+                    }
+                    final ObjectAdapter obj = getAdapterManager().adapterFor(value);
+                    // TODO: the Isis API doesn't deal with locale (or timezone) so isn't symmetrical :-(
+                    return parseableFacet.parseableTitle(obj);
+                }
+            };
         } else if (Application.exists()) {
             final IConverterLocator converterLocator = Application.get().getConverterLocator();
             converter = converterLocator.getConverter(correspondingClass);
         }
-
         return converter;
     }
+
+    static AdapterManagerDefault getAdapterManager() {
+        return getPersistenceSession().getAdapterManager();
+    }
+
+    static PersistenceSession getPersistenceSession() {
+        return IsisContext.getPersistenceSession();
+    }
 }