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>.