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 2018/01/05 15:12:58 UTC
[isis] 01/01: ISIS-1720: starts refactoring,
but abandoned because...
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-1720-dynamic-name
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 162bef94e3b79d39308ae67a844a6a8393ac5853
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Sep 18 10:36:02 2017 +0100
ISIS-1720: starts refactoring, but abandoned because...
... because necessary to pass the target instance into the NamedFacet everywhere
---
.../staticmethod/NamedFacetInstanceMethod.java | 67 ++++++++++++++++++++++
...> NamedFacetStaticOrInstanceMethodFactory.java} | 42 +++++++++-----
.../dflt/ProgrammingModelFacetsJava5.java | 4 +-
.../actions/ActionMethodsFacetFactoryTest.java | 5 +-
.../CollectionFieldMethodsFacetFactoryTest.java | 4 +-
.../PropertyMethodsFacetFactoryTest.java | 4 +-
6 files changed, 103 insertions(+), 23 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetInstanceMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetInstanceMethod.java
new file mode 100644
index 0000000..51fb037
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetInstanceMethod.java
@@ -0,0 +1,67 @@
+/*
+ * 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.core.metamodel.facets.members.named.staticmethod;
+
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+
+public class NamedFacetInstanceMethod extends FacetAbstract implements NamedFacet, ImperativeFacet {
+
+ private final Method method;
+
+ public static Class<? extends Facet> type() {
+ return NamedFacet.class;
+ }
+
+ public NamedFacetInstanceMethod(final Method method, final FacetHolder holder) {
+ super(type(), holder, Derivation.NOT_DERIVED);
+ this.method = method;
+ }
+
+ /**
+ * Returns a singleton list of the {@link Method} provided in the
+ * constructor.
+ */
+ @Override
+ public List<Method> getMethods() {
+ return Collections.singletonList(method);
+ }
+
+ @Override
+ public Intent getIntent(final Method method) {
+ return Intent.UI_HINT;
+ }
+
+ @Override
+ public String value() {
+ return method.invoke();
+ }
+
+ @Override public boolean escaped() {
+ return true;
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticOrInstanceMethodFactory.java
similarity index 75%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticMethodFactory.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticOrInstanceMethodFactory.java
index 8f3f23b..3b6ad0b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/staticmethod/NamedFacetStaticOrInstanceMethodFactory.java
@@ -43,10 +43,9 @@ import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorFor
* Sets up a {@link NamedFacet} if a {@value MethodPrefixConstants#NAME_PREFIX}
* -prefixed method is present.
*
- * @deprecated
+ * Can be either static (deprecated) or instance.
*/
-@Deprecated
-public class NamedFacetStaticMethodFactory extends MethodPrefixBasedFacetFactoryAbstract implements MetaModelValidatorRefiner {
+public class NamedFacetStaticOrInstanceMethodFactory extends MethodPrefixBasedFacetFactoryAbstract implements MetaModelValidatorRefiner {
private static final String[] PREFIXES = { MethodPrefixConstants.NAME_PREFIX };
@@ -56,7 +55,7 @@ public class NamedFacetStaticMethodFactory extends MethodPrefixBasedFacetFactory
* Note that the {@link Facet}s registered are the generic ones from
* noa-architecture (where they exist)
*/
- public NamedFacetStaticMethodFactory() {
+ public NamedFacetStaticOrInstanceMethodFactory() {
super(FeatureType.MEMBERS, OrphanValidation.VALIDATE, PREFIXES);
}
@@ -67,7 +66,7 @@ public class NamedFacetStaticMethodFactory extends MethodPrefixBasedFacetFactory
@Override
public void process(final ProcessMethodContext processMethodContext) {
- // namedXxx()
+ // nameXxx()
attachNamedFacetIfNamedMethodIsFound(processMethodContext);
}
@@ -77,18 +76,33 @@ public class NamedFacetStaticMethodFactory extends MethodPrefixBasedFacetFactory
final String capitalizedName = StringExtensions.asJavaBaseNameStripAccessorPrefixIfRequired(method.getName());
final Class<?> cls = processMethodContext.getCls();
- final Method nameMethod = MethodFinderUtils.findMethod(cls, MethodScope.CLASS, MethodPrefixConstants.NAME_PREFIX + capitalizedName, String.class, new Class[0]);
- if (nameMethod == null) {
- return;
+ final FacetHolder facetHolder = processMethodContext.getFacetHolder();
+ final NamedFacet facet;
+
+ // search for static method first (deprecated functionality)
+ final Method staticNameMethod = MethodFinderUtils.findMethod(cls, MethodScope.CLASS, MethodPrefixConstants.NAME_PREFIX + capitalizedName, String.class, new Class[0]);
+ if (staticNameMethod != null) {
+ processMethodContext.removeMethod(staticNameMethod);
+
+ final String name = invokeNameMethod(staticNameMethod);
+ facet = new NamedFacetStaticMethod(name, staticNameMethod, facetHolder);
+ } else {
+
+ // search for instance method next
+ final Method instanceNameMethod = MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.NAME_PREFIX + capitalizedName, String.class, new Class[0]);
+
+ if(instanceNameMethod != null) {
+ processMethodContext.removeMethod(instanceNameMethod);
+ facet = new NamedFacetInstanceMethod(instanceNameMethod, facetHolder);
+ } else {
+ facet = null;
+ }
}
- processMethodContext.removeMethod(nameMethod);
- final String name = invokeNameMethod(nameMethod);
-
- final FacetHolder facetHolder = processMethodContext.getFacetHolder();
- final NamedFacetStaticMethod facet = new NamedFacetStaticMethod(name, nameMethod, facetHolder);
- FacetUtil.addFacet(validator.flagIfPresent(facet, processMethodContext));
+ if(facet != null) {
+ FacetUtil.addFacet(validator.flagIfPresent(facet, processMethodContext));
+ }
}
private static String invokeNameMethod(final Method nameMethod) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 5e750eb..8817832 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -60,7 +60,7 @@ import org.apache.isis.core.metamodel.facets.members.hidden.layout.HiddenFacetOn
import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetStaticMethodFactory;
import org.apache.isis.core.metamodel.facets.members.named.annotprop.NamedFacetOnMemberFactory;
-import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticMethodFactory;
+import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticOrInstanceMethodFactory;
import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetFactory;
import org.apache.isis.core.metamodel.facets.members.render.annotprop.RenderFacetOrResolveFactory;
import org.apache.isis.core.metamodel.facets.object.ViewModelSemanticCheckingFacetFactory;
@@ -282,7 +282,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
// members in general
- addFactory(new NamedFacetStaticMethodFactory());
+ addFactory(new NamedFacetStaticOrInstanceMethodFactory());
addFactory(new DescribedAsFacetStaticMethodFactory());
addFactory(new DisableForSessionFacetViaMethodFactory());
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
index 7ed3aff..81ce5ea 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -20,7 +20,6 @@
package org.apache.isis.core.metamodel.facets.actions;
import java.lang.reflect.Method;
-import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -65,7 +64,7 @@ import org.apache.isis.core.metamodel.facets.members.hidden.forsession.HideForSe
import org.apache.isis.core.metamodel.facets.members.hidden.forsession.HideForSessionFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetOnStaticMethod;
import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetStaticMethodFactory;
-import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticMethodFactory;
+import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticOrInstanceMethodFactory;
import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
import org.apache.isis.core.metamodel.facets.param.autocomplete.method.ActionParameterAutoCompleteFacetViaMethod;
import org.apache.isis.core.metamodel.facets.param.autocomplete.method.ActionParameterAutoCompleteFacetViaMethodFactory;
@@ -424,7 +423,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
}
public void testInstallsNamedFacetUsingNameMethodAndRemovesMethod() {
- final NamedFacetStaticMethodFactory facetFactory = new NamedFacetStaticMethodFactory();
+ final NamedFacetStaticOrInstanceMethodFactory facetFactory = new NamedFacetStaticOrInstanceMethodFactory();
facetFactory.setServicesInjector(mockServicesInjector);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
index 75da9e6..1f654b4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
@@ -66,7 +66,7 @@ import org.apache.isis.core.metamodel.facets.members.hidden.forsession.HideForSe
import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetOnStaticMethod;
import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetStaticMethodFactory;
import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticMethod;
-import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticMethodFactory;
+import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticOrInstanceMethodFactory;
import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -662,7 +662,7 @@ public class CollectionFieldMethodsFacetFactoryTest extends AbstractFacetFactory
}
public void testInstallsNamedFacetUsingNameMethodAndRemovesMethod() {
- final NamedFacetStaticMethodFactory facetFactory = new NamedFacetStaticMethodFactory();
+ final NamedFacetStaticOrInstanceMethodFactory facetFactory = new NamedFacetStaticOrInstanceMethodFactory();
facetFactory.setServicesInjector(stubServicesInjector);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
index dc585c2..317f8c0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
@@ -49,7 +49,7 @@ import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContex
import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetOnStaticMethod;
import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetStaticMethodFactory;
import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticMethod;
-import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticMethodFactory;
+import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticOrInstanceMethodFactory;
import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor;
@@ -751,7 +751,7 @@ public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
}
public void testInstallsNamedFacetUsingNameMethodAndRemovesMethod() {
- final NamedFacetStaticMethodFactory facetFactory = new NamedFacetStaticMethodFactory();
+ final NamedFacetStaticOrInstanceMethodFactory facetFactory = new NamedFacetStaticOrInstanceMethodFactory();
facetFactory.setServicesInjector(stubServicesInjector);
--
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.