You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/10/25 14:37:14 UTC

[isis] branch ISIS-1632-meta-annotations created (now 9d15b17)

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

danhaywood pushed a change to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git.


      at 9d15b17  ISIS-1632: updates to helloworld just for testing @Meta

This branch includes the following new commits:

     new 575a313  ISIS-1742: removes support for exploration prefix for actions
     new 144e8f0  ISIS-1742: deletes unused facet impl, PrototypeFacetViaExplorationPrefixNamingConvention
     new 4cac2bc  ISIS-1742: deletes unused OptionHandlerXxx classes (Debug, Quiet, Verbose)
     new bd4118a  ISIS-1742: deletes ObjectFixtureService, ObjectFixtureFilePersistor, ObjectLoaderFixture.
     new 6b72d79  ISIS-1742: removes stale unit test (referencing facet factory long since deleted...)
     new a5d371c  ISIS-1742: updates todo list
     new 2861102  ISIS-1632: adds initial support for @Meta annotation.
     new 9d15b17  ISIS-1632: updates to helloworld just for testing @Meta

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@isis.apache.org" <co...@isis.apache.org>'].

[isis] 01/08: ISIS-1742: removes support for exploration prefix for actions

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 575a3135a6143584e488400dade52b64aa1ce8d2
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 17 18:37:16 2017 +0100

    ISIS-1742: removes support for exploration prefix for actions
---
 .../isis/applib/annotation/NatureOfService.java    |  13 +--
 .../MethodPrefixBasedFacetFactoryAbstract.java     |   1 -
 .../ActionNamedExplorationFacetFactory.java        | 121 ---------------------
 .../interaction/ActionNamedFacetFactory.java       |  73 +++++++++++++
 .../actions/ActionMethodsFacetFactoryTest.java     |   6 +-
 todo-deprecation-list.txt                          |  32 +++---
 6 files changed, 94 insertions(+), 152 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java
index 0502d80..e64fb4f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java
@@ -30,20 +30,15 @@ public enum NatureOfService {
     VIEW,
     /**
      * The service's actions appear on menus but do not contribute.
-     *
-     * <p>
-     * Equivalent to annotating all actions with (the now deprecated) {@link org.apache.isis.applib.annotation.NotContributed} annotation.
-     * </p>
      */
     VIEW_MENU_ONLY,
     /**
      * The service's actions can be contributed to domain objects as actions, properties or collections but do not
      * appear on menus.
      *
-     * <p>
-     * Equivalent to annotating all actions with (the now deprecated) {@link org.apache.isis.applib.annotation.NotInServiceMenu} annotation.
-     * </p>
+     * @deprecated - use mixins instead
      */
+    @Deprecated
     VIEW_CONTRIBUTIONS_ONLY,
     /**
      * The services actions should only be visible in the REST API exposed by the Restful Objects viewer.
@@ -51,10 +46,6 @@ public enum NatureOfService {
     VIEW_REST_ONLY,
     /**
      * The service's actions do not appear on menus and are not contributed.
-     *
-     * <p>
-     * Equivalent to annotating all actions with both (the now deprecated) {@link org.apache.isis.applib.annotation.NotInServiceMenu} and {@link org.apache.isis.applib.annotation.NotContributed} annotations).
-     * </p>
      */
     DOMAIN;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
index 67a20a9..e246268 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
@@ -44,7 +44,6 @@ public abstract class MethodPrefixBasedFacetFactoryAbstract
 
     private final List<String> prefixes;
 
-    protected static final Object[] NO_PARAMETERS = new Object[0];
     protected static final Class<?>[] NO_PARAMETERS_TYPES = new Class<?>[0];
 
     private final OrphanValidation orphanValidation;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedExplorationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedExplorationFacetFactory.java
deleted file mode 100644
index b14ceee..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedExplorationFacetFactory.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.actions.interaction;
-
-import java.lang.reflect.Method;
-
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.lang.StringExtensions;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
-import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedMethodPrefix;
-
-/**
- * Sets up {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet} and also an {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet}, along with a number of supporting
- * facets that are based on the action's name.
- * 
- * <p>
- * The supporting methods are: {@link PrototypeFacet}. In addition a {@link NamedFacet} is inferred from the
- * name (taking into account the above well-known prefixes).
- *
- * @deprecated
- */
-@Deprecated
-public class ActionNamedExplorationFacetFactory extends MethodPrefixBasedFacetFactoryAbstract implements MetaModelValidatorRefiner {
-
-    private static final String EXPLORATION_PREFIX = "Exploration";
-
-    private final MetaModelValidatorForDeprecatedMethodPrefix explorationValidator = new MetaModelValidatorForDeprecatedMethodPrefix(EXPLORATION_PREFIX);
-
-    private static final String[] PREFIXES = { EXPLORATION_PREFIX };
-
-    public ActionNamedExplorationFacetFactory() {
-        super(FeatureType.ACTIONS_ONLY, OrphanValidation.VALIDATE, PREFIXES);
-    }
-
-    // ///////////////////////////////////////////////////////
-    // Actions
-    // ///////////////////////////////////////////////////////
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-
-        // DebugFacet, ExplorationFacet
-        attachExplorationFacetIfActionMethodNamePrefixed(processMethodContext);
-
-        // inferred name
-        // (must be called after the attachinvocationFacet methods)
-        attachNamedFacetInferredFromMethodName(processMethodContext); 
-    }
-
-
-    private void attachExplorationFacetIfActionMethodNamePrefixed(final ProcessMethodContext processMethodContext) {
-
-        final Method actionMethod = processMethodContext.getMethod();
-        final String capitalizedName = StringExtensions.asCapitalizedName(actionMethod.getName());
-        if (!capitalizedName.startsWith(EXPLORATION_PREFIX)) {
-            return;
-        }
-        final FacetHolder facetedMethod = processMethodContext.getFacetHolder();
-        final Facet facet = new PrototypeFacetViaExplorationPrefixNamingConvention(facetedMethod, getDeploymentCategory());
-        FacetUtil.addFacet(explorationValidator.flagIfPresent(facet, processMethodContext));
-    }
-
-    /**
-     * Must be called after added the debug, exploration etc facets.
-     */
-    private void attachNamedFacetInferredFromMethodName(final ProcessMethodContext processMethodContext) {
-
-        final Method method = processMethodContext.getMethod();
-        final String capitalizedName = StringExtensions.asCapitalizedName(method.getName());
-
-        // this is nasty...
-        String name = capitalizedName;
-        name = StringExtensions.removePrefix(name, EXPLORATION_PREFIX);
-        name = StringExtensions.asNaturalName2(name);
-
-        final FacetHolder facetedMethod = processMethodContext.getFacetHolder();
-        FacetUtil.addFacet(new NamedFacetInferred(name, facetedMethod));
-    }
-
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(explorationValidator);
-    }
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = servicesInjector.getConfigurationServiceInternal();
-        explorationValidator.setConfiguration(configuration);
-    }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedFacetFactory.java
new file mode 100644
index 0000000..4f991e2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/ActionNamedFacetFactory.java
@@ -0,0 +1,73 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.actions.interaction;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.commons.lang.StringExtensions;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
+
+/**
+ * Sets up {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet} and also an {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet}, along with a number of supporting facets that are based on the action's name.
+ * 
+ * <p>
+ * In addition a {@link NamedFacet} is inferred from the name.
+ *
+ * @deprecated
+ */
+@Deprecated
+public class ActionNamedFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
+
+    public ActionNamedFacetFactory() {
+        super(FeatureType.ACTIONS_ONLY, OrphanValidation.VALIDATE);
+    }
+
+    // ///////////////////////////////////////////////////////
+    // Actions
+    // ///////////////////////////////////////////////////////
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+
+        attachNamedFacetInferredFromMethodName(processMethodContext);
+    }
+
+
+
+    /**
+     * Must be called after added the debug, exploration etc facets.
+     */
+    private void attachNamedFacetInferredFromMethodName(final ProcessMethodContext processMethodContext) {
+
+        final Method method = processMethodContext.getMethod();
+
+        String name = StringExtensions.asCapitalizedName(method.getName());
+        name = StringExtensions.asNaturalName2(name);
+
+        final FacetHolder facetedMethod = processMethodContext.getFacetHolder();
+        FacetUtil.addFacet(new NamedFacetInferred(name, facetedMethod));
+    }
+
+}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
index ecbb40c..e8a9122 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -41,7 +41,7 @@ import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
 import org.apache.isis.core.metamodel.facets.actions.defaults.method.ActionDefaultsFacetViaMethod;
 import org.apache.isis.core.metamodel.facets.actions.defaults.method.ActionDefaultsFacetViaMethodFactory;
-import org.apache.isis.core.metamodel.facets.actions.interaction.ActionNamedExplorationFacetFactory;
+import org.apache.isis.core.metamodel.facets.actions.interaction.ActionNamedFacetFactory;
 import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
 import org.apache.isis.core.metamodel.facets.actions.validate.ActionValidationFacet;
 import org.apache.isis.core.metamodel.facets.actions.validate.method.ActionValidationFacetViaMethod;
@@ -139,7 +139,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
     }
 
     public void testProvidesDefaultNameForActionButIgnoresAnyNamedAnnotation() {
-        final ActionNamedExplorationFacetFactory facetFactory = new ActionNamedExplorationFacetFactory();
+        final ActionNamedFacetFactory facetFactory = new ActionNamedFacetFactory();
 
         facetFactory.setServicesInjector(mockServicesInjector);
 
@@ -164,7 +164,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
 
 
     public void testPicksUpExplorationPrefixAndSetsNameAppropriatelyAlso() {
-        final ActionNamedExplorationFacetFactory facetFactory = new ActionNamedExplorationFacetFactory();
+        final ActionNamedFacetFactory facetFactory = new ActionNamedFacetFactory();
 
         facetFactory.setServicesInjector(mockServicesInjector);
 
diff --git a/todo-deprecation-list.txt b/todo-deprecation-list.txt
index 0ee1f34..bebb90b 100644
--- a/todo-deprecation-list.txt
+++ b/todo-deprecation-list.txt
@@ -24,13 +24,6 @@ org.apache.isis.applib.services.memento  (19 usages found)
 
 
 
-Also propose:
-    make AppManifest mandatory
-
-    remove support for contributed services (use mixins instead)
-
-
-
 Also for 2.0.0, new features/deprecations:
     automatically wrap domain services (perhaps behind a config property)
     automatically infer \@Programmatic for all \@DomainService(nature=DOMAIN)
@@ -47,7 +40,6 @@ Also for 2.0.0, new features/deprecations:
 OTHER STUFF:
 
 
-remove explorationXxx() prefix
 remove prototypeXxx() prefix
 remove debugXxx() prefix
 
@@ -150,6 +142,11 @@ org.apache.isis.applib.services.command
 
 *************************************************************************
 
+DEPRECATED:
+
+    deprecate support for contributed services (use mixins instead)
+
+
 DONE (ADDED)
 
     new support for JSR-303 @Pattern annotation (http://beanvalidation.org/1.0/spec/, chapter 6) ... replaces @RegEx
@@ -162,13 +159,23 @@ DONE (MOVED)
     org.apache.isis.applib.conmap.ContentMappingService to applib.services.conmap
 
 
-
 DONE (REMOVED):
 
+    make AppManifest mandatory
+
     removed support for Xxx.layout.json
     - "reflector.layoutMetadataReaders" config prop
 
+    removed support for static method prefixes
+    * "notInServiceMenu"
+    * "named"
+    * "plural"
+    * "alwaysHide"
+    * "protect"
+    * "description"
+    * "optional"
 
+    remove explorationXxx() prefix
 
 org.apache.isis.applib
 
@@ -490,10 +497,3 @@ org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationServiceFor
     - unused
 
 
-removed support for "notInServiceMenu" prefix
-removed named static method
-removed plural static method
-removed "alwaysHide" static
-removed "protect" static
-removed "description" static
-removed "optional" (if static)

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 08/08: ISIS-1632: updates to helloworld just for testing @Meta

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 9d15b171115798a59f2493694664c38e8efcf7e4
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 23 17:32:05 2017 +0100

    ISIS-1632: updates to helloworld just for testing @Meta
---
 .../main/java/domainapp/dom/annot/AreYouSure.java  | 39 ++++++++++++++++++++
 .../src/main/java/domainapp/dom/annot/Name.java    | 43 ++++++++++++++++++++++
 .../src/main/java/domainapp/dom/annot/Notes.java   | 39 ++++++++++++++++++++
 .../java/domainapp/dom/impl/HelloWorldObject.java  | 16 ++++----
 4 files changed, 128 insertions(+), 9 deletions(-)

diff --git a/example/application/helloworld/src/main/java/domainapp/dom/annot/AreYouSure.java b/example/application/helloworld/src/main/java/domainapp/dom/annot/AreYouSure.java
new file mode 100644
index 0000000..be22801
--- /dev/null
+++ b/example/application/helloworld/src/main/java/domainapp/dom/annot/AreYouSure.java
@@ -0,0 +1,39 @@
+/*
+ *  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 domainapp.dom.annot;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Meta;
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+@Meta
+@Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)
+@Inherited
+@Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AreYouSure {
+
+}
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/java/domainapp/dom/annot/Name.java b/example/application/helloworld/src/main/java/domainapp/dom/annot/Name.java
new file mode 100644
index 0000000..c4fd1c5
--- /dev/null
+++ b/example/application/helloworld/src/main/java/domainapp/dom/annot/Name.java
@@ -0,0 +1,43 @@
+/*
+ *  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 domainapp.dom.annot;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Meta;
+import org.apache.isis.applib.annotation.Parameter;
+import org.apache.isis.applib.annotation.ParameterLayout;
+import org.apache.isis.applib.annotation.Property;
+
+@Meta
+@Property(editing = Editing.DISABLED)
+@Parameter(maxLength = 40)
+@ParameterLayout(named = "Name")
+@Inherited
+@Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Name {
+
+}
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/java/domainapp/dom/annot/Notes.java b/example/application/helloworld/src/main/java/domainapp/dom/annot/Notes.java
new file mode 100644
index 0000000..22fad39
--- /dev/null
+++ b/example/application/helloworld/src/main/java/domainapp/dom/annot/Notes.java
@@ -0,0 +1,39 @@
+/*
+ *  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 domainapp.dom.annot;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Meta;
+import org.apache.isis.applib.annotation.Property;
+
+@Meta
+@Property(editing = Editing.ENABLED)
+@Inherited
+@Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Notes {
+
+}
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
index b8bbcfa..85123a7 100644
--- a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
+++ b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
@@ -29,10 +29,6 @@ import org.apache.isis.applib.annotation.Auditing;
 import org.apache.isis.applib.annotation.CommandReification;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
-import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.Parameter;
-import org.apache.isis.applib.annotation.ParameterLayout;
-import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Title;
@@ -40,6 +36,9 @@ import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.title.TitleService;
 
+import domainapp.dom.annot.AreYouSure;
+import domainapp.dom.annot.Name;
+import domainapp.dom.annot.Notes;
 import lombok.AccessLevel;
 
 @javax.jdo.annotations.PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "helloworld" )
@@ -62,20 +61,19 @@ public class HelloWorldObject implements Comparable<HelloWorldObject> {
 
     @javax.jdo.annotations.Column(allowsNull = "false", length = 40)
     @lombok.NonNull
-    @Property(editing = Editing.DISABLED)
+    @Name
     @Title(prepend = "Object: ")
     private String name;
 
 
     @javax.jdo.annotations.Column(allowsNull = "true", length = 4000)
-    @Property(editing = Editing.ENABLED)
+    @Notes
     private String notes;
 
 
     @Action(semantics = SemanticsOf.IDEMPOTENT, command = CommandReification.ENABLED, publishing = Publishing.ENABLED)
     public HelloWorldObject updateName(
-            @Parameter(maxLength = 40)
-            @ParameterLayout(named = "Name")
+            @Name
             final String name) {
         setName(name);
         return this;
@@ -86,7 +84,7 @@ public class HelloWorldObject implements Comparable<HelloWorldObject> {
     }
 
 
-    @Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)
+    @AreYouSure
     public void delete() {
         final String title = titleService.titleOf(this);
         messageService.informUser(String.format("'%s' deleted", title));

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 03/08: ISIS-1742: deletes unused OptionHandlerXxx classes (Debug, Quiet, Verbose)

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 4cac2bc500dbcec673d3422a3ed9fb54331f8945
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 17 18:51:09 2017 +0100

    ISIS-1742: deletes unused OptionHandlerXxx classes (Debug, Quiet, Verbose)
---
 .../runtime/runner/opts/OptionHandlerDebug.java    | 56 ---------------------
 .../runtime/runner/opts/OptionHandlerQuiet.java    | 56 ---------------------
 .../runtime/runner/opts/OptionHandlerVerbose.java  | 57 ----------------------
 3 files changed, 169 deletions(-)

diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDebug.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDebug.java
deleted file mode 100644
index 5f3874e..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerDebug.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.runner.opts;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Options;
-
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
-import org.apache.isis.core.runtime.optionhandler.BootPrinter;
-import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
-
-import static org.apache.isis.core.runtime.runner.Constants.DEBUG_OPT;
-
-/**
- * @deprecated - this seems to be a no-op; it is no longer registered in IsisRunner/IsisWebServer
- */
-@Deprecated
-public class OptionHandlerDebug extends OptionHandlerAbstract {
-
-    public OptionHandlerDebug() {
-        super();
-    }
-
-    @Override
-    public void addOption(final Options options) {
-        options.addOption(DEBUG_OPT, false, "print debugging messages");
-    }
-
-    @Override
-    public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
-        return true;
-    }
-
-    @Override
-    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
-        // TODO need to prime or otherwise set logging.
-    }
-
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerQuiet.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerQuiet.java
deleted file mode 100644
index 0327090..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerQuiet.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.runner.opts;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Options;
-
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
-import org.apache.isis.core.runtime.optionhandler.BootPrinter;
-import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
-
-import static org.apache.isis.core.runtime.runner.Constants.QUIET_OPT;
-
-/**
- * @deprecated - this seems to be a no-op; it is no longer registered in IsisRunner/IsisWebServer
- */
-@Deprecated
-public class OptionHandlerQuiet extends OptionHandlerAbstract {
-
-    public OptionHandlerQuiet() {
-        super();
-    }
-
-    @Override
-    public void addOption(final Options options) {
-        options.addOption(QUIET_OPT, false, "print error messages only");
-    }
-
-    @Override
-    public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
-        return true;
-    }
-
-    @Override
-    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
-        // TODO need to do what, exactly???
-    }
-
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVerbose.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVerbose.java
deleted file mode 100644
index 57f2791..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerVerbose.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.runner.opts;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Options;
-
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
-import org.apache.isis.core.runtime.optionhandler.BootPrinter;
-import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
-
-import static org.apache.isis.core.runtime.runner.Constants.VERBOSE_OPT;
-
-/**
- * @deprecated - this seems to be a no-op; it is no longer registered in IsisRunner/IsisWebServer
- */
-@Deprecated
-public class OptionHandlerVerbose extends OptionHandlerAbstract {
-
-    public OptionHandlerVerbose() {
-        super();
-    }
-
-    @Override
-    public void addOption(final Options options) {
-        options.addOption(VERBOSE_OPT, false, "print information, warning and error messages");
-    }
-
-    @Override
-    public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
-        return true;
-    }
-
-    @Override
-    public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
-        // TODO need to do what, exactly???
-
-    }
-
-}

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 05/08: ISIS-1742: removes stale unit test (referencing facet factory long since deleted...)

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 6b72d79da5243652a89c31939e1e1e319f45305a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 23 16:04:10 2017 +0100

    ISIS-1742: removes stale unit test (referencing facet factory long since deleted...)
---
 .../NotInServiceMenuMethodFacetFactoryTest.java    | 73 ----------------------
 1 file changed, 73 deletions(-)

diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/method/NotInServiceMenuMethodFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/method/NotInServiceMenuMethodFacetFactoryTest.java
deleted file mode 100644
index 4b9be47..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/method/NotInServiceMenuMethodFacetFactoryTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.actions.notinservicemenu.method;
-
-import java.lang.reflect.Method;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.NotInServiceMenuFacet;
-import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.NotInServiceMenuFacetAbstract;
-
-public class NotInServiceMenuMethodFacetFactoryTest extends AbstractFacetFactoryTest {
-
-    private NotInServiceMenuFacetViaMethodFactory facetFactory;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        facetFactory = new NotInServiceMenuFacetViaMethodFactory();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        facetFactory = null;
-        super.tearDown();
-    }
-
-    public void testSupportingMethodForActionPickedUp() {
-        // given
-        class CustomerRepository {
-            @SuppressWarnings("unused")
-            public void someAction() {
-            }
-
-            @SuppressWarnings("unused")
-            public boolean notInServiceMenuSomeAction() {
-                return true;
-            }
-        }
-        final Method actionMethod = findMethod(CustomerRepository.class, "someAction");
-
-        // when
-        facetFactory.process(new ProcessMethodContext(CustomerRepository.class, null, actionMethod, methodRemover, facetedMethod));
-
-        // then
-        final Facet facet = facetedMethod.getFacet(NotInServiceMenuFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof NotInServiceMenuFacetAbstract);
-
-        // assertNoMethodsRemoved();
-        assertEquals(1, methodRemover.getRemovedMethodMethodCalls().size());
-    }
-
-}

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 04/08: ISIS-1742: deletes ObjectFixtureService, ObjectFixtureFilePersistor, ObjectLoaderFixture.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit bd4118af53694007d00ace95573f100b2a3fb331
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 22 14:49:41 2017 +0100

    ISIS-1742: deletes ObjectFixtureService, ObjectFixtureFilePersistor, ObjectLoaderFixture.
    
    Also:
    - removes support for SERVICES_PREFIX_KEY (common package prefix for services) from ServicesInstallerFromConfiguration
---
 .../fixturedomainservice/FixtureException.java     |  43 ----
 .../ObjectFixtureFilePersistor.java                | 243 -------------------
 .../fixturedomainservice/ObjectFixtureService.java | 264 ---------------------
 .../FixturesInstallerFromConfiguration.java        |   4 -
 .../domainservice/ObjectLoaderFixture.java         |  45 ----
 .../ServicesInstallerFromConfiguration.java        |  59 +----
 todo-deprecation-list.txt                          |   9 +-
 7 files changed, 5 insertions(+), 662 deletions(-)

diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/FixtureException.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/FixtureException.java
deleted file mode 100644
index ff91921..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/FixtureException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.fixturedomainservice;
-
-import org.apache.isis.core.commons.exceptions.IsisException;
-
-public class FixtureException extends IsisException {
-    private static final long serialVersionUID = 1L;
-
-    public FixtureException() {
-        super();
-    }
-
-    public FixtureException(final String msg, final Throwable cause) {
-        super(msg, cause);
-    }
-
-    public FixtureException(final String msg) {
-        super(msg);
-    }
-
-    public FixtureException(final Throwable cause) {
-        super(cause);
-    }
-
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
deleted file mode 100644
index 8c5780a..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.fixturedomainservice;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-
-import com.google.common.collect.Maps;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetUtils;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.ObjectSpecificationException;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
-
-public class ObjectFixtureFilePersistor {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ObjectFixtureFilePersistor.class);
-
-    public Set<Object> loadData(final Reader reader) throws IOException {
-        final Set<Object> objects = new HashSet<Object>();
-
-        final BufferedReader buffer = new BufferedReader(reader);
-        final LoadedObjects loaded = new LoadedObjects(objects, specificationLoader, getPersistenceSession());
-        String line;
-        ObjectAdapter object = null;
-        int lineNo = 0;
-        try {
-            while ((line = buffer.readLine()) != null) {
-                lineNo++;
-                if (line.trim().startsWith("#")) {
-                    continue;
-                } else if (line.startsWith("  ")) {
-                    loadFieldData(object, loaded, line);
-                } else {
-                    if (object != null && !object.representsPersistent()) {
-                        getPersistenceSession().makePersistentInTransaction(object);
-                    }
-                    object = loaded.get(line);
-                }
-            }
-
-            if (object != null && !object.representsPersistent()) {
-                getPersistenceSession().makePersistentInTransaction(object);
-            }
-        } catch (final Exception e) {
-            throw new FixtureException("failed to load data at line " + lineNo, e);
-        }
-
-        return objects;
-    }
-
-    private void loadFieldData(final ObjectAdapter object, final LoadedObjects loaded, final String line) {
-        final int pos = line.indexOf(':');
-        if (pos == -1) {
-            throw new FixtureException("no colon (:) in: " + line.trim());
-        }
-        final String name = line.substring(0, pos).trim();
-        String data = line.substring(pos + 1).trim();
-        try {
-            final ObjectAssociation association = object.getSpecification().getAssociation(name);
-            if (data.trim().length() == 0) {
-                if (    association instanceof OneToOneAssociation &&
-                        !association.isEmpty(object, InteractionInitiatedBy.FRAMEWORK)) {
-                    final OneToOneAssociation property = (OneToOneAssociation) association;
-                    property.set(object, null, InteractionInitiatedBy.FRAMEWORK);
-                }
-            } else {
-                if (association.isOneToManyAssociation()) {
-                    final String[] ids = data.split(" ");
-                    final ObjectAdapter[] elements = new ObjectAdapter[ids.length];
-                    for (int i = 0; i < ids.length; i++) {
-                        elements[i] = loaded.get(ids[i]);
-                    }
-                    final ObjectAdapter collection = association.get(object, InteractionInitiatedBy.FRAMEWORK);
-                    final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection);
-                    facet.init(collection, elements);
-                } else if (association.getSpecification().isParseable()) {
-                    data = data.replaceAll("\\n", "\n");
-                    final ParseableFacet facet = association.getSpecification().getFacet(ParseableFacet.class);
-                    final ObjectAdapter value = facet.parseTextEntry(null, data, InteractionInitiatedBy.FRAMEWORK);
-                    ((OneToOneAssociation) association).initAssociation(object, value);
-                } else if (association.isOneToOneAssociation()) {
-                    final ObjectAdapter value = loaded.get(data);
-                    ((OneToOneAssociation) association).initAssociation(object, value);
-                }
-            }
-        } catch (final ObjectSpecificationException e) {
-            LOG.info("no field for '" + name + "', skipping entry: " + data);
-        }
-    }
-
-    public void save(final Set<Object> objects, final Writer out) throws IOException {
-        final PrintWriter writer = new PrintWriter(out);
-        final SavedObjects saved = new SavedObjects();
-        for (final Object object : objects) {
-            final ObjectAdapter adapter = getPersistenceSession().adapterFor(object);
-            saveData(writer, adapter, saved);
-        }
-        out.close();
-    }
-
-    private void saveData(final PrintWriter writer, final ObjectAdapter adapter, final SavedObjects saved) {
-        final String id = saved.getId(adapter);
-        writer.println(adapter.getSpecification().getFullIdentifier() + "#" + id);
-
-        final ObjectSpecification adapterSpec = adapter.getSpecification();
-        final List<ObjectAssociation> associations = adapterSpec.getAssociations(Contributed.EXCLUDED);
-        for (final ObjectAssociation association : associations) {
-            if (association.isNotPersisted()) {
-                continue;
-            }
-
-            final ObjectAdapter associatedObject = association.get(adapter, InteractionInitiatedBy.FRAMEWORK);
-            final boolean isEmpty = association.isEmpty(adapter, InteractionInitiatedBy.FRAMEWORK);
-            final String associationId = association.getId();
-            writer.write("  " + associationId + ": ");
-            if (isEmpty) {
-                writer.println();
-                continue;
-            }
-
-            if (association.isOneToManyAssociation()) {
-                final CollectionFacet facet = associatedObject.getSpecification().getFacet(CollectionFacet.class);
-                for (final ObjectAdapter element : facet.iterable(associatedObject)) {
-                    final String refId = saved.getId(element);
-                    final String cls = element.getSpecification().getFullIdentifier();
-                    writer.print(cls + "#" + refId + " ");
-                }
-                writer.println();
-            } else if (association.getSpecification().isParseable()) {
-                final ParseableFacet facet = associatedObject.getSpecification().getFacet(ParseableFacet.class);
-                String encodedValue = facet.parseableTitle(associatedObject);
-                encodedValue = encodedValue.replaceAll("\n", "\\n");
-                writer.println(encodedValue);
-            } else if (association.isOneToOneAssociation()) {
-                final String refId = saved.getId(associatedObject);
-                final String cls = associatedObject.getSpecification().getFullIdentifier();
-                writer.println(cls + "#" + refId);
-            }
-        }
-    }
-
-
-    @javax.inject.Inject
-    IsisSessionFactory isisSessionFactory;
-
-    protected PersistenceSession getPersistenceSession() {
-        return isisSessionFactory.getCurrentSession().getPersistenceSession();
-    }
-
-    @javax.inject.Inject
-    SpecificationLoader specificationLoader;
-
-}
-
-
-class LoadedObjects {
-    private final Map<String, ObjectAdapter> idMap = Maps.newHashMap();
-    private final Set<Object> objects;
-    private final SpecificationLoader specificationLoader;
-    private final PersistenceSession persistenceSession;
-
-    public LoadedObjects(
-            final Set<Object> objects,
-            final SpecificationLoader specificationLoader,
-            final PersistenceSession persistenceSession) {
-        this.objects = objects;
-        this.specificationLoader = specificationLoader;
-        this.persistenceSession = persistenceSession;
-    }
-
-    public ObjectAdapter get(final String data) {
-        final int pos = data.indexOf('#');
-        if (pos == -1) {
-            throw new FixtureException("load failed - trying to read non-reference data as a reference: " + data);
-        }
-        final String id = data.substring(pos + 1);
-        ObjectAdapter object = idMap.get(id);
-        if (object == null) {
-            final String className = data.substring(0, pos);
-            final ObjectSpecification specification = specificationLoader.loadSpecification(className);
-            object = persistenceSession.createTransientInstance(specification);
-            idMap.put(id, object);
-            objects.add(object.getObject());
-        }
-        return object;
-    }
-}
-
-class SavedObjects {
-    private int id = 1;
-    private final Map<ObjectAdapter, String> idMap = new HashMap<ObjectAdapter, String>();
-
-    public String getId(final ObjectAdapter object) {
-        String idString = idMap.get(object);
-        if (idString == null) {
-            id++;
-            idMap.put(object, "" + id);
-            idString = "" + id;
-        }
-        return idString;
-    }
-}
-
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureService.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureService.java
deleted file mode 100644
index f26b7c5..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureService.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.fixturedomainservice;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-import javax.annotation.PostConstruct;
-
-import com.google.common.collect.Sets;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.AbstractService;
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.annotation.RestrictTo;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
-
-public class ObjectFixtureService {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ObjectFixtureService.class);
-    private static final String DATA_FILEPATH = ConfigurationConstants.ROOT + "exploration-objects.file";
-    private static final String DEFAULT_FILEPATH = "fixture-data";
-
-    private ObjectFixtureFilePersistor persistor;
-
-    private Set<Object> objects = Sets.newHashSet();
-
-
-    @PostConstruct
-    public void init() {
-        persistor = new ObjectFixtureFilePersistor();
-        serviceRegistry.injectServicesInto(persistor);
-    }
-
-    // {{ title, Id
-    public String title() {
-        return "Fixture Objects";
-    }
-
-    public String getId() {
-        return "fixtures";
-    }
-
-    public String iconName() {
-        return "Fixture";
-    }
-
-    // }}
-
-    // {{ action: save
-    @Action(
-            restrictTo = RestrictTo.PROTOTYPING
-    )
-    @ActionLayout(
-            describedAs = "Add this object to the set of saved objects"
-    )
-    @MemberOrder(sequence = "1")
-    public void save(final Object object) {
-        final ObjectAdapter adapter = getPersistenceSession().adapterFor(object);
-        LOG.info("Saving object for fixture: " + adapter);
-        addObjectAndAssociates(adapter);
-        saveAll();
-    }
-
-    private void addObjectAndAssociates(final ObjectAdapter adapter) {
-        if (objects.contains(adapter.getObject())) {
-            return;
-        }
-        objects.add(adapter.getObject());
-
-        final ObjectSpecification adapterSpec = adapter.getSpecification();
-        final List<ObjectAssociation> associations = adapterSpec.getAssociations(Contributed.EXCLUDED);
-        for (final ObjectAssociation association : associations) {
-            if (association.isNotPersisted()) {
-                continue;
-            }
-
-            final ObjectAdapter associatedObject = association.get(adapter, InteractionInitiatedBy.FRAMEWORK);
-            final boolean isEmpty = association.isEmpty(adapter, InteractionInitiatedBy.FRAMEWORK);
-            if (isEmpty) {
-                continue;
-            }
-            if (association.isOneToManyAssociation()) {
-                final CollectionFacet facet = associatedObject.getSpecification().getFacet(CollectionFacet.class);
-                for (final ObjectAdapter element : facet.iterable(associatedObject)) {
-                    addObjectAndAssociates(element);
-                }
-            } else if (association.isOneToOneAssociation() && !association.getSpecification().isParseable()) {
-                addObjectAndAssociates(associatedObject);
-            }
-        }
-    }
-
-    public String validateSave(final Object object) {
-        if (object == this || object instanceof AbstractService) {
-            return "Can't add/remove a service";
-        }
-        return objects.contains(object) ? "This object has already been saved" : null;
-    }
-
-    // }}
-
-    // {{ action: remove
-    @Action(
-            restrictTo = RestrictTo.PROTOTYPING
-    )
-    @ActionLayout(
-            describedAs = "Remove this object from the set of saved objects"
-    )
-    @MemberOrder(sequence = "2")
-    public void remove(final Object object) {
-        objects.remove(object);
-        saveAll();
-    }
-
-    public String validateRemove(final Object object) {
-        if (object == this || object instanceof AbstractService) {
-            return "Can't add/remove a service";
-        }
-        return objects.contains(object) ? null : "Can't remove an object that has not been saved";
-    }
-
-    // }}
-
-    // {{ action: all Saved Objects
-    @Action(
-            restrictTo = RestrictTo.PROTOTYPING
-    )
-    @ActionLayout(
-            describedAs = "Retrieved all the saved objects"
-    )
-    @MemberOrder(sequence = "4")
-    public Set<Object> allSavedObjects() {
-        return objects;
-    }
-
-    // }}
-
-    // {{ action: saveAll
-    @Action(
-            restrictTo = RestrictTo.PROTOTYPING
-    )
-    @ActionLayout(
-            describedAs = "Save the current state of the saved objects"
-    )
-    @MemberOrder(sequence = "3")
-    public void saveAll() {
-        FileWriter out = null;
-        try {
-            final File file = file(true);
-            out = new FileWriter(file);
-            persistor.save(objects, out);
-        } catch (final IOException e) {
-            throw new IsisException(e);
-        } finally {
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (final IOException e) {
-                    throw new IsisException(e);
-                }
-            }
-        }
-    }
-
-    // }}
-
-    // {{ loadFile (programmtic)
-    @Programmatic
-    public void loadFile() {
-        FileReader reader = null;
-        try {
-            final File file = file(false);
-            reader = new FileReader(file);
-            objects = persistor.loadData(reader);
-        } catch (final FileNotFoundException e) {
-            return;
-        } catch (final IOException e) {
-            throw new IsisException(e);
-        } finally {
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (final IOException e) {
-                    throw new IsisException(e);
-                }
-            }
-        }
-    }
-
-    private File file(final boolean createFileIfDoesntExist) throws IOException {
-        final String fixturePath = configuration.getString(DATA_FILEPATH, DEFAULT_FILEPATH);
-        final File file = new File(fixturePath);
-        final File directory = file.getParentFile();
-        mkdirIfRequired(directory);
-        if (!file.exists() && createFileIfDoesntExist) {
-            createFile(file);
-        }
-        return file;
-    }
-
-    private void mkdirIfRequired(final File directory) {
-        if (directory != null && !directory.exists()) {
-            directory.mkdirs();
-        }
-    }
-
-    private void createFile(final File file) throws IOException {
-        file.createNewFile();
-    }
-    // }}
-
-    @javax.inject.Inject
-    IsisSessionFactory isisSessionFactory;
-
-    protected PersistenceSession getPersistenceSession() {
-        return isisSessionFactory.getCurrentSession().getPersistenceSession();
-    }
-
-    @javax.inject.Inject
-    IsisConfiguration configuration;
-
-    @javax.inject.Inject
-    ServiceRegistry serviceRegistry;
-
-}
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
index 285adb0..6dafc8b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
@@ -25,7 +25,6 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.core.commons.config.ConfigurationConstants;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.factory.InstanceUtil;
-import org.apache.isis.core.runtime.fixtures.domainservice.ObjectLoaderFixture;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 
 public class FixturesInstallerFromConfiguration extends FixturesInstallerAbstract {
@@ -60,9 +59,6 @@ public class FixturesInstallerFromConfiguration extends FixturesInstallerAbstrac
                 fixtureLoaded = true;
                 delegate.addFixture(fixture);
             }
-            if (configuration.getBoolean(EXPLORATION_OBJECTS)) {
-                delegate.addFixture(new ObjectLoaderFixture());
-            }
             if (!fixtureLoaded) {
                 LOG.debug("No fixtures loaded from configuration");
             }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/domainservice/ObjectLoaderFixture.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/domainservice/ObjectLoaderFixture.java
deleted file mode 100644
index 2d6a245..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/domainservice/ObjectLoaderFixture.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.fixtures.domainservice;
-
-import org.apache.isis.applib.fixtures.FixtureType;
-import org.apache.isis.applib.fixtures.InstallableFixture;
-import org.apache.isis.core.runtime.fixturedomainservice.ObjectFixtureService;
-
-public class ObjectLoaderFixture implements InstallableFixture {
-
-    private ObjectFixtureService service;
-
-    public void setService(final ObjectFixtureService service) {
-        this.service = service;
-    }
-
-    @Override
-    public void install() {
-        if (service != null) {
-            service.loadFile();
-        }
-    }
-
-    @Override
-    public FixtureType getType() {
-        return FixtureType.DOMAIN_OBJECTS;
-    }
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
index 5fb1b17..b582ce6 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
@@ -26,19 +26,14 @@ import java.util.StringTokenizer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.util.DeweyOrderComparator;
-import org.apache.isis.core.runtime.fixturedomainservice.ObjectFixtureService;
-import org.apache.isis.core.runtime.system.DeploymentType;
-import org.apache.isis.core.runtime.system.SystemConstants;
 
 public class ServicesInstallerFromConfiguration extends ServicesInstallerAbstract  {
 
@@ -49,23 +44,6 @@ public class ServicesInstallerFromConfiguration extends ServicesInstallerAbstrac
     private static final String SERVICES = "services";
     public static final String SERVICES_KEY = ConfigurationConstants.ROOT + SERVICES;
 
-    /**
-     * @deprecated
-     */
-    @Deprecated
-    private static final String EXPLORATION_OBJECTS = "exploration-objects";
-
-    /**
-     * @deprecated - just adds to the cognitive load...
-     */
-    @Deprecated
-    private static final String SERVICES_PREFIX = "services.prefix";
-    /**
-     * @deprecated
-     */
-    @Deprecated
-    private static final String SERVICES_PREFIX_KEY = ConfigurationConstants.ROOT + SERVICES_PREFIX;
-
     private final static Pattern POSITIONED_SERVICE_REGEX = Pattern.compile("((\\d+):)(.*)");
 
     private final ServiceInstantiator serviceInstantiator;
@@ -129,17 +107,15 @@ public class ServicesInstallerFromConfiguration extends ServicesInstallerAbstrac
 
     // //////////////////////////////////////
 
-    public void appendServices(
+    void appendServices(
             final SortedMap<String, SortedSet<String>> positionedServices) {
 
         appendConfiguredServices(positionedServices);
-        appendObjectFixtureService(positionedServices, getConfiguration());
     }
 
     private void appendConfiguredServices(
             final SortedMap<String, SortedSet<String>> positionedServices) {
 
-        String servicePrefix = getConfiguration().getString(SERVICES_PREFIX_KEY);
         final String configuredServices = getConfiguration().getString(SERVICES_KEY);
         if (configuredServices == null) {
             return;
@@ -158,38 +134,7 @@ public class ServicesInstallerFromConfiguration extends ServicesInstallerAbstrac
                 serviceName = matcher.group(3);
             }
 
-            final String service = fullyQualifiedServiceName(servicePrefix, serviceName);
-            ServicesInstallerUtils.appendInPosition(positionedServices, "" + order, service);
-        }
-    }
-
-    static String fullyQualifiedServiceName(String servicePrefix, String serviceName) {
-        final StringBuilder buf = new StringBuilder();
-
-        if(!Strings.isNullOrEmpty(servicePrefix)) {
-            buf.append(servicePrefix);
-            if(!servicePrefix.endsWith(".")) {
-                buf.append(".");
-            }
-        }
-
-        buf.append(serviceName);
-        return buf.toString();
-    }
-
-    /**
-     * @deprecated
-     */
-    @Deprecated
-    private static void appendObjectFixtureService(
-            final SortedMap<String, SortedSet<String>> positionedServices, final IsisConfiguration configuration) {
-
-        if (configuration.getBoolean(ConfigurationConstants.ROOT + EXPLORATION_OBJECTS)) {
-            final DeploymentType explorationDeploymentType = DeploymentType.lookup(configuration.getString(
-                    SystemConstants.DEPLOYMENT_TYPE_KEY));
-            if (explorationDeploymentType.isExploring()) {
-                ServicesInstallerUtils.appendInPosition(positionedServices, "" + Integer.MAX_VALUE, ObjectFixtureService.class.getName());
-            }
+            ServicesInstallerUtils.appendInPosition(positionedServices, "" + order, serviceName);
         }
     }
 
diff --git a/todo-deprecation-list.txt b/todo-deprecation-list.txt
index 246576a..cd99195 100644
--- a/todo-deprecation-list.txt
+++ b/todo-deprecation-list.txt
@@ -41,13 +41,10 @@ OTHER STUFF:
 
 
 
+ObjectFixtureService + supporting classes
 
-debug() stuff
-
-DebugDataInputExtended & DebugDataOutputExtended  .... seem to be unused
-
-
-ObjectFixtureService
+SwitchUserService
+AbstractFixtureSusa
 
 
 

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 07/08: ISIS-1632: adds initial support for @Meta annotation.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2861102ec9994b552b08e07491530ee7d265633e
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 23 17:31:22 2017 +0100

    ISIS-1632: adds initial support for @Meta annotation.
    
    However, these are not recursive, and does not merge in multiple definitions of various attributes at different levels.
---
 .../java/org/apache/isis/applib/AppManifest.java   |  13 ++-
 .../org/apache/isis/applib/annotation/Action.java  |   2 +-
 .../isis/applib/annotation/ActionLayout.java       |   2 +-
 .../apache/isis/applib/annotation/Collection.java  |   2 +-
 .../isis/applib/annotation/CollectionLayout.java   |   2 +-
 .../isis/applib/annotation/DomainObject.java       |   2 +-
 .../isis/applib/annotation/DomainObjectLayout.java |   2 +-
 .../isis/applib/annotation/DomainService.java      |   2 +-
 .../applib/annotation/DomainServiceLayout.java     |   2 +-
 .../isis/applib/annotation/MemberGroupLayout.java  |   2 +-
 .../org/apache/isis/applib/annotation/Meta.java    |  34 +++++++
 .../apache/isis/applib/annotation/Parameter.java   |   2 +-
 .../isis/applib/annotation/ParameterLayout.java    |   2 +-
 .../apache/isis/applib/annotation/Property.java    |   4 +-
 .../isis/applib/annotation/PropertyLayout.java     |   2 +-
 .../apache/isis/applib/annotation/ViewModel.java   |   2 +-
 .../isis/applib/annotation/ViewModelLayout.java    |   2 +-
 .../isis/core/metamodel/facets/Annotations.java    | 103 ++++++++++++++++++++-
 .../param/layout/ParameterLayoutFacetFactory.java  |   5 +-
 .../IsisComponentProvider.java                     |   4 +
 20 files changed, 171 insertions(+), 20 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
index 22c4fe4..cc7ccd6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
@@ -20,6 +20,7 @@
 package org.apache.isis.applib;
 
 import java.io.UnsupportedEncodingException;
+import java.lang.annotation.Annotation;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLDecoder;
@@ -32,7 +33,6 @@ import java.util.Set;
 import javax.jdo.annotations.PersistenceCapable;
 
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 
 import org.reflections.vfs.SystemDir;
 import org.reflections.vfs.Vfs;
@@ -224,6 +224,17 @@ public interface AppManifest {
         }
         //endregion
 
+        //region > metaAnnotationTypes
+        private Set<Class<? extends Annotation>> metaAnnotationTypes;
+
+        public Set<Class<? extends Annotation>> getMetaAnnotationTypes() {
+            return metaAnnotationTypes;
+        }
+        public void setMetaAnnotationTypes(final Set<Class<? extends Annotation>> metaAnnotationTypes) {
+            this.metaAnnotationTypes = metaAnnotationTypes;
+        }
+        //endregion
+
         //region > domainServiceTypes
         private Set<Class<?>> domainServiceTypes;
         /**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
index 9e4e3a3..11ab9f8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
  * Domain semantics for domain object collection.
  */
 @Inherited
-@Target({ ElementType.METHOD })
+@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Action {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
index 3c91af5..67f54b1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
@@ -31,7 +31,7 @@ import javax.xml.bind.annotation.XmlType;
  * Layout hints for actions.
  */
 @Inherited
-@Target({ ElementType.METHOD })
+@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ActionLayout {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
index 50b8f95..a9085b0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
  * Domain semantics for domain object collection.
  */
 @Inherited
-@Target({ ElementType.METHOD, ElementType.FIELD })
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Collection {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
index 336d7e1..fcfa6f1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
@@ -30,7 +30,7 @@ import java.util.Comparator;
  * Layout hints for collections.
  */
 @Inherited
-@Target({ ElementType.METHOD, ElementType.FIELD })
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface CollectionLayout {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
index 23fc34d..afee19d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
@@ -36,7 +36,7 @@ import org.apache.isis.applib.services.eventbus.ObjectUpdatingEvent;
  * Domain semantics for domain objects (entities and view models; for services see {@link org.apache.isis.applib.annotation.DomainService}).
  */
 @Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface DomainObject {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
index 84a8fca..377efdf 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.services.eventbus.TitleUiEvent;
  * Layout hints for domain objects.
  */
 @Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface DomainObjectLayout {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
index 7005d37..e92b1f6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
@@ -29,7 +29,7 @@ import java.lang.annotation.*;
  * </p>
  */
 @Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface DomainService {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
index 66bbd5a..d79d007 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
@@ -33,7 +33,7 @@ import java.lang.annotation.Target;
  * </p>
  */
 @Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface DomainServiceLayout {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
index 96a5ce8..5721a1d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
@@ -47,7 +47,7 @@ import com.google.common.collect.Lists;
  * </p>
  */
 @Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface MemberGroupLayout {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Meta.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Meta.java
new file mode 100644
index 0000000..b5cbb81
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Meta.java
@@ -0,0 +1,34 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.applib.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Inherited
+@Target({ ElementType.ANNOTATION_TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Meta {
+
+
+}
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
index 209c076..abafa88 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.value.Clob;
  * Domain semantics for domain object collection.
  */
 @Inherited
-@Target({ ElementType.PARAMETER })
+@Target({ ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Parameter {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ParameterLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ParameterLayout.java
index 54cd96d..2fec7b2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ParameterLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ParameterLayout.java
@@ -31,7 +31,7 @@ import java.lang.annotation.Target;
  * @see org.apache.isis.applib.annotation.PropertyLayout
  */
 @Inherited
-@Target({ ElementType.PARAMETER })
+@Target({ ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ParameterLayout {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
index d4377ee..e7bd6fb 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
@@ -36,7 +36,7 @@ import org.apache.isis.applib.value.Clob;
  * Domain semantics for domain object property.
  */
 @Inherited
-@Target({ ElementType.METHOD, ElementType.FIELD })
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Property {
 
@@ -127,7 +127,7 @@ public @interface Property {
      * Whether the property edit should be published.
      *
      * <p>
-     * Requires that an implementation of the {@link org.apache.isis.applib.services.publish.PublishingService}
+     * Requires that an implementation of the {@link org.apache.isis.applib.services.publish.PublisherService}
      * or {@link org.apache.isis.applib.services.publish.PublisherService} is registered with the framework.
      * </p>
      */
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
index e7d0328..d719648 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
@@ -27,7 +27,7 @@ import java.lang.annotation.*;
  * @see org.apache.isis.applib.annotation.ParameterLayout
  */
 @Inherited
-@Target({ ElementType.METHOD, ElementType.FIELD })
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface PropertyLayout {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
index f27c4df..5816721 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
@@ -44,7 +44,7 @@ import javax.xml.bind.annotation.XmlRootElement;
  * @see ViewModel
  */
 @Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ViewModel {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
index bbc0c22..5f2daff 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
@@ -41,7 +41,7 @@ import java.lang.annotation.Target;
  * </p>
  */
 @Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ViewModelLayout {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index 737ce0a..f8c487a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@ -26,15 +26,20 @@ import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 import javax.validation.constraints.Pattern;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
 import com.google.common.collect.Lists;
 
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Meta;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
@@ -84,6 +89,19 @@ public final class Annotations  {
             return annotation;
         }
 
+        // meta annotations
+        final Set<Class<? extends Annotation>> metaAnnotationTypes = AppManifest.Registry.instance().getMetaAnnotationTypes();
+        final Annotation[] clsAnnotations = cls.getAnnotations();
+        for (final Annotation clsAnnotation : clsAnnotations) {
+            final Class<? extends Annotation> annotationType = clsAnnotation.annotationType();
+            if(metaAnnotationTypes.contains(annotationType)) {
+                final T annotationOnMetaAnnotation = annotationType.getAnnotation(annotationClass);
+                if(annotationOnMetaAnnotation != null) {
+                    return annotationOnMetaAnnotation;
+                }
+            }
+        }
+
         // search superclasses
         final Class<?> superclass = cls.getSuperclass();
         if (superclass != null) {
@@ -130,7 +148,7 @@ public final class Annotations  {
         // search for field
         if ( shouldSearchForField(annotationClass) ) {
 
-            List<String> fieldNameCandidates = fieldNameCandidatesFor(methodName);
+            final List<String> fieldNameCandidates = fieldNameCandidatesFor(methodName);
             for (String fieldNameCandidate : fieldNameCandidates) {
                 try {
                     final Field field = methodDeclaringClass.getDeclaredField(fieldNameCandidate);
@@ -144,6 +162,44 @@ public final class Annotations  {
             }
         }
 
+        // meta annotations
+        final Set<Class<? extends Annotation>> metaAnnotationTypes = AppManifest.Registry.instance().getMetaAnnotationTypes();
+
+        // search for annotation on a meta-annotation on the method
+        final Annotation[] annotations = method.getAnnotations();
+        for (Annotation methodAnnotation : annotations) {
+            Class<? extends Annotation> annotationType = methodAnnotation.annotationType();
+            if(metaAnnotationTypes.contains(annotationType)) {
+                final T annotationOnMetaAnnotation = annotationType.getAnnotation(annotationClass);
+                if(annotationOnMetaAnnotation != null) {
+                    return annotationOnMetaAnnotation;
+                }
+            }
+        }
+
+        // search for annotation on a meta-annotation on the field
+        if ( shouldSearchForField(annotationClass) ) {
+
+            List<String> fieldNameCandidates = fieldNameCandidatesFor(methodName);
+            for (String fieldNameCandidate : fieldNameCandidates) {
+                try {
+                    final Field field = methodDeclaringClass.getDeclaredField(fieldNameCandidate);
+                    final Annotation[] fieldAnnotations = field.getAnnotations();
+                    for (Annotation fieldAnnotation : fieldAnnotations) {
+                        final Class<? extends Annotation> annotationType = fieldAnnotation.annotationType();
+                        if(metaAnnotationTypes.contains(annotationType)) {
+                            final T annotationOnMetaAnnotation = annotationType.getAnnotation(annotationClass);
+                            if(annotationOnMetaAnnotation != null) {
+                                return annotationOnMetaAnnotation;
+                            }
+                        }
+                    }
+                } catch (NoSuchFieldException e) {
+                    // fall through
+                }
+            }
+        }
+
         // search superclasses
         final Class<?> superclass = methodDeclaringClass.getSuperclass();
         if (superclass != null) {
@@ -382,7 +438,7 @@ public final class Annotations  {
             }
         }
         if (foundAnnotationsForAnyParameter) {
-            return allParamAnnotations;
+            return expandMeta(allParamAnnotations);
         }
 
         final Class<?> methodDeclaringClass = method.getDeclaringClass();
@@ -412,6 +468,49 @@ public final class Annotations  {
         return noParamAnnotationsFor(method);
     }
 
+    static Annotation[][] expandMeta(final Annotation[][] allParamAnnotations) {
+        Set<Class<? extends Annotation>> metaAnnotationTypes = AppManifest.Registry.instance().getMetaAnnotationTypes();
+        if(metaAnnotationTypes.isEmpty()) {
+            return allParamAnnotations;
+        }
+        List<Annotation[]> allParamAnnotationList = Lists.newArrayList();
+        for (Annotation[] allParamAnnotation : allParamAnnotations) {
+            List<Annotation> expandedParamAnnotations = Lists.newArrayList();
+            for (Annotation paramAnnotation : allParamAnnotation) {
+                append(paramAnnotation, expandedParamAnnotations);
+            }
+            allParamAnnotationList.add(expandedParamAnnotations.toArray(new Annotation[]{}));
+        }
+        return allParamAnnotationList.toArray(new Annotation[][]{});
+    }
+
+    static void append(final Annotation annotation, final List<Annotation> annotationsToAppendTo) {
+        Set<Class<? extends Annotation>> metaAnnotationTypes = AppManifest.Registry.instance().getMetaAnnotationTypes();
+        expandMeta(annotation, metaAnnotationTypes, annotationsToAppendTo);
+    }
+
+    static void expandMeta(
+            final Annotation annotation,
+            final Set<Class<? extends Annotation>> metaAnnotationTypes,
+            final List<Annotation> annotationsToAppendTo) {
+        final Class<? extends Annotation> annotationType = annotation.annotationType();
+        if(metaAnnotationTypes.contains(annotationType)) {
+            Annotation[] annotations = annotationType.getAnnotations();
+            annotationsToAppendTo.addAll(FluentIterable.from(Arrays.asList(annotations)).filter(
+                    new Predicate<Annotation>() {
+                        @Override
+                        public boolean apply(final Annotation annotation) {
+                            Class<? extends Annotation> annotType = annotation.annotationType();
+                            return annotType != null &&
+                                   annotType.getName().startsWith("org.apache.isis") &&
+                                   annotType != Meta.class;
+                        }
+                    }).toList());
+        } else {
+            annotationsToAppendTo.add(annotation);
+        }
+    }
+
     private static Annotation[][] noParamAnnotationsFor(final Method method) {
         return new Annotation[method.getParameterTypes().length][0];
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
index 37363f4..a9f1353 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
@@ -20,6 +20,9 @@
 package org.apache.isis.core.metamodel.facets.param.layout;
 
 import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -40,7 +43,7 @@ public class ParameterLayoutFacetFactory extends FacetFactoryAbstract {
             // ignore
             return;
         }
-        
+
         final Annotation[] parameterAnnotations = Annotations.getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
         for (final Annotation parameterAnnotation : parameterAnnotations) {
             if (parameterAnnotation instanceof ParameterLayout) {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 8275b92..72eb446 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.runtime.systemusinginstallers;
 
+import java.lang.annotation.Annotation;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -40,6 +41,7 @@ import org.reflections.vfs.Vfs;
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Meta;
 import org.apache.isis.applib.annotation.Mixin;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
@@ -140,6 +142,7 @@ public abstract class IsisComponentProvider {
 
         final Reflections reflections = new Reflections(packages);
         final Set<Class<?>> domainServiceTypes = reflections.getTypesAnnotatedWith(DomainService.class);
+        final Set<Class<? extends Annotation>> annotationTypes = (Set)reflections.getTypesAnnotatedWith(Meta.class);
         final Set<Class<?>> persistenceCapableTypes = reflections.getTypesAnnotatedWith(PersistenceCapable.class);
         final Set<Class<? extends FixtureScript>> fixtureScriptTypes = reflections.getSubTypesOf(FixtureScript.class);
 
@@ -160,6 +163,7 @@ public abstract class IsisComponentProvider {
         registry.setDomainServiceTypes(domainServiceTypes);
         registry.setPersistenceCapableTypes(persistenceCapableTypes);
         registry.setFixtureScriptTypes(fixtureScriptTypes);
+        registry.setMetaAnnotationTypes(annotationTypes);
         registry.setMixinTypes(mixinTypes);
     }
 

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 02/08: ISIS-1742: deletes unused facet impl, PrototypeFacetViaExplorationPrefixNamingConvention

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 144e8f0b63ae29fa82dc1477a5efc9768401e591
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 17 18:48:25 2017 +0100

    ISIS-1742: deletes unused facet impl, PrototypeFacetViaExplorationPrefixNamingConvention
---
 ...eFacetViaExplorationPrefixNamingConvention.java | 37 ----------------------
 todo-deprecation-list.txt                          |  2 --
 2 files changed, 39 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/PrototypeFacetViaExplorationPrefixNamingConvention.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/PrototypeFacetViaExplorationPrefixNamingConvention.java
deleted file mode 100644
index 7ce457a..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/interaction/PrototypeFacetViaExplorationPrefixNamingConvention.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.actions.interaction;
-
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacetAbstract;
-
-/**
- * @deprecated
- */
-@Deprecated
-public class PrototypeFacetViaExplorationPrefixNamingConvention extends PrototypeFacetAbstract {
-
-    public PrototypeFacetViaExplorationPrefixNamingConvention(
-            final FacetHolder holder, final DeploymentCategory deploymentCategory) {
-        super(holder, deploymentCategory);
-    }
-
-}
diff --git a/todo-deprecation-list.txt b/todo-deprecation-list.txt
index bebb90b..246576a 100644
--- a/todo-deprecation-list.txt
+++ b/todo-deprecation-list.txt
@@ -40,8 +40,6 @@ Also for 2.0.0, new features/deprecations:
 OTHER STUFF:
 
 
-remove prototypeXxx() prefix
-remove debugXxx() prefix
 
 
 debug() stuff

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 06/08: ISIS-1742: updates todo list

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit a5d371c261ece3d6d25d8f5ab44c13aa5b8c6557
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 23 16:11:25 2017 +0100

    ISIS-1742: updates todo list
---
 todo-deprecation-list.txt | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/todo-deprecation-list.txt b/todo-deprecation-list.txt
index cd99195..1d54d15 100644
--- a/todo-deprecation-list.txt
+++ b/todo-deprecation-list.txt
@@ -31,7 +31,9 @@ Also for 2.0.0, new features/deprecations:
     deprecate FixtureScripts service with view to removing from applib ... the framework provides an implementation by default
     get rid of automatic initialization of fields (perhaps behind a config property)
     deprecate the Apache Isis' DateTime classes for removal in the future) ... and probably all of the custom value types, subclasses of Magnitude
-
+    flag to make @Action mandatory, @Programmatic the default
+    merge metamodel and runtime
+    remove *Installer
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -41,7 +43,6 @@ OTHER STUFF:
 
 
 
-ObjectFixtureService + supporting classes
 
 SwitchUserService
 AbstractFixtureSusa
@@ -492,3 +493,5 @@ org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationServiceFor
     - unused
 
 
+
+ObjectFixtureService + supporting classes

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.