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 2015/01/29 09:57:17 UTC
[2/3] isis git commit: ISIS-968: extending @DomainService(nature=...).
ISIS-968: extending @DomainService(nature=...).
Also deprecating @NotInServiceMenu.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/2a5db0c5
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/2a5db0c5
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/2a5db0c5
Branch: refs/heads/ISIS-968
Commit: 2a5db0c5fbd14237fb53bf292d54f3bcf4b16841
Parents: 4caf5c8
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jan 28 17:45:33 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Jan 28 17:45:33 2015 +0000
----------------------------------------------------------------------
.../isis/applib/annotation/DomainService.java | 5 ++
.../isis/applib/annotation/NatureOfService.java | 57 ++++++++++++++++++++
.../applib/annotation/NotInServiceMenu.java | 6 ++-
...butedFacetDerivedFromDomainServiceFacet.java | 36 +++++++++++++
...cetDerivedFromDomainServiceFacetFactory.java | 57 ++++++++++++++++++++
...eMenuFacetDerivedFromDomainServiceFacet.java | 43 +++++++++++++++
...cetDerivedFromDomainServiceFacetFactory.java | 57 ++++++++++++++++++++
.../domainservice/DomainServiceFacet.java | 21 +++++++-
.../DomainServiceFacetAbstract.java | 13 ++++-
.../DomainServiceFacetAnnotation.java | 6 ++-
.../DomainServiceFacetAnnotationFactory.java | 2 +-
.../dflt/ProgrammingModelFacetsJava5.java | 6 +++
.../src/main/java/dom/simple/SimpleObject.java | 1 -
.../main/java/app/ToDoAppDashboardService.java | 3 +-
.../java/dom/todo/ToDoItemContributions.java | 13 ++---
.../java/dom/todo/ToDoItemSubscriptions.java | 7 ++-
16 files changed, 308 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
----------------------------------------------------------------------
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 8f4321b..1c2c1ea 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
@@ -39,6 +39,11 @@ public @interface DomainService {
Class<?> repositoryFor() default Object.class;
/**
+ * The nature of this service, eg for menus, contributed actions, repository.
+ */
+ NatureOfService nature() default NatureOfService.VIEW;
+
+ /**
* Number in Dewey Decimal format representing the order.
*
* <p>
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..f8d71b6
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java
@@ -0,0 +1,57 @@
+/*
+ * 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;
+
+/**
+ * The different sorts of domain services recognized by Isis, as specified in {@link DomainService#nature()}
+ */
+public enum NatureOfService {
+
+ /**
+ * The default; the service's actions appear on menus and can be contributed to domain objects as actions,
+ * properties or collections.
+ */
+ VIEW,
+ /**
+ * The service's actions appear on menus but do not contribute.
+ *
+ * <p>
+ * Equivalent to annotating all actions with {@link org.apache.isis.applib.annotation.NotContributed}).
+ * </p>
+ */
+ VIEW_MENU,
+ /**
+ * 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 {@link org.apache.isis.applib.annotation.NotInServiceMenu).
+ * </p>
+ */
+ VIEW_CONTRIBUTIONS,
+ /**
+ * The service's actions do not appear on menus and are not contributed.
+ *
+ * <p>
+ * Equivalent to annotating all actions with both {@link org.apache.isis.applib.annotation.NotInServiceMenu} and {@link org.apache.isis.applib.annotation.NotContributed}).
+ * </p>
+ */
+ DOMAIN
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/applib/src/main/java/org/apache/isis/applib/annotation/NotInServiceMenu.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/NotInServiceMenu.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/NotInServiceMenu.java
index 9797fd1..5f58124 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/NotInServiceMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/NotInServiceMenu.java
@@ -26,8 +26,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * Indicates the (service) action should be not be displayed in the service
- * menu.
+ * Indicates the (service) action should be not be displayed in the menu.
*
* <p>
* It may still be contributed (unless it has been annotated as
@@ -36,7 +35,10 @@ import java.lang.annotation.Target;
*
* <p>
* Has no meaning if annotated on an action of a regular entity.
+ *
+ * @deprecated - instead move such actions into a separate domain service and specify nature of {@link org.apache.isis.applib.annotation.NatureOfService#VIEW_CONTRIBUTIONS contributions} or {@link org.apache.isis.applib.annotation.NatureOfService#DOMAIN domain} using {@link DomainService#nature()}.
*/
+@Deprecated
@Inherited
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacet.java
new file mode 100644
index 0000000..167a99a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacet.java
@@ -0,0 +1,36 @@
+/*
+ * 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.notcontributed.derived;
+
+
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.NotContributed;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacetAbstract;
+
+
+public class NotContributedFacetDerivedFromDomainServiceFacet extends NotContributedFacetAbstract {
+
+ private final NatureOfService natureOfService;
+
+ public NotContributedFacetDerivedFromDomainServiceFacet(final NatureOfService natureOfService, final FacetHolder holder) {
+ super(NotContributed.As.EITHER, holder);
+ this.natureOfService = natureOfService;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactory.java
new file mode 100644
index 0000000..cc346bd
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactory.java
@@ -0,0 +1,57 @@
+/*
+ * 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.notcontributed.derived;
+
+import java.lang.reflect.Method;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class NotContributedFacetDerivedFromDomainServiceFacetFactory extends FacetFactoryAbstract {
+
+ public NotContributedFacetDerivedFromDomainServiceFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessMethodContext processMethodContext) {
+ final Method method = processMethodContext.getMethod();
+ final Class<?> declaringClass = method.getDeclaringClass();
+ final ObjectSpecification spec = getSpecificationLoader().loadSpecification(declaringClass);
+
+ final DomainServiceFacet domainServiceFacet = spec.getFacet(DomainServiceFacet.class);
+ if(domainServiceFacet == null || domainServiceFacet.isNoop()) {
+ return;
+ }
+
+ final NatureOfService natureOfService = domainServiceFacet.getNatureOfService();
+ if(natureOfService == NatureOfService.VIEW_CONTRIBUTIONS || natureOfService == NatureOfService.VIEW) {
+ return;
+ }
+
+ final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new NotContributedFacetDerivedFromDomainServiceFacet(natureOfService, facetHolder));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacet.java
new file mode 100644
index 0000000..10a8413
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacet.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 org.apache.isis.core.metamodel.facets.actions.notinservicemenu.derived;
+
+
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.events.VisibilityEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.NotInServiceMenuFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+
+
+public class NotInServiceMenuFacetDerivedFromDomainServiceFacet extends NotInServiceMenuFacetAbstract {
+
+ private final NatureOfService natureOfService;
+
+ public NotInServiceMenuFacetDerivedFromDomainServiceFacet(
+ final NatureOfService natureOfService, final FacetHolder holder) {
+ super(holder);
+ this.natureOfService = natureOfService;
+ }
+
+ @Override
+ public String hides(final VisibilityContext<? extends VisibilityEvent> ic) {
+ return String.format("@DomainService(nature=%s) annotation present", natureOfService);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory.java
new file mode 100644
index 0000000..ceddccf
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory.java
@@ -0,0 +1,57 @@
+/*
+ * 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.derived;
+
+import java.lang.reflect.Method;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory extends FacetFactoryAbstract {
+
+ public NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessMethodContext processMethodContext) {
+ final Method method = processMethodContext.getMethod();
+ final Class<?> declaringClass = method.getDeclaringClass();
+ final ObjectSpecification spec = getSpecificationLoader().loadSpecification(declaringClass);
+
+ final DomainServiceFacet domainServiceFacet = spec.getFacet(DomainServiceFacet.class);
+ if(domainServiceFacet == null || domainServiceFacet.isNoop()) {
+ return;
+ }
+
+ final NatureOfService natureOfService = domainServiceFacet.getNatureOfService();
+ if(natureOfService == NatureOfService.VIEW_MENU || natureOfService == NatureOfService.VIEW) {
+ return;
+ }
+
+ final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new NotInServiceMenuFacetDerivedFromDomainServiceFacet(natureOfService, facetHolder));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacet.java
index 1d9258e..e891308 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacet.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.facets.object.domainservice;
+import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -29,10 +30,26 @@ public interface DomainServiceFacet extends Facet {
/**
* Corresponds to {@link org.apache.isis.applib.annotation.DomainService#repositoryFor()}.
- *
+ * <p/>
* <p>
* May be null.
* </p>
*/
public Class<?> getRepositoryFor();
-}
+
+ /**
+ * Corresponds to {@link org.apache.isis.applib.annotation.DomainService#nature()}.
+ *
+ * <p>
+ * If set to {@link org.apache.isis.applib.annotation.NatureOfService#VIEW_MENU} or {@link org.apache.isis.applib.annotation.NatureOfService#DOMAIN}, then {@link org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet} is
+ * derived for all actions.
+ * </p>
+ *
+ * <p>
+ * If set to {@link org.apache.isis.applib.annotation.NatureOfService#VIEW_CONTRIBUTIONS} or {@link org.apache.isis.applib.annotation.NatureOfService#DOMAIN}, then {@link org.apache.isis.core.metamodel.facets.actions.notinservicemenu.NotInServiceMenuFacet} is
+ * derived for all actions.
+ * </p>
+ */
+ public NatureOfService getNatureOfService();
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
index fb63eb2..8195140 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/DomainServiceFacetAbstract.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.facets.object.domainservice;
+import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -33,14 +34,22 @@ public abstract class DomainServiceFacetAbstract
}
private final Class<?> repositoryFor;
+ private final NatureOfService natureOfService;
- public DomainServiceFacetAbstract(final FacetHolder facetHolder, final Class<?> repositoryFor) {
+ public DomainServiceFacetAbstract(
+ final FacetHolder facetHolder,
+ final Class<?> repositoryFor,
+ final NatureOfService natureOfService) {
super(DomainServiceFacetAbstract.type(), facetHolder, Derivation.NOT_DERIVED);
this.repositoryFor = repositoryFor;
+ this.natureOfService = natureOfService;
}
-
public Class<?> getRepositoryFor() {
return repositoryFor;
}
+
+ public NatureOfService getNatureOfService() {
+ return natureOfService;
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotation.java
index 7c391ef..55aed4b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotation.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.facets.object.domainservice.annotation;
+import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacetAbstract;
@@ -27,7 +28,8 @@ public class DomainServiceFacetAnnotation extends DomainServiceFacetAbstract {
public DomainServiceFacetAnnotation(
final FacetHolder facetHolder,
- final Class<?> repositoryFor) {
- super(facetHolder, repositoryFor);
+ final Class<?> repositoryFor,
+ final NatureOfService natureOfService) {
+ super(facetHolder, repositoryFor, natureOfService);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
index c81cf37..675b1bd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
@@ -42,7 +42,7 @@ public class DomainServiceFacetAnnotationFactory extends FacetFactoryAbstract {
FacetUtil.addFacet(
new DomainServiceFacetAnnotation(
processClassContext.getFacetHolder(),
- annotation.repositoryFor()));
+ annotation.repositoryFor(), annotation.nature()));
if(annotation.repositoryFor() != null) {
FacetUtil.addFacet(
new IconFacetDerivedFromDomainServiceAnnotation(
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 9970867..4f9643e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -27,7 +27,9 @@ import org.apache.isis.core.metamodel.facets.actions.homepage.annotation.HomePag
import org.apache.isis.core.metamodel.facets.actions.interaction.ActionNamedDebugExplorationFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.layout.ActionLayoutFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.notcontributed.annotation.NotContributedFacetAnnotationFactory;
+import org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromDomainServiceFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.annotation.NotInServiceMenuFacetAnnotationFactory;
+import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.derived.NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.method.NotInServiceMenuFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.actions.paged.annotation.PagedFacetOnActionFactory;
import org.apache.isis.core.metamodel.facets.actions.prototype.annotation.PrototypeFacetAnnotationFactory;
@@ -354,6 +356,10 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(NotInServiceMenuFacetAnnotationFactory.class);
addFactory(NotInServiceMenuFacetViaMethodFactory.class);
+ addFactory(NotContributedFacetDerivedFromDomainServiceFacetFactory.class);
+ addFactory(NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory.class);
+
+
addFactory(HiddenFacetOnTypeAnnotationFactory.class);
// must come after the TitleAnnotationFacetFactory, because can act as an override
addFactory(HiddenFacetOnMemberFactory.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java b/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java
index f93aacf..b0cbb46 100644
--- a/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java
+++ b/example/application/simpleapp/dom/src/main/java/dom/simple/SimpleObject.java
@@ -24,7 +24,6 @@ import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.applib.annotation.BookmarkPolicy;
import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.DomainObjectLayout;
-import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.Title;
import org.apache.isis.applib.util.ObjectContracts;
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java b/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java
index 7fc67af..c60f255 100644
--- a/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java
+++ b/example/application/todoapp/dom/src/main/java/app/ToDoAppDashboardService.java
@@ -19,9 +19,10 @@
package app;
import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.services.homepage.AbstractHomePageDashboardService;
-@DomainService
+@DomainService(nature = NatureOfService.DOMAIN)
public class ToDoAppDashboardService extends AbstractHomePageDashboardService<ToDoAppDashboard> {
public ToDoAppDashboardService() {
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java
index 3a9b6a9..65a7219 100644
--- a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java
+++ b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemContributions.java
@@ -32,12 +32,11 @@ import org.joda.time.LocalDate;
import org.apache.isis.applib.AbstractFactoryAndRepository;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.ActionSemantics;
import org.apache.isis.applib.annotation.Disabled;
import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.NotContributed;
import org.apache.isis.applib.annotation.NotContributed.As;
-import org.apache.isis.applib.annotation.NotInServiceMenu;
import org.apache.isis.applib.annotation.Optional;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.SemanticsOf;
@@ -46,11 +45,10 @@ import org.apache.isis.applib.query.QueryDefault;
import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
import org.apache.isis.applib.value.Clob;
-@DomainService
+@DomainService(nature = NatureOfService.VIEW_CONTRIBUTIONS)
public class ToDoItemContributions extends AbstractFactoryAndRepository {
//region > priority (contributed property)
- @NotInServiceMenu
@NotContributed(As.ACTION) // ie contributed as association
@Action(
semantics = SemanticsOf.SAFE,
@@ -106,7 +104,6 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
//endregion
//region > next, previous (contributed actions)
- @NotInServiceMenu
@NotContributed(As.ASSOCIATION) // ie contributed as action
@Action(semantics = SemanticsOf.SAFE)
@ActionLayout(
@@ -132,7 +129,6 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
// //////////////////////////////////////
- @NotInServiceMenu
@NotContributed(As.ASSOCIATION) // ie contributed as action
@ActionLayout(
describedAs = "The previous item not yet completed"
@@ -174,7 +170,6 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
//endregion
//region > similarTo (contributed collection)
- @NotInServiceMenu
@NotContributed(As.ACTION)
@Action(semantics = SemanticsOf.SAFE)
public List<ToDoItem> similarTo(final ToDoItem toDoItem) {
@@ -199,7 +194,6 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
//region > updateCategory (contributed action)
- @NotInServiceMenu
@ActionLayout(
describedAs = "Update category and subcategory"
)
@@ -236,8 +230,7 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
/**
* Demonstrates functionality of streaming back Clob/Blob result within an action with a prompt, i.e. Ajax request
*/
- @ActionSemantics(ActionSemantics.Of.SAFE)
- @NotInServiceMenu
+ @Action(semantics = SemanticsOf.SAFE)
public Clob exportAsJson(
final ToDoItem toDoItem,
@ParameterLayout(named = "File name") String fileName
http://git-wip-us.apache.org/repos/asf/isis/blob/2a5db0c5/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java
index 600d9c0..de9afc5 100644
--- a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java
+++ b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItemSubscriptions.java
@@ -33,11 +33,11 @@ import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.DomainServiceLayout;
-import org.apache.isis.applib.annotation.RestrictTo;
import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.NotContributed;
+import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.RestrictTo;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
@@ -58,7 +58,7 @@ import static com.google.common.collect.Lists.newArrayList;
* vetoing the change).
* </p>
*/
-@DomainService
+@DomainService(nature = NatureOfService.VIEW_MENU)
@DomainServiceLayout(menuBar = DomainServiceLayout.MenuBar.SECONDARY, menuOrder = "30")
public class ToDoItemSubscriptions {
@@ -129,7 +129,6 @@ public class ToDoItemSubscriptions {
* To demo/test what occurs if a subscriber that might veto an event.
*/
@MemberOrder(name = "Prototyping", sequence = "80")
- @NotContributed
@ActionLayout(
named="Set subscriber behaviour"
)