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 2011/01/17 09:48:56 UTC
svn commit: r1059813 [7/10] - in
/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets:
./ actcoll/typeof/ actions/ actions/choices/ actions/debug/
actions/debug/annotation/ actions/defaults/ actions/describedas/ acti...
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java (from r1056832, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/choices/ActionChoicesFacetViaMethod.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/choices/ActionChoicesFacetViaMethod.java&r1=1056832&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/choices/ActionChoicesFacetViaMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java Mon Jan 17 08:48:40 2011
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.isis.core.progmodel.facets.actions.choices;
+package org.apache.isis.core.progmodel.facets.param.choices.method;
import java.lang.reflect.Method;
import java.util.Collections;
@@ -32,7 +32,8 @@ import org.apache.isis.core.metamodel.fa
import org.apache.isis.core.metamodel.spec.DomainModelException;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLookup;
-import org.apache.isis.core.progmodel.facets.ArrayUtil;
+import org.apache.isis.core.progmodel.facets.param.choices.ActionChoicesFacetAbstract;
+import org.apache.isis.core.progmodel.util.ArrayUtil;
public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract implements ImperativeFacet {
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,133 @@
+/*
+ * 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.progmodel.facets.param.choices.methodnum;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMapAware;
+import org.apache.isis.core.metamodel.exceptions.MetaModelException;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.actions.choices.ActionChoicesFacet;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+
+/**
+ * Sets up all the {@link Facet}s for an action in a single shot.
+ */
+public class ActionParameterChoicesFacetFactory extends MethodPrefixBasedFacetFactoryAbstract implements AdapterMapAware {
+
+
+ private static final String[] PREFIXES = { };
+
+ private AdapterMap adapterMap;
+
+ /**
+ * Note that the {@link Facet}s registered are the generic ones from noa-architecture (where they exist)
+ */
+ public ActionParameterChoicesFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY, PREFIXES);
+ }
+
+ // ///////////////////////////////////////////////////////
+ // Actions
+ // ///////////////////////////////////////////////////////
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ final FacetedMethod facetedMethod = processMethodContext.getFacetHolder();
+ final List<FacetedMethodParameter> holderList = facetedMethod.getParameters();
+
+ attachChoicesFacetForParametersIfChoicesNumMethodIsFound(processMethodContext, holderList);
+
+ }
+
+ private void attachChoicesFacetForParametersIfChoicesNumMethodIsFound(
+ final ProcessMethodContext processMethodContext, final List<FacetedMethodParameter> parameters) {
+
+ if (parameters.isEmpty()) {
+ return;
+ }
+
+ final Method actionMethod = processMethodContext.getMethod();
+ final Class<?>[] params = actionMethod.getParameterTypes();
+
+ for (int i = 0; i < params.length; i++) {
+
+ final Class<?> arrayOfParamType = (Array.newInstance(params[i], 0)).getClass();
+
+ Method choicesMethod = findChoicesNumMethodReturning(processMethodContext, i, arrayOfParamType);
+ if (choicesMethod == null) {
+ choicesMethod = findChoicesNumMethodReturning(processMethodContext, i, List.class);
+ }
+ if (choicesMethod == null) {
+ continue;
+ }
+ processMethodContext.removeMethod(choicesMethod);
+
+ final FacetedMethod facetedMethod = processMethodContext.getFacetHolder();
+ if (facetedMethod.containsDoOpFacet(ActionChoicesFacet.class)) {
+ Class<?> cls = processMethodContext.getCls();
+ throw new MetaModelException(cls
+ + " uses both old and new choices syntax - must use one or other");
+ }
+
+ // add facets directly to parameters, not to actions
+ final FacetedMethodParameter paramAsHolder = parameters.get(i);
+ FacetUtil.addFacet(new ActionParameterChoicesFacetViaMethod(choicesMethod, arrayOfParamType, paramAsHolder,
+ getSpecificationLookup(), getAdapterMap()));
+ }
+ }
+
+ private Method findChoicesNumMethodReturning(final ProcessMethodContext processMethodContext, int i,
+ final Class<?> arrayOfParamType) {
+
+ Class<?> cls = processMethodContext.getCls();
+ final Method actionMethod = processMethodContext.getMethod();
+ final String capitalizedName = NameUtils.capitalizeName(actionMethod.getName());
+ String name = MethodPrefixConstants.CHOICES_PREFIX + i + capitalizedName;
+ return MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, name, arrayOfParamType, new Class[0]);
+ }
+
+
+ // ///////////////////////////////////////////////////////////////
+ // Dependencies
+ // ///////////////////////////////////////////////////////////////
+
+ @Override
+ public void setAdapterMap(AdapterMap adapterMap) {
+ this.adapterMap = adapterMap;
+ }
+
+ private AdapterMap getAdapterMap() {
+ return adapterMap;
+ }
+
+}
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java (from r1056832, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/choices/ActionParameterChoicesFacetViaMethod.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/choices/ActionParameterChoicesFacetViaMethod.java&r1=1056832&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/choices/ActionParameterChoicesFacetViaMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.actions.choices;
+package org.apache.isis.core.progmodel.facets.param.choices.methodnum;
import java.lang.reflect.Method;
import java.util.Collections;
@@ -32,7 +32,8 @@ import org.apache.isis.core.metamodel.fa
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLookup;
-import org.apache.isis.core.progmodel.facets.ArrayUtil;
+import org.apache.isis.core.progmodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
+import org.apache.isis.core.progmodel.util.ArrayUtil;
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionDefaultsFacetAbstract.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetAbstract.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionDefaultsFacetAbstract.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionDefaultsFacetAbstract.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetAbstract.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetAbstract.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionDefaultsFacetAbstract.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.actions.defaults;
+package org.apache.isis.core.progmodel.facets.param.defaults;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionDefaultsFacetNone.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetNone.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionDefaultsFacetNone.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionDefaultsFacetNone.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetNone.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetNone.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionDefaultsFacetNone.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.actions.defaults;
+package org.apache.isis.core.progmodel.facets.param.defaults;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetAbstract.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetAbstract.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetAbstract.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetAbstract.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetAbstract.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetAbstract.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetAbstract.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.actions.defaults;
+package org.apache.isis.core.progmodel.facets.param.defaults;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetNone.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetNone.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetNone.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.actions.defaults;
+package org.apache.isis.core.progmodel.facets.param.defaults;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/method/ActionDefaultsFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/method/ActionDefaultsFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/method/ActionDefaultsFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/method/ActionDefaultsFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,108 @@
+/*
+ * 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.progmodel.facets.param.defaults.method;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMapAware;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+
+/**
+ * Sets up all the {@link Facet}s for an action in a single shot.
+ */
+public class ActionDefaultsFacetFactory extends MethodPrefixBasedFacetFactoryAbstract implements AdapterMapAware {
+
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.DEFAULT_PREFIX };
+
+ private AdapterMap adapterMap;
+
+ /**
+ * Note that the {@link Facet}s registered are the generic ones from noa-architecture (where they exist)
+ */
+ public ActionDefaultsFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY, PREFIXES);
+ }
+
+ // ///////////////////////////////////////////////////////
+ // Actions
+ // ///////////////////////////////////////////////////////
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ attachActionDefaultsFacetIfParameterDefaultsMethodIsFound(processMethodContext);
+ }
+
+
+ private static void attachActionDefaultsFacetIfParameterDefaultsMethodIsFound(
+ final ProcessMethodContext processMethodContext) {
+
+ Method defaultsMethod =
+ findDefaultsMethodReturning(processMethodContext, Object[].class);
+ if (defaultsMethod == null) {
+ defaultsMethod =
+ findDefaultsMethodReturning(processMethodContext, List.class);
+ }
+ if (defaultsMethod == null) {
+ return;
+ }
+
+ processMethodContext.removeMethod(defaultsMethod);
+
+ final FacetHolder facetedMethod = processMethodContext.getFacetHolder();
+ final ActionDefaultsFacetViaMethod facet = new ActionDefaultsFacetViaMethod(defaultsMethod, facetedMethod);
+ FacetUtil.addFacet(facet);
+ }
+
+ private static Method findDefaultsMethodReturning(final ProcessMethodContext processMethodContext, final Class<?> returnType) {
+
+ final Method actionMethod = processMethodContext.getMethod();
+ final String capitalizedName = NameUtils.capitalizeName(actionMethod.getName());
+ String name = MethodPrefixConstants.DEFAULT_PREFIX + capitalizedName;
+
+ Class<?> cls = processMethodContext.getCls();
+ return MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, name, returnType, new Class[0]);
+ }
+
+ // ///////////////////////////////////////////////////////////////
+ // Dependencies
+ // ///////////////////////////////////////////////////////////////
+
+ @Override
+ public void setAdapterMap(AdapterMap adapterMap) {
+ this.adapterMap = adapterMap;
+ }
+
+ private AdapterMap getAdapterMap() {
+ return adapterMap;
+ }
+
+}
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/method/ActionDefaultsFacetViaMethod.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetViaMethod.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/method/ActionDefaultsFacetViaMethod.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/method/ActionDefaultsFacetViaMethod.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetViaMethod.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionDefaultsFacetViaMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/method/ActionDefaultsFacetViaMethod.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.actions.defaults;
+package org.apache.isis.core.progmodel.facets.param.defaults.method;
import java.lang.reflect.Method;
import java.util.Collections;
@@ -31,6 +31,7 @@ import org.apache.isis.core.metamodel.fa
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
import org.apache.isis.core.metamodel.facets.actions.invoke.ActionInvocationFacet;
import org.apache.isis.core.progmodel.facets.actions.invoke.ActionInvocationFacetViaMethod;
+import org.apache.isis.core.progmodel.facets.param.defaults.ActionDefaultsFacetAbstract;
public class ActionDefaultsFacetViaMethod extends ActionDefaultsFacetAbstract implements ImperativeFacet {
@@ -57,34 +58,25 @@ public class ActionDefaultsFacetViaMetho
/**
* Returns a singleton list of the {@link Method} provided in the constructor.
*/
+ @Override
public List<Method> getMethods() {
return Collections.singletonList(method);
}
+ @Override
public boolean impliesResolve() {
return true;
}
+ @Override
public boolean impliesObjectChanged() {
return false;
}
+ @Override
public Object[] getDefaults(final ObjectAdapter owningAdapter) {
- final Object[] defaults = (Object[]) AdapterInvokeUtils.invoke(method, owningAdapter);
- return defaults;
-
- // TODO fix the setting up actionMethod so that we can check the types.
-
- /*
- * ObjectAdapter[] array = new ObjectAdapter[defaults.length]; // if (actionMethod != null) {
- * ObjectReflector reflector = IsisContext.getReflector(); // Class[] parameterTypes =
- * actionMethod.getParameterTypes(); for (int i = 0; i < array.length; i++) { // Class parameterType =
- * parameterTypes[i]; // ObjectSpecification paramSpecification =
- * reflector.loadSpecification(parameterType); // if (paramSpecification.isObject()) { array[i] =
- * PersistorUtil.createAdapter(defaults[i]); / } else { throw new
- * UnknownTypeException(paramSpecification.getFullName()); } / } //} return (ObjectAdapter[]) array;
- */
+ return (Object[]) AdapterInvokeUtils.invoke(method, owningAdapter);
}
@Override
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,120 @@
+/*
+ * 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.progmodel.facets.param.defaults.methodnum;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMapAware;
+import org.apache.isis.core.metamodel.exceptions.MetaModelException;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+
+/**
+ * Sets up all the {@link Facet}s for an action in a single shot.
+ */
+public class ActionParameterDefaultsFacetFactory extends MethodPrefixBasedFacetFactoryAbstract implements AdapterMapAware {
+
+
+ private static final String[] PREFIXES = { };
+
+ private AdapterMap adapterMap;
+
+ /**
+ * Note that the {@link Facet}s registered are the generic ones from noa-architecture (where they exist)
+ */
+ public ActionParameterDefaultsFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY, PREFIXES);
+ }
+
+ // ///////////////////////////////////////////////////////
+ // Actions
+ // ///////////////////////////////////////////////////////
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ final FacetedMethod facetedMethod = processMethodContext.getFacetHolder();
+ final List<FacetedMethodParameter> holderList = facetedMethod.getParameters();
+
+ attachDefaultFacetForParametersIfDefaultsNumMethodIsFound(processMethodContext, holderList);
+ }
+
+ private static void attachDefaultFacetForParametersIfDefaultsNumMethodIsFound(
+ final ProcessMethodContext processMethodContext, final List<FacetedMethodParameter> parameters) {
+
+ if (parameters.isEmpty()) {
+ return;
+ }
+
+ final Class<?> cls = processMethodContext.getCls();
+ final Method actionMethod = processMethodContext.getMethod();
+
+ final Class<?>[] paramTypes = actionMethod.getParameterTypes();
+ final String capitalizedName = NameUtils.capitalizeName(actionMethod.getName());
+
+ for (int i = 0; i < paramTypes.length; i++) {
+
+ final Method defaultMethod =
+ MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.DEFAULT_PREFIX + i
+ + capitalizedName, paramTypes[i], new Class[0]);
+
+ if (defaultMethod == null) {
+ continue;
+ }
+ processMethodContext.removeMethod(defaultMethod);
+
+ final FacetedMethod facetedMethod = processMethodContext.getFacetHolder();
+ if (facetedMethod.containsDoOpFacet(ActionDefaultsFacet.class)) {
+ throw new MetaModelException(cls
+ + " uses both old and new default syntax for " + actionMethod.getName() + "(...) - must use one or other");
+ }
+
+ // add facets directly to parameters, not to actions
+ final FacetedMethodParameter paramAsHolder = parameters.get(i);
+ FacetUtil.addFacet(new ActionParameterDefaultsFacetViaMethod(defaultMethod, paramAsHolder));
+ }
+ }
+
+
+ // ///////////////////////////////////////////////////////////////
+ // Dependencies
+ // ///////////////////////////////////////////////////////////////
+
+ @Override
+ public void setAdapterMap(AdapterMap adapterMap) {
+ this.adapterMap = adapterMap;
+ }
+
+ private AdapterMap getAdapterMap() {
+ return adapterMap;
+ }
+
+}
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetViaMethod.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetViaMethod.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/defaults/ActionParameterDefaultsFacetViaMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.actions.defaults;
+package org.apache.isis.core.progmodel.facets.param.defaults.methodnum;
import java.lang.reflect.Method;
import java.util.Collections;
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.progmodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaultsFacetAbstract implements ImperativeFacet {
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/describedas/staticmethod/ActionParameterDescriptionsMethodFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/describedas/staticmethod/ActionParameterDescriptionsMethodFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/describedas/staticmethod/ActionParameterDescriptionsMethodFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/describedas/staticmethod/ActionParameterDescriptionsMethodFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,122 @@
+/*
+ * 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.progmodel.facets.param.describedas.staticmethod;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMapAware;
+import org.apache.isis.core.metamodel.adapter.util.InvokeUtils;
+import org.apache.isis.core.metamodel.exceptions.MetaModelException;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+import org.apache.isis.core.progmodel.facets.members.describedas.staticmethod.DescribedAsFacetViaMethod;
+
+public class ActionParameterDescriptionsMethodFacetFactory extends MethodPrefixBasedFacetFactoryAbstract implements AdapterMapAware {
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.DESCRIPTION_PREFIX };
+
+ private AdapterMap adapterMap;
+
+ /**
+ * Note that the {@link Facet}s registered are the generic ones from noa-architecture (where they exist)
+ */
+ public ActionParameterDescriptionsMethodFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY, PREFIXES);
+ }
+
+ // ///////////////////////////////////////////////////////
+ // Actions
+ // ///////////////////////////////////////////////////////
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ final FacetedMethod facetedMethod = processMethodContext.getFacetHolder();
+ final List<FacetedMethodParameter> holderList = facetedMethod.getParameters();
+
+ attachDescribedAsFacetForParametersIfParameterDescriptionsMethodIsFound(processMethodContext, holderList);
+ }
+
+ private static void attachDescribedAsFacetForParametersIfParameterDescriptionsMethodIsFound(
+ final ProcessMethodContext processMethodContext, final List<FacetedMethodParameter> parameters) {
+
+ if (parameters.isEmpty()) {
+ return;
+ }
+
+ final Method actionMethod = processMethodContext.getMethod();
+
+ final String capitalizedName = NameUtils.capitalizeName(actionMethod.getName());
+
+ Class<?> cls = processMethodContext.getCls();
+ final Method descriptionMethod =
+ MethodFinderUtils.findMethod(cls, MethodScope.CLASS, MethodPrefixConstants.DESCRIPTION_PREFIX
+ + capitalizedName, String[].class, new Class[0]);
+ if (descriptionMethod == null) {
+ return;
+ }
+ processMethodContext.removeMethod(descriptionMethod);
+
+ String[] descriptions = invokeDescriptionsMethod(descriptionMethod, parameters.size());
+ for (int i = 0; i < descriptions.length; i++) {
+ // add facets directly to parameters, not to actions
+ FacetUtil.addFacet(new DescribedAsFacetViaMethod(descriptions[i], descriptionMethod, parameters.get(i)));
+ }
+ }
+
+ private static String[] invokeDescriptionsMethod(final Method descriptionMethod, final int numElementsRequired) {
+ String[] descriptions = null;
+ try {
+ descriptions = (String[]) InvokeUtils.invokeStatic(descriptionMethod, new Object[0]);
+ } catch(ClassCastException ex) {
+ // ignore
+ }
+ if(descriptions==null || descriptions.length != numElementsRequired) {
+ throw new MetaModelException(descriptionMethod + " must return an String[] array of same size as number of parameters of action");
+ }
+ return descriptions;
+ }
+
+
+
+ // ///////////////////////////////////////////////////////////////
+ // Dependencies
+ // ///////////////////////////////////////////////////////////////
+
+ @Override
+ public void setAdapterMap(AdapterMap adapterMap) {
+ this.adapterMap = adapterMap;
+ }
+
+ private AdapterMap getAdapterMap() {
+ return adapterMap;
+ }
+
+}
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/mandatory/staticmethod/MandatoryFacetOverriddenByMethod.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/MandatoryFacetOverriddenByMethod.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/mandatory/staticmethod/MandatoryFacetOverriddenByMethod.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/mandatory/staticmethod/MandatoryFacetOverriddenByMethod.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/MandatoryFacetOverriddenByMethod.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/MandatoryFacetOverriddenByMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/mandatory/staticmethod/MandatoryFacetOverriddenByMethod.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.actions;
+package org.apache.isis.core.progmodel.facets.param.mandatory.staticmethod;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/named/staticmethod/ActionParameterNamesMethodFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/named/staticmethod/ActionParameterNamesMethodFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/named/staticmethod/ActionParameterNamesMethodFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/named/staticmethod/ActionParameterNamesMethodFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,126 @@
+/*
+ * 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.progmodel.facets.param.named.staticmethod;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMapAware;
+import org.apache.isis.core.metamodel.adapter.util.InvokeUtils;
+import org.apache.isis.core.metamodel.exceptions.MetaModelException;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+import org.apache.isis.core.progmodel.facets.members.name.staticmethod.NamedFacetViaMethod;
+
+/**
+ * Sets up all the {@link Facet}s for an action in a single shot.
+ */
+public class ActionParameterNamesMethodFacetFactory extends MethodPrefixBasedFacetFactoryAbstract implements AdapterMapAware {
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.NAME_PREFIX };
+
+ private AdapterMap adapterMap;
+
+ /**
+ * Note that the {@link Facet}s registered are the generic ones from noa-architecture (where they exist)
+ */
+ public ActionParameterNamesMethodFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY, PREFIXES);
+ }
+
+ // ///////////////////////////////////////////////////////
+ // Actions
+ // ///////////////////////////////////////////////////////
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ final FacetedMethod facetedMethod = processMethodContext.getFacetHolder();
+ final List<FacetedMethodParameter> holderList = facetedMethod.getParameters();
+
+ attachNamedFacetForParametersIfParameterNamesMethodIsFound(processMethodContext, holderList);
+ }
+
+ private static void attachNamedFacetForParametersIfParameterNamesMethodIsFound(
+ final ProcessMethodContext processMethodContext, final List<FacetedMethodParameter> parameters) {
+
+ if (parameters.isEmpty()) {
+ return;
+ }
+
+ final Method actionMethod = processMethodContext.getMethod();
+ final String capitalizedName = NameUtils.capitalizeName(actionMethod.getName());
+
+ Class<?> cls = processMethodContext.getCls();
+ Method namesMethod =
+ MethodFinderUtils.findMethod(cls, MethodScope.CLASS, MethodPrefixConstants.NAME_PREFIX + capitalizedName,
+ String[].class, new Class[0]);
+ if (namesMethod == null) {
+ return;
+ }
+ try {
+ String[] names = invokeNamesMethod(namesMethod, parameters.size());
+ for (int i = 0; i < names.length; i++) {
+ // add facets directly to parameters, not to actions
+ FacetUtil.addFacet(new NamedFacetViaMethod(names[i], namesMethod, parameters.get(i)));
+ }
+ } finally {
+ processMethodContext.removeMethod(namesMethod);
+ }
+ }
+
+ private static String[] invokeNamesMethod(Method namesMethod, final int numElementsRequired) {
+ String[] names = null;
+ try {
+ names = (String[]) InvokeUtils.invokeStatic(namesMethod, new Object[0]);
+ } catch(ClassCastException ex) {
+ // ignore
+ }
+ if(names==null || names.length != numElementsRequired) {
+ throw new MetaModelException(namesMethod + " must return an String[] array of same size as number of parameters of action");
+ }
+ return names;
+ }
+
+
+
+ // ///////////////////////////////////////////////////////////////
+ // Dependencies
+ // ///////////////////////////////////////////////////////////////
+
+ @Override
+ public void setAdapterMap(AdapterMap adapterMap) {
+ this.adapterMap = adapterMap;
+ }
+
+ private AdapterMap getAdapterMap() {
+ return adapterMap;
+ }
+
+}
Modified: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/notpersisted/NotPersistedAnnotationFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/notpersisted/NotPersistedAnnotationFacetFactory.java?rev=1059813&r1=1059812&r2=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/notpersisted/NotPersistedAnnotationFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/notpersisted/NotPersistedAnnotationFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -20,13 +20,11 @@
package org.apache.isis.core.progmodel.facets.propcoll.notpersisted;
-import java.lang.reflect.Method;
import org.apache.isis.applib.annotation.NotPersisted;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MethodRemover;
import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
@@ -38,9 +36,9 @@ public class NotPersistedAnnotationFacet
}
@Override
- public boolean process(Class<?> cls, final Method method, final MethodRemover methodRemover, final FacetHolder holder) {
- final NotPersisted annotation = getAnnotation(method, NotPersisted.class);
- return FacetUtil.addFacet(create(annotation, holder));
+ public void process(ProcessMethodContext processMethodContext) {
+ final NotPersisted annotation = getAnnotation(processMethodContext.getMethod(), NotPersisted.class);
+ FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
}
private NotPersistedFacet create(final NotPersisted annotation, final FacetHolder holder) {
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,113 @@
+/*
+ * 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.progmodel.facets.properties.accessor;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.MethodRemover;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+import org.apache.isis.core.progmodel.facets.PropertyOrCollectionIdentifyingFacetFactoryAbstract;
+
+
+public class PropertyAccessorFacetFactory extends PropertyOrCollectionIdentifyingFacetFactoryAbstract {
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.GET_PREFIX, MethodPrefixConstants.IS_PREFIX };
+
+ public PropertyAccessorFacetFactory() {
+ super(FeatureType.PROPERTIES_ONLY, PREFIXES);
+ }
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+ attachPropertyAccessFacetForAccessorMethod(processMethodContext);
+ }
+
+ private static void attachPropertyAccessFacetForAccessorMethod(ProcessMethodContext processMethodContext) {
+
+ final Method accessorMethod = processMethodContext.getMethod();
+
+ processMethodContext.removeMethod(accessorMethod);
+
+ final FacetHolder property = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new PropertyOrCollectionAccessorFacetViaAccessor(accessorMethod, property));
+ }
+
+
+ /////////////////////////////////////////////////////////
+ // PropertyOrCollectionIdentifying
+ /////////////////////////////////////////////////////////
+
+ @Override
+ public boolean isPropertyOrCollectionAccessorCandidate(final Method method) {
+ final String methodName = method.getName();
+ if (methodName.startsWith(MethodPrefixConstants.GET_PREFIX)) {
+ return true;
+ }
+ if (methodName.startsWith(MethodPrefixConstants.IS_PREFIX) && method.getReturnType() == boolean.class) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * The method way well represent a collection, but this facet factory does not have any opinion on the
+ * matter.
+ */
+ @Override
+ public boolean isCollectionAccessor(final Method method) {
+ return false;
+ }
+
+ @Override
+ public boolean isPropertyAccessor(final Method method) {
+ if (!isPropertyOrCollectionAccessorCandidate(method)) {
+ return false;
+ }
+ final Class<?> methodReturnType = method.getReturnType();
+ return isCollectionOrArray(methodReturnType);
+ }
+
+ @Override
+ public void findAndRemovePropertyAccessors(final MethodRemover methodRemover, final List<Method> methodListToAppendTo) {
+ appendMatchingMethods(methodRemover, MethodPrefixConstants.IS_PREFIX, boolean.class, methodListToAppendTo);
+ appendMatchingMethods(methodRemover, MethodPrefixConstants.GET_PREFIX, Object.class, methodListToAppendTo);
+ }
+
+ private static void appendMatchingMethods(final MethodRemover methodRemover, final String prefix,
+ final Class<?> returnType, final List<Method> methodListToAppendTo) {
+ methodListToAppendTo.addAll(methodRemover.removeMethods(MethodScope.OBJECT, prefix, returnType, false, 0));
+ }
+
+ @Override
+ public void findAndRemoveCollectionAccessors(
+ final MethodRemover methodRemover,
+ final List<Method> methodListToAppendTo) {
+ // does nothing
+ }
+
+
+
+}
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetAbstract.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/access/PropertyAccessorFacetAbstract.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetAbstract.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetAbstract.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/access/PropertyAccessorFacetAbstract.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/access/PropertyAccessorFacetAbstract.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetAbstract.java Mon Jan 17 08:48:40 2011
@@ -18,22 +18,22 @@
*/
-package org.apache.isis.core.progmodel.facets.propcoll.access;
+package org.apache.isis.core.progmodel.facets.properties.accessor;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
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.propcoll.access.PropertyAccessorFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.access.PropertyOrCollectionAccessorFacet;
-public abstract class PropertyAccessorFacetAbstract extends FacetAbstract implements PropertyAccessorFacet {
+public abstract class PropertyOrCollectionAccessorFacetAbstract extends FacetAbstract implements PropertyOrCollectionAccessorFacet {
public static Class<? extends Facet> type() {
- return PropertyAccessorFacet.class;
+ return PropertyOrCollectionAccessorFacet.class;
}
- public PropertyAccessorFacetAbstract(final FacetHolder holder) {
+ public PropertyOrCollectionAccessorFacetAbstract(final FacetHolder holder) {
super(type(), holder, false);
}
Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetViaAccessor.java (from r1056813, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/access/PropertyAccessorFacetViaAccessor.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetViaAccessor.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetViaAccessor.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/access/PropertyAccessorFacetViaAccessor.java&r1=1056813&r2=1059813&rev=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/access/PropertyAccessorFacetViaAccessor.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetViaAccessor.java Mon Jan 17 08:48:40 2011
@@ -18,7 +18,7 @@
*/
-package org.apache.isis.core.progmodel.facets.propcoll.access;
+package org.apache.isis.core.progmodel.facets.properties.accessor;
import java.lang.reflect.Method;
import java.util.Collections;
@@ -31,11 +31,11 @@ import org.apache.isis.core.metamodel.fa
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-public class PropertyAccessorFacetViaAccessor extends PropertyAccessorFacetAbstract implements ImperativeFacet {
+public class PropertyOrCollectionAccessorFacetViaAccessor extends PropertyOrCollectionAccessorFacetAbstract implements ImperativeFacet {
private final Method method;
- public PropertyAccessorFacetViaAccessor(
+ public PropertyOrCollectionAccessorFacetViaAccessor(
final Method method,
final FacetHolder holder) {
super(holder);
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,84 @@
+/*
+ * 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.progmodel.facets.properties.choices;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMapAware;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+
+
+public class PropertyChoicesFacetFactory extends MethodPrefixBasedFacetFactoryAbstract implements AdapterMapAware {
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.CHOICES_PREFIX };
+
+ private AdapterMap adapterMap;
+
+ public PropertyChoicesFacetFactory() {
+ super(FeatureType.PROPERTIES_ONLY, PREFIXES);
+ }
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ attachPropertyChoicesFacetIfChoicesMethodIsFound(processMethodContext);
+ }
+
+ private void attachPropertyChoicesFacetIfChoicesMethodIsFound(ProcessMethodContext processMethodContext) {
+
+ final Method getMethod = processMethodContext.getMethod();
+ final String capitalizedName = NameUtils.javaBaseName(getMethod.getName());
+
+ Class<?> cls = processMethodContext.getCls();
+ final Class<?> returnType = getMethod.getReturnType();
+ final Method choicesMethod = MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.CHOICES_PREFIX + capitalizedName, null, NO_PARAMETERS_TYPES);
+ if (choicesMethod == null) {
+ return;
+ }
+ processMethodContext.removeMethod(choicesMethod);
+
+ final FacetHolder property = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new PropertyChoicesFacetViaMethod(choicesMethod, returnType, property, getSpecificationLookup(), getAdapterMap()));
+ }
+
+
+ /////////////////////////////////////////////////////////
+ // Dependencies (injected)
+ /////////////////////////////////////////////////////////
+
+ @Override
+ public void setAdapterMap(AdapterMap adapterManager) {
+ this.adapterMap = adapterManager;
+ }
+
+ protected AdapterMap getAdapterMap() {
+ return adapterMap;
+ }
+
+}
Modified: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetViaMethod.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetViaMethod.java?rev=1059813&r1=1059812&r2=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetViaMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetViaMethod.java Mon Jan 17 08:48:40 2011
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.fa
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLookup;
-import org.apache.isis.core.progmodel.facets.ArrayUtil;
+import org.apache.isis.core.progmodel.util.ArrayUtil;
public class PropertyChoicesFacetViaMethod extends PropertyChoicesFacetAbstract implements ImperativeFacet {
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,83 @@
+/*
+ * 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.progmodel.facets.properties.defaults;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
+import org.apache.isis.core.metamodel.adapter.map.AdapterMapAware;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+
+
+public class PropertyDefaultFacetFactory extends MethodPrefixBasedFacetFactoryAbstract implements AdapterMapAware {
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.DEFAULT_PREFIX };
+
+ private AdapterMap adapterMap;
+
+ public PropertyDefaultFacetFactory() {
+ super(FeatureType.PROPERTIES_ONLY, PREFIXES);
+ }
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ attachPropertyDefaultFacetIfDefaultMethodIsFound(processMethodContext);
+ }
+
+ private void attachPropertyDefaultFacetIfDefaultMethodIsFound(ProcessMethodContext processMethodContext) {
+
+ final Method getMethod = processMethodContext.getMethod();
+ final String capitalizedName = NameUtils.javaBaseName(getMethod.getName());
+
+ Class<?> cls = processMethodContext.getCls();
+ final Class<?> returnType = getMethod.getReturnType();
+ final Method method = MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.DEFAULT_PREFIX + capitalizedName, returnType, NO_PARAMETERS_TYPES);
+ if (method == null) {
+ return;
+ }
+ processMethodContext.removeMethod(method);
+
+ final FacetHolder property = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new PropertyDefaultFacetViaMethod(method, property, getSpecificationLookup(), getAdapterMap()));
+ }
+
+ /////////////////////////////////////////////////////////
+ // Dependencies (injected)
+ /////////////////////////////////////////////////////////
+
+ @Override
+ public void setAdapterMap(AdapterMap adapterManager) {
+ this.adapterMap = adapterManager;
+ }
+
+ protected AdapterMap getAdapterMap() {
+ return adapterMap;
+ }
+
+}
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/PropertyOptionalFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/PropertyOptionalFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/PropertyOptionalFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/PropertyOptionalFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,90 @@
+/*
+ * 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.progmodel.facets.properties.mandatory;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.adapter.util.InvokeUtils;
+import org.apache.isis.core.metamodel.exceptions.MetaModelException;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+import org.apache.isis.core.progmodel.facets.param.mandatory.staticmethod.MandatoryFacetOverriddenByMethod;
+
+
+public class PropertyOptionalFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.OPTIONAL_PREFIX };
+
+ public PropertyOptionalFacetFactory() {
+ super(FeatureType.PROPERTIES_ONLY, PREFIXES);
+ }
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ attachMandatoryFacetIfOptionalMethodIsFound(processMethodContext);
+ }
+
+ private static void attachMandatoryFacetIfOptionalMethodIsFound(ProcessMethodContext processMethodContext) {
+ final Method method = processMethodContext.getMethod();
+
+ final String capitalizedName = NameUtils.javaBaseName(method.getName());
+ final Class<?> returnType = method.getReturnType();
+
+ Class<?> cls = processMethodContext.getCls();
+ final Method optionalMethod = MethodFinderUtils.findMethod(cls, MethodScope.CLASS, MethodPrefixConstants.OPTIONAL_PREFIX + capitalizedName, boolean.class, NO_PARAMETERS_TYPES);
+ processMethodContext.removeMethod(optionalMethod);
+
+ if (!indicatesOptional(optionalMethod)) {
+ return;
+ }
+ if (returnType.isPrimitive()) {
+ throw new MetaModelException(
+ cls.getName() + "#" + capitalizedName + " cannot be an optional property as it is of a primitive type");
+ }
+ final FacetHolder property = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new MandatoryFacetOverriddenByMethod(property));
+ }
+
+ private static boolean indicatesOptional(final Method method) {
+ if (method != null) {
+ Boolean optionalMethodReturnValue = null;
+ try {
+ optionalMethodReturnValue = (Boolean) InvokeUtils.invoke(method, new Object[0]);
+ } catch (ClassCastException ex) {
+ // ignore
+ }
+ if(optionalMethodReturnValue==null) {
+ throw new MetaModelException("method " + method + " should return a boolean" );
+ }
+ return optionalMethodReturnValue.booleanValue();
+ }
+ return false;
+ }
+
+
+}
\ No newline at end of file
Modified: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java?rev=1059813&r1=1059812&r2=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java Mon Jan 17 08:48:40 2011
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacetAbstract;
public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
Modified: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java?rev=1059813&r1=1059812&r2=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java Mon Jan 17 08:48:40 2011
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacetAbstract;
public class PropertyClearFacetViaSetterMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyModifyFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyModifyFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyModifyFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyModifyFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,69 @@
+/*
+ * 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.progmodel.facets.properties.modify;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+
+
+public class PropertyModifyFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.MODIFY_PREFIX };
+
+ public PropertyModifyFacetFactory() {
+ super(FeatureType.PROPERTIES_ONLY, PREFIXES);
+ }
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ attachPropertyModifyFacetIfModifyMethodIsFound(processMethodContext);
+ }
+
+ private void attachPropertyModifyFacetIfModifyMethodIsFound(ProcessMethodContext processMethodContext) {
+
+ final Method getMethod = processMethodContext.getMethod();
+ final String capitalizedName = NameUtils.javaBaseName(getMethod.getName());
+
+ final Class<?> returnType = getMethod.getReturnType();
+ final Class<?>[] paramTypes = new Class[] { returnType };
+
+ Class<?> cls = processMethodContext.getCls();
+ final Method modifyMethod = MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.MODIFY_PREFIX + capitalizedName, void.class, paramTypes);
+
+ if (modifyMethod == null) {
+ return;
+ }
+ processMethodContext.removeMethod(modifyMethod);
+
+ final FacetHolder property = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new PropertySetterFacetViaModifyMethod(modifyMethod, property));
+ }
+
+}
Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetAndClearFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetAndClearFacetFactory.java?rev=1059813&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetAndClearFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetAndClearFacetFactory.java Mon Jan 17 08:48:40 2011
@@ -0,0 +1,115 @@
+/*
+ * 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.progmodel.facets.properties.modify;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.commons.lang.NameUtils;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
+import org.apache.isis.core.progmodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.progmodel.facets.MethodPrefixConstants;
+import org.apache.isis.core.progmodel.facets.members.disable.DisabledFacet;
+import org.apache.isis.core.progmodel.facets.members.disable.staticmethod.DisabledFacetAlways;
+import org.apache.isis.core.progmodel.facets.propcoll.derived.DerivedFacetInferred;
+
+
+public class PropertySetAndClearFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
+
+ private static final String[] PREFIXES = { MethodPrefixConstants.SET_PREFIX, MethodPrefixConstants.CLEAR_PREFIX };
+
+ public PropertySetAndClearFacetFactory() {
+ super(FeatureType.PROPERTIES_ONLY, PREFIXES);
+ }
+
+ @Override
+ public void process(ProcessMethodContext processMethodContext) {
+
+ Method setMethod = attachPropertyModifyFacetIfSetterIsFound(processMethodContext);
+ Method clearMethod = attachPropertyClearFacetIfClearMethodIsFound(processMethodContext);
+
+ attachPropertyClearFacetUsingSetterIfRequired(processMethodContext, setMethod, clearMethod);
+ }
+
+ /**
+ * Sets up the {@link PropertySetterFacetViaSetterMethod} to invoke the property's setter if available,
+ * but if none then marks the property as {@link DerivedFacet derived} and {@link DisabledFacet disabled}
+ * otherwise.
+ */
+ private static Method attachPropertyModifyFacetIfSetterIsFound(ProcessMethodContext processMethodContext) {
+
+ final Method getMethod = processMethodContext.getMethod();
+ final String capitalizedName = NameUtils.javaBaseName(getMethod.getName());
+
+ Class<?> cls = processMethodContext.getCls();
+ final Class<?> returnType = getMethod.getReturnType();
+ final Class<?>[] paramTypes = new Class[] { returnType };
+ Method setMethod = MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.SET_PREFIX + capitalizedName, void.class, paramTypes);
+ processMethodContext.removeMethod(setMethod);
+
+ final FacetHolder property = processMethodContext.getFacetHolder();
+ if (setMethod != null) {
+ FacetUtil.addFacet(new PropertySetterFacetViaSetterMethod(setMethod, property));
+ FacetUtil.addFacet(new PropertyInitializationFacetViaSetterMethod(setMethod, property));
+ } else {
+ FacetUtil.addFacet(new DerivedFacetInferred(property));
+ FacetUtil.addFacet(new DisabledFacetAlways(property));
+ }
+
+ return setMethod;
+ }
+
+ private Method attachPropertyClearFacetIfClearMethodIsFound(ProcessMethodContext processMethodContext) {
+ Class<?> cls = processMethodContext.getCls();
+ final Method getMethod = processMethodContext.getMethod();
+ final FacetHolder property = processMethodContext.getFacetHolder();
+
+ final String capitalizedName = NameUtils.javaBaseName(getMethod.getName());
+ final Method clearMethod = MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.CLEAR_PREFIX + capitalizedName, void.class, NO_PARAMETERS_TYPES);
+
+ if (clearMethod == null) {
+ return null;
+ }
+ processMethodContext.removeMethod(clearMethod);
+
+ FacetUtil.addFacet(new PropertyClearFacetViaClearMethod(clearMethod, property));
+
+ return clearMethod;
+ }
+
+ private static void attachPropertyClearFacetUsingSetterIfRequired(ProcessMethodContext processMethodContext, Method setMethod,
+ Method clearMethod) {
+
+ if (clearMethod != null) {
+ return;
+ }
+ if (setMethod == null) {
+ return;
+ }
+ final FacetHolder property = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new PropertyClearFacetViaSetterMethod(setMethod, property));
+ }
+
+
+}
Modified: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java?rev=1059813&r1=1059812&r2=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java Mon Jan 17 08:48:40 2011
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacetAbstract;
public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstract implements ImperativeFacet {
Modified: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java?rev=1059813&r1=1059812&r2=1059813&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java Mon Jan 17 08:48:40 2011
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacetAbstract;
public class PropertySetterFacetViaSetterMethod extends PropertySetterFacetAbstract implements ImperativeFacet {