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