logger.log(Level.WARNING, "Given Identity is null!");
return null;
}
- final Long latestEdition = tryParse(fromNullable(
- identity.getProperty("Sone.LatestEdition")).or("0"));
+ String property = fromNullable(identity.getProperty("Sone.LatestEdition")).or("0");
+ long latestEdition = fromNullable(tryParse(property)).or(0L);
Optional<Sone> existingSone = getSone(identity.getId());
if (existingSone.isPresent() && existingSone.get().isLocal()) {
return existingSone.get();
}
/* load options. */
- sone.getOptions().setAutoFollow(configuration.getBooleanValue(sonePrefix + "/Options/AutoFollow").getValue(null));
- sone.getOptions().setSoneInsertNotificationEnabled(configuration.getBooleanValue(sonePrefix + "/Options/EnableSoneInsertNotifications").getValue(null));
- sone.getOptions().setShowNewSoneNotifications(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewSones").getValue(null));
- sone.getOptions().setShowNewPostNotifications(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewPosts").getValue(null));
- sone.getOptions().setShowNewReplyNotifications(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewReplies").getValue(null));
+ sone.getOptions().setAutoFollow(configuration.getBooleanValue(sonePrefix + "/Options/AutoFollow").getValue(false));
+ sone.getOptions().setSoneInsertNotificationEnabled(configuration.getBooleanValue(sonePrefix + "/Options/EnableSoneInsertNotifications").getValue(false));
+ sone.getOptions().setShowNewSoneNotifications(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewSones").getValue(true));
+ sone.getOptions().setShowNewPostNotifications(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewPosts").getValue(true));
+ sone.getOptions().setShowNewReplyNotifications(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewReplies").getValue(true));
sone.getOptions().setShowCustomAvatars(ShowCustomAvatars.valueOf(configuration.getStringValue(sonePrefix + "/Options/ShowCustomAvatars").getValue(ShowCustomAvatars.NEVER.name())));
/* if we’re still here, Sone was loaded successfully. */
}
};
- public static final Function<Sone, String> toSoneXmlUri =
- new Function<Sone, String>() {
- @Nonnull
- @Override
- public String apply(@Nullable Sone input) {
- return input.getRequestUri()
- .setMetaString(new String[] { "sone.xml" })
- .toString();
- }
- };
-
public static final Function<Sone, List<Album>> toAllAlbums = new Function<Sone, List<Album>>() {
@Override
public List<Album> apply(@Nullable Sone sone) {
checkArgument(equals(album.getParent()), "album must belong to this album");
int oldIndex = albums.indexOf(album);
if (oldIndex <= 0) {
- return null;
+ return album;
}
albums.remove(oldIndex);
albums.add(oldIndex - 1, album);
checkArgument(equals(album.getParent()), "album must belong to this album");
int oldIndex = albums.indexOf(album);
if ((oldIndex < 0) || (oldIndex >= (albums.size() - 1))) {
- return null;
+ return album;
}
albums.remove(oldIndex);
albums.add(oldIndex + 1, album);
checkArgument(image.getAlbum().equals(this), "image must belong to this album");
int oldIndex = imageIds.indexOf(image.getId());
if (oldIndex <= 0) {
- return null;
+ return image;
}
imageIds.remove(image.getId());
imageIds.add(oldIndex - 1, image.getId());
checkArgument(image.getAlbum().equals(this), "image must belong to this album");
int oldIndex = imageIds.indexOf(image.getId());
if ((oldIndex == -1) || (oldIndex >= (imageIds.size() - 1))) {
- return null;
+ return image;
}
imageIds.remove(image.getId());
imageIds.add(oldIndex + 1, image.getId());
import freenet.keys.FreenetURI;
+import com.google.common.base.Objects;
+
/**
* {@link Sone} implementation that only stores the ID of a Sone and returns
* {@code null}, {@code 0}, or empty collections where appropriate.
return id;
}
+ @Override
+ public int hashCode() {
+ return id.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ return (object != null) && (object.getClass() == getClass()) && Objects.equal(id, ((IdOnlySone) object).id);
+ }
+
}
return new Predicate<Identity>() {
@Override
public boolean apply(Identity identity) {
- return identities.containsKey(identity.getId());
+ return (identity != null) && identities.containsKey(identity.getId());
}
};
}
*/
private enum LinkType {
- /** Link is a KSK. */
- KSK("KSK@"),
+ KSK("KSK@", true),
+ CHK("CHK@", true),
+ SSK("SSK@", true),
+ USK("USK@", true),
+ HTTP("http://", false),
+ HTTPS("https://", false),
+ SONE("sone://", false),
+ POST("post://", false);
- /** Link is a CHK. */
- CHK("CHK@"),
-
- /** Link is an SSK. */
- SSK("SSK@"),
-
- /** Link is a USK. */
- USK("USK@"),
-
- /** Link is HTTP. */
- HTTP("http://"),
-
- /** Link is HTTPS. */
- HTTPS("https://"),
-
- /** Link is a Sone. */
- SONE("sone://"),
-
- /** Link is a post. */
- POST("post://");
-
- /** The scheme identifying this link type. */
private final String scheme;
+ private final boolean freenetLink;
- /**
- * Creates a new link type identified by the given scheme.
- *
- * @param scheme
- * The scheme of the link type
- */
- private LinkType(String scheme) {
+ LinkType(String scheme, boolean freenetLink) {
this.scheme = scheme;
+ this.freenetLink = freenetLink;
}
/**
return scheme;
}
+ public boolean isFreenetLink() {
+ return freenetLink;
+ }
+
}
/** The Sone provider. */
}
/* cut off “freenet:” from before keys. */
- if (((linkType == LinkType.KSK) || (linkType == LinkType.CHK) || (linkType == LinkType.SSK) || (linkType == LinkType.USK)) && (next >= 8) && (line.substring(next - 8, next).equals("freenet:"))) {
+ if (linkType.isFreenetLink() && (next >= 8) && (line.substring(next - 8, next).equals("freenet:"))) {
next -= 8;
line = line.substring(0, next) + line.substring(next + 8);
}
package net.pterodactylus.sone.web;
+import static com.google.common.base.Optional.fromNullable;
import static java.util.logging.Logger.getLogger;
import java.awt.Image;
*/
public class UploadImagePage extends SoneTemplatePage {
- /** The logger. */
private static final Logger logger = getLogger(UploadImagePage.class.getName());
+ private static final String UNKNOWN_MIME_TYPE = "application/octet-stream";
/**
* Creates a new “upload image” page.
ImageInputStream imageInputStream = ImageIO.createImageInputStream(imageDataInputStream);
Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(imageInputStream);
if (imageReaders.hasNext()) {
- return imageReaders.next().getOriginatingProvider().getMIMETypes()[0];
+ return fromNullable(imageReaders.next().getOriginatingProvider().getMIMETypes())
+ .or(new String[] { UNKNOWN_MIME_TYPE })[0];
}
} catch (IOException ioe1) {
logger.log(Level.FINE, "Could not detect MIME type for image.", ioe1);
}
- return "application/octet-stream";
+ return UNKNOWN_MIME_TYPE;
}
}