X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FPreferences.java;h=73d964c7d66889de4c08c30a67bca42e5b0dc41f;hb=cdee9199c8ab6a1646ef9fce6930ce41f1b1b25b;hp=16d945363afc08eccc4ea1168a2a5159dd082bf8;hpb=99888ce13cc17d49f5e217ab6f2c9ad5ef168792;p=Sone.git
diff --git a/src/main/java/net/pterodactylus/sone/core/Preferences.java b/src/main/java/net/pterodactylus/sone/core/Preferences.java
index 16d9453..73d964c 100644
--- a/src/main/java/net/pterodactylus/sone/core/Preferences.java
+++ b/src/main/java/net/pterodactylus/sone/core/Preferences.java
@@ -1,5 +1,5 @@
/*
- * Sone - Preferences.java - Copyright © 2013 David Roden
+ * Sone - Preferences.java - Copyright © 2013â2016 David Roden
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,28 +17,58 @@
package net.pterodactylus.sone.core;
+import static com.google.common.base.Predicates.equalTo;
+import static java.lang.Integer.MAX_VALUE;
+import static net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired.ALWAYS;
+import static net.pterodactylus.sone.utils.IntegerRangePredicate.range;
+
+import net.pterodactylus.sone.core.event.InsertionDelayChangedEvent;
import net.pterodactylus.sone.fcp.FcpInterface;
import net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired;
+import net.pterodactylus.sone.fcp.event.FcpInterfaceActivatedEvent;
+import net.pterodactylus.sone.fcp.event.FcpInterfaceDeactivatedEvent;
+import net.pterodactylus.sone.fcp.event.FullAccessRequiredChanged;
+import net.pterodactylus.sone.utils.DefaultOption;
+import net.pterodactylus.sone.utils.Option;
+import net.pterodactylus.util.config.Configuration;
+import net.pterodactylus.util.config.ConfigurationException;
+
+import com.google.common.base.Predicates;
+import com.google.common.eventbus.EventBus;
/**
* Convenience interface for external classes that want to access the coreâs
* configuration.
- *
- * @author David âBombeâ Roden
*/
public class Preferences {
- /** The wrapped options. */
- private final Options options;
-
- /**
- * Creates a new preferences object wrapped around the given options.
- *
- * @param options
- * The options to wrap
- */
- public Preferences(Options options) {
- this.options = options;
+ private final EventBus eventBus;
+ private final Option insertionDelay =
+ new DefaultOption(60, range(0, MAX_VALUE));
+ private final Option postsPerPage =
+ new DefaultOption(10, range(1, MAX_VALUE));
+ private final Option imagesPerPage =
+ new DefaultOption(9, range(1, MAX_VALUE));
+ private final Option charactersPerPost =
+ new DefaultOption(400, Predicates.or(
+ range(50, MAX_VALUE), equalTo(-1)));
+ private final Option postCutOffLength =
+ new DefaultOption(200, range(50, MAX_VALUE));
+ private final Option requireFullAccess =
+ new DefaultOption(false);
+ private final Option positiveTrust =
+ new DefaultOption(75, range(0, 100));
+ private final Option negativeTrust =
+ new DefaultOption(-25, range(-100, 100));
+ private final Option trustComment =
+ new DefaultOption("Set from Sone Web Interface");
+ private final Option activateFcpInterface =
+ new DefaultOption(false);
+ private final Option fcpFullAccessRequired =
+ new DefaultOption(ALWAYS);
+
+ public Preferences(EventBus eventBus) {
+ this.eventBus = eventBus;
}
/**
@@ -47,7 +77,7 @@ public class Preferences {
* @return The insertion delay
*/
public int getInsertionDelay() {
- return options.getIntegerOption("InsertionDelay").get();
+ return insertionDelay.get();
}
/**
@@ -59,7 +89,7 @@ public class Preferences {
* {@code false} otherwise
*/
public boolean validateInsertionDelay(Integer insertionDelay) {
- return options.getIntegerOption("InsertionDelay").validate(insertionDelay);
+ return this.insertionDelay.validate(insertionDelay);
}
/**
@@ -71,7 +101,9 @@ public class Preferences {
* @return This preferences
*/
public Preferences setInsertionDelay(Integer insertionDelay) {
- options.getIntegerOption("InsertionDelay").set(insertionDelay);
+ this.insertionDelay.set(insertionDelay);
+ eventBus.post(new InsertionDelayChangedEvent(getInsertionDelay()));
+ eventBus.post(new PreferenceChangedEvent("InsertionDelay", getInsertionDelay()));
return this;
}
@@ -81,7 +113,7 @@ public class Preferences {
* @return The number of posts to show per page
*/
public int getPostsPerPage() {
- return options.getIntegerOption("PostsPerPage").get();
+ return postsPerPage.get();
}
/**
@@ -93,7 +125,7 @@ public class Preferences {
* {@code false} otherwise
*/
public boolean validatePostsPerPage(Integer postsPerPage) {
- return options.getIntegerOption("PostsPerPage").validate(postsPerPage);
+ return this.postsPerPage.validate(postsPerPage);
}
/**
@@ -104,7 +136,8 @@ public class Preferences {
* @return This preferences object
*/
public Preferences setPostsPerPage(Integer postsPerPage) {
- options.getIntegerOption("PostsPerPage").set(postsPerPage);
+ this.postsPerPage.set(postsPerPage);
+ eventBus.post(new PreferenceChangedEvent("PostsPerPage", getPostsPerPage()));
return this;
}
@@ -114,7 +147,7 @@ public class Preferences {
* @return The number of images to show per page
*/
public int getImagesPerPage() {
- return options.getIntegerOption("ImagesPerPage").get();
+ return imagesPerPage.get();
}
/**
@@ -126,7 +159,7 @@ public class Preferences {
* {@code false} otherwise
*/
public boolean validateImagesPerPage(Integer imagesPerPage) {
- return options.getIntegerOption("ImagesPerPage").validate(imagesPerPage);
+ return this.imagesPerPage.validate(imagesPerPage);
}
/**
@@ -137,7 +170,7 @@ public class Preferences {
* @return This preferences object
*/
public Preferences setImagesPerPage(Integer imagesPerPage) {
- options.getIntegerOption("ImagesPerPage").set(imagesPerPage);
+ this.imagesPerPage.set(imagesPerPage);
return this;
}
@@ -148,7 +181,7 @@ public class Preferences {
* @return The numbers of characters per post
*/
public int getCharactersPerPost() {
- return options.getIntegerOption("CharactersPerPost").get();
+ return charactersPerPost.get();
}
/**
@@ -160,7 +193,7 @@ public class Preferences {
* {@code false} otherwise
*/
public boolean validateCharactersPerPost(Integer charactersPerPost) {
- return options.getIntegerOption("CharactersPerPost").validate(charactersPerPost);
+ return this.charactersPerPost.validate(charactersPerPost);
}
/**
@@ -172,7 +205,7 @@ public class Preferences {
* @return This preferences objects
*/
public Preferences setCharactersPerPost(Integer charactersPerPost) {
- options.getIntegerOption("CharactersPerPost").set(charactersPerPost);
+ this.charactersPerPost.set(charactersPerPost);
return this;
}
@@ -182,7 +215,7 @@ public class Preferences {
* @return The number of characters of the snippet
*/
public int getPostCutOffLength() {
- return options.getIntegerOption("PostCutOffLength").get();
+ return postCutOffLength.get();
}
/**
@@ -194,7 +227,7 @@ public class Preferences {
* valid, {@code false} otherwise
*/
public boolean validatePostCutOffLength(Integer postCutOffLength) {
- return options.getIntegerOption("PostCutOffLength").validate(postCutOffLength);
+ return this.postCutOffLength.validate(postCutOffLength);
}
/**
@@ -205,7 +238,7 @@ public class Preferences {
* @return This preferences
*/
public Preferences setPostCutOffLength(Integer postCutOffLength) {
- options.getIntegerOption("PostCutOffLength").set(postCutOffLength);
+ this.postCutOffLength.set(postCutOffLength);
return this;
}
@@ -216,7 +249,7 @@ public class Preferences {
* otherwise
*/
public boolean isRequireFullAccess() {
- return options.getBooleanOption("RequireFullAccess").get();
+ return requireFullAccess.get();
}
/**
@@ -227,7 +260,7 @@ public class Preferences {
* otherwise
*/
public void setRequireFullAccess(Boolean requireFullAccess) {
- options.getBooleanOption("RequireFullAccess").set(requireFullAccess);
+ this.requireFullAccess.set(requireFullAccess);
}
/**
@@ -236,7 +269,7 @@ public class Preferences {
* @return The positive trust
*/
public int getPositiveTrust() {
- return options.getIntegerOption("PositiveTrust").get();
+ return positiveTrust.get();
}
/**
@@ -248,7 +281,7 @@ public class Preferences {
* otherwise
*/
public boolean validatePositiveTrust(Integer positiveTrust) {
- return options.getIntegerOption("PositiveTrust").validate(positiveTrust);
+ return this.positiveTrust.validate(positiveTrust);
}
/**
@@ -260,7 +293,7 @@ public class Preferences {
* @return This preferences
*/
public Preferences setPositiveTrust(Integer positiveTrust) {
- options.getIntegerOption("PositiveTrust").set(positiveTrust);
+ this.positiveTrust.set(positiveTrust);
return this;
}
@@ -270,7 +303,7 @@ public class Preferences {
* @return The negative trust
*/
public int getNegativeTrust() {
- return options.getIntegerOption("NegativeTrust").get();
+ return negativeTrust.get();
}
/**
@@ -282,7 +315,7 @@ public class Preferences {
* otherwise
*/
public boolean validateNegativeTrust(Integer negativeTrust) {
- return options.getIntegerOption("NegativeTrust").validate(negativeTrust);
+ return this.negativeTrust.validate(negativeTrust);
}
/**
@@ -294,7 +327,7 @@ public class Preferences {
* @return The preferences
*/
public Preferences setNegativeTrust(Integer negativeTrust) {
- options.getIntegerOption("NegativeTrust").set(negativeTrust);
+ this.negativeTrust.set(negativeTrust);
return this;
}
@@ -305,7 +338,7 @@ public class Preferences {
* @return The trust comment
*/
public String getTrustComment() {
- return options.getStringOption("TrustComment").get();
+ return trustComment.get();
}
/**
@@ -317,7 +350,7 @@ public class Preferences {
* @return This preferences
*/
public Preferences setTrustComment(String trustComment) {
- options.getStringOption("TrustComment").set(trustComment);
+ this.trustComment.set(trustComment);
return this;
}
@@ -330,7 +363,7 @@ public class Preferences {
* {@code false} otherwise
*/
public boolean isFcpInterfaceActive() {
- return options.getBooleanOption("ActivateFcpInterface").get();
+ return activateFcpInterface.get();
}
/**
@@ -343,8 +376,13 @@ public class Preferences {
* to deactivate the FCP interface
* @return This preferences object
*/
- public Preferences setFcpInterfaceActive(boolean fcpInterfaceActive) {
- options.getBooleanOption("ActivateFcpInterface").set(fcpInterfaceActive);
+ public Preferences setFcpInterfaceActive(Boolean fcpInterfaceActive) {
+ this.activateFcpInterface.set(fcpInterfaceActive);
+ if (isFcpInterfaceActive()) {
+ eventBus.post(new FcpInterfaceActivatedEvent());
+ } else {
+ eventBus.post(new FcpInterfaceDeactivatedEvent());
+ }
return this;
}
@@ -356,7 +394,7 @@ public class Preferences {
* is required
*/
public FullAccessRequired getFcpFullAccessRequired() {
- return FullAccessRequired.values()[options.getIntegerOption("FcpFullAccessRequired").get()];
+ return fcpFullAccessRequired.get();
}
/**
@@ -367,9 +405,30 @@ public class Preferences {
* The action level
* @return This preferences
*/
- public Preferences setFcpFullAccessRequired(FullAccessRequired fcpFullAccessRequired) {
- options.getIntegerOption("FcpFullAccessRequired").set((fcpFullAccessRequired != null) ? fcpFullAccessRequired.ordinal() : null);
+ public Preferences setFcpFullAccessRequired(
+ FullAccessRequired fcpFullAccessRequired) {
+ this.fcpFullAccessRequired.set(fcpFullAccessRequired);
+ eventBus.post(new FullAccessRequiredChanged(getFcpFullAccessRequired()));
return this;
}
+ public void saveTo(Configuration configuration) throws ConfigurationException {
+ configuration.getIntValue("Option/ConfigurationVersion").setValue(0);
+ configuration.getIntValue("Option/InsertionDelay").setValue(insertionDelay.getReal());
+ configuration.getIntValue("Option/PostsPerPage").setValue(postsPerPage.getReal());
+ configuration.getIntValue("Option/ImagesPerPage").setValue(imagesPerPage.getReal());
+ configuration.getIntValue("Option/CharactersPerPost").setValue(charactersPerPost.getReal());
+ configuration.getIntValue("Option/PostCutOffLength").setValue(postCutOffLength.getReal());
+ configuration.getBooleanValue("Option/RequireFullAccess").setValue(requireFullAccess.getReal());
+ configuration.getIntValue("Option/PositiveTrust").setValue(positiveTrust.getReal());
+ configuration.getIntValue("Option/NegativeTrust").setValue(negativeTrust.getReal());
+ configuration.getStringValue("Option/TrustComment").setValue(trustComment.getReal());
+ configuration.getBooleanValue("Option/ActivateFcpInterface").setValue(activateFcpInterface.getReal());
+ configuration.getIntValue("Option/FcpFullAccessRequired").setValue(toInt(fcpFullAccessRequired.getReal()));
+ }
+
+ private Integer toInt(FullAccessRequired fullAccessRequired) {
+ return (fullAccessRequired == null) ? null : fullAccessRequired.ordinal();
+ }
+
}