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/02/20 10:42:20 UTC
[1/2] isis git commit: ISIS-1042: trying to figure out how to honour
title()
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 <da...@haywood-associates.co.uk>
Authored: Thu Feb 19 18:30:33 2015 +0000
Committer: Dan Haywood <da...@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() {
[2/2] isis git commit: Merge branch 'ISIS-1042'
Posted by da...@apache.org.
Merge branch 'ISIS-1042'
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/d68ab628
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/d68ab628
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/d68ab628
Branch: refs/heads/master
Commit: d68ab6282b1931f5bd610072bd54fbad2ecff69e
Parents: d84c660 e8ceb01
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Feb 20 09:36:23 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Feb 20 09:36:23 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(-)
----------------------------------------------------------------------