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 2016/04/21 11:05:00 UTC

[1/3] isis git commit: ISIS-1384: new MetaModelService2 for "sort of" API.

Repository: isis
Updated Branches:
  refs/heads/master 675ed8551 -> 6bff3d31f


ISIS-1384: new MetaModelService2 for "sort of" API.

Also fixing comment of WizardFacet.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/16a42b83
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/16a42b83
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/16a42b83

Branch: refs/heads/master
Commit: 16a42b839ff9b76051d7253c504c1ba7ac4a7afb
Parents: 675ed85
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 21 09:48:08 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 21 09:50:29 2016 +0100

----------------------------------------------------------------------
 .../guides/_rgsvc_api_MetamodelService.adoc     | 21 ++++--
 .../services/metamodel/MetaModelService.java    |  1 +
 .../services/metamodel/MetaModelService2.java   | 69 ++++++++++++++++++++
 .../facets/object/wizard/WizardFacet.java       |  4 --
 .../metamodel/MetaModelServiceDefault.java      | 47 ++++++++++++-
 .../metamodel/spec/ObjectSpecification.java     |  1 +
 .../dflt/ObjectSpecificationDefault.java        |  6 ++
 .../ObjectSpecificationOnStandaloneList.java    |  5 ++
 .../testspec/ObjectSpecificationStub.java       |  4 ++
 9 files changed, 148 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
index 4cf640b..efe200f 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
@@ -6,9 +6,13 @@
 
 
 
-The `MetaModelService` provides access (albeit currently extremely limited) to aspects of Apache Isis' internal metamodel.
+The `MetaModelService2` (`MetaModelService2` sub-interface introduced in `1.13.0-SNAPSHOT`) provides access to
+a number of aspects of Apache Isis' internal metamodel.
+
+[NOTE]
+====
+====
 
-Currently this is limited to looking up the object type (as specified in xref:rgant.adoc#_rgant-DomainObject_objectType[`@DomainObject#objectType()`] and equivalent mechanisms, and as used in  xref:rgsvc.adoc#_rgsvc_api_BookmarkService[`Bookmark`]s and elsewhere) from an object's class, and vice versa.  In the future we expect other aspects of the metamodel to also be formally surfaced through this API.
 
 
 == API
@@ -18,17 +22,25 @@ The API defined by the service is:
 
 [source,java]
 ----
-public interface MetaModelService {
+public interface MetaModelService2 {
     Class<?> fromObjectType(final String objectType);   // <1>
     String toObjectType(final Class<?> domainType);     // <2>
     void rebuild(final Class<?> domainType);            // <3>
     List<DomainMember> export();                        // <4>
+
+    enum Sort {
+        VIEW_MODEL, JDO_ENTITY, DOMAIN_SERVICE,
+        MIXIN, VALUE, COLLECTION;
+    }
+    Sort sortOf(final Class<?> domainType);             // <5>
+    Sort sortOf(final Bookmark bookmark);
 }
 ----
 <1> reverse lookup of a domain class' object type
 <2> lookup of a domain class' object type
 <3> invalidate and rebuild the internal metadata (an `ObjectSpecification`) for the specified domain type.
 <4> returns a list of representations of each of member of each domain class.
+<5> (`1.13.0-SNAPSHOT`) what sort of object a domain type is (or bookmark represents)
 
 
 == Implementation
@@ -51,4 +63,5 @@ in the xref:rgsvc.adoc#_rgsvc_intro_overriding-the-services[introduction] to thi
 == Related Services
 
 The `MetaModelServiceMenu` provides a method to download all domain members as a CSV.  Internally
-this calls `MetaModelService#export()`.
+this calls `MetaModelService#export()`.  Under the covers this uses the API provided by the
+xref:rgsvc.adoc#_rgsvc_api_ApplicationFeatureRepository[`ApplicationFeatureRepository`] domain service.

http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
index 8bdcddc..3263ba7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
@@ -58,4 +58,5 @@ public interface MetaModelService {
     @Programmatic
     List<DomainMember> export();
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService2.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService2.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService2.java
new file mode 100644
index 0000000..7ec7e1d
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService2.java
@@ -0,0 +1,69 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.applib.services.metamodel;
+
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+
+/**
+ * This service provides a formal API into Isis' metamodel.
+ */
+public interface MetaModelService2 extends MetaModelService {
+
+    enum Sort {
+        VIEW_MODEL,
+        JDO_ENTITY,
+        DOMAIN_SERVICE,
+        MIXIN,
+        VALUE,
+        COLLECTION;
+
+        public boolean isDomainService() {
+            return this == DOMAIN_SERVICE;
+        }
+
+        public boolean isMixin() {
+            return this == MIXIN;
+        }
+
+        public boolean isViewModel() {
+            return this == VIEW_MODEL;
+        }
+
+        public boolean isValue() {
+            return this == VALUE;
+        }
+
+        public boolean isCollection() {
+            return this == COLLECTION;
+        }
+
+        public boolean isJdoEntity() {
+            return this == JDO_ENTITY;
+        }
+
+    }
+
+    @Programmatic
+    Sort sortOf(final Class<?> domainType);
+
+    @Programmatic
+    Sort sortOf(final Bookmark bookmark);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/wizard/WizardFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/wizard/WizardFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/wizard/WizardFacet.java
index 35ef3fd..0afac9e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/wizard/WizardFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/wizard/WizardFacet.java
@@ -24,10 +24,6 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 
 /**
  * Indicates that this class is a wizard.
- * 
- * <p>
- * In the standard Apache Isis Programming Model, typically corresponds to
- * applying the <tt>@Wizard</tt> annotation at the class level.
  */
 public interface WizardFacet extends Facet {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 6830236..c433e45 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -26,15 +26,17 @@ import javax.inject.Inject;
 
 import com.google.common.collect.Lists;
 
+import org.datanucleus.enhancement.Persistable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.grid.GridService;
 import org.apache.isis.applib.services.metamodel.DomainMember;
-import org.apache.isis.applib.services.metamodel.MetaModelService;
+import org.apache.isis.applib.services.metamodel.MetaModelService2;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -49,7 +51,7 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 @DomainService(
         nature = NatureOfService.DOMAIN
 )
-public class MetaModelServiceDefault implements MetaModelService, SpecificationLoaderAware {
+public class MetaModelServiceDefault implements MetaModelService2, SpecificationLoaderAware {
 
     @SuppressWarnings("unused")
     private final static Logger LOG = LoggerFactory.getLogger(MetaModelServiceDefault.class);
@@ -158,6 +160,46 @@ public class MetaModelServiceDefault implements MetaModelService, SpecificationL
 
     // //////////////////////////////////////
 
+    @Override
+    public Sort sortOf(final Class<?> domainType) {
+        if(domainType == null) {
+            return null;
+        }
+        final ObjectSpecification objectSpec = specificationLookup.loadSpecification(domainType);
+        if(objectSpec.isService()) {
+            return Sort.DOMAIN_SERVICE;
+        }
+        if(objectSpec.isViewModel()) {
+            return Sort.VIEW_MODEL;
+        }
+        if(objectSpec.isValue()) {
+            return Sort.VALUE;
+        }
+        if(objectSpec.isMixin()) {
+            return Sort.VALUE;
+        }
+        if(objectSpec.isParentedOrFreeCollection()) {
+            return Sort.COLLECTION;
+        }
+        final Class<?> correspondingClass = objectSpec.getCorrespondingClass();
+        if(Persistable.class.isAssignableFrom(correspondingClass)) {
+            return Sort.JDO_ENTITY;
+        }
+        throw new IllegalArgumentException(String.format(
+                "Unable to determine what sort of domain object is '%s'", objectSpec.getFullIdentifier()));
+    }
+
+    @Override
+    public Sort sortOf(final Bookmark bookmark) {
+        if(bookmark == null) {
+            return null;
+        }
+        final Class<?> domainType = this.fromObjectType(bookmark.getObjectType());
+        return sortOf(domainType);
+    }
+
+    // //////////////////////////////////////
+
     private SpecificationLoader specificationLookup;
 
     @Override
@@ -167,4 +209,5 @@ public class MetaModelServiceDefault implements MetaModelService, SpecificationL
 
     @Inject
     GridService gridService;
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 0aa950e..ffe719a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -356,6 +356,7 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
     // //////////////////////////////////////////////////////////////
 
     boolean isViewModel();
+    boolean isMixin();
     boolean isViewModelCloneable(ObjectAdapter targetAdapter);
     boolean isWizard();
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 65448e9..2a73303 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -47,6 +47,7 @@ import org.apache.isis.core.metamodel.facets.all.i18n.PluralFacetTranslated;
 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.facets.object.icon.IconFacet;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
 import org.apache.isis.core.metamodel.facets.object.plural.inferred.PluralFacetInferred;
 import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
@@ -317,6 +318,11 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
     }
 
     @Override
+    public boolean isMixin() {
+        return containsFacet(MixinFacet.class);
+    }
+
+    @Override
     public boolean isWizard() {
         return containsFacet(WizardFacet.class);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
index 87a521b..a963d6e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
@@ -105,6 +105,11 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
     }
 
     @Override
+    public boolean isMixin() {
+        return false;
+    }
+
+    @Override
     public boolean isViewModelCloneable(ObjectAdapter targetAdapter) {
         return false;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/16a42b83/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 7f405c0..215cac7 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -416,6 +416,10 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
         return false;
     }
 
+    @Override
+    public boolean isMixin() {
+        return false;
+    }
 
 
     @Override


[3/3] isis git commit: ISIS-1384: minor doc fix

Posted by da...@apache.org.
ISIS-1384: minor doc fix


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/6bff3d31
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/6bff3d31
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/6bff3d31

Branch: refs/heads/master
Commit: 6bff3d31f837adf78d6bc4a4fad86a06e4f0a08f
Parents: 0f1fe2e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 21 09:58:57 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 21 09:58:57 2016 +0100

----------------------------------------------------------------------
 .../main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc   | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6bff3d31/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
index efe200f..31951dc 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
@@ -9,11 +9,6 @@
 The `MetaModelService2` (`MetaModelService2` sub-interface introduced in `1.13.0-SNAPSHOT`) provides access to
 a number of aspects of Apache Isis' internal metamodel.
 
-[NOTE]
-====
-====
-
-
 
 == API
 
@@ -28,11 +23,11 @@ public interface MetaModelService2 {
     void rebuild(final Class<?> domainType);            // <3>
     List<DomainMember> export();                        // <4>
 
-    enum Sort {
+    enum Sort {                                         // <5>
         VIEW_MODEL, JDO_ENTITY, DOMAIN_SERVICE,
         MIXIN, VALUE, COLLECTION;
     }
-    Sort sortOf(final Class<?> domainType);             // <5>
+    Sort sortOf(final Class<?> domainType);
     Sort sortOf(final Bookmark bookmark);
 }
 ----


[2/3] isis git commit: ISIS-1385: using new API in MetaModelService2 to disable the "openTargetObject" action if the object pertains to a domain service.

Posted by da...@apache.org.
ISIS-1385: using new API in MetaModelService2 to disable the "openTargetObject" action if the object pertains to a domain service.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/0f1fe2eb
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/0f1fe2eb
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/0f1fe2eb

Branch: refs/heads/master
Commit: 0f1fe2ebbb7df9826a936b23c8f16ed3b13aed5d
Parents: 16a42b8
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 21 09:48:50 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 21 09:50:47 2016 +0100

----------------------------------------------------------------------
 .../applib/service/DomainChangeJdoAbstract.java  | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0f1fe2eb/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java
index 368508e..20d646c 100644
--- a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java
@@ -19,8 +19,10 @@ package org.apache.isis.objectstore.jdo.applib.service;
 import java.sql.Timestamp;
 import java.util.Comparator;
 import java.util.UUID;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -36,6 +38,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.metamodel.MetaModelService2;
 import org.apache.isis.applib.util.ObjectContracts;
 
 import static org.apache.isis.applib.annotation.Optionality.MANDATORY;
@@ -222,10 +225,23 @@ public abstract class DomainChangeJdoAbstract {
     public Object openTargetObject() {
         return Util.lookupBookmark(getTarget(), bookmarkService, container);
     }
+
     public boolean hideOpenTargetObject() {
         return getTarget() == null;
     }
 
+    public String disableOpenTargetObject() {
+        final Object targetObject = getTarget();
+        if (targetObject == null) {
+            return null;
+        }
+        final MetaModelService2.Sort sortOfObject = metaModelService.sortOf(getTarget());
+        return !(sortOfObject.isViewModel() || sortOfObject.isJdoEntity())
+                ? "Can only open view models or entities"
+                : null;
+    }
+
+
 
     // //////////////////////////////////////
     
@@ -331,4 +347,7 @@ public abstract class DomainChangeJdoAbstract {
     @javax.inject.Inject
     protected DomainObjectContainer container;
 
+    @javax.inject.Inject
+    protected MetaModelService2 metaModelService;
+
 }