Fix ALL the logging!
[Sone.git] / src / main / java / net / pterodactylus / sone / freenet / wot / DefaultOwnIdentity.java
index f89ddda..be2a3e7 100644 (file)
@@ -21,6 +21,8 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
+import net.pterodactylus.util.validation.Validation;
+
 /**
  * An own identity is an identity that the owner of the node has full control
  * over.
@@ -55,6 +57,22 @@ public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
                this.insertUri = insertUri;
        }
 
+       /**
+        * Copy constructor for an own identity.
+        *
+        * @param webOfTrustConnector
+        *            The web of trust connector
+        * @param ownIdentity
+        *            The own identity to copy
+        */
+       public DefaultOwnIdentity(WebOfTrustConnector webOfTrustConnector, OwnIdentity ownIdentity) {
+               super(webOfTrustConnector, ownIdentity.getId(), ownIdentity.getNickname(), ownIdentity.getRequestUri());
+               this.webOfTrustConnector = webOfTrustConnector;
+               this.insertUri = ownIdentity.getInsertUri();
+               setContextsPrivate(ownIdentity.getContexts());
+               setPropertiesPrivate(ownIdentity.getProperties());
+       }
+
        //
        // ACCESSORS
        //
@@ -73,6 +91,7 @@ public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
        @Override
        public void addContext(String context) throws WebOfTrustException {
                webOfTrustConnector.addContext(this, context);
+               addContextPrivate(context);
        }
 
        /**
@@ -81,6 +100,7 @@ public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
        @Override
        public void removeContext(String context) throws WebOfTrustException {
                webOfTrustConnector.removeContext(this, context);
+               removeContextPrivate(context);
        }
 
        /**
@@ -98,6 +118,7 @@ public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
                                webOfTrustConnector.addContext(this, context);
                        }
                }
+               setContextsPrivate(contexts);
        }
 
        /**
@@ -106,6 +127,7 @@ public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
        @Override
        public void setProperty(String name, String value) throws WebOfTrustException {
                webOfTrustConnector.setProperty(this, name, value);
+               setPropertyPrivate(name, value);
        }
 
        /**
@@ -114,6 +136,7 @@ public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
        @Override
        public void removeProperty(String name) throws WebOfTrustException {
                webOfTrustConnector.removeProperty(this, name);
+               removePropertyPrivate(name);
        }
 
        /**
@@ -133,6 +156,53 @@ public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
                                webOfTrustConnector.setProperty(this, newProperty.getKey(), newProperty.getValue());
                        }
                }
+               setPropertiesPrivate(properties);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void setTrust(Identity target, int trustValue, String comment) throws WebOfTrustException {
+               Validation.begin().isNotNull("Trust Target", target).isNotNull("Trust Comment", comment).isLessOrEqual("Trust Value", trustValue, 100).isGreaterOrEqual("Trust Value", trustValue, -100).check();
+               webOfTrustConnector.setTrust(this, target, trustValue, comment);
+               if (target instanceof DefaultIdentity) {
+                       ((DefaultIdentity) target).setTrustPrivate(this, new Trust(trustValue, trustValue, 0));
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void removeTrust(Identity target) throws WebOfTrustException {
+               Validation.begin().isNotNull("Trust Target", target).check();
+               webOfTrustConnector.removeTrust(this, target);
+               if (target instanceof DefaultIdentity) {
+                       ((DefaultIdentity) target).setTrustPrivate(this, new Trust(null, null, null));
+               }
+       }
+
+       //
+       // OBJECT METHODS
+       //
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public int hashCode() {
+               /* The hash of DefaultIdentity is fine. */
+               return super.hashCode();
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public boolean equals(Object object) {
+               /* The ID of the superclass is still enough. */
+               return super.equals(object);
        }
 
 }