[freenet-cvs] r15191 - in trunk/plugins/Echo/src/plugins/echo: . editor

fred at freenetproject.org fred at freenetproject.org
Sat Sep 15 17:53:01 UTC 2007


Author: fred
Date: 2007-09-15 17:53:01 +0000 (Sat, 15 Sep 2007)
New Revision: 15191

Added:
   trunk/plugins/Echo/src/plugins/echo/editor/
   trunk/plugins/Echo/src/plugins/echo/editor/BlocksPage.java
   trunk/plugins/Echo/src/plugins/echo/editor/CategoriesPage.java
   trunk/plugins/Echo/src/plugins/echo/editor/GeneratePage.java
   trunk/plugins/Echo/src/plugins/echo/editor/HTMLHelper.java
   trunk/plugins/Echo/src/plugins/echo/editor/InsertPage.java
   trunk/plugins/Echo/src/plugins/echo/editor/NodePage.java
   trunk/plugins/Echo/src/plugins/echo/editor/NodesPage.java
   trunk/plugins/Echo/src/plugins/echo/editor/Page.java
   trunk/plugins/Echo/src/plugins/echo/editor/StaticPage.java
Log:
Step 2 : Add the new pages

Added: trunk/plugins/Echo/src/plugins/echo/editor/BlocksPage.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/BlocksPage.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/BlocksPage.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,102 @@
+package plugins.echo.editor;
+
+import plugins.echo.block.Block;
+import plugins.echo.block.BlockManager;
+import plugins.echo.i18n.I18n;
+import freenet.support.api.HTTPRequest;
+
+import nu.xom.Element;
+import nu.xom.Attribute;
+
+import java.io.IOException;
+
+public class BlocksPage extends Page {
+
+	private BlockManager blockManager;
+	private String formPsw;
+
+	public BlocksPage(BlockManager blockManager, String formPassword) {
+
+		super("Blocks");
+		this.blockManager = blockManager;
+		this.formPsw = formPassword;
+	}
+
+	public void handleHTTPRequest(HTTPRequest request) {
+
+		clear();
+
+		if(request.isParameterSet("configure")){
+			appendContent(HTMLHelper.element(null, "strong", "TODO"));
+			return;
+		}
+		
+		if (request.isPartSet("submit")) {
+
+			String[] blocksIds = blockManager.getIds();
+			for(String id : blocksIds) {
+				Block block = blockManager.getBlockById(id);
+				
+				String position = request.getPartAsString("position-" + id, 8);
+				block.setPosition(position);
+				
+				String weight = request.getPartAsString("weight-" + id, 2);
+				block.setWeight(Integer.parseInt(weight));
+				
+				try {
+					blockManager.write(block);
+				} catch (IOException ioe) {
+					appendError(ioe);
+				}		
+			}
+		}
+
+		Element form = HTMLHelper.form("", formPsw);
+		Element table = new Element("table");
+		form.appendChild(table);
+		Element tHeader = new Element("tr");
+		table.appendChild(tHeader);
+		HTMLHelper.i18nElement(tHeader, "th", "echo.common.name");
+		HTMLHelper.i18nElement(tHeader, "th", "echo.common.position");
+		HTMLHelper.i18nElement(tHeader, "th", "echo.common.weight");
+		HTMLHelper.i18nElement(tHeader, "th", "echo.common.action");
+
+		Block[] blocks = blockManager.getBlocks();
+		boolean alternate = false;
+		for(Block b : blocks) {
+			Element row = new Element("tr");
+			if(alternate)
+				row.addAttribute(new Attribute("class", "alternate"));
+			
+			HTMLHelper.element(row, "td", I18n.getString("echo.block." + b.getType().toString()));
+	
+			Element positionSelect = new Element("select");
+			positionSelect.addAttribute(new Attribute("name", "position-" + b.getId()));
+			HTMLHelper.option(positionSelect, "left", "left".equals(b.getPosition()));
+			HTMLHelper.option(positionSelect, "right", "right".equals(b.getPosition()));
+			HTMLHelper.option(positionSelect, "top", "top".equals(b.getPosition()));
+			HTMLHelper.option(positionSelect, "bottom", "bottom".equals(b.getPosition()));
+			HTMLHelper.option(positionSelect, "disabled", "disabled".equals(b.getPosition()));
+			HTMLHelper.element(row, "td", positionSelect);			
+
+			Element weightSelect = new Element("select");
+			weightSelect.addAttribute(new Attribute("name", "weight-" + b.getId()));
+			for(int i=0; i <= 5; i++) 
+				HTMLHelper.option(weightSelect, String.valueOf(i), b.getWeight() == i);
+				
+			HTMLHelper.element(row, "td", weightSelect);
+
+			Element configureCell = HTMLHelper.element(row, "td", "");
+			if(b.isConfigurable())
+				HTMLHelper.link(configureCell, "?configure=" + b.getId(), "configure");
+
+			table.appendChild(row);
+			alternate = !alternate;
+		}
+		HTMLHelper.input(form, "submit", "submit");
+
+		appendContent(form);
+
+	}
+
+}
\ No newline at end of file

Added: trunk/plugins/Echo/src/plugins/echo/editor/CategoriesPage.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/CategoriesPage.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/CategoriesPage.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,107 @@
+package plugins.echo.editor;
+
+import plugins.echo.NodesManager;
+import freenet.support.api.HTTPRequest;
+
+import java.io.IOException;
+
+import nu.xom.Element;
+import nu.xom.Attribute;
+import nu.xom.ParsingException;
+
+public class CategoriesPage extends Page {
+
+	private static final int MAX_CATEGORY_NAME_LENGTH = 100;
+	
+	private NodesManager nodesManager;
+	private String formPsw;
+	
+	public CategoriesPage(NodesManager nodesManager, String formPsw) {
+
+		super("Categories");
+		this.nodesManager = nodesManager;
+		this.formPsw = formPsw;
+		
+		
+	}
+
+	public void handleHTTPRequest(HTTPRequest request) {
+		
+		clear();
+		
+		boolean rename= request.isParameterSet("rename");
+				
+		if(request.isPartSet("submit")) {
+			String name = request.getPartAsString("category-name", MAX_CATEGORY_NAME_LENGTH).trim();
+			String catId = request.getPartAsString("category-id", plugins.echo.Node.CATEGORY_ID_LENGTH);
+			
+			if(! "".equals(name)) {
+				if(! nodesManager.renameCategory(catId, name))
+					nodesManager.newCategory(name);
+				try{
+					nodesManager.writeCategories();
+				} catch (IOException ioe) {
+					appendError(ioe);
+				}
+				
+				rename = false;
+				
+			} else {
+				appendError("Fied \"name\" is empty");
+			}
+		}
+		
+		if(request.isParameterSet("delete")) {
+			try {
+				String cat = request.getParam("delete");
+				if(!nodesManager.deleteCategory(cat))
+					appendError("The category \"" + cat + "\" does not exist.");
+			
+				nodesManager.writeCategories();
+			} catch (ParsingException pe) {
+				appendError(pe);
+			} catch (IOException ioe) {
+				appendError(ioe);			
+			}
+		}
+		
+		if(nodesManager.countCategories() > 0 &&  ! rename) {
+		
+			Element table = new Element("table");
+			Element tHeader = new Element("tr");
+			table.appendChild(tHeader);
+			HTMLHelper.i18nElement(tHeader, "th", "echo.common.name");
+			Element actionCell = HTMLHelper.i18nElement(tHeader, "th", "echo.common.action");
+			actionCell.addAttribute(new Attribute("colspan","2"));
+			
+			String[] ids = nodesManager.getCategoriesIds();
+			boolean alternate = false;
+			for(String id : ids) {
+				Element row = new Element("tr");
+				if(alternate)
+					row.addAttribute(new Attribute("class", "alternate"));
+				
+				HTMLHelper.element(row, "td", nodesManager.getCategoryNameById(id));
+				HTMLHelper.element(row, "td", HTMLHelper.i18nLink("?rename=" + id, "echo.common.rename"));
+				HTMLHelper.element(row, "td", HTMLHelper.i18nLink("?delete=" + id, "echo.common.delete"));
+				
+				table.appendChild(row);
+				alternate = !alternate;
+			}
+						
+			appendContent(table);
+		}
+		
+		
+		Element form = HTMLHelper.form((rename) ? "?rename=" + request.getParam("rename") :"", formPsw);
+		form.addAttribute(new Attribute("class", "inline"));
+		HTMLHelper.i18nLabel(form, "category-name", (rename) ? "echo.common.rename" : "echo.manage.newCategory");
+		Element nameInput = HTMLHelper.input(form, "text", "category-name");
+		if(rename)
+			nameInput.addAttribute(new Attribute("value", nodesManager.getCategoryNameById(request.getParam("rename"))));
+		
+		HTMLHelper.input(form, "submit", "submit");
+						
+		appendContent(form);
+	}
+}
\ No newline at end of file

Added: trunk/plugins/Echo/src/plugins/echo/editor/GeneratePage.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/GeneratePage.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/GeneratePage.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,45 @@
+package plugins.echo.editor;
+
+import plugins.echo.Project;
+import plugins.echo.ProjectManager;
+import plugins.echo.SiteGenerator;
+
+import freenet.support.api.HTTPRequest;
+
+public class GeneratePage extends Page {
+
+	private ProjectManager projectManager;
+	private Project project;
+	private SiteGenerator generator;
+	
+	public GeneratePage(ProjectManager projectManager){
+	
+		super("Generate");
+		this.projectManager = projectManager;
+		
+	}
+
+	public void handleHTTPRequest(HTTPRequest request) {
+
+		clear();
+		project = projectManager.getCurrentProject();
+
+		
+		try {
+			generator = new SiteGenerator(project);
+			generator.generate();
+
+		} catch (Exception e) {
+			appendError(e);
+		}	
+					
+		if(countErrors() == 0) {
+			
+			String path = generator.getOutDir().getAbsolutePath();
+			
+			appendContent("See the result : ");
+			appendContent(HTMLHelper.link("file://" + path, path));
+		}
+	}
+
+}

Added: trunk/plugins/Echo/src/plugins/echo/editor/HTMLHelper.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/HTMLHelper.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/HTMLHelper.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,137 @@
+package plugins.echo.editor;
+
+import plugins.echo.i18n.I18n;
+
+import nu.xom.Node;
+import nu.xom.Element;
+import nu.xom.Attribute;
+import nu.xom.Text;
+
+public class HTMLHelper {
+
+/**
+*
+*	Need to be rewrited !!!
+*
+*/
+
+	public static Element element(Element parent, String name, Node content) {
+		
+		Element e = new Element(name);
+
+		if(content != null)
+			e.appendChild(content);
+		
+		if(parent != null)
+			parent.appendChild(e);
+		
+		return e;
+	}
+
+	public static Element element(Element parent, String name, String content) {
+		
+		return element(parent, name, new Text(content));
+
+	}
+
+	public static Element i18nElement(Element parent, String name, String key) {
+		
+		return element(parent, name, I18n.getString(key));
+
+	}
+
+	public static Element link(Element parent, String href, String text) {
+
+		Element link = new Element("a");
+		link.addAttribute(new Attribute("href", href));
+		link.appendChild(text);
+
+		if(parent != null)
+			parent.appendChild(link);
+
+		return link;
+
+	}
+
+	public static Element link(String href, String text) {
+	
+		return link(null, href, text);
+
+	}
+
+	public static Element i18nLink(Element parent, String href, String key) {
+
+		return link(parent, href, I18n.getString(key));
+
+	}
+
+	public static Element i18nLink(String href, String key) {
+
+		return link(null, href, I18n.getString(key));
+
+	}
+
+	public static Element input(Element parent, String type, String name) {
+
+		Element input = new Element("input");
+		input.addAttribute(new Attribute("type", type));
+		input.addAttribute(new Attribute("name", name));
+		input.addAttribute(new Attribute("id", name));
+
+		if(parent != null)
+			parent.appendChild(input);
+
+		return input;
+	}
+
+	public static Element option(Element parent, String value) {
+		
+		Element option = element(parent, "option", value);
+		option.addAttribute(new Attribute("value",value));
+
+		return option;
+
+	}
+
+	public static Element option(Element parent, String value, boolean selected) {
+		
+		Element option = option(parent, value);
+		if(selected)
+			option.addAttribute(new Attribute("selected", "selected"));
+
+		return option;
+
+	}
+
+	public static Element form(String action, String password) {
+
+		Element form = new Element("form");
+		form.addAttribute(new Attribute("method", "POST"));
+		form.addAttribute(new Attribute("action", action));
+		
+		Element pswInput = input(form, "hidden", "formPassword");
+		pswInput.addAttribute(new Attribute("value", password));
+
+		return form;
+
+	}
+
+	public static Element label(Element parent, String forInput, String text) {
+
+		Element label = new Element("label");
+		label.addAttribute(new Attribute("for", forInput));
+		label.appendChild(text);
+
+		if(parent != null)
+			parent.appendChild(label);
+
+		return label;
+	}
+
+	public static Element i18nLabel(Element parent, String forInput, String key) {
+		
+		return label(parent, forInput, I18n.getString(key));
+		
+	}
+
+} 

Added: trunk/plugins/Echo/src/plugins/echo/editor/InsertPage.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/InsertPage.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/InsertPage.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,119 @@
+package plugins.echo.editor;
+
+import plugins.echo.Project;
+import plugins.echo.ProjectManager;
+import plugins.echo.SiteGenerator;
+import plugins.echo.SimpleDirectoryInserter;
+import freenet.keys.FreenetURI;
+import freenet.support.api.HTTPRequest;
+import freenet.node.fcp.FCPServer;
+
+import java.io.File;
+import java.net.MalformedURLException;
+
+import nu.xom.Element;
+import nu.xom.Attribute;
+
+public class InsertPage extends Page {
+
+	public static final int KEY_INPUT_SIZE = 70;
+	public static final int MAX_KEY_LENGTH = 1024*1024;
+
+	private ProjectManager projectManager;
+	private Project project;
+	private FCPServer fcpServer;
+	private String formPassword;
+	private	FreenetURI insertURI;
+	private FreenetURI requestURI;
+ 
+	public InsertPage(ProjectManager projectManager, FCPServer server, String formPassword){
+	
+		super("Insert");
+		this.formPassword = formPassword;
+		this.projectManager = projectManager;
+		this.fcpServer = server;
+	}
+
+	public void handleHTTPRequest(HTTPRequest request) {
+
+		clear();
+		project = projectManager.getCurrentProject();
+
+		if (request.isPartSet("insert-key")) {
+				
+// 				if(clientPutDir == null || clientPutDir.hasFinished()) {
+					insertURI = null;
+					requestURI = null;
+					
+					try {
+						insertURI = new FreenetURI(request.getPartAsString("insert-key", MAX_KEY_LENGTH));
+					} catch(MalformedURLException mue) {
+						appendError("Invalid insertion key : " + mue.getMessage());
+					}
+					
+					try {
+						requestURI = new FreenetURI(request.getPartAsString("request-key", MAX_KEY_LENGTH));
+					} catch(MalformedURLException mue) {
+						appendError("Invalid request key : " + mue.getMessage());
+					}
+					
+					if(insertURI != null && requestURI != null) {
+					
+						
+						if (! project.getInsertURI().equals(insertURI)){
+							project.setInsertURI(insertURI);
+							
+						}
+						
+						if (! project.getRequestURI().equals(requestURI)) {
+							project.setRequestURI(requestURI);
+							
+						}
+
+						try {
+
+							SiteGenerator generator = new SiteGenerator(project);
+							generator.generate();
+
+							SimpleDirectoryInserter inserter = new SimpleDirectoryInserter(fcpServer);
+							inserter.insert(new File(project.getProjectDir(), "out"), "index.html", insertURI);
+							
+							appendContent(HTMLHelper.link("/queue/", "Go to the queue page."));
+							
+						} catch (Exception e) {
+							appendError(e);
+						}	
+						
+
+					} else 
+						appendContent(insertForm());
+// 				}
+		} else {
+			insertURI = project.getInsertURI();
+			requestURI = project.getRequestURI();
+			appendContent(insertForm());
+		}
+	}
+
+	private Element insertForm() {
+
+		Element form = HTMLHelper.form("", formPassword);
+
+		HTMLHelper.label(form, "insert-key", "Insert key");
+		Element insertKeyInput = HTMLHelper.input(form, "text", "insert-key");
+		insertKeyInput.addAttribute(new Attribute("size", String.valueOf(KEY_INPUT_SIZE)));
+		if(insertURI != null)
+			insertKeyInput.addAttribute(new Attribute("value", insertURI.toString()));
+
+		HTMLHelper.label(form, "request-key", "Request key");
+		Element requestKeyInput = HTMLHelper.input(form, "text", "request-key");
+		requestKeyInput.addAttribute(new Attribute("size", String.valueOf(KEY_INPUT_SIZE)));
+		if(requestURI != null)
+			requestKeyInput.addAttribute(new Attribute("value", requestURI.toString()));
+
+		HTMLHelper.input(form, "submit", "submit");
+
+		return form;
+	}
+
+}

Added: trunk/plugins/Echo/src/plugins/echo/editor/NodePage.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/NodePage.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/NodePage.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,150 @@
+package plugins.echo.editor;
+
+import plugins.echo.Node;
+import plugins.echo.NodesManager;
+import freenet.support.api.HTTPRequest;
+import java.io.File;
+import java.io.IOException;
+import java.io.FileNotFoundException;
+
+import nu.xom.Element;
+import nu.xom.Attribute;
+import nu.xom.ParsingException;
+
+public class NodePage extends Page {
+	
+	
+	private static final int MAX_TITLE_LENGTH = 200;
+	private static final int MAX_BODY_LENGTH = 100000;
+	
+	private NodesManager nodesManager;
+	private final String formPsw;
+	
+	
+	public NodePage(NodesManager nodesManager, String formPassword) {
+
+		super("Node");
+		this.nodesManager = nodesManager;
+		this.formPsw = formPassword;
+
+	}
+
+	public void handleHTTPRequest(HTTPRequest request) {
+
+		clear();
+		Node node = null;		
+		
+		String fileName = (new File(request.getPath())).getName();
+		
+		if("edit".equals(fileName)) {
+
+			String nodeId = request.getParam("node");
+			
+			setTitle("Edit");
+			try {
+
+				node = nodesManager.getNodeById(nodeId);
+				if(node == null) {
+					appendError("The node " + nodeId + "does not exist");
+					return;
+				}
+
+			} catch (IOException ioe) {
+				appendError(ioe);
+				return;
+			} catch (ParsingException pe) {
+				appendError("The node " + nodeId  + " is damaged : " + pe.getMessage());
+				return;
+			}
+				
+		} else if(fileName.equals("newPost")) {
+			setTitle("New Post");
+			node = new Node(nodesManager.getFreeNodeId(), Node.NodeType.POST_NODE);
+			
+		} else if(fileName.equals("newPage")) {
+			setTitle("New Page");
+			node = new Node(nodesManager.getFreeNodeId(), Node.NodeType.STATIC_PAGE_NODE);
+		}
+
+		if(request.isPartSet("edit-title") && request.isPartSet("body")) {
+			String title = request.getPartAsString("edit-title", MAX_TITLE_LENGTH).trim();
+			String body = request.getPartAsString("body", MAX_BODY_LENGTH).trim();
+			
+			if("".equals(title))
+				appendError("Field \"title\" is empty");
+
+			if("".equals(body)) 
+				appendError("Field \"body\" is empty");
+
+			node.setTitle(title);
+			node.setBody(body);
+			
+			String[] cats = nodesManager.getCategoriesIds();
+			for(String cat : cats)
+				node.setCategory(cat, request.isPartSet("category-" + cat));
+				
+			if(countErrors() == 0) {
+				
+				try {
+
+					nodesManager.writeNode(node);
+					
+				} catch (FileNotFoundException fnfe) {
+					appendError(fnfe);
+				} catch (IOException ioe) {
+					appendError("Cannot write node " + node.getId() + " : " + ioe.getMessage());
+				} catch (Exception e) {
+					appendError(e);
+				}
+				
+				appendContent("Saved");
+				return;
+			}
+
+		}
+		
+		Element form = HTMLHelper.form("", formPsw);
+
+		HTMLHelper.i18nLabel(form, "edit-title", "echo.common.title");
+		Element titleInput = HTMLHelper.input(form, "text", "edit-title");
+		titleInput.addAttribute(new Attribute("size", "100"));
+		titleInput.addAttribute(new Attribute("value", node.getTitle()));
+
+		HTMLHelper.i18nLabel(form, "edit-body", "echo.write.nodeBody");
+
+		Element textarea = new Element("textarea");
+		textarea.addAttribute(new Attribute("id", "edit-body"));
+		textarea.addAttribute(new Attribute("name", "body"));
+		textarea.addAttribute(new Attribute("cols", "100"));
+		textarea.addAttribute(new Attribute("rows", "50"));
+		textarea.appendChild((node.getBody().equals("")) ? " " : node.getBody());
+		form.appendChild(textarea);
+
+		if(nodesManager.countCategories() != 0) {
+
+			Element fieldset = new Element("fieldset");
+			form.appendChild(fieldset);
+			HTMLHelper.i18nElement(fieldset, "legend", "echo.common.categories");
+
+			String[] ids = nodesManager.getCategoriesIds();
+			for(String id : ids) {
+				Element checkbox = HTMLHelper.input(fieldset, "checkbox", "category-" + id);
+				checkbox.addAttribute(new Attribute("class", "inline"));
+
+				if(node.isInCategory(id))
+					checkbox.addAttribute(new Attribute("checked", "checked"));
+
+				HTMLHelper.label(fieldset, "category-" + id, nodesManager.getCategoryNameById(id));
+			}
+
+		}
+
+		HTMLHelper.input(form, "submit", "submit");
+
+		appendContent(form);
+		
+	}
+
+
+
+}

Added: trunk/plugins/Echo/src/plugins/echo/editor/NodesPage.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/NodesPage.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/NodesPage.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,84 @@
+package plugins.echo.editor;
+
+import plugins.echo.Node;
+import plugins.echo.Nodes;
+import plugins.echo.NodesManager;
+import freenet.support.api.HTTPRequest;
+
+import nu.xom.Element;
+import nu.xom.Attribute;
+
+import java.io.IOException;
+
+public class NodesPage extends Page {
+
+	private NodesManager nodesManager;
+
+	public NodesPage(NodesManager nodesManager){
+	
+		super("My Nodes");
+		this.nodesManager = nodesManager;
+
+	}
+
+	public void handleHTTPRequest(HTTPRequest req) {
+
+		clear();
+		
+		if(req.isParameterSet("delete")) {
+			String id = req.getParam("delete");
+			if(nodesManager.nodeExists(id))
+				try {
+					nodesManager.deleteNode(id);
+				} catch(IOException ioe) {
+					appendError("Unable to delete the node " + id + " : " + ioe.getMessage());
+				}
+			else
+				appendError("The node " + id + "does not exist");
+		}
+		
+		if(nodesManager.size() == 0) {
+			appendContent("You don't have any node, ");
+			appendContent(HTMLHelper.link("write","create a new one"));
+		} else {
+			
+			try {
+				Nodes nodes = nodesManager.getNodes();
+				Element table = new Element("table");
+				Element tHeader = new Element("tr");
+				table.appendChild(tHeader);
+				HTMLHelper.element(tHeader, "th", "Id");
+				HTMLHelper.i18nElement(tHeader, "th", "echo.common.date");
+				HTMLHelper.i18nElement(tHeader, "th", "echo.common.title");
+				HTMLHelper.i18nElement(tHeader, "th", "echo.common.nodeType");
+				Element action = HTMLHelper.i18nElement(tHeader, "th", "echo.common.action");
+				action.addAttribute(new Attribute("colspan", "2"));
+				
+				boolean altern = false;
+				for(Node n : nodes) {
+	
+					Element row = new Element("tr");
+					if(altern)
+						row.addAttribute(new Attribute("class", "alternate"));
+
+					HTMLHelper.element(row, "td", n.getId());
+					HTMLHelper.element(row, "td", n.getCreationDate().toString());
+					HTMLHelper.element(row, "td", n.getTitle());
+					HTMLHelper.element(row, "td", "type");	// TODO
+					HTMLHelper.element(row, "td", HTMLHelper.i18nLink("edit?node=" + n.getId(), "echo.common.edit"));
+					HTMLHelper.element(row, "td", HTMLHelper.i18nLink("?delete=" + n.getId(), "echo.common.delete"));
+
+					table.appendChild(row);
+					altern = !altern;
+	
+				}
+
+				appendContent(table);
+
+			} catch (Exception e) {
+				appendError(e);
+			}
+		}
+
+	}
+}

Added: trunk/plugins/Echo/src/plugins/echo/editor/Page.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/Page.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/Page.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,99 @@
+package plugins.echo.editor;
+
+import freenet.support.api.HTTPRequest;
+
+import java.util.List;
+import java.util.Vector;
+
+import nu.xom.Node;
+import nu.xom.Element;
+import nu.xom.Attribute;
+
+public abstract class Page {
+
+	private Element content;
+	private String title;
+	private List<String> errors;
+
+	protected Page() {
+
+		content = new Element("content");
+		errors = new Vector<String>();
+
+	}
+
+	protected Page(String title) {
+
+		this();
+		setTitle(title);
+
+	}
+
+	public abstract void handleHTTPRequest(HTTPRequest request);
+
+	protected void appendContent(Node n) {
+
+		content.appendChild(n);
+
+	}
+
+	protected void appendContent(String text) {
+
+		content.appendChild(text);
+
+	}
+
+	protected void appendError(String desc) {
+		
+		errors.add(desc);
+
+	}
+
+	protected void appendError(Throwable t){
+
+		errors.add(t.toString());
+
+	}
+
+	public int countErrors() {
+
+		return errors.size();
+
+	}
+
+	protected void setTitle(String title) {
+
+		this.title = title;
+
+	}
+
+	protected void clear() {
+
+		content.removeChildren();
+		errors.clear();
+
+	}
+
+	public Element toXML() {
+
+		content.detach();
+
+		Element page = new Element("page");
+		page.addAttribute(new Attribute("title", title));
+		page.appendChild(content);
+		
+		if(errors.size() != 0) {
+			Element errorsElement = new Element("errors");
+			for(String desc : errors) {
+				Element error = new Element("error");
+				error.appendChild(desc);
+				errorsElement.appendChild(error);
+			}
+
+			page.appendChild(errorsElement);
+		}
+
+		return page;
+	}
+
+} 

Added: trunk/plugins/Echo/src/plugins/echo/editor/StaticPage.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/editor/StaticPage.java	                        (rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/editor/StaticPage.java	2007-09-15 17:53:01 UTC (rev 15191)
@@ -0,0 +1,39 @@
+package plugins.echo.editor;
+
+import plugins.echo.i18n.I18n;
+import freenet.support.api.HTTPRequest;
+
+import nu.xom.Builder;
+import nu.xom.Document;
+
+public class StaticPage extends Page {
+
+	protected StaticPage() {
+		
+		super();
+
+	}
+
+	public static StaticPage createFromContentFile(String title, String fileName) {
+
+		StaticPage page = new StaticPage();
+		page.setTitle(title);
+		
+		try {
+			Builder parser = new Builder();
+			Document doc = parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/" + fileName);
+			I18n.translateXML(doc);
+			page.appendContent(doc.getRootElement().copy());
+
+		} catch (Exception e) {
+			page.appendError(e);
+		}
+
+		return page;
+
+	}
+
+	public void handleHTTPRequest(HTTPRequest request) {	}
+
+}
+ 




More information about the cvs mailing list