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

[1/2] polygene-java git commit: :core:runtime minor edits

Repository: polygene-java
Updated Branches:
  refs/heads/develop 609676792 -> 3d33ead72


:core:runtime minor edits

remove unused import
remove System.out.println
favor lambda over anonymous class


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

Branch: refs/heads/develop
Commit: e6611087edf6a27555efd3ded8065dcfcc71c392
Parents: 6096767
Author: Paul Merlin <pa...@apache.org>
Authored: Sun Apr 23 14:36:44 2017 +0200
Committer: Paul Merlin <pa...@apache.org>
Committed: Sun Apr 23 14:37:31 2017 +0200

----------------------------------------------------------------------
 .../runtime/bootstrap/CompositeAssemblyImpl.java         | 11 +----------
 .../polygene/runtime/type/ValueTypeFactoryInstance.java  |  1 -
 2 files changed, 1 insertion(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e6611087/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java b/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
index 5e9b5fc..54c597b 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/bootstrap/CompositeAssemblyImpl.java
@@ -35,7 +35,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Consumer;
-import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -270,7 +269,6 @@ public abstract class CompositeAssemblyImpl
                                }
                                catch( Exception e )
                                {
-                                   System.out.println( "NICLAS 2: " + e.getClass() + " - " + e.getMessage() );
                                    exceptions.add( e );
                                }
                            }
@@ -806,14 +804,7 @@ public abstract class CompositeAssemblyImpl
     {
         return types
             .filter( mixinType -> Annotations.annotationOn( mixinType, Concerns.class ) != null )
-            .flatMap( new Function<Type, Stream<? extends Class<?>>>()
-            {
-                @Override
-                public Stream<? extends Class<?>> apply( Type mixinType )
-                {
-                    return Arrays.stream( Annotations.annotationOn( mixinType, Concerns.class ).value() );
-                }
-            } );
+            .flatMap( mixinType -> Arrays.stream( Annotations.annotationOn( mixinType, Concerns.class ).value() ) );
     }
 
     @SuppressWarnings( "unchecked" )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e6611087/core/runtime/src/main/java/org/apache/polygene/runtime/type/ValueTypeFactoryInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/type/ValueTypeFactoryInstance.java b/core/runtime/src/main/java/org/apache/polygene/runtime/type/ValueTypeFactoryInstance.java
index b9b8e47..77273c4 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/type/ValueTypeFactoryInstance.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/type/ValueTypeFactoryInstance.java
@@ -24,7 +24,6 @@ import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import org.apache.polygene.api.common.InvalidApplicationException;
-import org.apache.polygene.api.composite.AmbiguousTypeException;
 import org.apache.polygene.api.entity.EntityComposite;
 import org.apache.polygene.api.entity.EntityDescriptor;
 import org.apache.polygene.api.structure.ModuleDescriptor;


[2/2] polygene-java git commit: POLYGENE-248 Add ManyAssociation.clear() & NamedAssociation.clear()

Posted by pa...@apache.org.
POLYGENE-248 Add ManyAssociation.clear() & NamedAssociation.clear()


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

Branch: refs/heads/develop
Commit: 3d33ead72bad04555bd44ec5850259dd2e4849ac
Parents: e661108
Author: Paul Merlin <pa...@apache.org>
Authored: Sun Apr 23 14:51:35 2017 +0200
Committer: Paul Merlin <pa...@apache.org>
Committed: Sun Apr 23 14:51:35 2017 +0200

----------------------------------------------------------------------
 .../api/association/ManyAssociation.java        |  9 +++++++
 .../api/association/ManyAssociationWrapper.java |  6 +++++
 .../api/association/NamedAssociation.java       |  8 +++++-
 .../association/NamedAssociationWrapper.java    |  6 +++++
 .../association/ManyAssociationInstance.java    |  7 +++++
 .../association/NamedAssociationInstance.java   |  7 +++++
 .../composite/FunctionStateResolver.java        |  4 +--
 .../unitofwork/BuilderManyAssociationState.java | 11 ++++++++
 .../BuilderNamedAssociationState.java           | 11 ++++++++
 .../value/ManyAssociationValueState.java        | 14 ++++++++--
 .../value/NamedAssociationValueState.java       | 11 ++++++++
 .../spi/entity/ManyAssociationState.java        |  2 ++
 .../spi/entity/NamedAssociationState.java       |  2 ++
 .../helpers/DefaultManyAssociationState.java    | 17 +++++++++++-
 .../helpers/DefaultNamedAssociationState.java   | 12 +++++++++
 .../entitystore/helpers/JSONEntityState.java    | 28 ++++++++++++++++++++
 .../helpers/JSONManyAssociationState.java       | 11 ++++++++
 .../helpers/JSONNamedAssociationState.java      | 11 ++++++++
 .../library/rest/admin/EntityResource.java      | 10 ++-----
 .../binding/internal/BoundManyAssociation.java  |  6 +++++
 .../binding/internal/BoundNamedAssociation.java |  6 +++++
 21 files changed, 185 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociation.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociation.java b/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociation.java
index cac7613..b7b7f7f 100644
--- a/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociation.java
+++ b/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociation.java
@@ -68,6 +68,15 @@ public interface ManyAssociation<T> extends Iterable<T>, AbstractAssociation
      */
     boolean remove( T entity );
 
+    /**
+     * Clear all entities from this {@code ManyAssociation}.
+     * <p>
+     *     All entity references present is removed from this collection.
+     * </p>
+     * @return true if any entity reference was removed, otherwise false
+     */
+    boolean clear();
+
     /** Fetch the entity refrence at the given index and fetch the entity from the entity store.
      *
      * @param index The index location in the collection of the entity reference to be fetched.

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociationWrapper.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociationWrapper.java b/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociationWrapper.java
index 8465995..e2f95e1 100644
--- a/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociationWrapper.java
+++ b/core/api/src/main/java/org/apache/polygene/api/association/ManyAssociationWrapper.java
@@ -76,6 +76,12 @@ public class ManyAssociationWrapper
     }
 
     @Override
+    public boolean clear()
+    {
+        return next.clear();
+    }
+
+    @Override
     public Object get( int i )
     {
         return next.get( i );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociation.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociation.java b/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociation.java
index 6b5f7a6..b8a62da 100644
--- a/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociation.java
+++ b/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociation.java
@@ -44,7 +44,7 @@ public interface NamedAssociation<T>
     boolean containsName( String name );
 
     /**
-     * Adds a named assocation.
+     * Adds a named association.
      * @param name The name of the association.
      * @param entity The entity for this named association.
      * @return true if putted, false otherwise
@@ -59,6 +59,12 @@ public interface NamedAssociation<T>
     boolean remove( String name );
 
     /**
+     * Clear all named associations.
+     * @return true if cleared, false otherwise
+     */
+    boolean clear();
+
+    /**
      * Retrieves a named association.
      * @param name The name of the association.
      * @return The entity that has previously been associated.

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociationWrapper.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociationWrapper.java b/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociationWrapper.java
index 4a2dcf1..1f92767 100644
--- a/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociationWrapper.java
+++ b/core/api/src/main/java/org/apache/polygene/api/association/NamedAssociationWrapper.java
@@ -75,6 +75,12 @@ public class NamedAssociationWrapper
     }
 
     @Override
+    public boolean clear()
+    {
+        return next.clear();
+    }
+
+    @Override
     public Object get( String name )
     {
         return next.get( name );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
index a30acf7..e8dd66c 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
@@ -92,6 +92,13 @@ public class ManyAssociationInstance<T>
     }
 
     @Override
+    public boolean clear()
+    {
+        checkImmutable();
+        return manyAssociationState.clear();
+    }
+
+    @Override
     public T get( int i )
     {
         return getEntity( manyAssociationState.get( i ) );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java b/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
index c351e0f..536a6ca 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
@@ -89,6 +89,13 @@ public class NamedAssociationInstance<T>
     }
 
     @Override
+    public boolean clear()
+    {
+        checkImmutable();
+        return namedAssociationState.clear();
+    }
+
+    @Override
     public T get( String name )
     {
         return getEntity( namedAssociationState.get( name ) );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/runtime/src/main/java/org/apache/polygene/runtime/composite/FunctionStateResolver.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/FunctionStateResolver.java b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/FunctionStateResolver.java
index 0b2a2ce..3f0d3bc 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/FunctionStateResolver.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/FunctionStateResolver.java
@@ -95,7 +95,7 @@ public class FunctionStateResolver
             {
                 ManyAssociationState associationState = state.manyAssociationValueOf( manyAssDesc.qualifiedName() );
                 // First clear existing ones
-                associationState.forEach( associationState::remove );
+                associationState.clear();
                 // then add the new ones.
                 getManyAssociationState( manyAssDesc ).forEach( ref -> associationState.add( 0, ref ) );
             } );
@@ -104,7 +104,7 @@ public class FunctionStateResolver
             {
                 NamedAssociationState associationState = state.namedAssociationValueOf( namedAssDesc.qualifiedName() );
                 // First clear existing ones
-                associationState.forEach( associationState::remove );
+                associationState.clear();
                 // then add the new ones.
                 getNamedAssociationState( namedAssDesc )
                     .forEach( entry -> associationState.put( entry.getKey(), entry.getValue() ) );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderManyAssociationState.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderManyAssociationState.java b/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderManyAssociationState.java
index 3b482d7..35ad938 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderManyAssociationState.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderManyAssociationState.java
@@ -71,6 +71,17 @@ public final class BuilderManyAssociationState
     }
 
     @Override
+    public boolean clear()
+    {
+        if( !references.isEmpty() )
+        {
+            references.clear();
+            return true;
+        }
+        return false;
+    }
+
+    @Override
     public EntityReference get( int i )
     {
         return references.get( i );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderNamedAssociationState.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderNamedAssociationState.java b/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderNamedAssociationState.java
index d50d79b..f7882be 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderNamedAssociationState.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/unitofwork/BuilderNamedAssociationState.java
@@ -64,6 +64,17 @@ public final class BuilderNamedAssociationState
     }
 
     @Override
+    public boolean clear()
+    {
+        if( !references.isEmpty() )
+        {
+            references.clear();
+            return true;
+        }
+        return false;
+    }
+
+    @Override
     public EntityReference get( String name )
     {
         return references.get( name );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/runtime/src/main/java/org/apache/polygene/runtime/value/ManyAssociationValueState.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ManyAssociationValueState.java b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ManyAssociationValueState.java
index c386802..590f25d 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ManyAssociationValueState.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ManyAssociationValueState.java
@@ -64,8 +64,18 @@ public class ManyAssociationValueState
     @Override
     public boolean remove( EntityReference entity )
     {
-        boolean removed = references.remove( entity );
-        return removed;
+        return references.remove( entity );
+    }
+
+    @Override
+    public boolean clear()
+    {
+        if( !references.isEmpty() )
+        {
+            references.clear();
+            return true;
+        }
+        return false;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/runtime/src/main/java/org/apache/polygene/runtime/value/NamedAssociationValueState.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/value/NamedAssociationValueState.java b/core/runtime/src/main/java/org/apache/polygene/runtime/value/NamedAssociationValueState.java
index 50c20ca..c15b950 100644
--- a/core/runtime/src/main/java/org/apache/polygene/runtime/value/NamedAssociationValueState.java
+++ b/core/runtime/src/main/java/org/apache/polygene/runtime/value/NamedAssociationValueState.java
@@ -59,6 +59,17 @@ public class NamedAssociationValueState
     }
 
     @Override
+    public boolean clear()
+    {
+        if( !references.isEmpty() )
+        {
+            references.clear();
+            return true;
+        }
+        return false;
+    }
+
+    @Override
     public EntityReference get( String name )
     {
         return references.get( name );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/spi/src/main/java/org/apache/polygene/spi/entity/ManyAssociationState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/entity/ManyAssociationState.java b/core/spi/src/main/java/org/apache/polygene/spi/entity/ManyAssociationState.java
index a578c10..5f3b32a 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/entity/ManyAssociationState.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/entity/ManyAssociationState.java
@@ -39,6 +39,8 @@ public interface ManyAssociationState
 
     boolean remove( EntityReference entityReference );
 
+    boolean clear();
+
     EntityReference get( int index );
 
     default Stream<EntityReference> stream() {

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/spi/src/main/java/org/apache/polygene/spi/entity/NamedAssociationState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/entity/NamedAssociationState.java b/core/spi/src/main/java/org/apache/polygene/spi/entity/NamedAssociationState.java
index 23a1073..c2a6030 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/entity/NamedAssociationState.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/entity/NamedAssociationState.java
@@ -42,6 +42,8 @@ public interface NamedAssociationState
 
     boolean remove( String name );
 
+    boolean clear();
+
     EntityReference get( String name );
 
     String nameOf( EntityReference entityReference );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultManyAssociationState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultManyAssociationState.java b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultManyAssociationState.java
index 67e715c..9e95188 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultManyAssociationState.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultManyAssociationState.java
@@ -69,11 +69,26 @@ public final class DefaultManyAssociationState
     public boolean remove( EntityReference entity )
     {
         boolean removed = references.remove( entity );
-        entityState.markUpdated();
+        if( removed )
+        {
+            entityState.markUpdated();
+        }
         return removed;
     }
 
     @Override
+    public boolean clear()
+    {
+        if( !references.isEmpty() )
+        {
+            references.clear();
+            entityState.markUpdated();
+            return true;
+        }
+        return false;
+    }
+
+    @Override
     public EntityReference get( int i )
     {
         return references.get( i );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultNamedAssociationState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultNamedAssociationState.java b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultNamedAssociationState.java
index a85e1d9..94f30ca 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultNamedAssociationState.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/DefaultNamedAssociationState.java
@@ -75,6 +75,18 @@ public final class DefaultNamedAssociationState
     }
 
     @Override
+    public boolean clear()
+    {
+        if( !references.isEmpty() )
+        {
+            references.clear();
+            entityState.markUpdated();
+            return true;
+        }
+        return false;
+    }
+
+    @Override
     public EntityReference get( String name )
     {
         return references.get( name );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONEntityState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONEntityState.java b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONEntityState.java
index 0c38436..7bb6c2e 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONEntityState.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONEntityState.java
@@ -307,6 +307,20 @@ public final class JSONEntityState
         }
     }
 
+    void stateCloneClearManyAssociation( String stateName )
+    {
+        JsonObject valueState = state.getJsonObject( JSONKeys.VALUE );
+        if( valueState.containsKey( stateName ) )
+        {
+            valueState = jsonFactories.cloneBuilderExclude( valueState, stateName )
+                                      .add( stateName, jsonFactories.builderFactory().createArrayBuilder().build() )
+                                      .build();
+            state = jsonFactories.cloneBuilderExclude( state, JSONKeys.VALUE )
+                                 .add( JSONKeys.VALUE, valueState )
+                                 .build();
+        }
+    }
+
     void stateCloneAddNamedAssociation( String stateName, String name, EntityReference ref )
     {
         JsonObject valueState = state.getJsonObject( JSONKeys.VALUE );
@@ -337,4 +351,18 @@ public final class JSONEntityState
                                  .build();
         }
     }
+
+    void stateCloneClearNamedAssociation( String stateName )
+    {
+        JsonObject valueState = state.getJsonObject( JSONKeys.VALUE );
+        if( valueState.containsKey( stateName ) )
+        {
+            valueState = jsonFactories.cloneBuilderExclude( valueState, stateName )
+                                      .add( stateName, jsonFactories.builderFactory().createObjectBuilder().build() )
+                                      .build();
+            state = jsonFactories.cloneBuilderExclude( state, JSONKeys.VALUE )
+                                 .add( JSONKeys.VALUE, valueState )
+                                 .build();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONManyAssociationState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONManyAssociationState.java b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONManyAssociationState.java
index 3bdd047..275da51 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONManyAssociationState.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONManyAssociationState.java
@@ -104,6 +104,17 @@ public final class JSONManyAssociationState
     }
 
     @Override
+    public boolean clear()
+    {
+        if( count() > 0 )
+        {
+            entityState.stateCloneClearManyAssociation( stateName );
+            entityState.markUpdated();
+        }
+        return false;
+    }
+
+    @Override
     public EntityReference get( int i )
     {
         return EntityReference.parseEntityReference( getReferences().getString( i ) );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONNamedAssociationState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONNamedAssociationState.java b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONNamedAssociationState.java
index a59f50d..1981eb9 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONNamedAssociationState.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/entitystore/helpers/JSONNamedAssociationState.java
@@ -106,6 +106,17 @@ public final class JSONNamedAssociationState
     }
 
     @Override
+    public boolean clear()
+    {
+        if( count() > 0 )
+        {
+            entityState.stateCloneClearNamedAssociation( stateName );
+            entityState.markUpdated();
+        }
+        return false;
+    }
+
+    @Override
     public EntityReference get( String name )
     {
         String stringRef = getReferences().getString( name, null );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java b/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java
index 9eb3c17..99a538c 100644
--- a/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java
+++ b/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java
@@ -401,10 +401,7 @@ public class EntityResource
                 if( newStringAssociation == null )
                 {
                     // Remove "left-overs"
-                    for( EntityReference entityReference : manyAssociation )
-                    {
-                        manyAssociation.remove( entityReference );
-                    }
+                    manyAssociation.clear();
                 }
                 else
                 {
@@ -455,10 +452,7 @@ public class EntityResource
                 if( newStringAssociation == null )
                 {
                     // Remove "left-overs"
-                    for( String name : namedAssociation )
-                    {
-                        namedAssociation.remove( name );
-                    }
+                    namedAssociation.clear();
                 }
                 else
                 {

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundManyAssociation.java
----------------------------------------------------------------------
diff --git a/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundManyAssociation.java b/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundManyAssociation.java
index 862a683..4f9cee1 100644
--- a/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundManyAssociation.java
+++ b/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundManyAssociation.java
@@ -62,6 +62,12 @@ public class BoundManyAssociation<T> extends AbstractBinding<T>
         return actualAssociations.remove( o );
     }
 
+    @Override
+    public boolean clear()
+    {
+        return actualAssociations.clear();
+    }
+
     public T get( int index )
     {
         return actualAssociations.get( index );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/3d33ead7/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundNamedAssociation.java
----------------------------------------------------------------------
diff --git a/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundNamedAssociation.java b/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundNamedAssociation.java
index 3afca07..e7116e6 100644
--- a/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundNamedAssociation.java
+++ b/samples/swing/src/main/java/org/apache/polygene/sample/swing/binding/internal/BoundNamedAssociation.java
@@ -78,6 +78,12 @@ public class BoundNamedAssociation<T>
     }
 
     @Override
+    public boolean clear()
+    {
+        return actualAssociations.clear();
+    }
+
+    @Override
     public T get( String name )
     {
         return actualAssociations.get( name );