You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by so...@apache.org on 2018/01/21 21:01:11 UTC

[1/2] polygene-java git commit: Simplified inheritance hierarchy for ModelDescriptor(s) that are also part of a VisitableHierarchy

Repository: polygene-java
Updated Branches:
  refs/heads/develop 8d0d8dcc7 -> e1cc8a6e0


Simplified inheritance hierarchy for ModelDescriptor(s) that are also part of a VisitableHierarchy


Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/468bd3db
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/468bd3db
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/468bd3db

Branch: refs/heads/develop
Commit: 468bd3dbc31fa0b4047e29dadb303ea0746f638d
Parents: 8d0d8dc
Author: soelvsten <ke...@gmail.com>
Authored: Sun Jan 21 20:20:36 2018 +0100
Committer: soelvsten <ke...@gmail.com>
Committed: Sun Jan 21 20:20:36 2018 +0100

----------------------------------------------------------------------
 .../api/composite/CompositeDescriptor.java      |  4 ++-
 .../polygene/api/object/ObjectDescriptor.java   |  3 +-
 .../api/service/ImportedServiceDescriptor.java  |  3 +-
 .../api/util/VisitableModelDescriptor.java      | 30 ++++++++++++++++++++
 .../runtime/composite/CompositeModel.java       |  2 +-
 .../polygene/runtime/object/ObjectModel.java    |  2 +-
 .../runtime/service/ImportedServiceModel.java   |  2 +-
 .../skeletons/SQLCompatEntityStateWrapper.java  |  7 +++++
 8 files changed, 47 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/468bd3db/core/api/src/main/java/org/apache/polygene/api/composite/CompositeDescriptor.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/composite/CompositeDescriptor.java b/core/api/src/main/java/org/apache/polygene/api/composite/CompositeDescriptor.java
index bd5d65e..4f8f39d 100644
--- a/core/api/src/main/java/org/apache/polygene/api/composite/CompositeDescriptor.java
+++ b/core/api/src/main/java/org/apache/polygene/api/composite/CompositeDescriptor.java
@@ -20,13 +20,15 @@
 
 package org.apache.polygene.api.composite;
 
+import org.apache.polygene.api.util.VisitableModelDescriptor;
+
 import java.util.stream.Stream;
 
 /**
  * Composite Descriptor.
  */
 public interface CompositeDescriptor
-    extends ModelDescriptor
+    extends VisitableModelDescriptor
 {
     Class<?> primaryType();
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/468bd3db/core/api/src/main/java/org/apache/polygene/api/object/ObjectDescriptor.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/object/ObjectDescriptor.java b/core/api/src/main/java/org/apache/polygene/api/object/ObjectDescriptor.java
index 81ee90b..64edfd3 100644
--- a/core/api/src/main/java/org/apache/polygene/api/object/ObjectDescriptor.java
+++ b/core/api/src/main/java/org/apache/polygene/api/object/ObjectDescriptor.java
@@ -21,11 +21,12 @@
 package org.apache.polygene.api.object;
 
 import org.apache.polygene.api.composite.ModelDescriptor;
+import org.apache.polygene.api.util.VisitableModelDescriptor;
 
 /**
  * Object Descriptor.
  */
 public interface ObjectDescriptor
-    extends ModelDescriptor
+    extends VisitableModelDescriptor
 {
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/468bd3db/core/api/src/main/java/org/apache/polygene/api/service/ImportedServiceDescriptor.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/service/ImportedServiceDescriptor.java b/core/api/src/main/java/org/apache/polygene/api/service/ImportedServiceDescriptor.java
index 558b7ed..f981e7f 100644
--- a/core/api/src/main/java/org/apache/polygene/api/service/ImportedServiceDescriptor.java
+++ b/core/api/src/main/java/org/apache/polygene/api/service/ImportedServiceDescriptor.java
@@ -22,12 +22,13 @@ package org.apache.polygene.api.service;
 
 import org.apache.polygene.api.composite.ModelDescriptor;
 import org.apache.polygene.api.identity.Identifiable;
+import org.apache.polygene.api.util.VisitableModelDescriptor;
 
 /**
  * {@code ServiceDescriptor} provides meta information of a service.
  */
 public interface ImportedServiceDescriptor
-    extends ModelDescriptor, Identifiable
+    extends VisitableModelDescriptor, Identifiable
 {
     Class<? extends ServiceImporter> serviceImporter();
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/468bd3db/core/api/src/main/java/org/apache/polygene/api/util/VisitableModelDescriptor.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/util/VisitableModelDescriptor.java b/core/api/src/main/java/org/apache/polygene/api/util/VisitableModelDescriptor.java
new file mode 100644
index 0000000..e8d93b1
--- /dev/null
+++ b/core/api/src/main/java/org/apache/polygene/api/util/VisitableModelDescriptor.java
@@ -0,0 +1,30 @@
+/*
+ *  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.polygene.api.util;
+
+import org.apache.polygene.api.composite.ModelDescriptor;
+
+/**
+ * A modeldescriptor, that is also part of a VisitableHierarchy
+ */
+public interface VisitableModelDescriptor
+        extends ModelDescriptor, VisitableHierarchy<Object, Object>
+{
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/468bd3db/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java
index 72ab757..29d49f0 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositeModel.java
@@ -47,7 +47,7 @@ import static org.apache.polygene.api.composite.InvalidCompositeException.handle
  * JAVADOC
  */
 public abstract class CompositeModel
-    implements VisitableHierarchy<Object, Object>, Dependencies, CompositeDescriptor
+    implements Dependencies, CompositeDescriptor
 {
     protected final ModuleDescriptor module;
     protected final MixinsModel mixinsModel;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/468bd3db/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectModel.java
index c1a3dbf..6efdc02 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectModel.java
@@ -39,7 +39,7 @@ import org.apache.polygene.runtime.injection.InjectionContext;
  * JAVADOC
  */
 public final class ObjectModel
-    implements ObjectDescriptor, VisitableHierarchy<Object, Object>
+    implements ObjectDescriptor
 {
     private final ModuleDescriptor module;
     private final Class<?> objectType;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/468bd3db/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceModel.java
index 174735f..50495ef 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServiceModel.java
@@ -38,7 +38,7 @@ import org.apache.polygene.runtime.activation.ActivatorsModel;
  * JAVADOC
  */
 public final class ImportedServiceModel
-    implements ImportedServiceDescriptor, VisitableHierarchy<Object, Object>
+    implements ImportedServiceDescriptor
 {
     private final ModuleDescriptor module;
     private final Class<?> type;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/468bd3db/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java b/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
index 4b1d9a2..49bff4f 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/polygene/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
@@ -35,6 +35,7 @@ import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.type.CollectionType;
 import org.apache.polygene.api.type.EntityCompositeType;
 import org.apache.polygene.api.type.ValueType;
+import org.apache.polygene.api.util.HierarchicalVisitor;
 import org.apache.polygene.api.value.ValueComposite;
 import org.apache.polygene.spi.entity.EntityState;
 import org.apache.polygene.spi.entity.EntityStatus;
@@ -279,6 +280,12 @@ class SQLCompatEntityStateWrapper
         {
             return wrappedEntityDescriptor.hashCode();
         }
+
+        @Override
+        public <ThrowableType extends Throwable> boolean accept(HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor) throws ThrowableType
+        {
+            return wrappedEntityDescriptor.accept(visitor);
+        }
     }
 
     private static class CompatAssociationStateDescriptorWrapper


[2/2] polygene-java git commit: consolidated common code for "lists" of compositemodels

Posted by so...@apache.org.
consolidated common code for "lists" of compositemodels


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

Branch: refs/heads/develop
Commit: e1cc8a6e0902b19792717b71e9366be37cbda97f
Parents: 468bd3d
Author: soelvsten <ke...@gmail.com>
Authored: Sun Jan 21 22:00:47 2018 +0100
Committer: soelvsten <ke...@gmail.com>
Committed: Sun Jan 21 22:00:47 2018 +0100

----------------------------------------------------------------------
 .../runtime/composite/CompositesModel.java      | 61 ++++++++++++++++++++
 .../runtime/composite/TransientsModel.java      | 38 +-----------
 .../polygene/runtime/entity/EntitiesModel.java  | 40 ++-----------
 .../polygene/runtime/object/ObjectsModel.java   | 34 ++---------
 .../service/ImportedServicesInstance.java       |  4 +-
 .../runtime/service/ImportedServicesModel.java  | 49 ++++------------
 .../runtime/service/ServicesInstance.java       |  4 +-
 .../polygene/runtime/service/ServicesModel.java | 60 ++++---------------
 .../polygene/runtime/structure/ModuleModel.java | 18 +++---
 .../polygene/runtime/value/ValuesModel.java     | 40 ++-----------
 .../polygene/library/rdf/model/Model2XML.java   |  2 +-
 .../ImportedServiceCompositeDescriptor.java     |  7 +++
 12 files changed, 120 insertions(+), 237 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositesModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositesModel.java
new file mode 100644
index 0000000..a0c4e65
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/CompositesModel.java
@@ -0,0 +1,61 @@
+/*
+ *  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.polygene.runtime.composite;
+
+import org.apache.polygene.api.util.HierarchicalVisitor;
+import org.apache.polygene.api.util.VisitableHierarchy;
+import org.apache.polygene.api.util.VisitableModelDescriptor;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+public abstract class CompositesModel<MD extends VisitableModelDescriptor>
+        implements VisitableHierarchy<Object, Object>
+{
+    private final List<MD> compositeModels;
+
+    public CompositesModel( List<MD> compositeModels)
+    {
+        this.compositeModels = compositeModels;
+    }
+
+    @Override
+    public final <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> modelVisitor )
+            throws ThrowableType
+    {
+        if( modelVisitor.visitEnter( this ) )
+        {
+            for( MD compositeModel : compositeModels)
+            {
+                if( !compositeModel.accept( modelVisitor ) )
+                {
+                    break;
+                }
+            }
+        }
+        return modelVisitor.visitLeave( this );
+    }
+
+    public final Stream<MD> stream()
+    {
+        return compositeModels.stream();
+    }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientsModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientsModel.java
index a18ef09..9b92de4 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientsModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/TransientsModel.java
@@ -21,48 +21,14 @@
 package org.apache.polygene.runtime.composite;
 
 import java.util.List;
-import java.util.stream.Stream;
-import org.apache.polygene.api.composite.TransientDescriptor;
-import org.apache.polygene.api.util.HierarchicalVisitor;
-import org.apache.polygene.api.util.VisitableHierarchy;
 
 /**
  * JAVADOC
  */
-public class TransientsModel
-    implements VisitableHierarchy<Object, Object>
+public class TransientsModel extends CompositesModel<TransientModel>
 {
-    private final List<TransientModel> transientModels;
-
     public TransientsModel( List<TransientModel> transientModels )
     {
-        this.transientModels = transientModels;
-    }
-
-    public Stream<TransientModel> models()
-    {
-        return transientModels.stream();
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> modelVisitor )
-        throws ThrowableType
-    {
-        if( modelVisitor.visitEnter( this ) )
-        {
-            for( TransientModel transientModel : transientModels )
-            {
-                if( !transientModel.accept( modelVisitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return modelVisitor.visitLeave( this );
-    }
-
-    public Stream<? extends TransientDescriptor> stream()
-    {
-        return transientModels.stream();
+        super(transientModels);
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntitiesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntitiesModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntitiesModel.java
index ebb3d78..6f4a482 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntitiesModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntitiesModel.java
@@ -20,49 +20,19 @@
 
 package org.apache.polygene.runtime.entity;
 
-import java.util.List;
-import java.util.stream.Stream;
-import org.apache.polygene.api.entity.EntityDescriptor;
-import org.apache.polygene.api.util.HierarchicalVisitor;
 import org.apache.polygene.api.util.VisitableHierarchy;
+import org.apache.polygene.runtime.composite.CompositesModel;
+
+import java.util.List;
 
 /**
  * Model of entities in a particular Module.
  */
-public class EntitiesModel
+public class EntitiesModel extends CompositesModel<EntityModel>
     implements VisitableHierarchy<Object, Object>
 {
-    private final List<EntityModel> entityModels;
-
     public EntitiesModel( List<EntityModel> entityModels )
     {
-        this.entityModels = entityModels;
-    }
-
-    public Stream<EntityModel> models()
-    {
-        return entityModels.stream();
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> modelVisitor )
-        throws ThrowableType
-    {
-        if( modelVisitor.visitEnter( this ) )
-        {
-            for( EntityModel entityModel : entityModels )
-            {
-                if( !entityModel.accept( modelVisitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return modelVisitor.visitLeave( this );
-    }
-
-    public Stream<? extends EntityDescriptor> stream()
-    {
-        return entityModels.stream();
+        super(entityModels);
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectsModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectsModel.java
index 84d2c11..04b7d0a 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectsModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/object/ObjectsModel.java
@@ -20,43 +20,19 @@
 
 package org.apache.polygene.runtime.object;
 
-import java.util.List;
-import java.util.stream.Stream;
-import org.apache.polygene.api.util.HierarchicalVisitor;
 import org.apache.polygene.api.util.VisitableHierarchy;
+import org.apache.polygene.runtime.composite.CompositesModel;
+
+import java.util.List;
 
 /**
  * JAVADOC
  */
-public class ObjectsModel
+public class ObjectsModel extends CompositesModel<ObjectModel>
     implements VisitableHierarchy<Object, Object>
 {
-    private final List<ObjectModel> objectModels;
-
     public ObjectsModel( List<ObjectModel> objectModels )
     {
-        this.objectModels = objectModels;
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            for( ObjectModel objectModel : objectModels )
-            {
-                if( !objectModel.accept( visitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-
-    public Stream<ObjectModel> models()
-    {
-        return objectModels.stream();
+        super(objectModels);
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesInstance.java b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesInstance.java
index 61a15c9..ffd0f95 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesInstance.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesInstance.java
@@ -58,7 +58,7 @@ public class ImportedServicesInstance
 
     public Stream<ImportedServiceModel> models()
     {
-        return servicesModel.models();
+        return servicesModel.stream();
     }
 
     @Override
@@ -117,7 +117,7 @@ public class ImportedServicesInstance
 
     public Stream<? extends ImportedServiceDescriptor> stream()
     {
-        return servicesModel.models();
+        return servicesModel.stream();
     }
 
     public Stream<ServiceReference<?>> references()

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesModel.java
index af34755..91a559f 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ImportedServicesModel.java
@@ -20,58 +20,31 @@
 
 package org.apache.polygene.runtime.service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Stream;
 import org.apache.polygene.api.service.ServiceReference;
 import org.apache.polygene.api.structure.ModuleDescriptor;
-import org.apache.polygene.api.util.HierarchicalVisitor;
 import org.apache.polygene.api.util.VisitableHierarchy;
+import org.apache.polygene.runtime.composite.CompositesModel;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * JAVADOC
  */
-public class ImportedServicesModel
+public class ImportedServicesModel extends CompositesModel<ImportedServiceModel>
     implements VisitableHierarchy<Object, Object>
 {
-    private List<ImportedServiceModel> importedServiceModels;
-
     public ImportedServicesModel( List<ImportedServiceModel> importedServiceModels )
     {
-        this.importedServiceModels = importedServiceModels;
+        super(importedServiceModels);
     }
 
     public ImportedServicesInstance newInstance( ModuleDescriptor module )
     {
-        List<ServiceReference<?>> serviceReferences = new ArrayList<>();
-        for( ImportedServiceModel serviceModel : importedServiceModels )
-        {
-            ImportedServiceReferenceInstance serviceReferenceInstance = new ImportedServiceReferenceInstance( serviceModel, module );
-            serviceReferences.add( serviceReferenceInstance );
-        }
-
-        return new ImportedServicesInstance( this, serviceReferences );
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            for( ImportedServiceModel importedServiceModel : importedServiceModels )
-            {
-                if( !importedServiceModel.accept( visitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-
-    public Stream<ImportedServiceModel> models()
-    {
-        return importedServiceModels.stream();
+        List<ServiceReference<?>> serviceReferences = stream()
+                .map(serviceModel -> new ImportedServiceReferenceInstance(serviceModel, module))
+                .<ServiceReference<?>>map(ServiceReference.class::cast)
+                .collect(Collectors.toList());
+        return new ImportedServicesInstance(this, serviceReferences );
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesInstance.java b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesInstance.java
index c40a74a..e6b1a41 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesInstance.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesInstance.java
@@ -56,7 +56,7 @@ public class ServicesInstance
 
     public Stream<? extends ServiceDescriptor> models()
     {
-        return servicesModel.models();
+        return servicesModel.stream();
     }
 
     @Override
@@ -112,7 +112,7 @@ public class ServicesInstance
 
     public Stream<? extends ServiceDescriptor> descriptors()
     {
-        return servicesModel.models();
+        return servicesModel.stream();
     }
 
     public Stream<ServiceReference<?>> references()

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesModel.java
index ebdf64c..563ff2b 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/service/ServicesModel.java
@@ -20,71 +20,31 @@
 
 package org.apache.polygene.runtime.service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Stream;
-import org.apache.polygene.api.service.ServiceDescriptor;
 import org.apache.polygene.api.service.ServiceReference;
 import org.apache.polygene.api.structure.ModuleDescriptor;
-import org.apache.polygene.api.util.HierarchicalVisitor;
 import org.apache.polygene.api.util.VisitableHierarchy;
+import org.apache.polygene.runtime.composite.CompositesModel;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * JAVADOC
  */
-public class ServicesModel
+public class ServicesModel extends CompositesModel<ServiceModel>
     implements VisitableHierarchy<Object, Object>
 {
-    private final List<ServiceModel> serviceModels;
-
     public ServicesModel( List<ServiceModel> serviceModels )
     {
-        this.serviceModels = serviceModels;
+        super(serviceModels);
     }
 
     public ServicesInstance newInstance( ModuleDescriptor module )
     {
-        List<ServiceReference<?>> serviceReferences = new ArrayList<>();
-        for( ServiceModel serviceModel : serviceModels )
-        {
-            ServiceReferenceInstance serviceReferenceInstance = new ServiceReferenceInstance( serviceModel, module );
-            serviceReferences.add( serviceReferenceInstance );
-        }
-
+        List<ServiceReference<?>> serviceReferences = stream()
+                        .map(serviceModel -> new ServiceReferenceInstance(serviceModel, module))
+                        .<ServiceReference<?>>map(ServiceReference.class::cast)
+                        .collect(Collectors.toList());
         return new ServicesInstance( this, serviceReferences );
     }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            for( ServiceModel serviceModel : serviceModels )
-            {
-                if( !serviceModel.accept( visitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-
-    public Stream<? extends ServiceDescriptor> models()
-    {
-        return serviceModels.stream();
-    }
-
-    public boolean contains( Class<?> type )
-    {
-        for( ServiceModel model : serviceModels )
-        {
-            if( model.hasType( type ) )
-            {
-                return true;
-            }
-        }
-        return false;
-    }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleModel.java
index e873952..0c2abac 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/structure/ModuleModel.java
@@ -235,7 +235,7 @@ public class ModuleModel
     @Override
     public Stream<? extends ServiceDescriptor> serviceComposites()
     {
-        return servicesModel.models();
+        return servicesModel.stream();
     }
 
     @Override
@@ -247,13 +247,13 @@ public class ModuleModel
     @Override
     public Stream<? extends ImportedServiceDescriptor> importedServices()
     {
-        return importedServicesModel.models();
+        return importedServicesModel.stream();
     }
 
     @Override
     public Stream<? extends ObjectDescriptor> objects()
     {
-        return objectsModel.models();
+        return objectsModel.stream();
     }
 
     @Override
@@ -329,34 +329,34 @@ public class ModuleModel
 
     public Stream<? extends ObjectDescriptor> visibleObjects( Visibility visibility )
     {
-        return objectsModel.models()
+        return objectsModel.stream()
             .filter( new VisibilityPredicate( visibility ) );
     }
 
     public Stream<? extends TransientDescriptor> visibleTransients( Visibility visibility )
     {
-        return transientsModel.models()
+        return transientsModel.stream()
             .filter( new VisibilityPredicate( visibility ) );
     }
 
     public Stream<? extends EntityDescriptor> visibleEntities( Visibility visibility )
     {
-        return entitiesModel.models()
+        return entitiesModel.stream()
             .filter( new VisibilityPredicate( visibility ) );
     }
 
     public Stream<? extends ValueDescriptor> visibleValues( Visibility visibility )
     {
-        return valuesModel.models()
+        return valuesModel.stream()
             .filter( new VisibilityPredicate( visibility ) );
     }
 
     public Stream<? extends ModelDescriptor> visibleServices( Visibility visibility )
     {
         return concat(
-            servicesModel.models()
+            servicesModel.stream()
                 .filter( new VisibilityPredicate( visibility ) ),
-            importedServicesModel.models()
+            importedServicesModel.stream()
                 .filter( new VisibilityPredicate( visibility ) )
         );
     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValuesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValuesModel.java b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValuesModel.java
index caa875b..dbd36e7 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValuesModel.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValuesModel.java
@@ -20,49 +20,19 @@
 
 package org.apache.polygene.runtime.value;
 
-import java.util.List;
-import java.util.stream.Stream;
-import org.apache.polygene.api.util.HierarchicalVisitor;
 import org.apache.polygene.api.util.VisitableHierarchy;
-import org.apache.polygene.api.value.ValueDescriptor;
+import org.apache.polygene.runtime.composite.CompositesModel;
+
+import java.util.List;
 
 /**
  * JAVADOC
  */
-public final class ValuesModel
+public final class ValuesModel extends CompositesModel<ValueModel>
     implements VisitableHierarchy<Object, Object>
 {
-    private final List<ValueModel> valueModels;
-
     public ValuesModel( List<ValueModel> valueModels )
     {
-        this.valueModels = valueModels;
-    }
-
-    public Stream<ValueModel> models()
-    {
-        return valueModels.stream();
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            for( ValueModel valueModel : valueModels )
-            {
-                if( !valueModel.accept( visitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-
-    public Stream<? extends ValueDescriptor> stream()
-    {
-        return valueModels.stream();
+        super(valueModels);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/model/Model2XML.java
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/model/Model2XML.java b/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/model/Model2XML.java
index f9cb7ec..ef52fb7 100644
--- a/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/model/Model2XML.java
+++ b/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/model/Model2XML.java
@@ -53,7 +53,7 @@ public class Model2XML
         simpleMappings.put( "EntitiesModel", "entities" );
         simpleMappings.put( "ServicesModel", "services" );
         simpleMappings.put( "ImportedServicesModel", "importedservices" );
-        simpleMappings.put( "ObjectsModel", "objects" );
+        simpleMappings.put( "CompositesModel", "objects" );
         simpleMappings.put( "ValuesModel", "values" );
         simpleMappings.put( "MixinsModel", "mixins" );
         simpleMappings.put( "CompositeMethodsModel", "methods" );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e1cc8a6e/tools/model-detail/src/main/java/org/apache/polygene/tools/model/descriptor/ImportedServiceCompositeDescriptor.java
----------------------------------------------------------------------
diff --git a/tools/model-detail/src/main/java/org/apache/polygene/tools/model/descriptor/ImportedServiceCompositeDescriptor.java b/tools/model-detail/src/main/java/org/apache/polygene/tools/model/descriptor/ImportedServiceCompositeDescriptor.java
index a87cd08..83b115c 100644
--- a/tools/model-detail/src/main/java/org/apache/polygene/tools/model/descriptor/ImportedServiceCompositeDescriptor.java
+++ b/tools/model-detail/src/main/java/org/apache/polygene/tools/model/descriptor/ImportedServiceCompositeDescriptor.java
@@ -31,6 +31,7 @@ import org.apache.polygene.api.service.ImportedServiceDescriptor;
 import org.apache.polygene.api.service.ServiceImporter;
 import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.util.Classes;
+import org.apache.polygene.api.util.HierarchicalVisitor;
 
 /**
  * XXX Workaround for inconsistency in Polygene core-api/spi
@@ -99,6 +100,12 @@ public class ImportedServiceCompositeDescriptor
         return importedService.serviceImporter();
     }
 
+    @Override
+    public <ThrowableType extends Throwable> boolean accept(HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor) throws ThrowableType
+    {
+        return importedService.accept(visitor);
+    }
+
     public String toURI()
     {
         return Classes.toURI( primaryType() );