[freenet-cvs] r15642 - in trunk/freenet/src/freenet: clients/http l10n

bombe at freenetproject.org bombe at freenetproject.org
Mon Oct 29 11:54:14 UTC 2007


Author: bombe
Date: 2007-10-29 11:54:14 +0000 (Mon, 29 Oct 2007)
New Revision: 15642

Modified:
   trunk/freenet/src/freenet/clients/http/PproxyToadlet.java
   trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
Log:
load official plugins from a select box, omitting already loaded ones
remove hardcoded list from l10n translation

Modified: trunk/freenet/src/freenet/clients/http/PproxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/PproxyToadlet.java	2007-10-29 11:26:45 UTC (rev 15641)
+++ trunk/freenet/src/freenet/clients/http/PproxyToadlet.java	2007-10-29 11:54:14 UTC (rev 15642)
@@ -1,14 +1,11 @@
 package freenet.clients.http;
 
-import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
 import java.net.URI;
-import java.net.URL;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import freenet.client.HighLevelSimpleClient;
@@ -29,7 +26,6 @@
 import freenet.support.MultiValueTable;
 import freenet.support.TimeUtil;
 import freenet.support.api.HTTPRequest;
-import freenet.support.io.FileUtil;
 
 public class PproxyToadlet extends Toadlet {
 	private static final int MAX_PLUGIN_NAME_LENGTH = 1024;
@@ -251,9 +247,27 @@
 						contentNode.addChild(core.alerts.renderAlert(userAlert));
 					}
 				}
+				
+				/* find which plugins have already been loaded. */
+				List/*<String>*/ availablePlugins = findAvailablePlugins();
+				Iterator/*<PluginInfoWrapper>*/ loadedPlugins = pm.getPlugins().iterator();
+				while (loadedPlugins.hasNext()) {
+					PluginInfoWrapper pluginInfoWrapper = (PluginInfoWrapper) loadedPlugins.next();
+					String pluginName = pluginInfoWrapper.getPluginClassName();
+					String shortPluginName = pluginName.substring(pluginName.lastIndexOf('.') + 1);
+					availablePlugins.remove(shortPluginName);
+				}
+				Iterator/*<PluginProgress>*/ loadingPlugins = pm.getStartingPlugins().iterator();
+				while (loadingPlugins.hasNext()) {
+					PluginProgress pluginProgress = (PluginProgress) loadingPlugins.next();
+					String pluginName = pluginProgress.getName();
+					availablePlugins.remove(pluginName);
+				}
 
-				this.showStartingPlugins(ctx, request, pm, contentNode);
-				this.showPluginList(ctx, request, pm, contentNode);
+				showStartingPlugins(ctx, pm, contentNode);
+				showPluginList(ctx, pm, contentNode);
+				showOfficialPluginLoader(ctx, contentNode, availablePlugins);
+				showUnofficialPluginLoader(ctx, contentNode);
 
 				writeHTMLReply(ctx, 200, "OK", pageNode.generate());
 			} else {
@@ -295,6 +309,29 @@
 	}
 
 	/**
+	 * Returns a list of the names of all available official plugins. Right now
+	 * this list is hardcoded but in future we could retrieve this list from emu
+	 * or from freenet itself.
+	 * 
+	 * @return A list of all available plugin names
+	 */
+	private List/* <String> */findAvailablePlugins() {
+		List/* <String> */availablePlugins = new ArrayList/* <String> */();
+		availablePlugins.add("Echo");
+		availablePlugins.add("Freemail");
+		availablePlugins.add("HelloWorld");
+		availablePlugins.add("JSTUN");
+		availablePlugins.add("Librarian");
+		availablePlugins.add("MDNSDiscovery");
+		availablePlugins.add("SNMP");
+		availablePlugins.add("TestGallery");
+		availablePlugins.add("UPnP");
+		availablePlugins.add("XMLLibrarian");
+		availablePlugins.add("XMLSpider");
+		return availablePlugins;
+	}
+
+	/**
 	 * Shows a list of all currently loading plugins.
 	 * 
 	 * @param toadletContext
@@ -308,7 +345,7 @@
 	 * @throws IOException
 	 *             if an I/O error occurs
 	 */
-	private void showStartingPlugins(ToadletContext toadletContext, HTTPRequest request, PluginManager pluginManager, HTMLNode contentNode) throws ToadletContextClosedException, IOException {
+	private void showStartingPlugins(ToadletContext toadletContext, PluginManager pluginManager, HTMLNode contentNode) throws ToadletContextClosedException, IOException {
 		Set/*<PluginProgress>*/ startingPlugins = pluginManager.getStartingPlugins();
 		if (!startingPlugins.isEmpty()) {
 			HTMLNode startingPluginsBox = contentNode.addChild("div", "class", "infobox infobox-normal");
@@ -330,71 +367,77 @@
 		}
 	}
 
-	private void showPluginList(ToadletContext ctx, HTTPRequest request, PluginManager pm, HTMLNode contentNode) throws ToadletContextClosedException, IOException {
-		if (!request.hasParameters()) {
-			HTMLNode infobox = contentNode.addChild("div", "class", "infobox infobox-normal");
-			infobox.addChild("div", "class", "infobox-header", L10n.getString("PluginToadlet.pluginListTitle"));
-			HTMLNode infoboxContent = infobox.addChild("div", "class", "infobox-content");
+	private void showPluginList(ToadletContext ctx, PluginManager pm, HTMLNode contentNode) throws ToadletContextClosedException, IOException {
+		HTMLNode infobox = contentNode.addChild("div", "class", "infobox infobox-normal");
+		infobox.addChild("div", "class", "infobox-header", L10n.getString("PluginToadlet.pluginListTitle"));
+		HTMLNode infoboxContent = infobox.addChild("div", "class", "infobox-content");
+		if (pm.getPlugins().isEmpty()) {
+			infoboxContent.addChild("div", l10n("noPlugins"));
+		} else {
 			HTMLNode pluginTable = infoboxContent.addChild("table", "class", "plugins");
 			HTMLNode headerRow = pluginTable.addChild("tr");
 			headerRow.addChild("th", l10n("classNameTitle"));
 			headerRow.addChild("th", l10n("internalIDTitle"));
 			headerRow.addChild("th", l10n("startedAtTitle"));
 			headerRow.addChild("th");
-
-			if (pm.getPlugins().isEmpty()) {
-				pluginTable.addChild("tr").addChild("td", "colspan", "4", l10n("noPlugins"));
-			}
-			else {
-				Iterator it = pm.getPlugins().iterator();
-				while (it.hasNext()) {
-					PluginInfoWrapper pi = (PluginInfoWrapper) it.next();
-					HTMLNode pluginRow = pluginTable.addChild("tr");
-					pluginRow.addChild("td", pi.getPluginClassName());
-					pluginRow.addChild("td", pi.getThreadName());
-					pluginRow.addChild("td", new Date(pi.getStarted()).toString());
-					HTMLNode actionCell = pluginRow.addChild("td");
-					if(pi.isStopping()) {
-						actionCell.addChild("#", l10n("pluginStopping"));
-					} else {
-						if (pi.isPproxyPlugin()) {
-							HTMLNode visitForm = actionCell.addChild("form", new String[] { "method", "action", "target" }, new String[] { "get", pi.getPluginClassName(), "_new" });
-							visitForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "formPassword", core.formPassword });
-							visitForm.addChild("input", new String[] { "type", "value" }, new String[] { "submit", L10n.getString("PluginToadlet.visit") });
-						}
-						HTMLNode unloadForm = ctx.addFormChild(actionCell, ".", "unloadPluginForm");
-						unloadForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "unload", pi.getThreadName() });
-						unloadForm.addChild("input", new String[] { "type", "value" }, new String[] { "submit", l10n("unload") });
-						HTMLNode reloadForm = ctx.addFormChild(actionCell, ".", "reloadPluginForm");
-						reloadForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "reload", pi.getThreadName() });
-						reloadForm.addChild("input", new String[] { "type", "value" }, new String[] { "submit", l10n("reload") });
+			Iterator it = pm.getPlugins().iterator();
+			while (it.hasNext()) {
+				PluginInfoWrapper pi = (PluginInfoWrapper) it.next();
+				HTMLNode pluginRow = pluginTable.addChild("tr");
+				pluginRow.addChild("td", pi.getPluginClassName());
+				pluginRow.addChild("td", pi.getThreadName());
+				pluginRow.addChild("td", new Date(pi.getStarted()).toString());
+				HTMLNode actionCell = pluginRow.addChild("td");
+				if (pi.isStopping()) {
+					actionCell.addChild("#", l10n("pluginStopping"));
+				} else {
+					if (pi.isPproxyPlugin()) {
+						HTMLNode visitForm = actionCell.addChild("form", new String[] { "method", "action", "target" }, new String[] { "get", pi.getPluginClassName(), "_new" });
+						visitForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "formPassword", core.formPassword });
+						visitForm.addChild("input", new String[] { "type", "value" }, new String[] { "submit", L10n.getString("PluginToadlet.visit") });
 					}
+					HTMLNode unloadForm = ctx.addFormChild(actionCell, ".", "unloadPluginForm");
+					unloadForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "unload", pi.getThreadName() });
+					unloadForm.addChild("input", new String[] { "type", "value" }, new String[] { "submit", l10n("unload") });
+					HTMLNode reloadForm = ctx.addFormChild(actionCell, ".", "reloadPluginForm");
+					reloadForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "reload", pi.getThreadName() });
+					reloadForm.addChild("input", new String[] { "type", "value" }, new String[] { "submit", l10n("reload") });
 				}
 			}
+		}
+	}
+	
+	private void showOfficialPluginLoader(ToadletContext toadletContext, HTMLNode contentNode, List/*<String>*/ availablePlugins) {
+		/* box for "official" plugins. */
+		HTMLNode addOfficialPluginBox = contentNode.addChild("div", "class", "infobox infobox-normal");
+		addOfficialPluginBox.addChild("div", "class", "infobox-header", l10n("loadOfficialPlugin"));
+		HTMLNode addOfficialPluginContent = addOfficialPluginBox.addChild("div", "class", "infobox-content");
+		HTMLNode addOfficialForm = toadletContext.addFormChild(addOfficialPluginContent, ".", "addOfficialPluginForm");
+		addOfficialForm.addChild("div", l10n("loadOfficialPluginText"));
+		addOfficialForm.addChild("#", (l10n("loadOfficialPluginLabel") + ": "));
+		HTMLNode selectNode = addOfficialForm.addChild("select", "name", "plugin-name");
+		Iterator/*<String>*/ availablePluginIterator = availablePlugins.iterator();
+		while (availablePluginIterator.hasNext()) {
+			String pluginName = (String) availablePluginIterator.next();
+			selectNode.addChild("option", "value", pluginName, pluginName);
+		}
+		addOfficialForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "checkbox", "refresh-on-startup", "true" });
+		addOfficialForm.addChild("#", l10n("refreshOnStartup"));
+		addOfficialForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "submit", "submit-official", l10n("Load") });
+	}
+	
+	private void showUnofficialPluginLoader(ToadletContext toadletContext, HTMLNode contentNode) {
+		/* box for unofficial plugins. */
+		HTMLNode addOtherPluginBox = contentNode.addChild("div", "class", "infobox infobox-normal");
+		addOtherPluginBox.addChild("div", "class", "infobox-header", l10n("loadOtherPlugin"));
+		HTMLNode addOtherPluginContent = addOtherPluginBox.addChild("div", "class", "infobox-content");
+		HTMLNode addOtherForm = toadletContext.addFormChild(addOtherPluginContent, ".", "addOtherPluginForm");
+		addOtherForm.addChild("div", l10n("loadOtherPluginText"));
+		addOtherForm.addChild("#", (l10n("loadOtherURLLabel") + ": "));
+		addOtherForm.addChild("input", new String[] { "type", "name", "size" }, new String[] { "text", "plugin-url", "80" });
+		addOtherForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "checkbox", "refresh-on-startup", "true" });
+		addOtherForm.addChild("#", l10n("refreshOnStartup"));
+		addOtherForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "submit", "submit-other", l10n("Load") });
+	}
 
-			/* box for "official" plugins. */
-			HTMLNode addOfficialPluginBox = contentNode.addChild("div", "class", "infobox infobox-normal");
-			addOfficialPluginBox.addChild("div", "class", "infobox-header", l10n("loadOfficialPlugin"));
-			HTMLNode addOfficialPluginContent = addOfficialPluginBox.addChild("div", "class", "infobox-content");
-			HTMLNode addOfficialForm = ctx.addFormChild(addOfficialPluginContent, ".", "addOfficialPluginForm");
-			addOfficialForm.addChild("div", l10n("loadOfficialPluginText"));
-			addOfficialForm.addChild("#", (l10n("loadOfficialPluginLabel") + ": "));
-			addOfficialForm.addChild("input", new String[] { "type", "name", "size" }, new String[] { "text", "plugin-name", "40" });
-			addOfficialForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "checkbox", "refresh-on-startup", "true" });
-			addOfficialForm.addChild("#", l10n("refreshOnStartup"));
-			addOfficialForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "submit", "submit-official", l10n("Load") });
-
-			/* box for unofficial plugins. */
-			HTMLNode addOtherPluginBox = contentNode.addChild("div", "class", "infobox infobox-normal");
-			addOtherPluginBox.addChild("div", "class", "infobox-header", l10n("loadOtherPlugin"));
-			HTMLNode addOtherPluginContent = addOtherPluginBox.addChild("div", "class", "infobox-content");
-			HTMLNode addOtherForm = ctx.addFormChild(addOtherPluginContent, ".", "addOtherPluginForm");
-			addOtherForm.addChild("div", l10n("loadOtherPluginText"));
-			addOtherForm.addChild("#", (l10n("loadOtherURLLabel") + ": "));
-			addOtherForm.addChild("input", new String[] { "type", "name", "size" }, new String[] { "text", "plugin-url", "80" });
-			addOtherForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "checkbox", "refresh-on-startup", "true" });
-			addOtherForm.addChild("#", l10n("refreshOnStartup"));
-			addOtherForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "submit", "submit-other", l10n("Load") });
-		} 
-	}
 }

Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties	2007-10-29 11:26:45 UTC (rev 15641)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties	2007-10-29 11:54:14 UTC (rev 15642)
@@ -710,7 +710,7 @@
 PproxyToadlet.internalIDTitle=Internal ID
 PproxyToadlet.Load=Load
 PproxyToadlet.loadOfficialPlugin=Add an Official Plugin
-PproxyToadlet.loadOfficialPluginText=These plugins are hosted on servers of The Freenet Project. We believe that these plugins are free of privacy leaks though we will not guarantee it. Possible plugin names are: Echo, Freemail, HelloWorld (yes, really), JSTUN, Librarian, MDNSDiscovery, SNMP, TestGallery, UPnP, XMLLibrarian, XMLSpider. Plugin names are case-sensitive.
+PproxyToadlet.loadOfficialPluginText=These plugins are hosted on servers of The Freenet Project. We believe that these plugins are free of privacy leaks though we will not guarantee it.
 PproxyToadlet.loadOfficialPluginLabel=Load Official Plugin
 PproxyToadlet.loadOtherPlugin=Add an Unofficial Plugin
 PproxyToadlet.loadOtherPluginText=Here you can enter the URL of a plugin you want to load. Other plugins than the ones listed above are not even remotely supported or checked for privacy leaks by us, so if you load a remote plugin here, you are basically on your own.




More information about the cvs mailing list