Store fingerprint in insert information.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / SoneInserter.java
index d5fe9a2..d8564ba 100644 (file)
@@ -212,7 +212,7 @@ public class SoneInserter extends AbstractService {
                                        continue;
                                }
 
-                               InsertInformation insertInformation = null;
+                               boolean insertSoneNow = false;
                                synchronized (sone) {
                                        String fingerprint = sone.getFingerprint();
                                        if (!fingerprint.equals(lastFingerprint)) {
@@ -229,11 +229,12 @@ public class SoneInserter extends AbstractService {
                                        }
                                        if (modified && lastModificationTime.isPresent() && ((currentTimeMillis() - lastModificationTime.get()) > (insertionDelay * 1000))) {
                                                lastInsertedFingerprint = fingerprint;
-                                               insertInformation = new InsertInformation(sone);
+                                               insertSoneNow = true;
                                        }
                                }
 
-                               if (insertInformation != null) {
+                               if (insertSoneNow) {
+                                       InsertInformation insertInformation = new InsertInformation(sone);
                                        logger.log(Level.INFO, String.format("Inserting Sone “%s”…", sone.getName()));
 
                                        boolean success = false;
@@ -267,10 +268,10 @@ public class SoneInserter extends AbstractService {
                                         */
                                        if (success) {
                                                synchronized (sone) {
-                                                       if (lastInsertedFingerprint.equals(sone.getFingerprint())) {
+                                                       if (insertInformation.getFingerprint().equals(sone.getFingerprint())) {
                                                                logger.log(Level.FINE, String.format("Sone “%s” was not modified further, resetting counter…", sone));
                                                                lastModificationTime = absent();
-                                                               lastInsertFingerprint = lastInsertedFingerprint;
+                                                               lastInsertFingerprint = insertInformation.getFingerprint();
                                                                core.touchConfiguration();
                                                                modified = false;
                                                        }
@@ -292,6 +293,8 @@ public class SoneInserter extends AbstractService {
         */
        private class InsertInformation {
 
+               private final String fingerprint;
+
                /** All properties of the Sone, copied for thread safety. */
                private final Map<String, Object> soneProperties = new HashMap<String, Object>();
 
@@ -302,6 +305,7 @@ public class SoneInserter extends AbstractService {
                 *            The sone to insert
                 */
                public InsertInformation(Sone sone) {
+                       this.fingerprint = sone.getFingerprint();
                        soneProperties.put("id", sone.getId());
                        soneProperties.put("name", sone.getName());
                        soneProperties.put("time", sone.getTime());
@@ -319,6 +323,10 @@ public class SoneInserter extends AbstractService {
                // ACCESSORS
                //
 
+               private String getFingerprint() {
+                       return fingerprint;
+               }
+
                /**
                 * Returns the insert URI of the Sone.
                 *