You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/07/17 16:06:30 UTC
[5/7] zest-qi4j git commit: More missing stuff for hashCode/equals of
NamedAssociation.
More missing stuff for hashCode/equals of NamedAssociation.
Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/71f5da75
Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/71f5da75
Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/71f5da75
Branch: refs/heads/develop
Commit: 71f5da7501ff0c75612c3805557b7c5091d21fc9
Parents: 2a5405c
Author: Niclas Hedhman <he...@betfair.com>
Authored: Fri Jul 17 10:55:10 2015 +0300
Committer: Niclas Hedhman <he...@betfair.com>
Committed: Fri Jul 17 10:55:10 2015 +0300
----------------------------------------------------------------------
.../association/NamedAssociationInstance.java | 63 ++++++++++++++++++++
1 file changed, 63 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/71f5da75/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
index dc73b3c..c38ef1a 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
@@ -22,7 +22,11 @@ import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import org.qi4j.api.association.AssociationDescriptor;
+import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.association.ManyAssociationWrapper;
import org.qi4j.api.association.NamedAssociation;
+import org.qi4j.api.association.NamedAssociationWrapper;
import org.qi4j.api.entity.EntityReference;
import org.qi4j.api.entity.Identity;
import org.qi4j.api.util.NullArgumentException;
@@ -174,4 +178,63 @@ public class NamedAssociationInstance<T>
}
}, namedAssociationState );
}
+
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if( this == o )
+ {
+ return true;
+ }
+ if( o == null || getClass() != o.getClass() )
+ {
+ return false;
+ }
+ NamedAssociation<?> that = (NamedAssociation) o;
+ // Unwrap if needed
+ while( that instanceof NamedAssociationWrapper )
+ {
+ that = ( (NamedAssociationWrapper) that ).next();
+ }
+ // Descriptor equality
+ NamedAssociationInstance<?> thatInstance = (NamedAssociationInstance) that;
+ AssociationDescriptor thatDescriptor = (AssociationDescriptor) thatInstance.associationInfo();
+ if( !associationInfo.equals( thatDescriptor ) )
+ {
+ return false;
+ }
+ // State equality
+ if( namedAssociationState.count() != thatInstance.namedAssociationState.count() )
+ {
+ return false;
+ }
+ for( String name : namedAssociationState )
+ {
+ if( !thatInstance.namedAssociationState.containsName( name ) )
+ {
+ return false;
+ }
+ EntityReference thisReference = namedAssociationState.get( name );
+ EntityReference thatReference = thatInstance.namedAssociationState.get( name );
+ if( !thisReference.equals( thatReference ) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = associationInfo.hashCode() * 31; // Descriptor
+ for( String name : namedAssociationState )
+ {
+ hash += name.hashCode();
+ hash += namedAssociationState.get( name ).hashCode() * 7; // State
+ }
+ return hash;
+ }
+
}