From: David ‘Bombe’ Roden Date: Wed, 11 Jan 2012 20:58:51 +0000 (+0100) Subject: Move Sone status into Sone. X-Git-Tag: 0.8^2~34 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=4314a29fdeb9766e198b7144a9724422d0df84dc Move Sone status into Sone. --- diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index a51a189..c58a508 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -42,9 +42,10 @@ import net.pterodactylus.sone.data.PostReply; import net.pterodactylus.sone.data.Profile; import net.pterodactylus.sone.data.Reply; import net.pterodactylus.sone.data.Sone; -import net.pterodactylus.sone.data.Sone.ShowCustomAvatars; import net.pterodactylus.sone.data.TemporaryImage; import net.pterodactylus.sone.data.Profile.Field; +import net.pterodactylus.sone.data.Sone.ShowCustomAvatars; +import net.pterodactylus.sone.data.Sone.SoneStatus; import net.pterodactylus.sone.fcp.FcpInterface; import net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired; import net.pterodactylus.sone.freenet.wot.Identity; @@ -74,26 +75,6 @@ import freenet.keys.FreenetURI; */ public class Core extends AbstractService implements IdentityListener, UpdateListener, SoneProvider, PostProvider, SoneInsertListener, ImageInsertListener { - /** - * Enumeration for the possible states of a {@link Sone}. - * - * @author David ‘Bombe’ Roden - */ - public enum SoneStatus { - - /** The Sone is unknown, i.e. not yet downloaded. */ - unknown, - - /** The Sone is idle, i.e. not being downloaded or inserted. */ - idle, - - /** The Sone is currently being inserted. */ - inserting, - - /** The Sone is currently being downloaded. */ - downloading, - } - /** The logger. */ private static final Logger logger = Logging.getLogger(Core.class); @@ -133,10 +114,6 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis /** The FCP interface. */ private volatile FcpInterface fcpInterface; - /** The Sones’ statuses. */ - /* synchronize access on itself. */ - private final Map soneStatuses = new HashMap(); - /** The times Sones were followed. */ private final Map soneFollowingTimes = new HashMap(); @@ -306,33 +283,6 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis } /** - * Returns the status of the given Sone. - * - * @param sone - * The Sone to get the status for - * @return The status of the Sone - */ - public SoneStatus getSoneStatus(Sone sone) { - synchronized (soneStatuses) { - return soneStatuses.get(sone); - } - } - - /** - * Sets the status of the given Sone. - * - * @param sone - * The Sone to set the status of - * @param soneStatus - * The status to set - */ - public void setSoneStatus(Sone sone, SoneStatus soneStatus) { - synchronized (soneStatuses) { - soneStatuses.put(sone, soneStatus); - } - } - - /** * Returns the Sone rescuer for the given local Sone. * * @param sone @@ -488,7 +438,6 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis if ((sone == null) && create) { sone = new Sone(id); localSones.put(id, sone); - setSoneStatus(sone, SoneStatus.unknown); } return sone; } @@ -521,7 +470,6 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis if ((sone == null) && create && (id != null) && (id.length() == 43)) { sone = new Sone(id); remoteSones.put(id, sone); - setSoneStatus(sone, SoneStatus.unknown); } return sone; } @@ -972,7 +920,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis final SoneInserter soneInserter = new SoneInserter(this, freenetInterface, sone); soneInserter.addSoneInsertListener(this); soneInserters.put(sone, soneInserter); - setSoneStatus(sone, SoneStatus.idle); + sone.setStatus(SoneStatus.idle); loadSone(sone); soneInserter.start(); return sone; @@ -1040,7 +988,6 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis } } soneDownloader.addSone(sone); - setSoneStatus(sone, SoneStatus.unknown); soneDownloaders.execute(new Runnable() { @Override diff --git a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java index 5024ab9..90f926a 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java @@ -26,7 +26,6 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import net.pterodactylus.sone.core.Core.SoneStatus; import net.pterodactylus.sone.data.Album; import net.pterodactylus.sone.data.Client; import net.pterodactylus.sone.data.Image; @@ -34,6 +33,7 @@ import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.PostReply; import net.pterodactylus.sone.data.Profile; import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.data.Sone.SoneStatus; import net.pterodactylus.util.collection.Pair; import net.pterodactylus.util.io.Closer; import net.pterodactylus.util.logging.Logging; @@ -153,7 +153,7 @@ public class SoneDownloader extends AbstractService { public Sone fetchSone(Sone sone, FreenetURI soneUri, boolean fetchOnly) { logger.log(Level.FINE, "Starting fetch for Sone “%s” from %s…", new Object[] { sone, soneUri }); FreenetURI requestUri = soneUri.setMetaString(new String[] { "sone.xml" }); - core.setSoneStatus(sone, SoneStatus.downloading); + sone.setStatus(SoneStatus.downloading); try { Pair fetchResults = freenetInterface.fetchUri(requestUri); if (fetchResults == null) { @@ -170,7 +170,7 @@ public class SoneDownloader extends AbstractService { } return parsedSone; } finally { - core.setSoneStatus(sone, (sone.getTime() == 0) ? SoneStatus.unknown : SoneStatus.idle); + sone.setStatus((sone.getTime() == 0) ? SoneStatus.unknown : SoneStatus.idle); } } diff --git a/src/main/java/net/pterodactylus/sone/core/SoneInserter.java b/src/main/java/net/pterodactylus/sone/core/SoneInserter.java index 4d9878f..ccf8a21 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneInserter.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneInserter.java @@ -27,11 +27,11 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import net.pterodactylus.sone.core.Core.SoneStatus; import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.PostReply; import net.pterodactylus.sone.data.Reply; import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.data.Sone.SoneStatus; import net.pterodactylus.sone.freenet.StringBucket; import net.pterodactylus.sone.main.SonePlugin; import net.pterodactylus.util.collection.ListBuilder; @@ -233,7 +233,7 @@ public class SoneInserter extends AbstractService { boolean success = false; try { - core.setSoneStatus(sone, SoneStatus.inserting); + sone.setStatus(SoneStatus.inserting); long insertTime = System.currentTimeMillis(); insertInformation.setTime(insertTime); soneInsertListenerManager.fireInsertStarted(); @@ -253,7 +253,7 @@ public class SoneInserter extends AbstractService { soneInsertListenerManager.fireInsertAborted(se1); logger.log(Level.WARNING, "Could not insert Sone “" + sone.getName() + "”!", se1); } finally { - core.setSoneStatus(sone, SoneStatus.idle); + sone.setStatus(SoneStatus.idle); } /* diff --git a/src/main/java/net/pterodactylus/sone/data/Sone.java b/src/main/java/net/pterodactylus/sone/data/Sone.java index 74ab276..63cdbcb 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -49,6 +49,26 @@ import freenet.keys.FreenetURI; public class Sone implements Fingerprintable, Comparable { /** + * Enumeration for the possible states of a {@link Sone}. + * + * @author David ‘Bombe’ Roden + */ + public enum SoneStatus { + + /** The Sone is unknown, i.e. not yet downloaded. */ + unknown, + + /** The Sone is idle, i.e. not being downloaded or inserted. */ + idle, + + /** The Sone is currently being inserted. */ + inserting, + + /** The Sone is currently being downloaded. */ + downloading, + } + + /** * The possible values for the “show custom avatars” option. * * @author David ‘Bombe’ Roden @@ -171,6 +191,9 @@ public class Sone implements Fingerprintable, Comparable { /** The time of the last inserted update. */ private volatile long time; + /** The status of this Sone. */ + private volatile SoneStatus status = SoneStatus.unknown; + /** The profile of this Sone. */ private volatile Profile profile = new Profile(this); @@ -360,6 +383,30 @@ public class Sone implements Fingerprintable, Comparable { } /** + * Returns the status of this Sone. + * + * @return The status of this Sone + */ + public SoneStatus getStatus() { + return status; + } + + /** + * Sets the new status of this Sone. + * + * @param status + * The new status of this Sone + * @return This Sone + * @throws IllegalArgumentException + * if {@code status} is {@code null} + */ + public Sone setStatus(SoneStatus status) { + Validation.begin().isNotNull("Sone Status", status).check(); + this.status = status; + return this; + } + + /** * Returns a copy of the profile. If you want to update values in the * profile of this Sone, update the values in the returned {@link Profile} * and use {@link #setProfile(Profile)} to change the profile in this Sone. diff --git a/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java b/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java index ead6066..305e9a8 100644 --- a/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java +++ b/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java @@ -21,9 +21,9 @@ import java.util.logging.Level; import java.util.logging.Logger; import net.pterodactylus.sone.core.Core; -import net.pterodactylus.sone.core.Core.SoneStatus; import net.pterodactylus.sone.data.Profile; import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.data.Sone.SoneStatus; import net.pterodactylus.sone.freenet.wot.Trust; import net.pterodactylus.sone.web.WebInterface; import net.pterodactylus.sone.web.ajax.GetTimesAjaxPage; @@ -86,15 +86,15 @@ public class SoneAccessor extends ReflectionAccessor { } else if (member.equals("modified")) { return core.isModifiedSone(sone); } else if (member.equals("status")) { - return core.getSoneStatus(sone); + return sone.getStatus(); } else if (member.equals("unknown")) { - return core.getSoneStatus(sone) == SoneStatus.unknown; + return sone.getStatus() == SoneStatus.unknown; } else if (member.equals("idle")) { - return core.getSoneStatus(sone) == SoneStatus.idle; + return sone.getStatus() == SoneStatus.idle; } else if (member.equals("inserting")) { - return core.getSoneStatus(sone) == SoneStatus.inserting; + return sone.getStatus() == SoneStatus.inserting; } else if (member.equals("downloading")) { - return core.getSoneStatus(sone) == SoneStatus.downloading; + return sone.getStatus() == SoneStatus.downloading; } else if (member.equals("new")) { return core.isNewSone(sone.getId()); } else if (member.equals("locked")) { diff --git a/src/main/java/net/pterodactylus/sone/web/ajax/GetStatusAjaxPage.java b/src/main/java/net/pterodactylus/sone/web/ajax/GetStatusAjaxPage.java index 1f23e4a..16bb133 100644 --- a/src/main/java/net/pterodactylus/sone/web/ajax/GetStatusAjaxPage.java +++ b/src/main/java/net/pterodactylus/sone/web/ajax/GetStatusAjaxPage.java @@ -177,7 +177,7 @@ public class GetStatusAjaxPage extends JsonPage { jsonSone.put("id", sone.getId()); jsonSone.put("name", SoneAccessor.getNiceName(sone)); jsonSone.put("local", sone.getInsertUri() != null); - jsonSone.put("status", webInterface.getCore().getSoneStatus(sone).name()); + jsonSone.put("status", sone.getStatus().name()); jsonSone.put("modified", webInterface.getCore().isModifiedSone(sone)); jsonSone.put("locked", webInterface.getCore().isLocked(sone)); jsonSone.put("lastUpdatedUnknown", sone.getTime() == 0);