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 19:23:18 UTC

svn commit: r1060035 [8/14] - in /incubator/isis/trunk: alternatives/embedded/src/main/java/org/apache/isis/alternatives/embedded/ alternatives/objectstore/nosql/src/test/java/org/apache/isis/alternatives/objectstore/nosql/ alternatives/objectstore/sql...

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/perspec/MustSatisfySpecificationOnParameterFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/perspec/MustSatisfySpecificationOnParameterFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/perspec/MustSatisfySpecificationOnParameterFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/perspec/MustSatisfySpecificationOnParameterFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,81 @@
+/*
+ *  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.validate.perspec;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.isis.applib.annotation.MustSatisfy;
+import org.apache.isis.applib.spec.Specification;
+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.facets.AnnotationBasedFacetFactoryAbstract;
+
+public class MustSatisfySpecificationOnParameterFacetFactory  extends AnnotationBasedFacetFactoryAbstract {
+
+    public MustSatisfySpecificationOnParameterFacetFactory() {
+        super(FeatureType.PARAMETERS_ONLY);
+    }
+
+    @Override
+    public void processParams(ProcessParameterContext processParameterContext) {
+        final java.lang.annotation.Annotation[] parameterAnnotations = getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
+
+        for (int j = 0; j < parameterAnnotations.length; j++) {
+            if (parameterAnnotations[j] instanceof MustSatisfy) {
+                final MustSatisfy annotation = (MustSatisfy) parameterAnnotations[j];
+                FacetUtil.addFacet(create(annotation, processParameterContext.getFacetHolder()));
+                return; 
+            }
+        }
+    }
+    
+    private Facet create(final MustSatisfy annotation, final FacetHolder holder) {
+        if (annotation == null) {
+            return null;
+        }
+        Class<?>[] values = annotation.value();
+        List<Specification> specifications = new ArrayList<Specification>();
+        for(Class<?> value: values) {
+            Specification specification = newSpecificationElseNull(value);
+            if (specification != null) {
+                specifications.add(specification);
+            }
+        }
+        return specifications.size() > 0 ? new MustSatisfySpecificationOnParameterFacet(specifications, holder) : null;
+    }
+
+    private static Specification newSpecificationElseNull(Class<?> value) {
+        if (!(Specification.class.isAssignableFrom(value))) {
+            return null;
+        }
+        try {
+            return (Specification) value.newInstance();
+        } catch (InstantiationException e) {
+            return null;
+        } catch (IllegalAccessException e) {
+            return null;
+        }
+    }
+
+}

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/regexannot/RegExFacetAnnotationForParameter.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/regexannot/RegExFacetAnnotationForParameter.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/regexannot/RegExFacetAnnotationForParameter.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/regexannot/RegExFacetAnnotationForParameter.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,64 @@
+/*
+ *  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.validate.regexannot;
+
+import java.util.regex.Pattern;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.progmodel.facets.object.regex.RegExFacetAbstract;
+
+
+public class RegExFacetAnnotationForParameter extends RegExFacetAbstract {
+
+    private final Pattern pattern;
+
+    public RegExFacetAnnotationForParameter(
+            final String validation,
+            final String format,
+            final boolean caseSensitive,
+            final FacetHolder holder) {
+        super(validation, format, caseSensitive, holder);
+        pattern = Pattern.compile(validation(), patternFlags());
+    }
+
+    public String format(final String text) {
+        if (text == null) {
+            return "<not a string>";
+        }
+        if (format() == null || format().length() == 0) {
+            return text;
+        }
+        return pattern.matcher(text).replaceAll(format());
+    }
+
+    public boolean doesNotMatch(final String text) {
+        if (text == null) {
+            return true;
+        }
+        return !pattern.matcher(text).matches();
+    }
+
+    private int patternFlags() {
+        return !caseSensitive() ? Pattern.CASE_INSENSITIVE : 0;
+    }
+
+}
+

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/regexannot/RegExFacetAnnotationForParameterFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/regexannot/RegExFacetAnnotationForParameterFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/regexannot/RegExFacetAnnotationForParameterFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/validate/regexannot/RegExFacetAnnotationForParameterFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,89 @@
+/*
+ *  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.validate.regexannot;
+
+import java.lang.annotation.Annotation;
+
+import org.apache.isis.applib.annotation.RegEx;
+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.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
+import org.apache.isis.core.progmodel.facets.object.regex.RegExFacet;
+import org.apache.isis.core.progmodel.facets.object.regex.TitleFacetFormattedByRegex;
+
+
+public class RegExFacetAnnotationForParameterFacetFactory extends AnnotationBasedFacetFactoryAbstract {
+
+    public RegExFacetAnnotationForParameterFacetFactory() {
+        super(FeatureType.PARAMETERS_ONLY);
+    }
+
+    @Override
+    public void processParams(ProcessParameterContext processParameterContext) {
+        final Class<?>[] parameterTypes = processParameterContext.getMethod().getParameterTypes();
+        if (processParameterContext.getParamNum() >= parameterTypes.length) {
+            // ignore
+            return;
+        }
+        if (!isString(parameterTypes[processParameterContext.getParamNum()])) {
+            return;
+        }
+
+        final Annotation[] parameterAnnotations = getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
+        for (int j = 0; j < parameterAnnotations.length; j++) {
+            if (parameterAnnotations[j] instanceof RegEx) {
+                final RegEx annotation = (RegEx) parameterAnnotations[j];
+                addRegexFacetAndCorrespondingTitleFacet(processParameterContext.getFacetHolder(), annotation);
+                return;
+            }
+        }
+    }
+
+    private void addRegexFacetAndCorrespondingTitleFacet(final FacetHolder holder, final RegEx annotation) {
+        final RegExFacet regexFacet = createRegexFacet(annotation, holder);
+        if (regexFacet == null) {
+            return;
+        }
+        FacetUtil.addFacet(regexFacet);
+
+        final TitleFacet titleFacet = createTitleFacet(regexFacet);
+        FacetUtil.addFacet(titleFacet);
+    }
+
+    private RegExFacet createRegexFacet(final RegEx annotation, final FacetHolder holder) {
+        if (annotation == null) {
+            return null;
+        }
+
+        final String validationExpression = annotation.validation();
+        final boolean caseSensitive = annotation.caseSensitive();
+        final String formatExpression = annotation.format();
+
+        return new RegExFacetAnnotationForParameter(validationExpression, formatExpression, caseSensitive, holder);
+    }
+
+    private TitleFacet createTitleFacet(final RegExFacet regexFacet) {
+        return new TitleFacetFormattedByRegex(regexFacet);
+    }
+
+}

Modified: 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=1060035&r1=1060034&r2=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -52,7 +52,7 @@ public class PropertyAccessorFacetFactor
         processMethodContext.removeMethod(accessorMethod);
         
         final FacetHolder property = processMethodContext.getFacetHolder();
-        FacetUtil.addFacet(new PropertyOrCollectionAccessorFacetViaAccessor(accessorMethod, property));
+        FacetUtil.addFacet(new PropertyAccessorFacetViaAccessor(accessorMethod, property));
     }
 
 

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetViaAccessor.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetViaAccessor.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyOrCollectionAccessorFacetViaAccessor.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java Mon Jan 17 18:22:58 2011
@@ -29,13 +29,14 @@ 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.accessor.PropertyOrCollectionAccessorFacetAbstract;
 
 
-public class PropertyOrCollectionAccessorFacetViaAccessor extends PropertyOrCollectionAccessorFacetAbstract implements ImperativeFacet {
+public class PropertyAccessorFacetViaAccessor extends PropertyOrCollectionAccessorFacetAbstract implements ImperativeFacet {
 
     private final Method method;
 
-    public PropertyOrCollectionAccessorFacetViaAccessor(
+    public PropertyAccessorFacetViaAccessor(
     		final Method method, 
     		final FacetHolder holder) {
         super(holder);

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java Mon Jan 17 18:22:58 2011
@@ -18,11 +18,12 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.propparam.enums;
+package org.apache.isis.core.progmodel.facets.properties.choices.enums;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLookup;
 import org.apache.isis.core.progmodel.facets.properties.choices.PropertyChoicesFacetAbstract;

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,64 @@
+/*
+ *  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.enums;
+
+
+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.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+
+public class PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory extends
+    FacetFactoryAbstract implements AdapterMapAware {
+
+    private AdapterMap adapterMap;
+
+    public PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+    @Override
+    public void process(ProcessMethodContext processMethodContext) {
+
+        Class<?> returnType = processMethodContext.getMethod().getReturnType();
+        
+        if (!returnType.isEnum()) {
+            return;
+        }
+        
+        FacetUtil.addFacet(new PropertyChoicesFacetDerivedFromChoicesFacet(processMethodContext.getFacetHolder(), getSpecificationLookup()));
+    }
+    
+
+    ///////////////////////////////////////////////
+    // Injected
+    ///////////////////////////////////////////////
+
+    protected AdapterMap getAdapterMap() {
+        return adapterMap;
+    }
+    
+    @Override
+    public void setAdapterMap(AdapterMap adapterMap) {
+        this.adapterMap = adapterMap;
+    }
+}

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetFactory.java (from r1059849, 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/method/PropertyChoicesFacetFactory.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetFactory.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetFactory.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -18,7 +18,7 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.properties.choices;
+package org.apache.isis.core.progmodel.facets.properties.choices.method;
 
 import java.lang.reflect.Method;
 

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java (from r1059849, 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/method/PropertyChoicesFacetViaMethod.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/PropertyChoicesFacetViaMethod.java&r1=1059849&r2=1060035&rev=1060035&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/method/PropertyChoicesFacetViaMethod.java Mon Jan 17 18:22:58 2011
@@ -18,21 +18,22 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.properties.choices;
+package org.apache.isis.core.progmodel.facets.properties.choices.method;
 
 import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.isis.core.commons.lang.ArrayUtil;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
 import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.ChoicesUtils;
 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.util.ArrayUtil;
+import org.apache.isis.core.progmodel.facets.properties.choices.PropertyChoicesFacetAbstract;
+import org.apache.isis.core.progmodel.util.CollectionUtils;
 
 
 public class PropertyChoicesFacetViaMethod extends PropertyChoicesFacetAbstract implements ImperativeFacet {
@@ -82,7 +83,7 @@ public class PropertyChoicesFacetViaMeth
             return ArrayUtil.getObjectAsObjectArray(options);
         }
         final ObjectSpecification specification = specificationLookup.loadSpecification(choicesClass);
-        return ChoicesUtils.getCollectionAsObjectArray(options, specification, getAdapterMap());
+        return CollectionUtils.getCollectionAsObjectArray(options, specification, getAdapterMap());
     }
 
 	@Override

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/fromtype/PropertyDefaultDerivedFromTypeFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/fromtype/PropertyDefaultDerivedFromTypeFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/fromtype/PropertyDefaultDerivedFromTypeFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/fromtype/PropertyDefaultDerivedFromTypeFacetFactory.java Mon Jan 17 18:22:58 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.defaults.fromtype;
+
+
+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.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.progmodel.facets.object.defaults.DefaultedFacet;
+
+
+public class PropertyDefaultDerivedFromTypeFacetFactory extends AnnotationBasedFacetFactoryAbstract implements AdapterMapAware {
+
+    private AdapterMap adapterMap;
+
+	public PropertyDefaultDerivedFromTypeFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+
+    /**
+     * If there is a {@link DefaultedFacet} on the properties return type, then installs a
+     * {@link PropertyDefaultFacet} for the property with the same default.
+     */
+    @Override
+    public void process(ProcessMethodContext processMethodContext) {
+        // don't overwrite any defaults that might already picked up
+        final PropertyDefaultFacet existingDefaultFacet = processMethodContext.getFacetHolder().getFacet(PropertyDefaultFacet.class);
+		if (existingDefaultFacet != null && !existingDefaultFacet.isNoop()) {
+            return;
+        }
+
+        // try to infer defaults from the underlying return type
+        final Class<?> returnType = processMethodContext.getMethod().getReturnType();
+        final DefaultedFacet returnTypeDefaultedFacet = getDefaultedFacet(returnType);
+        if (returnTypeDefaultedFacet != null) {
+            final PropertyDefaultFacetDerivedFromDefaultedFacet propertyFacet = new PropertyDefaultFacetDerivedFromDefaultedFacet(
+                    returnTypeDefaultedFacet, processMethodContext.getFacetHolder(), getAdapterMap());
+            FacetUtil.addFacet(propertyFacet);
+        }
+    }
+
+    private DefaultedFacet getDefaultedFacet(final Class<?> paramType) {
+        final ObjectSpecification paramTypeSpec = 
+            getSpecificationLookup().loadSpecification(paramType);
+        return paramTypeSpec.getFacet(DefaultedFacet.class);
+    }
+
+    // ////////////////////////////////////////////////////////////////////
+    // Injected
+    // ////////////////////////////////////////////////////////////////////
+
+    public AdapterMap getAdapterMap() {
+        return adapterMap;
+    }
+    
+    @Override
+    public void setAdapterMap(AdapterMap adapterMap) {
+        this.adapterMap = adapterMap;
+    }
+
+}

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/defaults/PropertyDefaultFacetDerivedFromDefaultedFacet.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/defaults/PropertyDefaultFacetDerivedFromDefaultedFacet.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/defaults/PropertyDefaultFacetDerivedFromDefaultedFacet.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java Mon Jan 17 18:22:58 2011
@@ -18,13 +18,14 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.defaults;
+package org.apache.isis.core.progmodel.facets.properties.defaults.fromtype;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.core.progmodel.facets.object.defaults.DefaultedFacet;
 
 
 public class PropertyDefaultFacetDerivedFromDefaultedFacet extends FacetAbstract implements PropertyDefaultFacet {

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetFactory.java (from r1059849, 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/method/PropertyDefaultFacetFactory.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetFactory.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetFactory.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -18,7 +18,7 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.properties.defaults;
+package org.apache.isis.core.progmodel.facets.properties.defaults.method;
 
 import java.lang.reflect.Method;
 

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetViaMethod.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetViaMethod.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/PropertyDefaultFacetViaMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java Mon Jan 17 18:22:58 2011
@@ -18,7 +18,7 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.properties.defaults;
+package org.apache.isis.core.progmodel.facets.properties.defaults.method;
 
 import java.lang.reflect.Method;
 import java.util.Collections;
@@ -32,6 +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.properties.defaults.PropertyDefaultFacetAbstract;
 
 
 public class PropertyDefaultFacetViaMethod extends PropertyDefaultFacetAbstract implements ImperativeFacet {

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/derived/inferred/DerivedFacetInferred.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/derived/DerivedFacetInferred.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/derived/inferred/DerivedFacetInferred.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/derived/inferred/DerivedFacetInferred.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/derived/DerivedFacetInferred.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/derived/DerivedFacetInferred.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/derived/inferred/DerivedFacetInferred.java Mon Jan 17 18:22:58 2011
@@ -18,12 +18,12 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.propcoll.derived;
+package org.apache.isis.core.progmodel.facets.properties.derived.inferred;
 
 import org.apache.isis.applib.events.UsabilityEvent;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.notpersisted.NotPersistedFacetAbstract;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
-import org.apache.isis.core.progmodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
 
 
 public class DerivedFacetInferred extends NotPersistedFacetAbstract {

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutable.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/DisabledFacetDerivedFromImmutable.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutable.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutable.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/DisabledFacetDerivedFromImmutable.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/DisabledFacetDerivedFromImmutable.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutable.java Mon Jan 17 18:22:58 2011
@@ -18,7 +18,7 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.object.immutable;
+package org.apache.isis.core.progmodel.facets.properties.disabled.fromimmutable;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -26,9 +26,9 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.progmodel.facets.members.disable.DisabledFacetAbstract;
 
 
-public class DisabledFacetDerivedFromImmutable extends DisabledFacetAbstract {
+public class DisabledFacetForPropertyDerivedFromImmutable extends DisabledFacetAbstract {
 
-    public DisabledFacetDerivedFromImmutable(final ImmutableFacet immutableFacet, final FacetHolder holder) {
+    public DisabledFacetForPropertyDerivedFromImmutable(final ImmutableFacet immutableFacet, final FacetHolder holder) {
         super(immutableFacet.value(), holder);
     }
 

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,53 @@
+/*
+ *  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.disabled.fromimmutable;
+
+
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+
+/**
+ * REVIEW: I'm not sure this {@link FacetFactory} actually makes sense.  Just because a type is immutable,
+ * doesn't imply that the property can't change the instance that it refers to?
+ */
+public class DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory extends AnnotationBasedFacetFactoryAbstract {
+
+    public DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+    @Override
+    public void process(ProcessMethodContext processMethodContext) {
+    	ObjectSpecification spec = getSpecificationLookup().loadSpecification(processMethodContext.getMethod().getDeclaringClass());
+    	if(spec.containsDoOpFacet(ImmutableFacet.class)) {
+    	    final ImmutableFacet immutableFacet = spec.getFacet(ImmutableFacet.class);
+            final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
+            FacetUtil.addFacet(new DisabledFacetForPropertyDerivedFromImmutable(immutableFacet, facetHolder));
+        }
+    }
+
+}

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/annotation/MandatoryFacetInvertedByOptionalForProperty.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/annotation/MandatoryFacetInvertedByOptional.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/annotation/MandatoryFacetInvertedByOptionalForProperty.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/annotation/MandatoryFacetInvertedByOptionalForProperty.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/annotation/MandatoryFacetInvertedByOptional.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/annotation/MandatoryFacetInvertedByOptional.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/annotation/MandatoryFacetInvertedByOptionalForProperty.java Mon Jan 17 18:22:58 2011
@@ -18,11 +18,11 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.propparam.validate.mandatory.annotation;
+package org.apache.isis.core.progmodel.facets.properties.mandatory.annotation;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.progmodel.facets.propparam.validate.mandatory.MandatoryFacetAbstract;
+import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacetAbstract;
 
 
 /**
@@ -32,9 +32,9 @@ import org.apache.isis.core.progmodel.fa
  * This implementation indicates that the {@link FacetHolder} is <i>not</i> mandatory, as per
  * {@link #isInvertedSemantics()}.
  */
-public class MandatoryFacetInvertedByOptional extends MandatoryFacetAbstract {
+public class MandatoryFacetInvertedByOptionalForProperty extends MandatoryFacetAbstract {
 
-    public MandatoryFacetInvertedByOptional(final FacetHolder holder) {
+    public MandatoryFacetInvertedByOptionalForProperty(final FacetHolder holder) {
         super(holder);
     }
 

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/annotation/OptionalAnnotationForPropertyFacetFactory.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/annotation/OptionalAnnotationFacetFactory.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/annotation/OptionalAnnotationForPropertyFacetFactory.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/annotation/OptionalAnnotationForPropertyFacetFactory.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/annotation/OptionalAnnotationFacetFactory.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/annotation/OptionalAnnotationFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/annotation/OptionalAnnotationForPropertyFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -18,22 +18,20 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.propparam.validate.mandatory.annotation;
+package org.apache.isis.core.progmodel.facets.properties.mandatory.annotation;
 
-import java.lang.annotation.Annotation;
-
 import org.apache.isis.applib.annotation.Optional;
 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.facets.AnnotationBasedFacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.propparam.validate.mandatory.MandatoryFacet;
+import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacet;
 
 
-public class OptionalAnnotationFacetFactory extends AnnotationBasedFacetFactoryAbstract {
+public class OptionalAnnotationForPropertyFacetFactory extends AnnotationBasedFacetFactoryAbstract {
 
-    public OptionalAnnotationFacetFactory() {
-        super(FeatureType.PROPERTIES_AND_PARAMETERS);
+    public OptionalAnnotationForPropertyFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
     }
 
     @Override
@@ -49,28 +47,8 @@ public class OptionalAnnotationFacetFact
         FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
     }
 
-
-    @Override
-    public void processParams(ProcessParameterContext processParameterContext) {
-        final Class<?>[] parameterTypes = processParameterContext.getMethod().getParameterTypes();
-        if (processParameterContext.getParamNum() >= parameterTypes.length) {
-            // ignore
-            return;
-        }
-        if (parameterTypes[processParameterContext.getParamNum()].isPrimitive()) {
-            return;
-        }
-        final Annotation[] parameterAnnotations = getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
-        for (int j = 0; j < parameterAnnotations.length; j++) {
-            if (parameterAnnotations[j] instanceof Optional) {
-                FacetUtil.addFacet(new MandatoryFacetInvertedByOptional(processParameterContext.getFacetHolder()));
-                return;
-            }
-        }
-    }
-
     private MandatoryFacet create(final Optional annotation, final FacetHolder holder) {
-        return annotation != null ? new MandatoryFacetInvertedByOptional(holder) : null;
+        return annotation != null ? new MandatoryFacetInvertedByOptionalForProperty(holder) : null;
     }
 
 }

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/dflt/MandatoryDefaultForPropertiesFacetFactory.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/dflt/MandatoryDefaultFacetFactory.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/dflt/MandatoryDefaultForPropertiesFacetFactory.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/dflt/MandatoryDefaultForPropertiesFacetFactory.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/dflt/MandatoryDefaultFacetFactory.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/validate/mandatory/dflt/MandatoryDefaultFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/dflt/MandatoryDefaultForPropertiesFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -18,7 +18,7 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.propparam.validate.mandatory.dflt;
+package org.apache.isis.core.progmodel.facets.properties.mandatory.dflt;
 
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -26,9 +26,9 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.propparam.validate.mandatory.MandatoryFacet;
+import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacet;
+import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacetDefault;
 import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
-import org.apache.isis.core.progmodel.facets.propparam.validate.mandatory.MandatoryFacetDefault;
 
 
 /**
@@ -39,10 +39,10 @@ import org.apache.isis.core.progmodel.fa
  * other {@link MandatoryFacet} implementations which don't require mandatory semantics will potentially
  * replace these where the property or parameter is annotated or otherwise indicated as being optional.
  */
-public class MandatoryDefaultFacetFactory extends FacetFactoryAbstract {
+public class MandatoryDefaultForPropertiesFacetFactory extends FacetFactoryAbstract {
 
-    public MandatoryDefaultFacetFactory() {
-        super(FeatureType.PROPERTIES_AND_PARAMETERS);
+    public MandatoryDefaultForPropertiesFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
     }
 
     @Override
@@ -50,11 +50,6 @@ public class MandatoryDefaultFacetFactor
         FacetUtil.addFacet(create(processMethodContext.getFacetHolder()));
     }
 
-    @Override
-    public void processParams(ProcessParameterContext processParameterContext) {
-        FacetUtil.addFacet(create(processParameterContext.getFacetHolder()));
-    }
-
     private MandatoryFacet create(final FacetHolder holder) {
         return new MandatoryFacetDefault(holder);
     }

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/staticmethod/MandatoryFacetOptionalViaMethodForProperty.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/mandatory/staticmethod/MandatoryFacetOverriddenByMethod.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/staticmethod/MandatoryFacetOptionalViaMethodForProperty.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/staticmethod/MandatoryFacetOptionalViaMethodForProperty.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/mandatory/staticmethod/MandatoryFacetOverriddenByMethod.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/param/mandatory/staticmethod/MandatoryFacetOverriddenByMethod.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/staticmethod/MandatoryFacetOptionalViaMethodForProperty.java Mon Jan 17 18:22:58 2011
@@ -18,11 +18,11 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.param.mandatory.staticmethod;
+package org.apache.isis.core.progmodel.facets.properties.mandatory.staticmethod;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.progmodel.facets.propparam.validate.mandatory.MandatoryFacetAbstract;
+import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacetAbstract;
 
 
 /**
@@ -32,9 +32,9 @@ import org.apache.isis.core.progmodel.fa
  * This implementation indicates that the {@link FacetHolder} is <i>not</i> mandatory, as per
  * {@link #isInvertedSemantics()}.
  */
-public class MandatoryFacetOverriddenByMethod extends MandatoryFacetAbstract {
+public class MandatoryFacetOptionalViaMethodForProperty extends MandatoryFacetAbstract {
 
-    public MandatoryFacetOverriddenByMethod(final FacetHolder holder) {
+    public MandatoryFacetOptionalViaMethodForProperty(final FacetHolder holder) {
         super(holder);
     }
 

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/staticmethod/PropertyOptionalFacetFactory.java (from r1059849, 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/staticmethod/PropertyOptionalFacetFactory.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/staticmethod/PropertyOptionalFacetFactory.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/PropertyOptionalFacetFactory.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/PropertyOptionalFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/mandatory/staticmethod/PropertyOptionalFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -18,7 +18,7 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.properties.mandatory;
+package org.apache.isis.core.progmodel.facets.properties.mandatory.staticmethod;
 
 import java.lang.reflect.Method;
 
@@ -32,7 +32,6 @@ import org.apache.isis.core.metamodel.me
 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 {
@@ -67,7 +66,7 @@ public class PropertyOptionalFacetFactor
                 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));
+        FacetUtil.addFacet(new MandatoryFacetOptionalViaMethodForProperty(property));
     }
 
     private static boolean indicatesOptional(final Method method) {

Modified: 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=1060035&r1=1060034&r2=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetAndClearFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetAndClearFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -32,7 +32,7 @@ import org.apache.isis.core.progmodel.fa
 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;
+import org.apache.isis.core.progmodel.facets.properties.derived.inferred.DerivedFacetInferred;
 
 
 public class PropertySetAndClearFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/multiline/annotation/MultiLineAnnotationOnPropertyFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/multiline/annotation/MultiLineAnnotationOnPropertyFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/multiline/annotation/MultiLineAnnotationOnPropertyFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/multiline/annotation/MultiLineAnnotationOnPropertyFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,52 @@
+/*
+ *  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.multiline.annotation;
+
+import org.apache.isis.applib.annotation.MultiLine;
+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.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.multiline.MultiLineFacet;
+
+
+public class MultiLineAnnotationOnPropertyFacetFactory extends AnnotationBasedFacetFactoryAbstract {
+
+    public MultiLineAnnotationOnPropertyFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+    @Override
+    public void process(ProcessMethodContext processMethodContext) {
+        final Class<?> returnType = processMethodContext.getMethod().getReturnType();
+        if (!isString(returnType)) {
+            return;
+        }
+        final MultiLine annotation = getAnnotation(processMethodContext.getMethod(), MultiLine.class);
+        FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
+    }
+
+    private MultiLineFacet create(final MultiLine annotation, final FacetHolder holder) {
+        return (annotation != null) ? new MultiLineFacetAnnotationOnProperty(annotation.numberOfLines(), annotation.preventWrapping(),
+                holder) : null;
+    }
+
+}

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/multiline/annotation/MultiLineFacetAnnotationOnProperty.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/multiline/annotation/MultiLineFacetAnnotationOnProperty.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/multiline/annotation/MultiLineFacetAnnotationOnProperty.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/multiline/annotation/MultiLineFacetAnnotationOnProperty.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,34 @@
+/*
+ *  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.multiline.annotation;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.multiline.MultiLineFacetAbstract;
+
+
+public class MultiLineFacetAnnotationOnProperty extends MultiLineFacetAbstract {
+
+    public MultiLineFacetAnnotationOnProperty(final int numberOfLines, final boolean preventWrapping, final FacetHolder holder) {
+        super(numberOfLines, preventWrapping, holder);
+    }
+
+}
+

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/notpersisted/annotation/NotPersistedAnnotationForPropertyFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/notpersisted/annotation/NotPersistedAnnotationForPropertyFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/notpersisted/annotation/NotPersistedAnnotationForPropertyFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/notpersisted/annotation/NotPersistedAnnotationForPropertyFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,48 @@
+/*
+ *  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.notpersisted.annotation;
+
+
+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.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.notpersisted.NotPersistedFacet;
+
+
+public class NotPersistedAnnotationForPropertyFacetFactory extends AnnotationBasedFacetFactoryAbstract {
+
+    public NotPersistedAnnotationForPropertyFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+    @Override
+    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) {
+        return annotation == null ? null : new NotPersistedFacetAnnotationForProperty(holder);
+    }
+
+}

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/notpersisted/annotation/NotPersistedFacetAnnotationForProperty.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/notpersisted/NotPersistedFacetAnnotation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/notpersisted/annotation/NotPersistedFacetAnnotationForProperty.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/notpersisted/annotation/NotPersistedFacetAnnotationForProperty.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/notpersisted/NotPersistedFacetAnnotation.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propcoll/notpersisted/NotPersistedFacetAnnotation.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/notpersisted/annotation/NotPersistedFacetAnnotationForProperty.java Mon Jan 17 18:22:58 2011
@@ -18,16 +18,17 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.propcoll.notpersisted;
+package org.apache.isis.core.progmodel.facets.properties.notpersisted.annotation;
 
 import org.apache.isis.applib.events.UsabilityEvent;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.notpersisted.NotPersistedFacetAbstract;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 
 
-public class NotPersistedFacetAnnotation extends NotPersistedFacetAbstract {
+public class NotPersistedFacetAnnotationForProperty extends NotPersistedFacetAbstract {
 
-    public NotPersistedFacetAnnotation(final FacetHolder holder) {
+    public NotPersistedFacetAnnotationForProperty(final FacetHolder holder) {
         super(holder);
     }
 

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/annotation/TypicalLengthAnnotationOnPropertyFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/annotation/TypicalLengthAnnotationOnPropertyFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/annotation/TypicalLengthAnnotationOnPropertyFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/annotation/TypicalLengthAnnotationOnPropertyFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,49 @@
+/*
+ *  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.typicallen.annotation;
+
+import org.apache.isis.applib.annotation.TypicalLength;
+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.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.typicallength.TypicalLengthFacet;
+
+
+public class TypicalLengthAnnotationOnPropertyFacetFactory extends AnnotationBasedFacetFactoryAbstract {
+
+    public TypicalLengthAnnotationOnPropertyFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+    @Override
+    public void process(ProcessMethodContext processMethodContext) {
+        final TypicalLength annotation = getAnnotation(processMethodContext.getMethod(), TypicalLength.class);
+        final TypicalLengthFacet facet = create(annotation, processMethodContext.getFacetHolder());
+
+        FacetUtil.addFacet(facet);
+    }
+
+    private TypicalLengthFacet create(final TypicalLength annotation, final FacetHolder holder) {
+        return annotation != null ? new TypicalLengthFacetAnnotationOnProperty(annotation.value(), holder) : null;
+    }
+
+}

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/annotation/TypicalLengthFacetAnnotationOnProperty.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/annotation/TypicalLengthFacetAnnotationOnProperty.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/annotation/TypicalLengthFacetAnnotationOnProperty.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/annotation/TypicalLengthFacetAnnotationOnProperty.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,42 @@
+/*
+ *  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.typicallen.annotation;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.typicallength.TypicalLengthFacetAbstract;
+
+
+public class TypicalLengthFacetAnnotationOnProperty extends TypicalLengthFacetAbstract {
+
+    private final int value;
+
+	public TypicalLengthFacetAnnotationOnProperty(final int value, final FacetHolder holder) {
+        super(holder, false);
+        this.value = value;
+    }
+
+	@Override
+	public int value() {
+		return value;
+	}
+
+}
+

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/fromtype/TypicalLengthFacetForPropertyDerivedFromType.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/typicallength/derived/TypicalLengthFacetDerivedFromType.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/fromtype/TypicalLengthFacetForPropertyDerivedFromType.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/fromtype/TypicalLengthFacetForPropertyDerivedFromType.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/typicallength/derived/TypicalLengthFacetDerivedFromType.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/typicallength/derived/TypicalLengthFacetDerivedFromType.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/fromtype/TypicalLengthFacetForPropertyDerivedFromType.java Mon Jan 17 18:22:58 2011
@@ -18,19 +18,19 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.propparam.typicallength.derived;
+package org.apache.isis.core.progmodel.facets.properties.typicallen.fromtype;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.propparam.multiline.MultiLineFacet;
-import org.apache.isis.core.metamodel.facets.propparam.typicallength.TypicalLengthFacet;
-import org.apache.isis.core.progmodel.facets.propparam.typicallength.TypicalLengthFacetAbstract;
+import org.apache.isis.core.metamodel.facets.multiline.MultiLineFacet;
+import org.apache.isis.core.metamodel.facets.typicallength.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.facets.typicallength.TypicalLengthFacetAbstract;
 
 
-public class TypicalLengthFacetDerivedFromType extends TypicalLengthFacetAbstract {
+public class TypicalLengthFacetForPropertyDerivedFromType extends TypicalLengthFacetAbstract {
 
     private final TypicalLengthFacet typicalLengthFacet;
 
-	public TypicalLengthFacetDerivedFromType(final TypicalLengthFacet typicalLengthFacet, final FacetHolder holder) {
+	public TypicalLengthFacetForPropertyDerivedFromType(final TypicalLengthFacet typicalLengthFacet, final FacetHolder holder) {
         super(holder, true);
         this.typicalLengthFacet = typicalLengthFacet;
     }

Copied: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/fromtype/TypicalLengthFacetForPropertyDerivedFromTypeFacetFactory.java (from r1059849, incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/typicallength/derived/TypicalLengthDerivedFromTypeFacetFactory.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/fromtype/TypicalLengthFacetForPropertyDerivedFromTypeFacetFactory.java?p2=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/fromtype/TypicalLengthFacetForPropertyDerivedFromTypeFacetFactory.java&p1=incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/typicallength/derived/TypicalLengthDerivedFromTypeFacetFactory.java&r1=1059849&r2=1060035&rev=1060035&view=diff
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/propparam/typicallength/derived/TypicalLengthDerivedFromTypeFacetFactory.java (original)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/typicallen/fromtype/TypicalLengthFacetForPropertyDerivedFromTypeFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -18,39 +18,35 @@
  */
 
 
-package org.apache.isis.core.progmodel.facets.propparam.typicallength.derived;
+package org.apache.isis.core.progmodel.facets.properties.typicallen.fromtype;
 
 
 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.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.propparam.typicallength.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.typicallength.TypicalLengthFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 
-public class TypicalLengthDerivedFromTypeFacetFactory extends FacetFactoryAbstract {
+public class TypicalLengthFacetForPropertyDerivedFromTypeFacetFactory extends FacetFactoryAbstract {
 
-    public TypicalLengthDerivedFromTypeFacetFactory() {
-        super(FeatureType.PROPERTIES_AND_PARAMETERS);
+    public TypicalLengthFacetForPropertyDerivedFromTypeFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
     }
 
     @Override
     public void process(ProcessMethodContext processMethodContext) {
         final Class<?> type = processMethodContext.getMethod().getReturnType();
-        addFacetDerivedFromTypeIfPresent(processMethodContext.getFacetHolder(), type);
-    }
-
-    @Override
-    public void processParams(ProcessParameterContext processParameterContext) {
-        final Class<?> type = processParameterContext.getMethod().getParameterTypes()[processParameterContext.getParamNum()];
-        addFacetDerivedFromTypeIfPresent(processParameterContext.getFacetHolder(), type);
+        final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
+        addFacetDerivedFromTypeIfPresent(facetHolder, type);
     }
 
     private void addFacetDerivedFromTypeIfPresent(final FacetHolder holder, final Class<?> type) {
         final TypicalLengthFacet facet = getTypicalLengthFacet(type);
         if (facet != null) {
-            FacetUtil.addFacet(new TypicalLengthFacetDerivedFromType(facet, holder));
+            FacetUtil.addFacet(new TypicalLengthFacetForPropertyDerivedFromType(facet, holder));
         }
     }
 

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/maskannot/MaskAnnotationForPropertyFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/maskannot/MaskAnnotationForPropertyFacetFactory.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/maskannot/MaskAnnotationForPropertyFacetFactory.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/maskannot/MaskAnnotationForPropertyFacetFactory.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,98 @@
+/*
+ *  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.validate.maskannot;
+
+
+import org.apache.isis.applib.annotation.Mask;
+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.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.progmodel.facets.object.mask.MaskFacet;
+import org.apache.isis.core.progmodel.facets.object.mask.TitleFacetBasedOnMask;
+
+
+public class MaskAnnotationForPropertyFacetFactory extends AnnotationBasedFacetFactoryAbstract {
+
+    public MaskAnnotationForPropertyFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+    /**
+     * In readiness for supporting <tt>@Value</tt> in the future.
+     */
+    @Override
+    public void process(ProcessClassContext processClassContaxt) {
+        final Mask annotation = getAnnotation(processClassContaxt.getCls(), Mask.class);
+        FacetUtil.addFacet(createMaskFacet(annotation, processClassContaxt.getFacetHolder()));
+    }
+
+    @Override
+    public void process(ProcessMethodContext processMethodContext) {
+        if (processMethodContext.getMethod().getReturnType() == void.class) {
+            return;
+        }
+
+        final Mask annotation = getAnnotation(processMethodContext.getMethod(), Mask.class);
+        addMaskFacetAndCorrespondingTitleFacet(processMethodContext.getFacetHolder(), annotation, processMethodContext.getMethod().getReturnType());
+    }
+
+    @Override
+    public void processParams(ProcessParameterContext processParameterContext) {
+        final Class<?>[] parameterTypes = processParameterContext.getMethod().getParameterTypes();
+        if (processParameterContext.getParamNum() >= parameterTypes.length) {
+            // ignore
+            return;
+        }
+
+        final java.lang.annotation.Annotation[] parameterAnnotations = getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
+        for (int i = 0; i < parameterAnnotations.length; i++) {
+            if (parameterAnnotations[i] instanceof Mask) {
+                final Mask annotation = (Mask) parameterAnnotations[i];
+                addMaskFacetAndCorrespondingTitleFacet(processParameterContext.getFacetHolder(), annotation, parameterTypes[i]);
+                return;
+            }
+        }
+    }
+
+    private MaskFacet createMaskFacet(final Mask annotation, final FacetHolder holder) {
+        return annotation != null ? new MaskFacetAnnotationForProperty(annotation.value(), null, holder) : null;
+    }
+
+    private boolean addMaskFacetAndCorrespondingTitleFacet(final FacetHolder holder, final Mask annotation, Class<?> cls) {
+        final MaskFacet maskFacet = createMaskFacet(annotation, holder);
+        if (maskFacet == null) {
+            return false;
+        }
+        FacetUtil.addFacet(maskFacet);
+
+        ObjectSpecification type = getSpecificationLookup().loadSpecification(cls);
+        final TitleFacet underlyingTitleFacet = type.getFacet(TitleFacet.class);
+        if (underlyingTitleFacet != null) {
+            final TitleFacet titleFacet = new TitleFacetBasedOnMask(maskFacet, underlyingTitleFacet);
+            FacetUtil.addFacet(titleFacet);
+        }
+        return true;
+    }
+
+}

Added: incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/maskannot/MaskFacetAnnotationForProperty.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/maskannot/MaskFacetAnnotationForProperty.java?rev=1060035&view=auto
==============================================================================
--- incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/maskannot/MaskFacetAnnotationForProperty.java (added)
+++ incubator/isis/trunk/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/maskannot/MaskFacetAnnotationForProperty.java Mon Jan 17 18:22:58 2011
@@ -0,0 +1,53 @@
+/*
+ *  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.validate.maskannot;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.progmodel.facets.object.mask.MaskEvaluator;
+import org.apache.isis.core.progmodel.facets.object.mask.MaskFacetAbstract;
+
+
+public class MaskFacetAnnotationForProperty extends MaskFacetAbstract {
+    private final MaskEvaluator evaluator;
+
+    public MaskFacetAnnotationForProperty(final String outputMask, String inputMask, final FacetHolder holder) {
+        super(outputMask, holder);
+        evaluator = inputMask == null ? null : new MaskEvaluator(inputMask);
+    }
+
+    public boolean doesNotMatch(final ObjectAdapter adapter) {
+        if (evaluator == null) {
+            return false;
+        } else {
+            if (adapter == null) {
+                return false;
+            }
+            final Object object = adapter.getObject();
+            if (object == null) {
+                return false;
+            }
+            return !evaluator.evaluate(object.toString());
+        }
+    }
+
+}
+