/*
- * Sone - WebInterface.java - Copyright © 2010 David Roden
+ * Sone - WebInterface.java - Copyright © 2010–2012 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
import net.pterodactylus.sone.core.Core;
import net.pterodactylus.sone.core.CoreListener;
+import net.pterodactylus.sone.core.event.NewSoneFoundEvent;
import net.pterodactylus.sone.data.Album;
import net.pterodactylus.sone.data.Image;
import net.pterodactylus.sone.data.Post;
import net.pterodactylus.sone.web.page.FreenetRequest;
import net.pterodactylus.sone.web.page.PageToadlet;
import net.pterodactylus.sone.web.page.PageToadletFactory;
-import net.pterodactylus.util.cache.Cache;
-import net.pterodactylus.util.cache.CacheException;
-import net.pterodactylus.util.cache.CacheItem;
-import net.pterodactylus.util.cache.DefaultCacheItem;
-import net.pterodactylus.util.cache.MemoryCache;
-import net.pterodactylus.util.cache.ValueRetriever;
-import net.pterodactylus.util.collection.SetBuilder;
-import net.pterodactylus.util.filter.Filters;
import net.pterodactylus.util.logging.Logging;
import net.pterodactylus.util.notify.Notification;
import net.pterodactylus.util.notify.NotificationManager;
import net.pterodactylus.util.notify.TemplateNotification;
+import net.pterodactylus.util.template.ClassPathTemplateProvider;
import net.pterodactylus.util.template.CollectionSortFilter;
import net.pterodactylus.util.template.ContainsFilter;
import net.pterodactylus.util.template.DateFilter;
import net.pterodactylus.util.template.HtmlFilter;
import net.pterodactylus.util.template.MatchFilter;
import net.pterodactylus.util.template.ModFilter;
-import net.pterodactylus.util.template.Provider;
+import net.pterodactylus.util.template.PaginationFilter;
import net.pterodactylus.util.template.ReflectionAccessor;
import net.pterodactylus.util.template.ReplaceFilter;
import net.pterodactylus.util.template.StoreFilter;
import net.pterodactylus.util.template.Template;
-import net.pterodactylus.util.template.TemplateContext;
import net.pterodactylus.util.template.TemplateContextFactory;
-import net.pterodactylus.util.template.TemplateException;
import net.pterodactylus.util.template.TemplateParser;
+import net.pterodactylus.util.template.TemplateProvider;
import net.pterodactylus.util.template.XmlFilter;
import net.pterodactylus.util.thread.Ticker;
import net.pterodactylus.util.version.Version;
import net.pterodactylus.util.web.RedirectPage;
import net.pterodactylus.util.web.StaticPage;
import net.pterodactylus.util.web.TemplatePage;
+
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.eventbus.Subscribe;
+import com.google.inject.Inject;
+
import freenet.clients.http.SessionManager;
import freenet.clients.http.SessionManager.Session;
import freenet.clients.http.ToadletContainer;
* @param sonePlugin
* The Sone plugin
*/
- @SuppressWarnings("synthetic-access")
+ @Inject
public WebInterface(SonePlugin sonePlugin) {
this.sonePlugin = sonePlugin;
formPassword = sonePlugin.pluginRespirator().getToadletContainer().getFormPassword();
templateContextFactory.addFilter("in", new ContainsFilter());
templateContextFactory.addFilter("unique", new UniqueElementFilter());
templateContextFactory.addFilter("mod", new ModFilter());
- templateContextFactory.addProvider(Provider.TEMPLATE_CONTEXT_PROVIDER);
- templateContextFactory.addProvider(new ClassPathTemplateProvider());
+ templateContextFactory.addFilter("paginate", new PaginationFilter());
+ templateContextFactory.addProvider(TemplateProvider.TEMPLATE_CONTEXT_PROVIDER);
+ templateContextFactory.addProvider(new ClassPathTemplateProvider(WebInterface.class, "/templates/"));
templateContextFactory.addTemplateObject("webInterface", this);
templateContextFactory.addTemplateObject("formPassword", formPassword);
* currently logged in
*/
public Sone getCurrentSone(ToadletContext toadletContext, boolean create) {
- Set<Sone> localSones = getCore().getLocalSones();
+ Collection<Sone> localSones = getCore().getLocalSones();
if (localSones.size() == 1) {
return localSones.iterator().next();
}
* @return The new posts
*/
public Set<Post> getNewPosts() {
- return new SetBuilder<Post>().addAll(newPostNotification.getElements()).addAll(localPostNotification.getElements()).get();
+ return ImmutableSet.<Post> builder().addAll(newPostNotification.getElements()).addAll(localPostNotification.getElements()).build();
}
/**
* @return The new replies
*/
public Set<PostReply> getNewReplies() {
- return new SetBuilder<PostReply>().addAll(newReplyNotification.getElements()).addAll(localReplyNotification.getElements()).get();
+ return ImmutableSet.<PostReply> builder().addAll(newReplyNotification.getElements()).addAll(localReplyNotification.getElements()).build();
}
/**
}
/**
- * Returns all {@link Core#isLocalSone(Sone) local Sone}s that are
- * referenced by {@link SonePart}s in the given text (after parsing it using
+ * Returns all {@link Sone#isLocal() local Sone}s that are referenced by
+ * {@link SonePart}s in the given text (after parsing it using
* {@link SoneTextParser}).
*
* @param text
* The text to parse
* @return All mentioned local Sones
*/
- private Set<Sone> getMentionedSones(String text) {
+ private Collection<Sone> getMentionedSones(String text) {
/* we need no context to find mentioned Sones. */
Set<Sone> mentionedSones = new HashSet<Sone>();
try {
} catch (IOException ioe1) {
logger.log(Level.WARNING, String.format("Could not parse post text: %s", text), ioe1);
}
- return Filters.filteredSet(mentionedSones, Sone.LOCAL_SONE_FILTER);
+ return Collections2.filter(mentionedSones, Sone.LOCAL_SONE_FILTER);
}
/**
}
//
- // CORELISTENER METHODS
+ // EVENT HANDLERS
//
/**
* {@inheritDoc}
*/
- @Override
- public void newSoneFound(Sone sone) {
- newSoneNotification.add(sone);
+ @Subscribe
+ public void newSoneFound(NewSoneFoundEvent newSoneFoundEvent) {
+ newSoneNotification.add(newSoneFoundEvent.sone());
if (!hasFirstStartNotification()) {
notificationManager.addNotification(newSoneNotification);
}
}
+ //
+ // CORELISTENER METHODS
+ //
+
/**
* {@inheritDoc}
*/
@Override
public void newPostFound(Post post) {
- boolean isLocal = getCore().isLocalSone(post.getSone());
+ boolean isLocal = post.getSone().isLocal();
if (isLocal) {
localPostNotification.add(post);
} else {
*/
@Override
public void newReplyFound(PostReply reply) {
- boolean isLocal = getCore().isLocalSone(reply.getSone());
+ boolean isLocal = reply.getSone().isLocal();
if (isLocal) {
localReplyNotification.add(reply);
} else {
notificationManager.addNotification(imageInsertFailedNotification);
}
- /**
- * Template provider implementation that uses
- * {@link WebInterface#createReader(String)} to load templates for
- * inclusion.
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
- private class ClassPathTemplateProvider implements Provider {
-
- /** Cache for templates. */
- private final Cache<String, Template> templateCache = new MemoryCache<String, Template>(new ValueRetriever<String, Template>() {
-
- @Override
- @SuppressWarnings("synthetic-access")
- public CacheItem<Template> retrieve(String key) throws CacheException {
- Template template = findTemplate(key);
- if (template != null) {
- return new DefaultCacheItem<Template>(template);
- }
- return null;
- }
- });
-
- /**
- * {@inheritDoc}
- */
- @Override
- @SuppressWarnings("synthetic-access")
- public Template getTemplate(TemplateContext templateContext, String templateName) {
- try {
- return templateCache.get(templateName);
- } catch (CacheException ce1) {
- logger.log(Level.WARNING, String.format("Could not get template for %s!", templateName), ce1);
- return null;
- }
- }
-
- /**
- * Locates a template in the class path.
- *
- * @param templateName
- * The name of the template to load
- * @return The loaded template, or {@code null} if no template could be
- * found
- */
- @SuppressWarnings("synthetic-access")
- private Template findTemplate(String templateName) {
- Reader templateReader = createReader("/templates/" + templateName);
- if (templateReader == null) {
- return null;
- }
- Template template = null;
- try {
- template = TemplateParser.parse(templateReader);
- } catch (TemplateException te1) {
- logger.log(Level.WARNING, String.format("Could not parse template “%s” for inclusion!", templateName), te1);
- }
- return template;
- }
-
- }
-
}