[skycastle-commits] SF.net SVN: skycastle: [457] trunk/skycastle/modules

  • From: zzorn@xxxxxxxxxxxxxxxxxxxxx
  • To: skycastle-commits@xxxxxxxxxxxxx
  • Date: Mon, 14 Apr 2008 09:43:50 -0700

Revision: 457
          http://skycastle.svn.sourceforge.net/skycastle/?rev=457&view=rev
Author:   zzorn
Date:     2008-04-14 09:43:49 -0700 (Mon, 14 Apr 2008)

Log Message:
-----------
Implemented collection property element removal and addition, now also 
messaages are sent.

Modified Paths:
--------------
    
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/DefaultGameObject.java
    
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacade.java
    
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacadeImpl.java
    
trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectPropertiesTest.java
    
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/parameters/ParameterMetadataImpl.java

Added Paths:
-----------
    
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyElementAdded.java
    
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyElementRemoved.java

Modified: 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/DefaultGameObject.java
===================================================================
--- 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/DefaultGameObject.java
        2008-04-14 09:04:49 UTC (rev 456)
+++ 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/DefaultGameObject.java
        2008-04-14 16:43:49 UTC (rev 457)
@@ -248,16 +248,16 @@
         myPropertyFacade.removeProperty( propertyIdentifier );
     }
 
-    public void addPropertyItem( final String propertyIdentifier, final 
Serializable collectionPropertyItem )
+    public void addPropertyElement( final String propertyIdentifier, final 
Serializable collectionPropertyItem )
             throws ParameterValidationException
     {
-        myPropertyFacade.addPropertyItem( propertyIdentifier, 
collectionPropertyItem );
+        myPropertyFacade.addPropertyElement( propertyIdentifier, 
collectionPropertyItem );
     }
 
-    public void removePropertyItem( final String propertyIdentifier, final 
Serializable collectionPropertyItem )
+    public void removePropertyElement( final String propertyIdentifier, final 
Serializable collectionPropertyItem )
             throws ParameterValidationException
     {
-        myPropertyFacade.removePropertyItem( propertyIdentifier, 
collectionPropertyItem );
+        myPropertyFacade.removePropertyElement( propertyIdentifier, 
collectionPropertyItem );
     }
 
     public void addPropertyMapping( final String propertyIdentifier, final 
Serializable key, final Serializable value )

Modified: 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacade.java
===================================================================
--- 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacade.java
  2008-04-14 09:04:49 UTC (rev 456)
+++ 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacade.java
  2008-04-14 16:43:49 UTC (rev 457)
@@ -153,7 +153,7 @@
      *
      * @throws ParameterValidationException a {@link 
ParameterValidationException} describing the error if there was a problem.
      */
-    void addPropertyItem( String propertyIdentifier, Serializable 
collectionPropertyItem )
+    void addPropertyElement( String propertyIdentifier, Serializable 
collectionPropertyItem )
             throws ParameterValidationException;
 
     /**
@@ -164,7 +164,7 @@
      *
      * @throws ParameterValidationException a {@link 
ParameterValidationException} describing the error if there was a problem.
      */
-    void removePropertyItem( String propertyIdentifier, Serializable 
collectionPropertyItem )
+    void removePropertyElement( String propertyIdentifier, Serializable 
collectionPropertyItem )
             throws ParameterValidationException;
 
     /**

Modified: 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacadeImpl.java
===================================================================
--- 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacadeImpl.java
      2008-04-14 09:04:49 UTC (rev 456)
+++ 
trunk/skycastle/modules/core/src/main/java/org/skycastle/core/property/PropertyFacadeImpl.java
      2008-04-14 16:43:49 UTC (rev 457)
@@ -3,10 +3,7 @@
 import org.skycastle.core.AbstractFacade;
 import org.skycastle.core.GameObject;
 import org.skycastle.core.GameObjectContext;
-import org.skycastle.messaging.updates.property.CollectionPropertyItemAdded;
-import org.skycastle.messaging.updates.property.PropertyAddedMessage;
-import org.skycastle.messaging.updates.property.PropertyChangedMessage;
-import org.skycastle.messaging.updates.property.PropertyRemovedMessage;
+import org.skycastle.messaging.updates.property.*;
 import org.skycastle.util.ParameterChecker;
 import org.skycastle.util.StringUtilities;
 import org.skycastle.util.listenable.map.ListenableLinkedMap;
@@ -47,6 +44,7 @@
     private static final String PROBLEM_WHEN_ADDING_PROPERTY = "Problem when 
adding property";
     private static final String PROBLEM_WHEN_REMOVING_PROPERTY = "Problem when 
removing property";
     private static final String PROBLEM_WHEN_ADDING_COLLECTION_PROPERTY_ITEM = 
"Can not add collection property item";
+    private static final String PROBLEM_WHEN_REMOVING_COLLECTION_PROPERTY_ITEM 
= "Can not remove collection property item";
 
     //======================================================================
     // Public Methods
@@ -239,7 +237,7 @@
                                                                            
propertyIdentifier ) );
     }
 
-    public void addPropertyItem( final String propertyIdentifier, final 
Serializable collectionPropertyItem )
+    public void addPropertyElement( final String propertyIdentifier, final 
Serializable collectionPropertyItem )
             throws ParameterValidationException
     {
         // Check that the property exists
@@ -289,13 +287,26 @@
         collection.add( collectionPropertyItem );
 
         // Notify about addition
-        getGameObject().sendUpdateToObservers( new 
CollectionPropertyItemAdded( getId(), propertyIdentifier, 
collectionPropertyItem ) );
+        getGameObject().sendUpdateToObservers( new 
CollectionPropertyElementAdded( getId(), propertyIdentifier, 
collectionPropertyItem ) );
     }
 
-    public void removePropertyItem( final String propertyIdentifier, final 
Serializable collectionPropertyItem )
+    public void removePropertyElement( final String propertyIdentifier, final 
Serializable collectionPropertyItem )
             throws ParameterValidationException
     {
-        throw new UnsupportedOperationException( "This method has not yet been 
implemented." ); // IMPLEMENT
+        // Check that the property exists
+        ensurePropertyExists( propertyIdentifier, 
PROBLEM_WHEN_REMOVING_COLLECTION_PROPERTY_ITEM );
+
+        // Remove property
+        Collection collection = (Collection) myPropertyValues.get( 
propertyIdentifier );
+
+        if ( collection != null )
+        {
+            //noinspection unchecked
+            collection.remove( collectionPropertyItem );
+        }
+
+        // Notify about removal
+        getGameObject().sendUpdateToObservers( new 
CollectionPropertyElementRemoved( getId(), propertyIdentifier, 
collectionPropertyItem ) );
     }
 
     public void addPropertyMapping( final String propertyIdentifier, final 
Serializable key, final Serializable value )

Copied: 
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyElementAdded.java
 (from rev 456, 
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyItemAdded.java)
===================================================================
--- 
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyElementAdded.java
                             (rev 0)
+++ 
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyElementAdded.java
     2008-04-14 16:43:49 UTC (rev 457)
@@ -0,0 +1,75 @@
+package org.skycastle.messaging.updates.property;
+
+import org.skycastle.core.GameObjectContext;
+import org.skycastle.core.GameObjectId;
+import org.skycastle.messaging.updates.MemberUpdateMessage;
+import org.skycastle.util.parameters.ValidationError;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * Indicates that an item was added to a collection property.
+ *
+ * @author Hans Haggstrom
+ */
+public final class CollectionPropertyElementAdded
+        extends MemberUpdateMessage
+{
+
+    //======================================================================
+    // Private Fields
+
+    private final Serializable myAddedItem;
+
+    //======================================================================
+    // Private Constants
+
+    private static final long serialVersionUID = 1L;
+
+    //======================================================================
+    // Public Methods
+
+    //----------------------------------------------------------------------
+    // Constructors
+
+    public CollectionPropertyElementAdded( final GameObjectId updatedObjectId, 
final String memberIdentifier, final Serializable addedItem )
+    {
+        super( updatedObjectId, memberIdentifier );
+
+        myAddedItem = addedItem;
+    }
+
+    //----------------------------------------------------------------------
+    // Message Implementation
+
+    @Override
+    public ValidationError validate( final Set<String> allowedContainedTypes, 
final String errorPrefix )
+    {
+        ValidationError validationError = super.validate( 
allowedContainedTypes, errorPrefix );
+
+        if ( validationError == null )
+        {
+            validationError = checkValue( myAddedItem, "addedItem", 
allowedContainedTypes );
+        }
+
+        return validationError;
+    }
+
+    //----------------------------------------------------------------------
+    // UpdateMessage Implementation
+
+    public void applyStateChangeToModel( final GameObjectContext 
gameObjectContext )
+    {
+        throw new UnsupportedOperationException( "This method has not yet been 
implemented." ); // IMPLEMENT
+    }
+
+    //----------------------------------------------------------------------
+    // Other Public Methods
+
+    public Serializable getAddedItem()
+    {
+        return myAddedItem;
+    }
+
+}

Copied: 
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyElementRemoved.java
 (from rev 456, 
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyItemRemoved.java)
===================================================================
--- 
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyElementRemoved.java
                           (rev 0)
+++ 
trunk/skycastle/modules/core/src/main/java/org/skycastle/messaging/updates/property/CollectionPropertyElementRemoved.java
   2008-04-14 16:43:49 UTC (rev 457)
@@ -0,0 +1,77 @@
+package org.skycastle.messaging.updates.property;
+
+import org.skycastle.core.GameObjectContext;
+import org.skycastle.core.GameObjectId;
+import org.skycastle.messaging.updates.MemberUpdateMessage;
+import org.skycastle.util.parameters.ValidationError;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * Indicates that an item was removed from a collection property.
+ *
+ * @author Hans Haggstrom
+ */
+public final class CollectionPropertyElementRemoved
+        extends MemberUpdateMessage
+{
+
+    //======================================================================
+    // Private Fields
+
+    private final Serializable myRemovedItem;
+
+    //======================================================================
+    // Private Constants
+
+    //======================================================================
+    // Private Constants
+    private static final long serialVersionUID = 1L;
+
+    //======================================================================
+    // Public Methods
+
+    //----------------------------------------------------------------------
+    // Constructors
+
+    public CollectionPropertyElementRemoved( final GameObjectId 
updatedObjectId, final String memberIdentifier, final Serializable removedItem )
+    {
+        super( updatedObjectId, memberIdentifier );
+
+        myRemovedItem = removedItem;
+    }
+
+    //----------------------------------------------------------------------
+    // Message Implementation
+
+    @Override
+    public ValidationError validate( final Set<String> allowedContainedTypes, 
final String errorPrefix )
+    {
+        ValidationError validationError = super.validate( 
allowedContainedTypes, errorPrefix );
+
+        if ( validationError == null )
+        {
+            validationError = checkValue( myRemovedItem, "addedItem", 
allowedContainedTypes );
+        }
+
+        return validationError;
+    }
+
+    //----------------------------------------------------------------------
+    // UpdateMessage Implementation
+
+    public void applyStateChangeToModel( final GameObjectContext 
gameObjectContext )
+    {
+        throw new UnsupportedOperationException( "This method has not yet been 
implemented." ); // IMPLEMENT
+    }
+
+    //----------------------------------------------------------------------
+    // Other Public Methods
+
+    public Serializable getRemovedItem()
+    {
+        return myRemovedItem;
+    }
+
+}
\ No newline at end of file

Modified: 
trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectPropertiesTest.java
===================================================================
--- 
trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectPropertiesTest.java
 2008-04-14 09:04:49 UTC (rev 456)
+++ 
trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectPropertiesTest.java
 2008-04-14 16:43:49 UTC (rev 457)
@@ -6,9 +6,7 @@
 import org.skycastle.messaging.modifications.RemovePropertyMessage;
 import org.skycastle.messaging.modifications.property.AddPropertyMessage;
 import org.skycastle.messaging.modifications.property.SetPropertyMessage;
-import org.skycastle.messaging.updates.property.PropertyAddedMessage;
-import org.skycastle.messaging.updates.property.PropertyChangedMessage;
-import org.skycastle.messaging.updates.property.PropertyRemovedMessage;
+import org.skycastle.messaging.updates.property.*;
 import org.skycastle.util.parameters.ParameterMetadataImpl;
 import org.skycastle.util.parameters.ParameterValidationException;
 import org.skycastle.util.parameters.validators.notnull.NotNullValidator;
@@ -33,6 +31,7 @@
     private GameObject myGameObject;
 
     private List<Message> mySentMessages;
+    private ParameterMetadataImpl myMenuPropertyMetadata;
 
     //======================================================================
     // Private Constants
@@ -96,26 +95,52 @@
         assertEquals( 0, getNumberOfProperties() );
     }
 
-    public void testAddingToCollectionProperty()
+    public void testCollectionPropertyItemAddition()
             throws Exception
     {
-        final ParameterMetadataImpl valueMetadata = new ParameterMetadataImpl( 
String.class,
-                                                                               
true,
-                                                                               
new UiMetadataImpl( "Dish", "Name of lunch dish" ) );
-        myGameObject.addProperty( "menu",
-                                  new ArrayList(),
-                                  new ParameterMetadataImpl( List.class,
-                                                             true,
-                                                             new 
UiMetadataImpl( "Menu", "This is what's for lunch" ),
-                                                             valueMetadata ) );
+        myGameObject.addProperty( "menu", new ArrayList(), 
myMenuPropertyMetadata );
+        myGameObject.addPropertyElement( "menu", "bread" );
+        myGameObject.addPropertyElement( "menu", "water" );
 
-        myGameObject.addPropertyItem( "menu", "bread" );
-        myGameObject.addPropertyItem( "menu", "water" );
-
         assertEquals( Arrays.asList( "bread", "water" ), 
myGameObject.getPropertyValue( "menu", null ) );
     }
 
+    public void testCollectionPropertyItemRemoval()
+            throws Exception
+    {
+        myGameObject.addProperty( "menu", null, myMenuPropertyMetadata );
+        myGameObject.addPropertyElement( "menu", "bread" );
+        myGameObject.addPropertyElement( "menu", "water" );
 
+        myGameObject.removePropertyElement( "menu", "bread" );
+
+        assertEquals( Arrays.asList( "water" ), myGameObject.getPropertyValue( 
"menu", null ) );
+    }
+
+    public void testCollectionPropertyItemAdditionSendsUpdateMessage()
+            throws Exception
+    {
+        myGameObject.addProperty( "menu", null, myMenuPropertyMetadata );
+        myGameObject.addPropertyElement( "menu", "bread" );
+        myGameObject.addPropertyElement( "menu", "water" );
+
+        assertEquals( "bread", ( (CollectionPropertyElementAdded) getMessage( 
1 ) ).getAddedItem() );
+        assertEquals( "water", ( (CollectionPropertyElementAdded) getMessage( 
2 ) ).getAddedItem() );
+    }
+
+    public void testCollectionPropertyItemRemovalSendsUpdateMessage()
+            throws Exception
+    {
+        myGameObject.addProperty( "menu", null, myMenuPropertyMetadata );
+        myGameObject.addPropertyElement( "menu", "bread" );
+        myGameObject.addPropertyElement( "menu", "water" );
+        myGameObject.removePropertyElement( "menu", "bread" );
+        myGameObject.removePropertyElement( "menu", "water" );
+
+        assertEquals( "bread", ( (CollectionPropertyElementRemoved) 
getMessage( 3 ) ).getRemovedItem() );
+        assertEquals( "water", ( (CollectionPropertyElementRemoved) 
getMessage( 4 ) ).getRemovedItem() );
+    }
+
     public void testGetPropertyIdentifiers()
             throws Exception
     {
@@ -293,6 +318,13 @@
                                                   }
 
                                               } );
+
+        myMenuPropertyMetadata = new ParameterMetadataImpl( List.class,
+                                                            true,
+                                                            new 
UiMetadataImpl( "Menu", "This is what's for lunch" ),
+                                                            new 
ParameterMetadataImpl( String.class,
+                                                                               
        true,
+                                                                               
        new UiMetadataImpl( "Dish", "Name of lunch dish" ) ) );
     }
 
     //======================================================================

Modified: 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/parameters/ParameterMetadataImpl.java
===================================================================
--- 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/parameters/ParameterMetadataImpl.java
        2008-04-14 09:04:49 UTC (rev 456)
+++ 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/parameters/ParameterMetadataImpl.java
        2008-04-14 16:43:49 UTC (rev 457)
@@ -351,16 +351,11 @@
 
     private ValidationError validateType( final Object parameter, final String 
parameterIdentifier )
     {
-        if ( !myType.isInstance( parameter ) )
+        if ( parameter != null &&
+             !myType.isInstance( parameter ) )
         {
-            Class actualType = null;
-            if ( parameter != null )
-            {
-                actualType = parameter.getClass();
-            }
-
             return new ValidationError( parameterIdentifier,
-                                        "the type of the parameter is wrong, 
expected '" + myType + "' but was '" + actualType + "' " );
+                                        "the type of the parameter is wrong, 
expected '" + myType + "' but was '" + parameter.getClass() + "' " );
         }
 
         return null;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

Other related posts:

  • » [skycastle-commits] SF.net SVN: skycastle: [457] trunk/skycastle/modules