This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 84248b09319ea2f1ad46406b28a76260d0246c9d
Author: Andi Huber <[email protected]>
AuthorDate: Sat Mar 16 09:22:13 2024 +0100

    CAUSEWAY-3326: fixes ObjectCreator not injecting services
---
 .../metamodel/objectmanager/ObjectCreator.java     |    6 +-
 .../good/ProperAnnotationWithSpecification.java    |   62 ++
 .../testdomain/model/good/ProperMemberSupport.java |   14 +-
 .../interaction/DomainObjectTesterFactory.java     |   38 +-
 .../DomainModelTest_usingGoodDomain.java           |   20 +
 .../MetaModelRegressionTest.verify.approved.xml    | 1097 ++++++++++++++++++++
 6 files changed, 1232 insertions(+), 5 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
index 1d1e05961c..67146c8985 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
@@ -21,6 +21,7 @@ package org.apache.causeway.core.metamodel.objectmanager;
 import java.lang.reflect.Array;
 import java.lang.reflect.Modifier;
 
+import org.apache.causeway.applib.spec.Specification;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
 import org.apache.causeway.commons.internal.factory._InstanceUtil;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
@@ -71,6 +72,10 @@ interface ObjectCreator {
             }
 
             val pojo = instantiate(spec); // can only be a scalar
+            
if(Specification.class.isAssignableFrom(spec.getCorrespondingClass())
+                    || !spec.isValue()) {
+                spec.getServiceInjector().injectServicesInto(pojo);
+            }
             val domainObject = ManagedObject.adaptSingular(spec, pojo);
 
             // initialize new object
@@ -82,7 +87,6 @@ interface ObjectCreator {
             }
 
             return domainObject;
-
         }
 
         //  -- HELPER
diff --git 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/model/good/ProperAnnotationWithSpecification.java
 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/model/good/ProperAnnotationWithSpecification.java
new file mode 100644
index 0000000000..80890a4703
--- /dev/null
+++ 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/model/good/ProperAnnotationWithSpecification.java
@@ -0,0 +1,62 @@
+/*
+ *  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.causeway.testdomain.model.good;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.annotation.Parameter;
+import org.apache.causeway.applib.annotation.ParameterLayout;
+import org.apache.causeway.applib.annotation.Property;
+import org.apache.causeway.applib.annotation.PropertyLayout;
+import org.apache.causeway.applib.spec.AbstractSpecification;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+
+@Property(
+        maxLength = ProperAnnotationWithSpecification.MAX_LEN,
+        mustSatisfy = 
ProperAnnotationWithSpecification.ProperSpecification.class)
+@PropertyLayout(named = "Proper Name")
+@Parameter(
+        maxLength = ProperAnnotationWithSpecification.MAX_LEN,
+        mustSatisfy = 
ProperAnnotationWithSpecification.ProperSpecification.class)
+@ParameterLayout(named = "Proper Name")
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, 
ElementType.ANNOTATION_TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ProperAnnotationWithSpecification {
+
+    int MAX_LEN = 40;
+
+    // used for testing whether injection works
+    class ProperSpecification extends AbstractSpecification<String> {
+
+        @Inject private SpecificationLoader specLoader;
+
+        @Override
+        public String satisfiesSafely(final String obj) {
+            return specLoader!=null
+                    ? "injection worked"
+                    : "injection failed";
+        }
+    }
+
+}
diff --git 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/model/good/ProperMemberSupport.java
 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/model/good/ProperMemberSupport.java
index 6d95fd7147..e7221fe44b 100644
--- 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/model/good/ProperMemberSupport.java
+++ 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/model/good/ProperMemberSupport.java
@@ -99,7 +99,6 @@ public class ProperMemberSupport {
 
     @Action
     public void myAction(final String p0, final String p1) {
-
     }
 
     @MemberSupport public String namedMyAction() {
@@ -176,6 +175,14 @@ public class ProperMemberSupport {
         return null;
     }
 
+    // -- PROPER PARAM WITH META-ANNOTATIONS
+
+    @Action
+    public void myActionWithMetaOnParam(
+            @ProperAnnotationWithSpecification
+            final String p0) {
+    }
+
     // -- PROPER PROPERTY
 
     @Property
@@ -214,6 +221,11 @@ public class ProperMemberSupport {
         return "think twice";
     }
 
+    // -- PROPER PROPERTY WITH META-ANNOTATIONS
+
+    @ProperAnnotationWithSpecification
+    @Getter @Setter private String myPropWithMeta;
+
     // -- PROPER COLLECTION
 
     @Collection
diff --git 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/util/interaction/DomainObjectTesterFactory.java
 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/util/interaction/DomainObjectTesterFactory.java
index d67d3f6a1c..23b407a6bc 100644
--- 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/util/interaction/DomainObjectTesterFactory.java
+++ 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/util/interaction/DomainObjectTesterFactory.java
@@ -28,8 +28,6 @@ import java.util.stream.Stream;
 import javax.inject.Inject;
 
 import org.junit.jupiter.api.function.ThrowingSupplier;
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Service;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -37,6 +35,9 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Service;
+
 import org.apache.causeway.applib.Identifier;
 import org.apache.causeway.applib.annotation.Where;
 import 
org.apache.causeway.applib.exceptions.unrecoverable.DomainModelException;
@@ -818,7 +819,38 @@ public class DomainObjectTesterFactory implements 
HasMetaModelContext {
 
                 });
             });
+        }
+
+        /**
+         * Supported by all properties that reflect a value type.
+         * Uses value-semantics under the hood to do the conversion.
+         */
+        public void assertValueUpdateUsingNegotiationTextual(
+                final String parsableProposedValue,
+                final @NonNull String expectedValidationMessage) {
+
+            assertExists(true);
+
+            managedPropertyIfAny
+            .ifPresent(managedProperty->{
+                interactionService.runAnonymous(()->{
+
+                    val propNeg = managedProperty.startNegotiation();
+                    val initialValue = managedProperty.getPropertyValue();
+
+                    assertEquals(initialValue, propNeg.getValue().getValue());
+
+                    
propNeg.getValueAsParsableText().setValue(parsableProposedValue);
+
+                    // yet just pending
+                    assertEquals(initialValue, 
managedProperty.getPropertyValue());
+                    assertEquals(parsableProposedValue, 
propNeg.getValueAsParsableText().getValue());
 
+                    // check expected validation message
+                    propNeg.activateValidationFeedback();
+                    assertEquals(expectedValidationMessage, 
propNeg.getValidationMessage().getValue());
+                });
+            });
         }
 
         @SuppressWarnings("unchecked")
@@ -832,7 +864,7 @@ public class DomainObjectTesterFactory implements 
HasMetaModelContext {
 
             return valueFacet.selectParserForPropertyElseFallback(prop)
                     .parseableTextRepresentation(context,
-                            
managedPropertyIfAny.get().getPropertyValue().getPojo());
+                            
MmUnwrapUtils.single(managedPropertyIfAny.get().getPropertyValue()));
         }
 
     }
diff --git 
a/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
 
b/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index f21d2ea7dd..6232a094b5 100644
--- 
a/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ 
b/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -997,6 +997,26 @@ class DomainModelTest_usingGoodDomain extends 
CausewayIntegrationTestAbstract {
         assertMissesProperty(vmSpec, actionName); // verify don't contributes 
as property
     }
 
+    // -- META ANNOTAIONS
+
+    @Test
+    void propMeta_shouldHonorSpecification() {
+        val propTester = testerFactory
+                .propertyTester(ProperMemberSupport.class, "myPropWithMeta");
+        propTester.assertExists(true);
+        propTester.assertFriendlyName("Proper Name");
+        propTester.assertValueUpdateUsingNegotiationTextual("just a string", 
"injection worked");
+    }
+
+    @Test
+    void actionParamMeta_shouldHonorSpecification() {
+        val actTester = testerFactory
+                .actionTester(ProperMemberSupport.class, 
"myActionWithMetaOnParam");
+        actTester.assertExists(true);
+        //TODO[CAUSEWAY-3326] perhaps tester needs fixing?
+        //actTester.assertValidationMessage("injection worked", true, 
p0->"just a string");
+    }
+
     // -- HELPER
 
     private void assertHasProperty(final ObjectSpecification spec, final 
String propertyId) {
diff --git 
a/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml
 
b/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml
index 9005cd871a..2d527bc845 100644
--- 
a/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml
+++ 
b/regressiontests/domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml
@@ -3230,6 +3230,877 @@
             </mml:act>
         </mml:actions>
     </mml:domainClassDto>
+    <mml:domainClassDto 
id="org.apache.causeway.testdomain.model.good.ProperAnnotationWithSpecification$ProperSpecification">
+        <mml:facets>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName">
+                <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.testdomain.model.good.ProperAnnotationWithSpecification.ProperSpecification#)"/>
+                <mml:attr name="facet" 
value="MemberNamedFacetForStaticMemberName"/>
+                <mml:attr name="originalText" value="Proper Specification"/>
+                <mml:attr name="precedence" value="DEFAULT"/>
+                <mml:attr name="translated" value="Proper Specification"/>
+            </mml:facet>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.domainobjectlayout.BookmarkPolicyFacetForDomainObjectLayoutXml">
+                <mml:attr name="bookmarkPolicy" value="AS_ROOT"/>
+                <mml:attr name="facet" 
value="BookmarkPolicyFacetForDomainObjectLayoutXml"/>
+                <mml:attr name="precedence" value="LOW"/>
+            </mml:facet>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.grid.GridFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.object.grid.GridFacetDefault">
+                <mml:attr name="facet" value="GridFacetDefault"/>
+                <mml:attr name="precedence" value="DEFAULT"/>
+            </mml:facet>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacetFromAuthorization">
+                <mml:attr name="facet" 
value="HiddenTypeFacetFromAuthorization"/>
+                <mml:attr name="interactionAdvisors" value="HidingOrShowing"/>
+                <mml:attr name="precedence" value="HIGH"/>
+            </mml:facet>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.objectvalidprops.ObjectValidPropertiesFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.objectvalidprops.impl.ObjectValidPropertiesFacetImpl">
+                <mml:attr name="facet" value="ObjectValidPropertiesFacetImpl"/>
+                <mml:attr name="interactionAdvisors" value="Validating"/>
+                <mml:attr name="precedence" value="DEFAULT"/>
+            </mml:facet>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.paged.PagedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.fallback.PagedFacetFromConfiguration">
+                <mml:attr name="facet" value="PagedFacetFromConfiguration"/>
+                <mml:attr name="precedence" value="INFERRED"/>
+                <mml:attr name="value" value="25"/>
+            </mml:facet>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.publish.entitychange.EntityChangePublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.domainobject.entitychangepublishing.EntityChangePublishingFacetFromConfiguration">
+                <mml:attr name="facet" 
value="EntityChangePublishingFacetFromConfiguration"/>
+                <mml:attr name="precedence" value="DEFAULT"/>
+            </mml:facet>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.domainobjectlayout.tabledec.TableDecoratorFacetFromConfiguration">
+                <mml:attr name="facet" 
value="TableDecoratorFacetFromConfiguration"/>
+                <mml:attr name="precedence" value="DEFAULT"/>
+                <mml:attr name="value" 
value="org.apache.causeway.applib.annotation.TableDecorator.Default"/>
+            </mml:facet>
+            <mml:facet 
id="org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization.AuthorizationFacet"
 
fqcn="org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization.AuthorizationFacetImpl">
+                <mml:attr name="facet" value="AuthorizationFacetImpl"/>
+                <mml:attr name="interactionAdvisors" value="HidingOrShowing, 
DisablingOrEnabling"/>
+                <mml:attr name="precedence" value="DEFAULT"/>
+            </mml:facet>
+        </mml:facets>
+        <mml:properties/>
+        <mml:collections/>
+        <mml:actions>
+            <mml:act id="downloadColumnOrderTxtFilesAsZip" mixedIn="true">
+                <mml:facets>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionExplicitFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.services.columnorder.Object_downloadColumnOrderTxtFilesAsZip.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" value="ActionDomainEventFacet"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating, HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction">
+                        <mml:attr name="declaringType" 
value="org.apache.causeway.applib.services.columnorder.Object_downloadColumnOrderTxtFilesAsZip"/>
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.services.columnorder.Object_downloadColumnOrderTxtFilesAsZip.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" 
value="ActionInvocationFacetForAction"/>
+                        <mml:attr name="intent.act" value="EXECUTE"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="methods" value="public 
org.apache.causeway.applib.value.Blob 
org.apache.causeway.applib.services.columnorder.Object_downloadColumnOrderTxtFilesAsZip.act(java.lang.String)"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="returnType" 
value="org.apache.causeway.applib.value.Blob"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet">
+                        <mml:attr name="contributing" value="AS_ACTION"/>
+                        <mml:attr name="facet" 
value="ContributingFacetAbstract.1"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="ActionPositionFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="PANEL_DROPDOWN"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation">
+                        <mml:attr name="deploymentType" value="PRODUCTION"/>
+                        <mml:attr name="facet" 
value="PrototypeFacetForActionAnnotation"/>
+                        <mml:attr name="interactionAdvisors" 
value="HidingOrShowing"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.redirect.RedirectFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.RedirectFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="RedirectFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="redirect" value="AS_CONFIGURED"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionSemanticsFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" value="IDEMPOTENT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.MemberDescribedFacetForActionLayoutAnnotation">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.services.columnorder.Object_downloadColumnOrderTxtFilesAsZip#act())"/>
+                        <mml:attr name="facet" 
value="MemberDescribedFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="originalText" value="Downloads all the 
.columnOrder.txt files for this object and its collections, as a zip file"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Downloads all the 
.columnOrder.txt files for this object and its collections, as a zip file"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.NamedFacetForActionLayoutAnnotation">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.services.columnorder.Object_downloadColumnOrderTxtFilesAsZip#act())"/>
+                        <mml:attr name="facet" 
value="NamedFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="originalText" value="Download 
.columnOrder.txt files (ZIP)"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Download 
.columnOrder.txt files (ZIP)"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.DefaultViewFacetAsConfigured">
+                        <mml:attr name="facet" 
value="DefaultViewFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="value" value="table"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.FaFacetForActionLayoutAnnotation">
+                        <mml:attr name="classes" value="download"/>
+                        <mml:attr name="facet" 
value="FaFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="LEFT"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutGroupFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="groupId" value="metadata"/>
+                        <mml:attr name="groupName" value="Metadata"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutOrderFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="sequence" value="700.2.3"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="CommandPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="ExecutionPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                        <mml:attr name="facet" 
value="PromptStyleFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="promptStyle" value="INLINE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.tabledec.TableDecoratorFacetFromConfiguration">
+                        <mml:attr name="facet" 
value="TableDecoratorFacetFromConfiguration"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" 
value="org.apache.causeway.applib.annotation.TableDecorator.Default"/>
+                    </mml:facet>
+                </mml:facets>
+                
<mml:returnType>org.apache.causeway.applib.value.Blob</mml:returnType>
+                <mml:params>
+                    <mml:param id="fileName" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:type="mml:scalarParam">
+                        <mml:facets>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.param.name.NamedFacetForParameterUsingReflection">
+<mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.services.columnorder.Object_downloadColumnOrderTxtFilesAsZip#act())"/>
+<mml:attr name="facet" value="NamedFacetForParameterUsingReflection"/>
+<mml:attr name="originalText" value="File Name"/>
+<mml:attr name="precedence" value="LOW"/>
+<mml:attr name="translated" value="File Name"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.fallback.LabelAtFacetFromLayoutConfiguration">
+<mml:attr name="facet" value="LabelAtFacetFromLayoutConfiguration"/>
+<mml:attr name="labelPosition" value="NOT_SPECIFIED"/>
+<mml:attr name="precedence" value="LOW"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
+<mml:attr name="facet" value="ActionParameterDefaultsFacetViaMethod"/>
+<mml:attr name="intent.default0Act" value="DEFAULTS"/>
+<mml:attr name="methods" value="public java.lang.String 
org.apache.causeway.applib.services.columnorder.Object_downloadColumnOrderTxtFilesAsZip.default0Act()"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacetFromConfiguration">
+<mml:attr name="facet" 
value="PrecedingParametersPolicyFacetFromConfiguration"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="value" value="RESET"/>
+                            </mml:facet>
+                        </mml:facets>
+                        <mml:type>java.lang.String</mml:type>
+                    </mml:param>
+                </mml:params>
+            </mml:act>
+            <mml:act id="downloadLayout" mixedIn="true">
+                <mml:facets>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionExplicitFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.mixins.layout.Object_downloadLayout.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" value="ActionDomainEventFacet"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating, HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction">
+                        <mml:attr name="declaringType" 
value="org.apache.causeway.applib.mixins.layout.Object_downloadLayout"/>
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.mixins.layout.Object_downloadLayout.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" 
value="ActionInvocationFacetForAction"/>
+                        <mml:attr name="intent.act" value="EXECUTE"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="methods" value="public 
java.lang.Object 
org.apache.causeway.applib.mixins.layout.Object_downloadLayout.act(java.lang.String,org.apache.causeway.applib.services.layout.LayoutExportStyle,org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType)"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="returnType" value="java.lang.Object"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet">
+                        <mml:attr name="contributing" value="AS_ACTION"/>
+                        <mml:attr name="facet" 
value="ContributingFacetAbstract.1"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="ActionPositionFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="PANEL_DROPDOWN"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation">
+                        <mml:attr name="deploymentType" value="PRODUCTION"/>
+                        <mml:attr name="facet" 
value="PrototypeFacetForActionAnnotation"/>
+                        <mml:attr name="interactionAdvisors" 
value="HidingOrShowing"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.redirect.RedirectFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.RedirectFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="RedirectFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="redirect" value="AS_CONFIGURED"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionSemanticsFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" value="SAFE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.MemberDescribedFacetForActionLayoutAnnotation">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.layout.Object_downloadLayout#act())"/>
+                        <mml:attr name="facet" 
value="MemberDescribedFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="originalText" value="Downloads the 
Xxx.layout... layout file effective/inferred for this object"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Downloads the 
Xxx.layout... layout file effective/inferred for this object"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.layout.Object_downloadLayout#act())"/>
+                        <mml:attr name="facet" 
value="MemberNamedFacetForStaticMemberName"/>
+                        <mml:attr name="originalText" value="Download Layout"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Download Layout"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.DefaultViewFacetAsConfigured">
+                        <mml:attr name="facet" 
value="DefaultViewFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="value" value="table"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.FaFacetForActionLayoutAnnotation">
+                        <mml:attr name="classes" value="download"/>
+                        <mml:attr name="facet" 
value="FaFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="LEFT"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutGroupFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="groupId" value="metadata"/>
+                        <mml:attr name="groupName" value="Metadata"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutOrderFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="sequence" value="700.1"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="CommandPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="ExecutionPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                        <mml:attr name="facet" 
value="PromptStyleFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="promptStyle" value="INLINE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.tabledec.TableDecoratorFacetFromConfiguration">
+                        <mml:attr name="facet" 
value="TableDecoratorFacetFromConfiguration"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" 
value="org.apache.causeway.applib.annotation.TableDecorator.Default"/>
+                    </mml:facet>
+                </mml:facets>
+                <mml:returnType>java.lang.Object</mml:returnType>
+                <mml:params>
+                    <mml:param id="fileName" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:type="mml:scalarParam">
+                        <mml:facets>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.described.ParamDescribedFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.layout.ParamDescribedFacetForParameterLayoutAnnotation">
+<mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.layout.Object_downloadLayout#act())"/>
+<mml:attr name="facet" 
value="ParamDescribedFacetForParameterLayoutAnnotation"/>
+<mml:attr name="originalText" value="File name extension can be omitted."/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="translated" value="File name extension can be omitted."/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation">
+<mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.layout.Object_downloadLayout#act())"/>
+<mml:attr name="facet" value="NamedFacetForParameterLayoutAnnotation"/>
+<mml:attr name="originalText" value="File name"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="translated" value="File name"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.fallback.LabelAtFacetFromLayoutConfiguration">
+<mml:attr name="facet" value="LabelAtFacetFromLayoutConfiguration"/>
+<mml:attr name="labelPosition" value="NOT_SPECIFIED"/>
+<mml:attr name="precedence" value="LOW"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
+<mml:attr name="facet" value="ActionParameterDefaultsFacetViaMethod"/>
+<mml:attr name="intent.default0Act" value="DEFAULTS"/>
+<mml:attr name="methods" value="public java.lang.String 
org.apache.causeway.applib.mixins.layout.Object_downloadLayout.default0Act()"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacetFromConfiguration">
+<mml:attr name="facet" 
value="PrecedingParametersPolicyFacetFromConfiguration"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="value" value="RESET"/>
+                            </mml:facet>
+                        </mml:facets>
+                        <mml:type>java.lang.String</mml:type>
+                    </mml:param>
+                    <mml:param id="style" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:type="mml:scalarParam">
+                        <mml:facets>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.param.name.NamedFacetForParameterUsingReflection">
+<mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.layout.Object_downloadLayout#act())"/>
+<mml:attr name="facet" value="NamedFacetForParameterUsingReflection"/>
+<mml:attr name="originalText" value="Style"/>
+<mml:attr name="precedence" value="LOW"/>
+<mml:attr name="translated" value="Style"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.fallback.LabelAtFacetFromLayoutConfiguration">
+<mml:attr name="facet" value="LabelAtFacetFromLayoutConfiguration"/>
+<mml:attr name="labelPosition" value="NOT_SPECIFIED"/>
+<mml:attr name="precedence" value="LOW"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
+<mml:attr name="facet" value="ActionParameterDefaultsFacetViaMethod"/>
+<mml:attr name="intent.default1Act" value="DEFAULTS"/>
+<mml:attr name="methods" value="public 
org.apache.causeway.applib.services.layout.LayoutExportStyle 
org.apache.causeway.applib.mixins.layout.Object_downloadLayout.default1Act()"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacetFromConfiguration">
+<mml:attr name="facet" 
value="PrecedingParametersPolicyFacetFromConfiguration"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="value" value="RESET"/>
+                            </mml:facet>
+                        </mml:facets>
+                        
<mml:type>org.apache.causeway.applib.services.layout.LayoutExportStyle</mml:type>
+                    </mml:param>
+                    <mml:param id="format" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:type="mml:scalarParam">
+                        <mml:facets>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.param.name.NamedFacetForParameterUsingReflection">
+<mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.layout.Object_downloadLayout#act())"/>
+<mml:attr name="facet" value="NamedFacetForParameterUsingReflection"/>
+<mml:attr name="originalText" value="Format"/>
+<mml:attr name="precedence" value="LOW"/>
+<mml:attr name="translated" value="Format"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.fallback.LabelAtFacetFromLayoutConfiguration">
+<mml:attr name="facet" value="LabelAtFacetFromLayoutConfiguration"/>
+<mml:attr name="labelPosition" value="NOT_SPECIFIED"/>
+<mml:attr name="precedence" value="LOW"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.choices.ActionParameterChoicesFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.choices.methodnum.ActionParameterChoicesFacetViaMethod">
+<mml:attr name="choicesType" value="SET"/>
+<mml:attr name="facet" value="ActionParameterChoicesFacetViaMethod"/>
+<mml:attr name="intent.choices2Act" value="CHOICES_OR_AUTOCOMPLETE"/>
+<mml:attr name="methods" value="public java.util.Set 
org.apache.causeway.applib.mixins.layout.Object_downloadLayout.choices2Act()"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
+<mml:attr name="facet" value="ActionParameterDefaultsFacetViaMethod"/>
+<mml:attr name="intent.default2Act" value="DEFAULTS"/>
+<mml:attr name="methods" value="public 
org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType 
org.apache.causeway.applib.mixins.layout.Object_downloadLayout.default2Act()"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacetFromConfiguration">
+<mml:attr name="facet" 
value="PrecedingParametersPolicyFacetFromConfiguration"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="value" value="RESET"/>
+                            </mml:facet>
+                        </mml:facets>
+                        
<mml:type>org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType</mml:type>
+                    </mml:param>
+                </mml:params>
+            </mml:act>
+            <mml:act id="downloadMetamodelXml" mixedIn="true">
+                <mml:facets>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionExplicitFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" value="ActionDomainEventFacet"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating, HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction">
+                        <mml:attr name="declaringType" 
value="org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml"/>
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" 
value="ActionInvocationFacetForAction"/>
+                        <mml:attr name="intent.act" value="EXECUTE"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="methods" value="public 
java.lang.Object 
org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml.act(java.lang.String)"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="returnType" value="java.lang.Object"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet">
+                        <mml:attr name="contributing" value="AS_ACTION"/>
+                        <mml:attr name="facet" 
value="ContributingFacetAbstract.1"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="ActionPositionFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="PANEL_DROPDOWN"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation">
+                        <mml:attr name="deploymentType" value="PRODUCTION"/>
+                        <mml:attr name="facet" 
value="PrototypeFacetForActionAnnotation"/>
+                        <mml:attr name="interactionAdvisors" 
value="HidingOrShowing"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.redirect.RedirectFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.RedirectFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="RedirectFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="redirect" value="AS_CONFIGURED"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionSemanticsFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" value="SAFE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.MemberDescribedFacetForActionLayoutAnnotation">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml#act())"/>
+                        <mml:attr name="facet" 
value="MemberDescribedFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="originalText" value="Downloads a 
representation of the framework's internal metamodel for this object's domain 
class"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Downloads a 
representation of the framework's internal metamodel for this object's domain 
class"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml#act())"/>
+                        <mml:attr name="facet" 
value="MemberNamedFacetForStaticMemberName"/>
+                        <mml:attr name="originalText" value="Download 
Metamodel Xml"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Download Metamodel 
Xml"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.DefaultViewFacetAsConfigured">
+                        <mml:attr name="facet" 
value="DefaultViewFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="value" value="table"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.FaFacetForActionLayoutAnnotation">
+                        <mml:attr name="classes" value="download"/>
+                        <mml:attr name="facet" 
value="FaFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="LEFT"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutGroupFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="groupId" value="metadata"/>
+                        <mml:attr name="groupName" value="Metadata"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutOrderFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="sequence" value="700.2"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="CommandPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="ExecutionPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                        <mml:attr name="facet" 
value="PromptStyleFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="promptStyle" value="INLINE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.tabledec.TableDecoratorFacetFromConfiguration">
+                        <mml:attr name="facet" 
value="TableDecoratorFacetFromConfiguration"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" 
value="org.apache.causeway.applib.annotation.TableDecorator.Default"/>
+                    </mml:facet>
+                </mml:facets>
+                <mml:returnType>java.lang.Object</mml:returnType>
+                <mml:params>
+                    <mml:param id="fileName" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:type="mml:scalarParam">
+                        <mml:facets>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.described.ParamDescribedFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.layout.ParamDescribedFacetForParameterLayoutAnnotation">
+<mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml#act())"/>
+<mml:attr name="facet" 
value="ParamDescribedFacetForParameterLayoutAnnotation"/>
+<mml:attr name="originalText" value="File name extension can be omitted."/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="translated" value="File name extension can be omitted."/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation">
+<mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml#act())"/>
+<mml:attr name="facet" value="NamedFacetForParameterLayoutAnnotation"/>
+<mml:attr name="originalText" value="File name"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="translated" value="File name"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.fallback.LabelAtFacetFromLayoutConfiguration">
+<mml:attr name="facet" value="LabelAtFacetFromLayoutConfiguration"/>
+<mml:attr name="labelPosition" value="NOT_SPECIFIED"/>
+<mml:attr name="precedence" value="LOW"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
+<mml:attr name="facet" value="ActionParameterDefaultsFacetViaMethod"/>
+<mml:attr name="intent.default0Act" value="DEFAULTS"/>
+<mml:attr name="methods" value="public java.lang.String 
org.apache.causeway.applib.mixins.metamodel.Object_downloadMetamodelXml.default0Act()"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacetFromConfiguration">
+<mml:attr name="facet" 
value="PrecedingParametersPolicyFacetFromConfiguration"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="value" value="RESET"/>
+                            </mml:facet>
+                        </mml:facets>
+                        <mml:type>java.lang.String</mml:type>
+                    </mml:param>
+                </mml:params>
+            </mml:act>
+            <mml:act id="inspectMetamodel" mixedIn="true">
+                <mml:facets>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionExplicitFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.core.metamodel.inspect.Object_inspectMetamodel.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" value="ActionDomainEventFacet"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating, HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction">
+                        <mml:attr name="declaringType" 
value="org.apache.causeway.core.metamodel.inspect.Object_inspectMetamodel"/>
+                        <mml:attr name="eventType" 
value="org.apache.causeway.core.metamodel.inspect.Object_inspectMetamodel.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" 
value="ActionInvocationFacetForAction"/>
+                        <mml:attr name="intent.act" value="EXECUTE"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="methods" value="public 
java.lang.Object 
org.apache.causeway.core.metamodel.inspect.Object_inspectMetamodel.act()"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="returnType" value="java.lang.Object"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet">
+                        <mml:attr name="contributing" value="AS_ACTION"/>
+                        <mml:attr name="facet" 
value="ContributingFacetAbstract.1"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="ActionPositionFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="PANEL_DROPDOWN"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation">
+                        <mml:attr name="deploymentType" value="PRODUCTION"/>
+                        <mml:attr name="facet" 
value="PrototypeFacetForActionAnnotation"/>
+                        <mml:attr name="interactionAdvisors" 
value="HidingOrShowing"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.redirect.RedirectFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.RedirectFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="RedirectFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="redirect" value="AS_CONFIGURED"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionSemanticsFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" value="SAFE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.MemberDescribedFacetForActionLayoutAnnotation">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.core.metamodel.inspect.Object_inspectMetamodel#act())"/>
+                        <mml:attr name="facet" 
value="MemberDescribedFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="originalText" value="Open up a view of 
the metamodel of this object's domain class"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Open up a view of 
the metamodel of this object's domain class"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.core.metamodel.inspect.Object_inspectMetamodel#act())"/>
+                        <mml:attr name="facet" 
value="MemberNamedFacetForStaticMemberName"/>
+                        <mml:attr name="originalText" value="Inspect 
Metamodel"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Inspect Metamodel"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.DefaultViewFacetAsConfigured">
+                        <mml:attr name="facet" 
value="DefaultViewFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="value" value="table"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.FaFacetForActionLayoutAnnotation">
+                        <mml:attr name="classes" value="sitemap"/>
+                        <mml:attr name="facet" 
value="FaFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="LEFT"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutGroupFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="groupId" value="metadata"/>
+                        <mml:attr name="groupName" value="Metadata"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutOrderFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="sequence" value="700.2.1"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="CommandPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="ExecutionPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                        <mml:attr name="facet" 
value="PromptStyleFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="promptStyle" value="INLINE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.tabledec.TableDecoratorFacetFromConfiguration">
+                        <mml:attr name="facet" 
value="TableDecoratorFacetFromConfiguration"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" 
value="org.apache.causeway.applib.annotation.TableDecorator.Default"/>
+                    </mml:facet>
+                </mml:facets>
+                <mml:returnType>java.lang.Object</mml:returnType>
+                <mml:params/>
+            </mml:act>
+            <mml:act id="openRestApi" mixedIn="true">
+                <mml:facets>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionExplicitFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.mixins.rest.Object_openRestApi.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" value="ActionDomainEventFacet"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating, HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction">
+                        <mml:attr name="declaringType" 
value="org.apache.causeway.applib.mixins.rest.Object_openRestApi"/>
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.mixins.rest.Object_openRestApi.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" 
value="ActionInvocationFacetForAction"/>
+                        <mml:attr name="intent.act" value="EXECUTE"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="methods" value="public 
org.apache.causeway.applib.value.LocalResourcePath 
org.apache.causeway.applib.mixins.rest.Object_openRestApi.act()"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="returnType" 
value="org.apache.causeway.applib.value.LocalResourcePath"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet">
+                        <mml:attr name="contributing" value="AS_ACTION"/>
+                        <mml:attr name="facet" 
value="ContributingFacetAbstract.1"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="ActionPositionFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="PANEL_DROPDOWN"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation">
+                        <mml:attr name="deploymentType" value="PRODUCTION"/>
+                        <mml:attr name="facet" 
value="PrototypeFacetForActionAnnotation"/>
+                        <mml:attr name="interactionAdvisors" 
value="HidingOrShowing"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.redirect.RedirectFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.RedirectFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="RedirectFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="redirect" value="AS_CONFIGURED"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionSemanticsFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" value="SAFE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.MemberDescribedFacetForActionLayoutAnnotation">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.rest.Object_openRestApi#act())"/>
+                        <mml:attr name="facet" 
value="MemberDescribedFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="originalText" value="Opens up a view 
of this object as represented in the (Restful Objects) REST API"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Opens up a view of 
this object as represented in the (Restful Objects) REST API"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.rest.Object_openRestApi#act())"/>
+                        <mml:attr name="facet" 
value="MemberNamedFacetForStaticMemberName"/>
+                        <mml:attr name="originalText" value="Open Rest Api"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Open Rest Api"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.DefaultViewFacetAsConfigured">
+                        <mml:attr name="facet" 
value="DefaultViewFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="value" value="table"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.FaFacetForActionLayoutAnnotation">
+                        <mml:attr name="classes" value="external-link-alt"/>
+                        <mml:attr name="facet" 
value="FaFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="LEFT"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutGroupFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="groupId" value="metadata"/>
+                        <mml:attr name="groupName" value="Metadata"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutOrderFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="sequence" value="750.1"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="CommandPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="ExecutionPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                        <mml:attr name="facet" 
value="PromptStyleFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="promptStyle" value="INLINE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.tabledec.TableDecoratorFacetFromConfiguration">
+                        <mml:attr name="facet" 
value="TableDecoratorFacetFromConfiguration"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" 
value="org.apache.causeway.applib.annotation.TableDecorator.Default"/>
+                    </mml:facet>
+                </mml:facets>
+                
<mml:returnType>org.apache.causeway.applib.value.LocalResourcePath</mml:returnType>
+                <mml:params/>
+            </mml:act>
+            <mml:act id="rebuildMetamodel" mixedIn="true">
+                <mml:facets>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionExplicitFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.mixins.metamodel.Object_rebuildMetamodel.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" value="ActionDomainEventFacet"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating, HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction">
+                        <mml:attr name="declaringType" 
value="org.apache.causeway.applib.mixins.metamodel.Object_rebuildMetamodel"/>
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.mixins.metamodel.Object_rebuildMetamodel.ActionDomainEvent"/>
+                        <mml:attr name="eventTypeOrigin" 
value="ANNOTATED_MEMBER"/>
+                        <mml:attr name="facet" 
value="ActionInvocationFacetForAction"/>
+                        <mml:attr name="intent.act" value="EXECUTE"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="methods" value="public 
java.lang.Object 
org.apache.causeway.applib.mixins.metamodel.Object_rebuildMetamodel.act()"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="returnType" value="java.lang.Object"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet">
+                        <mml:attr name="contributing" value="AS_ACTION"/>
+                        <mml:attr name="facet" 
value="ContributingFacetAbstract.1"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="ActionPositionFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="PANEL"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation">
+                        <mml:attr name="deploymentType" value="PRODUCTION"/>
+                        <mml:attr name="facet" 
value="PrototypeFacetForActionAnnotation"/>
+                        <mml:attr name="interactionAdvisors" 
value="HidingOrShowing"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.redirect.RedirectFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.RedirectFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="RedirectFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="redirect" value="AS_CONFIGURED"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionSemanticsFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" value="IDEMPOTENT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.MemberDescribedFacetForActionLayoutAnnotation">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.metamodel.Object_rebuildMetamodel#act())"/>
+                        <mml:attr name="facet" 
value="MemberDescribedFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="originalText" value="Rebuilds the 
framework's internal metamodel of this object's domain class"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Rebuilds the 
framework's internal metamodel of this object's domain class"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.applib.mixins.metamodel.Object_rebuildMetamodel#act())"/>
+                        <mml:attr name="facet" 
value="MemberNamedFacetForStaticMemberName"/>
+                        <mml:attr name="originalText" value="Rebuild 
Metamodel"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Rebuild Metamodel"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.DefaultViewFacetAsConfigured">
+                        <mml:attr name="facet" 
value="DefaultViewFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="value" value="table"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.layout.FaFacetForActionLayoutAnnotation">
+                        <mml:attr name="classes" value="sync"/>
+                        <mml:attr name="facet" 
value="FaFacetForActionLayoutAnnotation"/>
+                        <mml:attr name="position" value="LEFT"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutGroupFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="groupId" value="metadata"/>
+                        <mml:attr name="groupName" value="Metadata"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromActionLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutOrderFacetFromActionLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="sequence" value="800.1"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="CommandPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation.Disabled">
+                        <mml:attr name="facet" 
value="ExecutionPublishingFacetForActionAnnotation.Disabled"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                        <mml:attr name="facet" 
value="PromptStyleFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="promptStyle" value="INLINE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.tabledec.TableDecoratorFacetFromConfiguration">
+                        <mml:attr name="facet" 
value="TableDecoratorFacetFromConfiguration"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" 
value="org.apache.causeway.applib.annotation.TableDecorator.Default"/>
+                    </mml:facet>
+                </mml:facets>
+                <mml:returnType>java.lang.Object</mml:returnType>
+                <mml:params/>
+            </mml:act>
+        </mml:actions>
+    </mml:domainClassDto>
     <mml:domainClassDto 
id="org.apache.causeway.testdomain.model.good.ProperChoicesWhenActionHasParamSupportingMethodTypeOfReference">
         <mml:facets>
             <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacetForStaticMemberName">
@@ -19184,6 +20055,113 @@
                 </mml:facets>
                 <mml:type>java.lang.String</mml:type>
             </mml:prop>
+            <mml:prop id="myPropWithMeta" mixedIn="false">
+                <mml:facets>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.properties.propertylayout.NamedFacetForPropertyLayoutAnnotation">
+                        <mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.testdomain.model.good.ProperMemberSupport#myPropWithMeta)"/>
+                        <mml:attr name="facet" 
value="NamedFacetForPropertyLayoutAnnotation"/>
+                        <mml:attr name="originalText" value="Proper Name"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="translated" value="Proper Name"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetForLayoutXml">
+                        <mml:attr name="facet" 
value="LayoutGroupFacetForLayoutXml"/>
+                        <mml:attr name="groupId" value="other"/>
+                        <mml:attr name="groupName" value="Other"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromPropertyLayoutAnnotation">
+                        <mml:attr name="facet" 
value="LayoutOrderFacetFromPropertyLayoutAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForPropertyFromConfiguration.None">
+                        <mml:attr name="facet" 
value="CommandPublishingFacetForPropertyFromConfiguration.None"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForPropertyFromConfiguration.None">
+                        <mml:attr name="facet" 
value="ExecutionPublishingFacetForPropertyFromConfiguration.None"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                        <mml:attr name="facet" 
value="PromptStyleFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="promptStyle" value="INLINE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyLayoutXml">
+                        <mml:attr name="facet" 
value="LabelAtFacetForPropertyLayoutXml"/>
+                        <mml:attr name="labelPosition" value="NOT_SPECIFIED"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation">
+                        <mml:attr name="facet" 
value="MaxLengthFacetForPropertyAnnotation"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating"/>
+                        <mml:attr name="maxLength" value="40"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.mustsatisfyspec.MustSatisfySpecificationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation">
+                        <mml:attr name="facet" 
value="MustSatisfySpecificationFacetForPropertyAnnotation"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="specifications" 
value="org.apache.causeway.testdomain.model.good.ProperAnnotationWithSpecification$ProperSpecification"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyLayoutXml">
+                        <mml:attr name="facet" 
value="TypicalLengthFacetForPropertyLayoutXml"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="typicalLength" value="25"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor">
+                        <mml:attr name="declaringType" 
value="org.apache.causeway.testdomain.model.good.ProperMemberSupport"/>
+                        <mml:attr name="facet" 
value="PropertyAccessorFacetViaAccessor"/>
+                        <mml:attr name="intent.getMyPropWithMeta" 
value="ACCESSOR"/>
+                        <mml:attr name="methods" value="public 
java.lang.String 
org.apache.causeway.testdomain.model.good.ProperMemberSupport.getMyPropWithMeta()"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.events.domain.PropertyDomainEvent.Default"/>
+                        <mml:attr name="eventTypeOrigin" value="DEFAULT"/>
+                        <mml:attr name="facet" 
value="PropertyDomainEventFacet"/>
+                        <mml:attr name="getterFacet" 
value="org.apache.causeway.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating, HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyModifyFacetForClearing">
+                        <mml:attr name="clearFacet" 
value="org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacetViaSetterMethod"/>
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.events.domain.PropertyDomainEvent.Default"/>
+                        <mml:attr name="eventTypeOrigin" value="DEFAULT"/>
+                        <mml:attr name="facet" 
value="PropertyModifyFacetForClearing"/>
+                        <mml:attr name="getterFacet" 
value="org.apache.causeway.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.properties.update.init.PropertyInitializationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.update.init.PropertyInitializationFacetViaSetterMethod">
+                        <mml:attr name="facet" 
value="PropertyInitializationFacetViaSetterMethod"/>
+                        <mml:attr name="intent.setMyPropWithMeta" 
value="MODIFY_PROPERTY"/>
+                        <mml:attr name="methods" value="public void 
org.apache.causeway.testdomain.model.good.ProperMemberSupport.setMyPropWithMeta(java.lang.String)"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyModifyFacetForSetting">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.events.domain.PropertyDomainEvent.Default"/>
+                        <mml:attr name="eventTypeOrigin" value="DEFAULT"/>
+                        <mml:attr name="facet" 
value="PropertyModifyFacetForSetting"/>
+                        <mml:attr name="getterFacet" 
value="org.apache.causeway.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="setterFacet" 
value="org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.properties.validating.PropertyValidateFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.properties.validating.dflt.PropertyValidateFacetDefault">
+                        <mml:attr name="facet" 
value="PropertyValidateFacetDefault"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization.AuthorizationFacet"
 
fqcn="org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization.AuthorizationFacetImpl">
+                        <mml:attr name="facet" value="AuthorizationFacetImpl"/>
+                        <mml:attr name="interactionAdvisors" 
value="HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                </mml:facets>
+                <mml:type>java.lang.String</mml:type>
+            </mml:prop>
             <mml:prop id="property1" mixedIn="true">
                 <mml:facets>
                     <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet">
@@ -22386,6 +23364,125 @@
                     </mml:param>
                 </mml:params>
             </mml:act>
+            <mml:act id="myActionWithMetaOnParam" mixedIn="false">
+                <mml:facets>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation">
+                        <mml:attr name="facet" 
value="ActionExplicitFacetForActionAnnotation"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet">
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.events.domain.ActionDomainEvent.Default"/>
+                        <mml:attr name="eventTypeOrigin" value="DEFAULT"/>
+                        <mml:attr name="facet" value="ActionDomainEventFacet"/>
+                        <mml:attr name="interactionAdvisors" 
value="Validating, HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForAction">
+                        <mml:attr name="declaringType" 
value="org.apache.causeway.testdomain.model.good.ProperMemberSupport"/>
+                        <mml:attr name="eventType" 
value="org.apache.causeway.applib.events.domain.ActionDomainEvent.Default"/>
+                        <mml:attr name="eventTypeOrigin" value="DEFAULT"/>
+                        <mml:attr name="facet" 
value="ActionInvocationFacetForAction"/>
+                        <mml:attr name="intent.myActionWithMetaOnParam" 
value="EXECUTE"/>
+                        <mml:attr name="isPostable" value="true"/>
+                        <mml:attr name="methods" value="public void 
org.apache.causeway.testdomain.model.good.ProperMemberSupport.myActionWithMetaOnParam(java.lang.String)"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="returnType" value="void"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.redirect.RedirectFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.actions.redirect.RedirectFacetFallback">
+                        <mml:attr name="facet" value="RedirectFacetFallback"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="redirect" value="AS_CONFIGURED"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetFallbackToNonIdempotent">
+                        <mml:attr name="facet" 
value="ActionSemanticsFacetFallbackToNonIdempotent"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" value="NON_IDEMPOTENT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.DefaultViewFacetAsConfigured">
+                        <mml:attr name="facet" 
value="DefaultViewFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="value" value="table"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.iconfa.FaFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.members.iconfa.annotprop.FaFacetOnMemberFromConfiguredRegex">
+                        <mml:attr name="classes" value="!imperative"/>
+                        <mml:attr name="facet" 
value="FaFacetOnMemberFromConfiguredRegex"/>
+                        <mml:attr name="position" value="!imperative"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetForLayoutXml">
+                        <mml:attr name="facet" 
value="LayoutOrderFacetForLayoutXml"/>
+                        <mml:attr name="precedence" value="LOW"/>
+                        <mml:attr name="sequence" value="9"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionFromConfiguration.None">
+                        <mml:attr name="facet" 
value="CommandPublishingFacetForActionFromConfiguration.None"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionFromConfiguration.None">
+                        <mml:attr name="facet" 
value="ExecutionPublishingFacetForActionFromConfiguration.None"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                        <mml:attr name="facet" 
value="PromptStyleFacetAsConfigured"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="promptStyle" value="INLINE"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.collections.layout.tabledec.TableDecoratorFacetFromConfiguration">
+                        <mml:attr name="facet" 
value="TableDecoratorFacetFromConfiguration"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                        <mml:attr name="value" 
value="org.apache.causeway.applib.annotation.TableDecorator.Default"/>
+                    </mml:facet>
+                    <mml:facet 
id="org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization.AuthorizationFacet"
 
fqcn="org.apache.causeway.core.metamodel.postprocessors.allbutparam.authorization.AuthorizationFacetImpl">
+                        <mml:attr name="facet" value="AuthorizationFacetImpl"/>
+                        <mml:attr name="interactionAdvisors" 
value="HidingOrShowing, DisablingOrEnabling"/>
+                        <mml:attr name="precedence" value="DEFAULT"/>
+                    </mml:facet>
+                </mml:facets>
+                <mml:returnType>void</mml:returnType>
+                <mml:params>
+                    <mml:param id="p0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:type="mml:scalarParam">
+                        <mml:facets>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation">
+<mml:attr name="context" 
value="TranslationContext(name=org.apache.causeway.testdomain.model.good.ProperMemberSupport#myActionWithMetaOnParam())"/>
+<mml:attr name="facet" value="NamedFacetForParameterLayoutAnnotation"/>
+<mml:attr name="originalText" value="Proper Name"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="translated" value="Proper Name"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" 
fqcn="org.apache.causeway.core.metamodel.facets.fallback.LabelAtFacetFromLayoutConfiguration">
+<mml:attr name="facet" value="LabelAtFacetFromLayoutConfiguration"/>
+<mml:attr name="labelPosition" value="NOT_SPECIFIED"/>
+<mml:attr name="precedence" value="LOW"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.parameter.maxlen.MaxLengthFacetForParameterAnnotation">
+<mml:attr name="facet" value="MaxLengthFacetForParameterAnnotation"/>
+<mml:attr name="interactionAdvisors" value="Validating"/>
+<mml:attr name="maxLength" value="40"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.mustsatisfyspec.MustSatisfySpecificationFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.parameter.mustsatisfy.MustSatisfySpecificationFacetForParameterAnnotation">
+<mml:attr name="facet" 
value="MustSatisfySpecificationFacetForParameterAnnotation"/>
+<mml:attr name="interactionAdvisors" value="Validating"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="specifications" 
value="org.apache.causeway.testdomain.model.good.ProperAnnotationWithSpecification$ProperSpecification"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.typicallen.fromtype.TypicalLengthFacetOnParameterFromType">
+<mml:attr name="facet" value="TypicalLengthFacetOnParameterFromType"/>
+<mml:attr name="precedence" value="INFERRED"/>
+<mml:attr name="typicalLength" value="25"/>
+<mml:attr name="typicalLengthFacet" 
value="org.apache.causeway.core.metamodel.facets.object.value.TypicalLengthFacetFromValueFacet"/>
+                            </mml:facet>
+                            <mml:facet 
id="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.param.parameter.precpol.PrecedingParametersPolicyFacetForParameterAnnotation">
+<mml:attr name="facet" 
value="PrecedingParametersPolicyFacetForParameterAnnotation"/>
+<mml:attr name="precedence" value="DEFAULT"/>
+<mml:attr name="value" value="RESET"/>
+                            </mml:facet>
+                        </mml:facets>
+                        <mml:type>java.lang.String</mml:type>
+                    </mml:param>
+                </mml:params>
+            </mml:act>
             <mml:act id="openRestApi" mixedIn="true">
                 <mml:facets>
                     <mml:facet 
id="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacet"
 
fqcn="org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation">

Reply via email to