X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FWebOfTrustUpdater.java;h=bdfc1aebae9de0f7b67d121e1f22a9a50a886d48;hp=ded6da945dffaec39247919683091ebf919d4840;hb=712eccf458c1126d756f2419d4010280075abd4b;hpb=95404485c0987d8192337e7f44f37a09ed7818ea diff --git a/src/main/java/net/pterodactylus/sone/core/WebOfTrustUpdater.java b/src/main/java/net/pterodactylus/sone/core/WebOfTrustUpdater.java index ded6da9..bdfc1ae 100644 --- a/src/main/java/net/pterodactylus/sone/core/WebOfTrustUpdater.java +++ b/src/main/java/net/pterodactylus/sone/core/WebOfTrustUpdater.java @@ -70,28 +70,6 @@ public class WebOfTrustUpdater extends AbstractService { // /** - * Retrieves the trust relation between the truster and the trustee. This - * method will return immediately and perform a trust update in the - * background. - * - * @param truster - * The identity giving the trust - * @param trustee - * The identity receiving the trust - */ - public void getTrust(OwnIdentity truster, Identity trustee) { - GetTrustJob getTrustJob = new GetTrustJob(truster, trustee); - if (!updateJobs.contains(getTrustJob)) { - logger.log(Level.FINER, "Adding Trust Update Job: " + getTrustJob); - try { - updateJobs.put(getTrustJob); - } catch (InterruptedException ie1) { - /* the queue is unbounded so it should never block. */ - } - } - } - - /** * Updates the trust relation between the truster and the trustee. This * method will return immediately and perform a trust update in the * background. @@ -203,6 +181,41 @@ public class WebOfTrustUpdater extends AbstractService { } } + /** + * Sets a property on the given own identity. + * + * @param ownIdentity + * The own identity to set the property on + * @param propertyName + * The name of the property to set + * @param propertyValue + * The value of the property to set + */ + public void setProperty(OwnIdentity ownIdentity, String propertyName, String propertyValue) { + SetPropertyJob setPropertyJob = new SetPropertyJob(ownIdentity, propertyName, propertyValue); + if (updateJobs.contains(setPropertyJob)) { + updateJobs.remove(setPropertyJob); + } + logger.log(Level.FINER, "Adding Property Job: " + setPropertyJob); + try { + updateJobs.put(setPropertyJob); + } catch (InterruptedException e) { + /* the queue is unbounded so it should never block. */ + } + } + + /** + * Removes a property from the given own identity. + * + * @param ownIdentity + * The own identity to remove the property from + * @param propertyName + * The name of the property to remove + */ + public void removeProperty(OwnIdentity ownIdentity, String propertyName) { + setProperty(ownIdentity, propertyName, null); + } + // // SERVICE METHODS // @@ -436,45 +449,6 @@ public class WebOfTrustUpdater extends AbstractService { } /** - * Update job that retrieves the trust relation between two identities. - * - * @author David ‘Bombe’ Roden - */ - private class GetTrustJob extends WebOfTrustTrustUpdateJob { - - /** - * Creates a new trust update job. - * - * @param truster - * The identity giving the trust - * @param trustee - * The identity receiving the trust - */ - public GetTrustJob(OwnIdentity truster, Identity trustee) { - super(truster, trustee); - } - - /** - * {@inheritDoc} - */ - @Override - @SuppressWarnings("synthetic-access") - public void run() { - try { - Trust trust = webOfTrustConnector.getTrust(truster, trustee); - if (trustee instanceof DefaultIdentity) { - ((DefaultIdentity) trustee).setTrust(truster, trust); - } - finish(true); - } catch (PluginException pe1) { - logger.log(Level.WARNING, "Could not get Trust value for " + truster + " -> " + trustee + "!", pe1); - finish(false); - } - } - - } - - /** * Base class for context updates of an {@link OwnIdentity}. * * @author David ‘Bombe’ Roden @@ -610,4 +584,113 @@ public class WebOfTrustUpdater extends AbstractService { } + /** + * Base class for update jobs that deal with properties. + * + * @author David ‘Bombe’ Roden + */ + private class WebOfTrustPropertyUpdateJob extends WebOfTrustUpdateJob { + + /** The own identity to update properties on. */ + protected final OwnIdentity ownIdentity; + + /** The name of the property to update. */ + protected final String propertyName; + + /** + * Creates a new property update job. + * + * @param ownIdentity + * The own identity to update the property on + * @param propertyName + * The name of the property to update + */ + @SuppressWarnings("synthetic-access") + public WebOfTrustPropertyUpdateJob(OwnIdentity ownIdentity, String propertyName) { + this.ownIdentity = ownIdentity; + this.propertyName = propertyName; + } + + // + // OBJECT METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) { + if ((object == null) || !object.getClass().equals(getClass())) { + return false; + } + WebOfTrustPropertyUpdateJob updateJob = (WebOfTrustPropertyUpdateJob) object; + return updateJob.ownIdentity.equals(ownIdentity) && updateJob.propertyName.equals(propertyName); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return getClass().hashCode() ^ ownIdentity.hashCode() ^ propertyName.hashCode(); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return String.format("%s[ownIdentity=%s,propertyName=%s]", getClass().getSimpleName(), ownIdentity, propertyName); + } + + } + + /** + * WebOfTrust update job that sets a property on an {@link OwnIdentity}. + * + * @author David ‘Bombe’ Roden + */ + private class SetPropertyJob extends WebOfTrustPropertyUpdateJob { + + /** The value of the property to set. */ + private final String propertyValue; + + /** + * Creates a new set-property job. + * + * @param ownIdentity + * The own identity to set the property on + * @param propertyName + * The name of the property to set + * @param propertyValue + * The value of the property to set + */ + public SetPropertyJob(OwnIdentity ownIdentity, String propertyName, String propertyValue) { + super(ownIdentity, propertyName); + this.propertyValue = propertyValue; + } + + /** + * {@inheritDoc} + */ + @Override + @SuppressWarnings("synthetic-access") + public void run() { + try { + if (propertyValue == null) { + webOfTrustConnector.removeProperty(ownIdentity, propertyName); + ownIdentity.removeProperty(propertyName); + } else { + webOfTrustConnector.setProperty(ownIdentity, propertyName, propertyValue); + ownIdentity.setProperty(propertyName, propertyValue); + } + finish(true); + } catch (PluginException pe1) { + logger.log(Level.WARNING, String.format("Could not set Property “%2$s” to “%3$s” on Own Identity %1$s!", ownIdentity, propertyName, propertyValue), pe1); + finish(false); + } + } + + } + }