Repository: isis
Updated Branches:
  refs/heads/master d84c66090 -> d68ab6282


ISIS-1042: trying to figure out how to honour title()

Turns out not that easy to do, because need round-tripping in order to parse 
the value


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

Branch: refs/heads/master
Commit: e8ceb012b361b82e042aba7929c106f85d0e1863
Parents: d84c660
Author: Dan Haywood <d...@haywood-associates.co.uk>
Authored: Thu Feb 19 18:30:33 2015 +0000
Committer: Dan Haywood <d...@haywood-associates.co.uk>
Committed: Fri Feb 20 09:25:33 2015 +0000

----------------------------------------------------------------------
 .../enums/EnumValueSemanticsProvider.java       | 48 +++++++++++++-
 .../ValueSemanticsProviderAndFacetAbstract.java |  6 +-
 .../scalars/IsisConverterLocator.java           | 12 +++-
 .../scalars/jdkmath/BigIntegerConverter.java    | 68 ++++++++++++++++++++
 .../jdkmath/JavaMathBigIntegerPanel.java        |  1 -
 .../jdkmath/JavaMathBigIntegerPanelFactory.java | 53 ---------------
 6 files changed, 129 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e8ceb012/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
index 7bae5ad..a7c3cd0 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
@@ -19,18 +19,25 @@
 
 package org.apache.isis.core.metamodel.facets.object.choices.enums;
 
+import java.lang.reflect.Method;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.profiles.Localization;
+import org.apache.isis.applib.services.i18n.TranslatableString;
+import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.lang.MethodExtensions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
 import 
org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import 
org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import 
org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderContext;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
 
 public class EnumValueSemanticsProvider<T extends Enum<T>> extends 
ValueSemanticsProviderAndFacetAbstract<T> implements EnumFacet {
 
+
     private static Class<? extends Facet> type() {
         return EnumFacet.class;
     }
@@ -48,7 +55,12 @@ public class EnumValueSemanticsProvider<T extends Enum<T>> 
extends ValueSemantic
         }
         return max;
     }
-    
+
+
+    private static final String TITLE = "title";
+
+    private final Method titleMethod;
+
     /**
      * Required because {@link Parser} and {@link EncoderDecoder}.
      */
@@ -64,12 +76,25 @@ public class EnumValueSemanticsProvider<T extends Enum<T>> 
extends ValueSemantic
                 EqualByContent.HONOURED, 
                 defaultFor(adaptedClass), 
                 configuration, context);
+
+        titleMethod = MethodFinderUtils.findMethod(
+                getAdaptedClass(), MethodScope.OBJECT,
+                TITLE,
+                new Class<?>[]{String.class, TranslatableString.class},
+                null);
+
     }
 
     @Override
     protected T doParse(final Object context, final String entry) {
         final T[] enumConstants = getAdaptedClass().getEnumConstants();
         for (final T enumConstant : enumConstants) {
+            if (doEncode(enumConstant).equals(entry)) {
+                return enumConstant;
+            }
+        }
+        // fallback
+        for (final T enumConstant : enumConstants) {
             if (enumConstant.toString().equals(entry)) {
                 return enumConstant;
             }
@@ -87,8 +112,29 @@ public class EnumValueSemanticsProvider<T extends Enum<T>> 
extends ValueSemantic
         return doParse(null, data);
     }
 
+
     @Override
     protected String titleString(final Object object, final Localization 
localization) {
+        if (titleMethod != null) {
+            final TranslationService translationService = 
getDependencyInjector().lookupService(TranslationService.class);
+            // sadness: same as in TranslationFactory
+            final String translationContext = 
titleMethod.getDeclaringClass().getName() + "#" + titleMethod.getName() + "()";
+
+            try {
+                final Object returnValue = 
MethodExtensions.invoke(titleMethod, object);
+                if(returnValue instanceof String) {
+                    return (String) returnValue;
+                }
+                if(returnValue instanceof TranslatableString) {
+                    final TranslatableString ts = (TranslatableString) 
returnValue;
+                    return ts.translate(translationService, 
translationContext);
+                }
+                return null;
+            } catch (final RuntimeException ex) {
+                // fall through
+            }
+        }
+
         return object.toString();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e8ceb012/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
index 818eeb9..4099eb6 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
@@ -23,7 +23,11 @@ import java.text.DecimalFormat;
 import java.text.Format;
 import java.text.NumberFormat;
 import java.util.Locale;
-import org.apache.isis.applib.adapters.*;
+import org.apache.isis.applib.adapters.DefaultsProvider;
+import org.apache.isis.applib.adapters.EncoderDecoder;
+import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.adapters.Parser2;
+import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.applib.profiles.Localization;
 import 
org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;

http://git-wip-us.apache.org/repos/asf/isis/blob/e8ceb012/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 aeb4c91..e06a542 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
@@ -14,7 +14,7 @@ import 
org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.DateConverte
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.DateConverterForJavaSqlTimestamp;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.DateConverterForJavaUtilDate;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath.BigDecimalConverterWithScale;
-import 
org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath.JavaMathBigIntegerPanelFactory;
+import 
org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath.BigIntegerConverter;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.jodatime.DateConverterForJodaDateTime;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.jodatime.DateConverterForJodaLocalDate;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.jodatime.DateConverterForJodaLocalDateTime;
@@ -40,9 +40,15 @@ public class IsisConverterLocator {
             return null;
         }
 
+        // explicitly exclude enums; this will force the titleString
+        // to be used from Isis' EnumValueSemanticsProvider
+        final Class<?> correspondingClass = 
objectSpecification.getCorrespondingClass();
+        if(Enum.class.isAssignableFrom(correspondingClass)) {
+            return null;
+        }
+
         final RenderedAdjustedFacet renderedAdjustedFacet = 
objectSpecification.getFacet(RenderedAdjustedFacet.class);
         final int adjustBy = renderedAdjustedFacet != null ? 
renderedAdjustedFacet.value() : 0;
-        final Class<?> correspondingClass = 
objectSpecification.getCorrespondingClass();
 
         IConverter converter = null;
         if (java.util.Date.class == correspondingClass) {
@@ -62,7 +68,7 @@ public class IsisConverterLocator {
         } else if (java.sql.Timestamp.class == correspondingClass) {
             converter = new 
DateConverterForJavaSqlTimestamp(wicketViewerSettings, adjustBy);
         } else if (java.math.BigInteger.class == correspondingClass) {
-            converter = 
JavaMathBigIntegerPanelFactory.BigIntegerConverter.INSTANCE;
+            converter = BigIntegerConverter.INSTANCE;
         } else if (java.math.BigDecimal.class == correspondingClass) {
             final BigDecimalValueFacet facet = 
objectSpecification.getFacet(BigDecimalValueFacet.class);
             Integer scale = null;

http://git-wip-us.apache.org/repos/asf/isis/blob/e8ceb012/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigIntegerConverter.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigIntegerConverter.java
 
b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigIntegerConverter.java
new file mode 100644
index 0000000..3f581b4
--- /dev/null
+++ 
b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigIntegerConverter.java
@@ -0,0 +1,68 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
+
+import java.math.BigInteger;
+import java.util.Locale;
+import org.apache.wicket.util.convert.ConversionException;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.AbstractIntegerConverter;
+import org.apache.wicket.util.string.Strings;
+
+public final class BigIntegerConverter extends 
AbstractIntegerConverter<BigInteger> {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * The singleton instance for a big integer converter
+     * (cf the Wicket subclasses)
+     */
+    public static final IConverter<BigInteger> INSTANCE = new 
BigIntegerConverter();
+
+    @Override
+    public BigInteger convertToObject(String value, Locale locale) throws 
ConversionException {
+        if (Strings.isEmpty(value))
+        {
+            return null;
+        }
+
+        final Number number = parse(value, -Double.MAX_VALUE, 
Double.MAX_VALUE, locale);
+
+        if (number instanceof BigInteger)
+        {
+            return (BigInteger)number;
+        }
+        else if (number instanceof Long)
+        {
+            return BigInteger.valueOf(number.longValue());
+        }
+        else if (number instanceof Integer)
+        {
+            return BigInteger.valueOf(number.intValue());
+        }
+        else
+        {
+            return new BigInteger(value);
+        }
+    }
+
+    @Override
+    protected Class<BigInteger> getTargetType() {
+        return BigInteger.class;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/e8ceb012/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
 
b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
index a696fe4..d68038d 100644
--- 
a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
+++ 
b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
@@ -30,7 +30,6 @@ import org.apache.wicket.util.convert.IConverter;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
-import 
org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath.JavaMathBigIntegerPanelFactory.BigIntegerConverter;
 
 /**
  * Panel for rendering scalars of type {@link BigInteger}.

http://git-wip-us.apache.org/repos/asf/isis/blob/e8ceb012/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
 
b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
index bd10c2b..b822200 100644
--- 
a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
+++ 
b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
@@ -19,18 +19,7 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Locale;
-
 import org.apache.wicket.Component;
-import org.apache.wicket.util.convert.ConversionException;
-import org.apache.wicket.util.convert.IConverter;
-import org.apache.wicket.util.convert.converter.AbstractIntegerConverter;
-import org.apache.wicket.util.convert.converter.BigDecimalConverter;
-import org.apache.wicket.util.convert.converter.IntegerConverter;
-import org.apache.wicket.util.string.Strings;
-
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.ComponentFactoryScalarAbstract;
@@ -40,48 +29,6 @@ import 
org.apache.isis.viewer.wicket.ui.components.scalars.ComponentFactoryScala
  */
 public class JavaMathBigIntegerPanelFactory extends 
ComponentFactoryScalarAbstract {
 
-    public static final class BigIntegerConverter extends 
AbstractIntegerConverter<BigInteger> {
-        private static final long serialVersionUID = 1L;
-
-        /**
-         * The singleton instance for a big integer converter
-         * (cf the Wicket subclasses)
-         */
-        public static final IConverter<BigInteger> INSTANCE = new 
BigIntegerConverter();
-
-        @Override
-        public BigInteger convertToObject(String value, Locale locale) throws 
ConversionException {
-            if (Strings.isEmpty(value))
-            {
-                return null;
-            }
-
-            final Number number = parse(value, -Double.MAX_VALUE, 
Double.MAX_VALUE, locale);
-
-            if (number instanceof BigInteger)
-            {
-                return (BigInteger)number;
-            }
-            else if (number instanceof Long)
-            {
-                return BigInteger.valueOf(number.longValue());
-            }
-            else if (number instanceof Integer)
-            {
-                return BigInteger.valueOf(number.intValue());
-            }
-            else
-            {
-                return new BigInteger(value);
-            }
-        }
-
-        @Override
-        protected Class<BigInteger> getTargetType() {
-            return BigInteger.class;
-        }
-    }
-
     private static final long serialVersionUID = 1L;
 
     public JavaMathBigIntegerPanelFactory() {

Reply via email to