X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FTrustUpdater.java;h=4bbe299e1169d782dfdfb041fd98437304b7274f;hp=6221d3914b771b8938699bdcdbe71b140a4a1598;hb=dbb2029407ac7147325b7ef0be9c0e87511ed200;hpb=3f28d9bce06f467c088f0c937adbe04ed79f17d0 diff --git a/src/main/java/net/pterodactylus/sone/core/TrustUpdater.java b/src/main/java/net/pterodactylus/sone/core/TrustUpdater.java index 6221d39..4bbe299 100644 --- a/src/main/java/net/pterodactylus/sone/core/TrustUpdater.java +++ b/src/main/java/net/pterodactylus/sone/core/TrustUpdater.java @@ -78,7 +78,15 @@ public class TrustUpdater extends AbstractService { * The identity receiving the trust */ public void getTrust(OwnIdentity truster, Identity trustee) { - updateJobs.add(new GetTrustJob(truster, 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. */ + } + } } /** @@ -97,7 +105,16 @@ public class TrustUpdater extends AbstractService { * The comment of the trust relation */ public void setTrust(OwnIdentity truster, Identity trustee, Integer score, String comment) { - updateJobs.add(new SetTrustJob(truster, trustee, score, comment)); + SetTrustJob setTrustJob = new SetTrustJob(truster, trustee, score, comment); + if (updateJobs.contains(setTrustJob)) { + updateJobs.remove(setTrustJob); + } + logger.log(Level.FINER, "Adding Trust Update Job: " + setTrustJob); + try { + updateJobs.put(setTrustJob); + } catch (InterruptedException e) { + /* the queue is unbounded so it should never block. */ + } } // @@ -115,7 +132,11 @@ public class TrustUpdater extends AbstractService { if (shouldStop() || (updateJob == stopJob)) { break; } + logger.log(Level.FINE, "Running Trust Update Job: " + updateJob); + long startTime = System.currentTimeMillis(); updateJob.run(); + long endTime = System.currentTimeMillis(); + logger.log(Level.FINE, "Trust Update Job finished, took " + (endTime - startTime) + " ms."); } catch (InterruptedException ie1) { /* happens, ignore, loop. */ } @@ -173,6 +194,38 @@ public class TrustUpdater extends AbstractService { /* does nothing. */ } + // + // OBJECT METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) { + if ((object == null) || !object.getClass().equals(getClass())) { + return false; + } + TrustUpdateJob updateJob = (TrustUpdateJob) object; + return ((truster == null) ? (updateJob.truster == null) : updateJob.truster.equals(truster)) && ((trustee == null) ? (updateJob.trustee == null) : updateJob.trustee.equals(trustee)); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return ((truster == null) ? 0 : truster.hashCode()) ^ ((trustee == null) ? 0 : trustee.hashCode()); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return String.format("%s[truster=%s,trustee=%s]", getClass().getSimpleName(), (truster == null) ? null : truster.getId(), (trustee == null) ? null : trustee.getId()); + } + } /** @@ -180,7 +233,7 @@ public class TrustUpdater extends AbstractService { * * @author David ‘Bombe’ Roden */ - private static class SetTrustJob extends TrustUpdateJob { + private class SetTrustJob extends TrustUpdateJob { /** The score of the relation. */ private final Integer score; @@ -215,9 +268,15 @@ public class TrustUpdater extends AbstractService { public void run() { try { if (score != null) { - truster.setTrust(trustee, score, comment); + if (trustee instanceof DefaultIdentity) { + ((DefaultIdentity) trustee).setTrust(truster, new Trust(score, null, 0)); + } + webOfTrustConnector.setTrust(truster, trustee, score, comment); } else { - truster.removeTrust(trustee); + if (trustee instanceof DefaultIdentity) { + ((DefaultIdentity) trustee).setTrust(truster, null); + } + webOfTrustConnector.removeTrust(truster, trustee); } } catch (WebOfTrustException wote1) { logger.log(Level.WARNING, "Could not set Trust value for " + truster + " -> " + trustee + " to " + score + " (" + comment + ")!", wote1);