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/10/26 18:50:17 UTC

[1/4] isis git commit: ISIS-1505: adds new MetaModelService3 with overload of sortOf(...) to allow a new Sort.UNKNOWN to be returned (rather than throwing an exception) if the domain type is not recognized

Repository: isis
Updated Branches:
  refs/heads/master 1be09cc68 -> 3b2c55207


ISIS-1505: adds new MetaModelService3 with overload of sortOf(...) to allow a new Sort.UNKNOWN to be returned (rather than throwing an exception) if the domain type is not recognized


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

Branch: refs/heads/master
Commit: 551661cd1f9b3651ee81d367f04507117ead82a3
Parents: 8da21a3
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Oct 26 18:47:36 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Oct 26 18:47:36 2016 +0100

----------------------------------------------------------------------
 .../guides/_rgsvc_api_MetamodelService.adoc     | 27 +++++++-----
 .../services/metamodel/MetaModelService2.java   | 15 ++++++-
 .../services/metamodel/MetaModelService3.java   | 46 ++++++++++++++++++++
 .../metamodel/MetaModelServiceDefault.java      | 25 ++++++++---
 4 files changed, 95 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/551661cd/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 e32907c..69e9ebb 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
@@ -1,12 +1,12 @@
 [[_rgsvc_api_MetaModelService]]
-= `MetaModelService`
+= `MetaModelService3`
 :Notice: 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.
 :_basedir: ../
 :_imagesdir: images/
 
 
 
-The `MetaModelService2` service provides access to a number of aspects of Apache Isis' internal metamodel.
+The `MetaModelService3` service provides access to a number of aspects of Apache Isis' internal metamodel.
 
 
 == API
@@ -17,17 +17,23 @@ The API defined by the service is:
 [source,java]
 ----
 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>
+    Class<?> fromObjectType(String objectType);   // <1>
+    String toObjectType(Class<?> domainType);     // <2>
+    void rebuild(Class<?> domainType);            // <3>
+    List<DomainMember> export();                  // <4>
 
-    enum Sort {                                         // <5>
+    enum Sort {                                   // <5>
         VIEW_MODEL, JDO_ENTITY, DOMAIN_SERVICE,
-        MIXIN, VALUE, COLLECTION;
+        MIXIN, VALUE, COLLECTION, UNKNOWN;
     }
-    Sort sortOf(final Class<?> domainType);
-    Sort sortOf(final Bookmark bookmark);
+    enum Mode {
+        STRICT,
+        RELAXED
+    }
+    Sort sortOf(Class<?> domainType);             // <6>
+    Sort sortOf(Bookmark bookmark);
+    Sort sortOf(Class<?> domainType, Mode mode);
+    Sort sortOf(Bookmark bookmark, Mode mode);
 }
 ----
 <1> reverse lookup of a domain class' object type
@@ -35,6 +41,7 @@ public interface MetaModelService2 {
 <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> what sort of object a domain type is (or bookmark) represents
+<6> whether to throw an exception or return `Sort.UNKNOWN` if the object type is not recognized.  (The overloads with no `Mode` parameter default to strict mode).
 
 
 == Implementation

http://git-wip-us.apache.org/repos/asf/isis/blob/551661cd/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
index 7ec7e1d..1ffd3f9 100644
--- 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
@@ -32,7 +32,8 @@ public interface MetaModelService2 extends MetaModelService {
         DOMAIN_SERVICE,
         MIXIN,
         VALUE,
-        COLLECTION;
+        COLLECTION,
+        UNKNOWN;
 
         public boolean isDomainService() {
             return this == DOMAIN_SERVICE;
@@ -58,11 +59,23 @@ public interface MetaModelService2 extends MetaModelService {
             return this == JDO_ENTITY;
         }
 
+        public boolean isUnknown() {
+            return this == UNKNOWN;
+        }
+
     }
 
+    /**
+     * @deprecated - use {@link MetaModelService3#sortOf(Class, org.apache.isis.applib.services.metamodel.MetaModelService3.Mode)}
+     */
+    @Deprecated
     @Programmatic
     Sort sortOf(final Class<?> domainType);
 
+    /**
+     * @deprecated - use {@link MetaModelService3#sortOf(Bookmark, org.apache.isis.applib.services.metamodel.MetaModelService3.Mode)}
+     */
+    @Deprecated
     @Programmatic
     Sort sortOf(final Bookmark bookmark);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/551661cd/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService3.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService3.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService3.java
new file mode 100644
index 0000000..008aad1
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService3.java
@@ -0,0 +1,46 @@
+/*
+ *  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 MetaModelService3 extends MetaModelService2 {
+
+    enum Mode {
+        /**
+         * If the {@link #sortOf(Class, Mode) sort of} object type is unknown, then throw an exception.
+         */
+        STRICT,
+        /**
+         * If the {@link #sortOf(Class, Mode) sort of} object type is unknown, then return {@link Sort#UNKNOWN}.
+         */
+        RELAXED
+    }
+
+    @Programmatic
+    Sort sortOf(final Class<?> domainType, final Mode mode);
+
+    @Programmatic
+    Sort sortOf(final Bookmark bookmark, final Mode mode);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/551661cd/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 6c4ab5e..e20b751 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
@@ -22,8 +22,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
-import javax.inject.Inject;
-
 import com.google.common.collect.Lists;
 
 import org.datanucleus.enhancement.Persistable;
@@ -36,7 +34,7 @@ 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.MetaModelService2;
+import org.apache.isis.applib.services.metamodel.MetaModelService3;
 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;
@@ -50,7 +48,7 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 @DomainService(
         nature = NatureOfService.DOMAIN
 )
-public class MetaModelServiceDefault implements MetaModelService2 {
+public class MetaModelServiceDefault implements MetaModelService3 {
 
     @SuppressWarnings("unused")
     private final static Logger LOG = LoggerFactory.getLogger(MetaModelServiceDefault.class);
@@ -156,11 +154,17 @@ public class MetaModelServiceDefault implements MetaModelService2 {
 
 
 
-
     // //////////////////////////////////////
 
     @Override
     public Sort sortOf(final Class<?> domainType) {
+        return sortOf(domainType, Mode.STRICT);
+    }
+
+
+    @Override
+    public Sort sortOf(
+            final Class<?> domainType, final Mode mode) {
         if(domainType == null) {
             return null;
         }
@@ -184,22 +188,29 @@ public class MetaModelServiceDefault implements MetaModelService2 {
         if(Persistable.class.isAssignableFrom(correspondingClass)) {
             return Sort.JDO_ENTITY;
         }
+        if(mode == Mode.RELAXED) {
+            return Sort.UNKNOWN;
+        }
         throw new IllegalArgumentException(String.format(
                 "Unable to determine what sort of domain object is '%s'", objectSpec.getFullIdentifier()));
     }
 
     @Override
     public Sort sortOf(final Bookmark bookmark) {
+        return sortOf(bookmark, Mode.STRICT);
+    }
+
+    @Override
+    public Sort sortOf(final Bookmark bookmark, final Mode mode) {
         if(bookmark == null) {
             return null;
         }
         final Class<?> domainType = this.fromObjectType(bookmark.getObjectType());
-        return sortOf(domainType);
+        return sortOf(domainType, mode);
     }
 
 
 
-
     @javax.inject.Inject
     SpecificationLoader specificationLookup;
 


[4/4] isis git commit: Merge branch 'maint-1.13.1'

Posted by da...@apache.org.
Merge branch 'maint-1.13.1'

# Conflicts:
#	core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java


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

Branch: refs/heads/master
Commit: 3b2c5520771b4fc647863bdddd69aad6244f3c64
Parents: e78c6f0 28b9a25
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Oct 26 19:38:12 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Oct 26 19:38:12 2016 +0100

----------------------------------------------------------------------
 .../isis/core/runtime/system/session/IsisSessionFactory.java  | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3b2c5520/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
----------------------------------------------------------------------
diff --cc core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
index 6573acf,2ab4b46..204546f
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
@@@ -22,7 -22,7 +22,8 @@@ package org.apache.isis.core.runtime.sy
  import java.util.List;
  import java.util.concurrent.Callable;
  
 +import javax.inject.Inject;
+ import com.google.common.collect.Lists;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;


[2/4] isis git commit: Merge branch 'maint-1.13.1'

Posted by da...@apache.org.
Merge branch 'maint-1.13.1'


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

Branch: refs/heads/master
Commit: e78c6f0f075137b7099721a15a8528dd2658a87a
Parents: 1be09cc 551661c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Oct 26 18:49:22 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Oct 26 18:49:22 2016 +0100

----------------------------------------------------------------------
 .../guides/_rgsvc_api_MetamodelService.adoc     | 27 +++++++-----
 .../services/metamodel/MetaModelService2.java   | 15 ++++++-
 .../services/metamodel/MetaModelService3.java   | 46 ++++++++++++++++++++
 .../metamodel/MetaModelServiceDefault.java      | 25 ++++++++---
 4 files changed, 95 insertions(+), 18 deletions(-)
----------------------------------------------------------------------



[3/4] isis git commit: ISIS-1525: takes a copy of all services prior to iterating over them during startup, to avoid an occasional concurrent modification exception.

Posted by da...@apache.org.
ISIS-1525: takes a copy of all services prior to iterating over them during startup, to avoid an occasional concurrent modification exception.


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

Branch: refs/heads/master
Commit: 28b9a255adf6784b2b1123c31ddd1bd07f640c31
Parents: 551661c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Oct 26 19:33:34 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Oct 26 19:33:34 2016 +0100

----------------------------------------------------------------------
 .../isis/core/runtime/system/session/IsisSessionFactory.java | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/28b9a255/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
index 80bc088..2ab4b46 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
@@ -22,6 +22,8 @@ package org.apache.isis.core.runtime.system.session;
 import java.util.List;
 import java.util.concurrent.Callable;
 
+import com.google.common.collect.Lists;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -143,9 +145,13 @@ public class IsisSessionFactory implements ApplicationScopedComponent {
             //
             // translateServicesAndEnumConstants
             //
+
             final List<Object> services = servicesInjector.getRegisteredServices();
+            // take a copy of all services to avoid occasionall concurrent modification exceptions
+            // that can sometimes occur in the loop
+            final List<Object> copyOfServices = Lists.newArrayList(services);
             final TitleService titleService = servicesInjector.lookupServiceElseFail(TitleService.class);
-            for (Object service : services) {
+            for (Object service : copyOfServices) {
                 final String unused = titleService.titleOf(service);
             }
             for (final ObjectSpecification objSpec : servicesInjector.getSpecificationLoader().allSpecifications()) {