Author: fred
Date: 2007-07-08 19:44:10 +0000 (Sun, 08 Jul 2007)
New Revision: 13997
Added:
trunk/plugins/Echo/src/plugins/
trunk/plugins/Echo/src/plugins/echo/
trunk/plugins/Echo/src/plugins/echo/Echo.java
trunk/plugins/Echo/src/plugins/echo/Node.java
trunk/plugins/Echo/src/plugins/echo/NodesManager.java
trunk/plugins/Echo/src/plugins/echo/Page.java
trunk/plugins/Echo/src/plugins/echo/Test.java
trunk/plugins/Echo/src/plugins/echo/TextRender.java
Removed:
trunk/plugins/Echo/src/Echo.java
trunk/plugins/Echo/src/Node.java
trunk/plugins/Echo/src/NodesManager.java
trunk/plugins/Echo/src/Page.java
trunk/plugins/Echo/src/Test.java
trunk/plugins/Echo/src/TextRender.java
Log:
move src/*.java src/plugins/echo/
Deleted: trunk/plugins/Echo/src/Echo.java
===================================================================
--- trunk/plugins/Echo/src/Echo.java 2007-07-08 19:07:41 UTC (rev 13996)
+++ trunk/plugins/Echo/src/Echo.java 2007-07-08 19:44:10 UTC (rev 13997)
@@ -1,268 +0,0 @@
-package plugins.echo;
-
-import freenet.pluginmanager.FredPlugin;
-import freenet.pluginmanager.FredPluginHTTP;
-import freenet.pluginmanager.FredPluginHTTPAdvanced;
-import freenet.pluginmanager.FredPluginThreadless;
-import freenet.pluginmanager.PluginRespirator;
-import freenet.pluginmanager.PluginHTTPException;
-
-import freenet.pluginmanager.DownloadPluginHTTPException;
-
-import freenet.support.api.HTTPRequest;
-import freenet.support.HTMLNode;
-
-import nu.xom.Builder;
-import nu.xom.Document;
-import nu.xom.Element;
-import nu.xom.Attribute;
-import nu.xom.Serializer;
-import nu.xom.xslt.XSLTransform;
-
-import nu.xom.ParsingException;
-import nu.xom.xslt.XSLException;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.ByteArrayOutputStream;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-// TODO
-// * Exceptions !
-
-
-public class Echo implements FredPlugin, FredPluginHTTP,
FredPluginHTTPAdvanced, FredPluginThreadless {
-
- private static final int MAX_TITLE_LENGTH = 200;
- private static final int MAX_BODY_LENGTH = 100000;
- private static final int MAX_ID_LENGTH = 4;
-
- private static final String PATH_PREFIX = "plugins/Echo/";
- private static final File NODES_DIR = new File(PATH_PREFIX + "nodes");
-
- private PluginRespirator respirator;
- private Builder parser;
- private XSLTransform transform;
- private Page page;
- private NodesManager nodesManager;
- private Node node;
-
- public Echo() throws PluginHTTPException
- {
- try {
- // suxx
- NODES_DIR.mkdirs();
-
- parser = new Builder();
- Document styleSheet =
parser.build(getClass().getResourceAsStream("/xml/edit.xsl"));
-// Document styleSheet =
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/edit.xsl");
- transform = new XSLTransform(styleSheet);
- transform.setParameter("contextprefix",
NODES_DIR.getAbsolutePath() + "/");
-
- nodesManager = new NodesManager(NODES_DIR);
-
- } catch (IOException ioe) {
//
- throw new PluginHTTPException("Cannot open the style
sheet", ""); //
- } catch (ParsingException pe) {
// Useless ?
- throw new PluginHTTPException("Cannot parse the style
sheet", ""); //
- } catch (XSLException xe) {
//
- throw new PluginHTTPException("Cannot build the XSL
transformer", ""); //
- }
-
- }
-
- public void runPlugin(PluginRespirator p) {
- this.respirator = p;
- }
-
- public void terminate() {
- // TODO
- // Bleh
- }
-
- private String transform(Page page) {
- try {
- ByteArrayOutputStream baos = new
ByteArrayOutputStream();
- Serializer serializer = new Serializer(baos);
- serializer.setIndent(4);
- serializer.setMaxLength(128);
- serializer.write(new Document((Element)
transform.transform(page.getDoc()).get(0)));
-
- return baos.toString();
- } catch (Exception e) {
- return e.getMessage();
- }
- }
-
- public String handleHTTPGet(HTTPRequest request) throws
PluginHTTPException {
-
- String fileName = (new File(request.getPath())).getName();
- String nodeId = request.getParam("node");
-
- if ("edit.css".equals(fileName) ||
"echo-logo-small-0.1.png".equals(fileName)) {
-
- try {
- InputStream in =
getClass().getResourceAsStream("/" + fileName);
-// InputStream in = new
FileInputStream("/home/fred/prog/soc/trunk/plugins/Echo/src/test/" + fileName);
-
- int read;
- int off = 0;
- byte[] buffer = new byte[in.available()];
- while((read = in.read(buffer, off,
in.available())) != 0) {
- off+=read;
- }
-
- throw new DownloadPluginHTTPException(buffer,
fileName, ("edit.css".equals(fileName)) ? "text/css" : "image/png");
- } catch (IOException ioe) {
- return ioe.getMessage();
- }
-
- } else if ("new".equals(fileName) || ("edit".equals(fileName)
&& ! "".equals(nodeId))) {
-
- page = new Page();
-
- Element formPassword = new Element("formpassword");
- formPassword.addAttribute(new Attribute("value",
respirator.getNode().clientCore.formPassword));
- page.appendData(formPassword);
-
- if("edit".equals(fileName)) {
-
- page.setTitle("Edit");
- try {
-
- node = nodesManager.getNodeById(nodeId);
- page.appendData(node.getRoot());
-
- } catch (NullPointerException npe) {
- page.appendError("The node " + nodeId +
"does not exist");
- } catch (IOException ioe) {
- page.appendError(ioe.getMessage());
- } catch (ParsingException pe) {
- page.appendError("The node " + nodeId
+ " is damaged : " + pe.getMessage());
- }
-
- } else {
- page.setTitle("New node");
- node = nodesManager.newNode();
- page.appendData(node.getRoot());
- }
-
- } else if ("del".equals(fileName) && ! "".equals(nodeId)) {
-
- page = new Page();
- page.setTitle("Delete");
-
- Element del = new Element("delete");
- del.addAttribute(new Attribute("id", nodeId));
- page.appendData(del);
-
- Element formPassword = new Element("formpassword");
- formPassword.addAttribute(new Attribute("value",
respirator.getNode().clientCore.formPassword));
- page.appendData(formPassword);
- } else if ("generate".equals(fileName)) {
-
- page = new Page();
- page.setTitle("Generated");
-
- try {
- Test test = new Test();
- test.generate();
-
- Element gen = new Element("generated");
- gen.addAttribute(new Attribute("outputdir",(new
File(PATH_PREFIX + "out/")).getAbsolutePath() + "/"));
- page.appendData(gen);
-
- } catch (Exception e) {
- page.appendError(e.getMessage());
- }
-
- } else {
- setDefaultPage();
- }
-
- return transform(page);
-
- }
-
- public String handleHTTPPut(HTTPRequest request) throws
PluginHTTPException {
- return "Put";
- }
-
- public String handleHTTPPost(HTTPRequest request) throws
PluginHTTPException {
- try {
- String passwd = request.getPartAsString("formPassword",
32);
- if((passwd == null) ||
!passwd.equals(respirator.getNode().clientCore.formPassword))
- return "Wrong Password !!";
-
- page = new Page();
-
- if(request.isPartSet("confirmdelete") ||
request.isPartSet("cancel")) {
- try {
- if(request.isPartSet("confirmdelete"))
-
nodesManager.deleteNode(request.getPartAsString("node-id", MAX_ID_LENGTH));
-
- } catch (NullPointerException npe) {
- // Va foutre
- }
-
- setDefaultPage();
-
- } else {
-
- String title = request.getPartAsString("title",
MAX_TITLE_LENGTH).trim();
- String body = request.getPartAsString("body",
MAX_BODY_LENGTH).trim();
-
- if("".equals(title))
- page.appendError("Field \"title\" is
empty");
-
- if("".equals(body))
- page.appendError("Field \"body\" is
empty");
-
- node.setTitle(title);
- node.setBody(body);
-
- if(page.countErrors() == 0) {
- page = new Page();
- page.setTitle("My nodes");
-
- try {
-
- nodesManager.writeNode(node);
-
page.appendData(nodesManager.getXMLNodesList());
-
- } catch (FileNotFoundException fnfe) {
- page.appendError("fnfe" +
fnfe.getMessage());
- } catch (IOException ioe) {
- page.appendError("Cannot write
node " + node.getId() + " : " + ioe.getMessage());
- } catch (Exception e) {
-
page.appendError(e.getMessage());
- }
- } else {
-
- page.setTitle("Edit");
-
- Element formPassword = new
Element("formpassword");
- formPassword.addAttribute(new
Attribute("value", respirator.getNode().clientCore.formPassword));
- page.appendData(formPassword);
- page.appendData(node.getRoot());
- }
- }
- } catch (Exception e) {
- return e.getMessage();
- }
-
- return transform(page);
-
- }
-
-
- private void setDefaultPage() {
- page = new Page();
- page.setTitle("My nodes");
- page.appendData(nodesManager.getXMLNodesList());
- }
-
-}
\ No newline at end of file
Deleted: trunk/plugins/Echo/src/Node.java
===================================================================
--- trunk/plugins/Echo/src/Node.java 2007-07-08 19:07:41 UTC (rev 13996)
+++ trunk/plugins/Echo/src/Node.java 2007-07-08 19:44:10 UTC (rev 13997)
@@ -1,104 +0,0 @@
-package plugins.echo;
-
-import nu.xom.Document;
-import nu.xom.Element;
-import nu.xom.Attribute;
-import nu.xom.Serializer;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-public class Node {
-
- private String id;
- private Document doc = null;
- private Element nodeElement = null;
- private Element titleElement = null;
- private Element contentElement = null;
-
- public Node (String nodeId) {
-
- this.id = nodeId;
-
- nodeElement = new Element("node");
- nodeElement.addAttribute(new Attribute("id", id));
-
- titleElement = new Element("title");
- nodeElement.appendChild(titleElement);
-
- contentElement = new Element("content");
- nodeElement.appendChild(contentElement);
-
- doc = new Document(nodeElement);
-
- }
-
- protected Node (Document document) {
-
- this.doc = document;
-
- }
-
- private Element getTitleElement() {
- if(titleElement == null)
- titleElement = (Element)
doc.query("/node/title").get(0);
-
- return titleElement;
- }
-
- public String getTitle() {
-
- return getTitleElement().getValue();
- }
-
- public void setTitle(String str){
- Element title = getTitleElement();
- title.removeChildren();
- title.appendChild(str);
- }
-
- private Element getContentElement() {
- if(contentElement == null)
- contentElement = (Element)
doc.query("/node/content").get(0);
-
- return contentElement;
- }
-
- public String getBody() {
- return getContentElement().getValue();
- }
-
- public void setBody(String str) {
- Element content = getContentElement();
- content.removeChildren();
- content.appendChild(str);
- }
-
- public String getId() {
- if(id == null)
- id = ((Attribute)
doc.query("/node/@id").get(0)).getValue();
- return id;
- }
-
- // FIXME: delete
- public void write(OutputStream out) throws IOException{
-
- Serializer serializer = new Serializer(out);
- serializer.setIndent(4);
- serializer.setMaxLength(128);
-
- serializer.write(doc);
- }
-
- protected Document getDoc() {
- return doc;
- }
-
- public Element getRoot() {
-
- return (Element) getDoc().getRootElement().copy();
-
- }
-
-}
Deleted: trunk/plugins/Echo/src/NodesManager.java
===================================================================
--- trunk/plugins/Echo/src/NodesManager.java 2007-07-08 19:07:41 UTC (rev
13996)
+++ trunk/plugins/Echo/src/NodesManager.java 2007-07-08 19:44:10 UTC (rev
13997)
@@ -1,113 +0,0 @@
-package plugins.echo;
-
-import nu.xom.Builder;
-import nu.xom.Element;
-import nu.xom.Attribute;
-import nu.xom.Serializer;
-import nu.xom.ParsingException;
-
-import java.util.HashMap;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-
-
-public class NodesManager {
-
- private File nodesDir;
- private HashMap<String, File> nodes;
- private Builder parser;
-
- public NodesManager(File nodesDirectory) {
-
- nodesDir = nodesDirectory;
- nodes = new HashMap<String, File> ();
- parser = new Builder();
-
- File[] files = nodesDirectory.listFiles();
- for(File f : files) {
- if(f.getName().matches("[0-9]{4}.xml"))
- nodes.put(f.getName().substring(0,4), f);
- }
- }
-
- public Node getNodeById(String nodeId) throws IOException,
ParsingException {
-
- File file = nodes.get(nodeId);
- return new Node(parser.build(file));
-
- }
-
- // TODO
- public Node newNode() {
-
- String id = "";
- for(int i=1; i < 10000; i++) {
- id = String.valueOf(i);
- while(id.length() < 4)
- id = "0" + id;
-
- if(!nodes.containsKey(id))
- break;
- }
-
- return new Node(id);
-
- }
-
-
- public boolean nodeExists(String nodeId) {
-
- return nodes.containsKey(nodeId);
-
- }
-
- public void deleteNode(String nodeId) throws IOException {
-
- File file = nodes.get(nodeId);
- if(!file.delete()) {
- throw new IOException(file.getPath() + " cannot be
deleted");
- }
-
- nodes.remove(nodeId);
- }
-
- public void writeNode(Node node) throws FileNotFoundException,
IOException{
-
- File file;
- String nodeId = node.getId();
-
- if(!nodeExists(nodeId)) {
- file = new File (nodesDir.getPath() + File.separator +
nodeId + ".xml");
- nodes.put(nodeId, file);
- } else {
- file = nodes.get(nodeId);
- }
-
- Serializer serializer = new Serializer(new
FileOutputStream(file));
- serializer.setIndent(4);
- serializer.setMaxLength(128);
- serializer.write(node.getDoc());
-
- }
-
- public String[] getIds() {
-
- return nodes.keySet().toArray(new String[]{});
-
- }
-
- public Element getXMLNodesList() {
-
- String[] ids = this.getIds();
- Element nodesElement = new Element("nodes");
-
- for(String id : ids) {
- Element node = new Element("node");
- node.addAttribute(new Attribute("id", id));
- nodesElement.appendChild(node);
- }
- return nodesElement;
- }
-}
Deleted: trunk/plugins/Echo/src/Page.java
===================================================================
--- trunk/plugins/Echo/src/Page.java 2007-07-08 19:07:41 UTC (rev 13996)
+++ trunk/plugins/Echo/src/Page.java 2007-07-08 19:44:10 UTC (rev 13997)
@@ -1,68 +0,0 @@
-package plugins.echo;
-
-import nu.xom.Document;
-import nu.xom.Node;
-import nu.xom.Nodes;
-import nu.xom.Element;
-
-import java.util.Vector;
-
-public class Page {
-
- private String title = null;
- private nu.xom.Nodes data;
- private Vector<String> errors;
-
- public Page() {
- data = new nu.xom.Nodes();
- errors = new Vector<String> ();
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public void setData(nu.xom.Nodes data) {
- this.data = data;
- }
-
- public void appendData(nu.xom.Node data) {
- this.data.append(data);
- }
-
- public void appendError(String desc) {
- errors.add(desc);
- }
-
- public Document getDoc() {
- Element page = new Element("page");
-
- Element titleElement = new Element("title");
- titleElement.appendChild(title);
- page.appendChild(titleElement);
-
- if(errors.size() != 0) {
- Element errorsElement = new Element("errors");
- for(String e : errors) {
- Element error = new Element("error");
- error.appendChild(e);
- errorsElement.appendChild(error);
- }
-
- page.appendChild(errorsElement);
- }
-
- Element dataElement = new Element("data");
- for(int i=0; i < data.size(); i++)
- dataElement.appendChild(data.get(i));
-
- page.appendChild(dataElement);
-
- return new Document(page);
-
- }
-
- public int countErrors() {
- return errors.size();
- }
-}
Deleted: trunk/plugins/Echo/src/Test.java
===================================================================
--- trunk/plugins/Echo/src/Test.java 2007-07-08 19:07:41 UTC (rev 13996)
+++ trunk/plugins/Echo/src/Test.java 2007-07-08 19:44:10 UTC (rev 13997)
@@ -1,60 +0,0 @@
-package plugins.echo;
-
-import nu.xom.*;
-import nu.xom.xslt.*;
-
-import java.io.*;
-
-public class Test{
-
- private static final String PATH_PREFIX = "plugins/Echo/";
-
- public void generate() throws Exception{
-
- File nodeDir = new File(PATH_PREFIX + "nodes" + File.separator);
- File outDir = new File(PATH_PREFIX + "out" + File.separator);
- outDir.mkdirs();
-
- NodesManager nodesManager = new NodesManager(nodeDir);
-
- Builder parser = new Builder();
- Document styleSheet =
parser.build(getClass().getResourceAsStream("/xml/test.xsl"));
-// Document styleSheet =
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/test.xsl");
- XSLTransform transform = new XSLTransform(styleSheet);
- transform.setParameter("contextprefix", (new
File(PATH_PREFIX)).getAbsolutePath() + "/");
-
- Serializer serializer = new Serializer(System.out);
- serializer.setIndent(4);
- serializer.setMaxLength(128);
-
- TextRender render = new TextRender();
-
- String[] ids = nodesManager.getIds();
- for(String id : ids) {
-
- System.out.println(id);
-
- Element root = nodesManager.getNodeById(id).getRoot();
- Element content = (Element)
root.query("./content").get(0);
- Text contentText = (Text) content.getChild(0);
-
- Nodes result = render.render(contentText.toXML());
-
- contentText.detach();
- for (int i=0; i < result.size(); i++) {
- content.appendChild(result.get(i));
- }
-
- Nodes t = transform.transform(new Document(root));
- serializer.setOutputStream(new
FileOutputStream(outDir.getPath() + File.separator + id + ".html"));
- serializer.write(new Document((Element) t.get(0)));
-
- }
-
-
- }
-// public static void main(String args[]){
-// Test test = new Test();
-// test.generate();
-// }
-}
\ No newline at end of file
Deleted: trunk/plugins/Echo/src/TextRender.java
===================================================================
--- trunk/plugins/Echo/src/TextRender.java 2007-07-08 19:07:41 UTC (rev
13996)
+++ trunk/plugins/Echo/src/TextRender.java 2007-07-08 19:44:10 UTC (rev
13997)
@@ -1,43 +0,0 @@
-package plugins.echo;
-
-import org.radeox.api.engine.context.RenderContext;
-import org.radeox.engine.context.BaseRenderContext;
-import org.radeox.api.engine.RenderEngine;
-import org.radeox.engine.BaseRenderEngine;
-
-import nu.xom.Builder;
-import nu.xom.Element;
-import nu.xom.Node;
-import nu.xom.Nodes;
-import nu.xom.ParsingException;
-
-import java.io.IOException;
-
-public class TextRender {
-
- private RenderContext renderContext;
- private RenderEngine engine;
-
- public TextRender() {
- renderContext = new BaseRenderContext();
- engine = new BaseRenderEngine();
- }
-
- public Nodes render(String text) throws ParsingException, IOException {
-
- String result = engine.render(text, renderContext);
- Builder parser = new Builder();
- // FIXME : bug ?
- Element renderedContent = parser.build("<rendered>" + result +
"</rendered>", null).getRootElement();
-
- Nodes nodes = new Nodes();
- while (renderedContent.getChildCount() != 0) {
- Node node = renderedContent.getChild(0);
- node.detach();
- nodes.append(node);
- }
-
- return nodes;
- }
-
-}
\ No newline at end of file
Copied: trunk/plugins/Echo/src/plugins/echo/Echo.java (from rev 13995,
trunk/plugins/Echo/src/Echo.java)
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Echo.java
(rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/Echo.java 2007-07-08 19:44:10 UTC
(rev 13997)
@@ -0,0 +1,268 @@
+package plugins.echo;
+
+import freenet.pluginmanager.FredPlugin;
+import freenet.pluginmanager.FredPluginHTTP;
+import freenet.pluginmanager.FredPluginHTTPAdvanced;
+import freenet.pluginmanager.FredPluginThreadless;
+import freenet.pluginmanager.PluginRespirator;
+import freenet.pluginmanager.PluginHTTPException;
+
+import freenet.pluginmanager.DownloadPluginHTTPException;
+
+import freenet.support.api.HTTPRequest;
+import freenet.support.HTMLNode;
+
+import nu.xom.Builder;
+import nu.xom.Document;
+import nu.xom.Element;
+import nu.xom.Attribute;
+import nu.xom.Serializer;
+import nu.xom.xslt.XSLTransform;
+
+import nu.xom.ParsingException;
+import nu.xom.xslt.XSLException;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.ByteArrayOutputStream;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+// TODO
+// * Exceptions !
+
+
+public class Echo implements FredPlugin, FredPluginHTTP,
FredPluginHTTPAdvanced, FredPluginThreadless {
+
+ private static final int MAX_TITLE_LENGTH = 200;
+ private static final int MAX_BODY_LENGTH = 100000;
+ private static final int MAX_ID_LENGTH = 4;
+
+ private static final String PATH_PREFIX = "plugins/Echo/";
+ private static final File NODES_DIR = new File(PATH_PREFIX + "nodes");
+
+ private PluginRespirator respirator;
+ private Builder parser;
+ private XSLTransform transform;
+ private Page page;
+ private NodesManager nodesManager;
+ private Node node;
+
+ public Echo() throws PluginHTTPException
+ {
+ try {
+ // suxx
+ NODES_DIR.mkdirs();
+
+ parser = new Builder();
+ Document styleSheet =
parser.build(getClass().getResourceAsStream("/xml/edit.xsl"));
+// Document styleSheet =
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/edit.xsl");
+ transform = new XSLTransform(styleSheet);
+ transform.setParameter("contextprefix",
NODES_DIR.getAbsolutePath() + "/");
+
+ nodesManager = new NodesManager(NODES_DIR);
+
+ } catch (IOException ioe) {
//
+ throw new PluginHTTPException("Cannot open the style
sheet", ""); //
+ } catch (ParsingException pe) {
// Useless ?
+ throw new PluginHTTPException("Cannot parse the style
sheet", ""); //
+ } catch (XSLException xe) {
//
+ throw new PluginHTTPException("Cannot build the XSL
transformer", ""); //
+ }
+
+ }
+
+ public void runPlugin(PluginRespirator p) {
+ this.respirator = p;
+ }
+
+ public void terminate() {
+ // TODO
+ // Bleh
+ }
+
+ private String transform(Page page) {
+ try {
+ ByteArrayOutputStream baos = new
ByteArrayOutputStream();
+ Serializer serializer = new Serializer(baos);
+ serializer.setIndent(4);
+ serializer.setMaxLength(128);
+ serializer.write(new Document((Element)
transform.transform(page.getDoc()).get(0)));
+
+ return baos.toString();
+ } catch (Exception e) {
+ return e.getMessage();
+ }
+ }
+
+ public String handleHTTPGet(HTTPRequest request) throws
PluginHTTPException {
+
+ String fileName = (new File(request.getPath())).getName();
+ String nodeId = request.getParam("node");
+
+ if ("edit.css".equals(fileName) ||
"echo-logo-small-0.1.png".equals(fileName)) {
+
+ try {
+ InputStream in =
getClass().getResourceAsStream("/" + fileName);
+// InputStream in = new
FileInputStream("/home/fred/prog/soc/trunk/plugins/Echo/src/test/" + fileName);
+
+ int read;
+ int off = 0;
+ byte[] buffer = new byte[in.available()];
+ while((read = in.read(buffer, off,
in.available())) != 0) {
+ off+=read;
+ }
+
+ throw new DownloadPluginHTTPException(buffer,
fileName, ("edit.css".equals(fileName)) ? "text/css" : "image/png");
+ } catch (IOException ioe) {
+ return ioe.getMessage();
+ }
+
+ } else if ("new".equals(fileName) || ("edit".equals(fileName)
&& ! "".equals(nodeId))) {
+
+ page = new Page();
+
+ Element formPassword = new Element("formpassword");
+ formPassword.addAttribute(new Attribute("value",
respirator.getNode().clientCore.formPassword));
+ page.appendData(formPassword);
+
+ if("edit".equals(fileName)) {
+
+ page.setTitle("Edit");
+ try {
+
+ node = nodesManager.getNodeById(nodeId);
+ page.appendData(node.getRoot());
+
+ } catch (NullPointerException npe) {
+ page.appendError("The node " + nodeId +
"does not exist");
+ } catch (IOException ioe) {
+ page.appendError(ioe.getMessage());
+ } catch (ParsingException pe) {
+ page.appendError("The node " + nodeId
+ " is damaged : " + pe.getMessage());
+ }
+
+ } else {
+ page.setTitle("New node");
+ node = nodesManager.newNode();
+ page.appendData(node.getRoot());
+ }
+
+ } else if ("del".equals(fileName) && ! "".equals(nodeId)) {
+
+ page = new Page();
+ page.setTitle("Delete");
+
+ Element del = new Element("delete");
+ del.addAttribute(new Attribute("id", nodeId));
+ page.appendData(del);
+
+ Element formPassword = new Element("formpassword");
+ formPassword.addAttribute(new Attribute("value",
respirator.getNode().clientCore.formPassword));
+ page.appendData(formPassword);
+ } else if ("generate".equals(fileName)) {
+
+ page = new Page();
+ page.setTitle("Generated");
+
+ try {
+ Test test = new Test();
+ test.generate();
+
+ Element gen = new Element("generated");
+ gen.addAttribute(new Attribute("outputdir",(new
File(PATH_PREFIX + "out/")).getAbsolutePath() + "/"));
+ page.appendData(gen);
+
+ } catch (Exception e) {
+ page.appendError(e.getMessage());
+ }
+
+ } else {
+ setDefaultPage();
+ }
+
+ return transform(page);
+
+ }
+
+ public String handleHTTPPut(HTTPRequest request) throws
PluginHTTPException {
+ return "Put";
+ }
+
+ public String handleHTTPPost(HTTPRequest request) throws
PluginHTTPException {
+ try {
+ String passwd = request.getPartAsString("formPassword",
32);
+ if((passwd == null) ||
!passwd.equals(respirator.getNode().clientCore.formPassword))
+ return "Wrong Password !!";
+
+ page = new Page();
+
+ if(request.isPartSet("confirmdelete") ||
request.isPartSet("cancel")) {
+ try {
+ if(request.isPartSet("confirmdelete"))
+
nodesManager.deleteNode(request.getPartAsString("node-id", MAX_ID_LENGTH));
+
+ } catch (NullPointerException npe) {
+ // Va foutre
+ }
+
+ setDefaultPage();
+
+ } else {
+
+ String title = request.getPartAsString("title",
MAX_TITLE_LENGTH).trim();
+ String body = request.getPartAsString("body",
MAX_BODY_LENGTH).trim();
+
+ if("".equals(title))
+ page.appendError("Field \"title\" is
empty");
+
+ if("".equals(body))
+ page.appendError("Field \"body\" is
empty");
+
+ node.setTitle(title);
+ node.setBody(body);
+
+ if(page.countErrors() == 0) {
+ page = new Page();
+ page.setTitle("My nodes");
+
+ try {
+
+ nodesManager.writeNode(node);
+
page.appendData(nodesManager.getXMLNodesList());
+
+ } catch (FileNotFoundException fnfe) {
+ page.appendError("fnfe" +
fnfe.getMessage());
+ } catch (IOException ioe) {
+ page.appendError("Cannot write
node " + node.getId() + " : " + ioe.getMessage());
+ } catch (Exception e) {
+
page.appendError(e.getMessage());
+ }
+ } else {
+
+ page.setTitle("Edit");
+
+ Element formPassword = new
Element("formpassword");
+ formPassword.addAttribute(new
Attribute("value", respirator.getNode().clientCore.formPassword));
+ page.appendData(formPassword);
+ page.appendData(node.getRoot());
+ }
+ }
+ } catch (Exception e) {
+ return e.getMessage();
+ }
+
+ return transform(page);
+
+ }
+
+
+ private void setDefaultPage() {
+ page = new Page();
+ page.setTitle("My nodes");
+ page.appendData(nodesManager.getXMLNodesList());
+ }
+
+}
\ No newline at end of file
Copied: trunk/plugins/Echo/src/plugins/echo/Node.java (from rev 13995,
trunk/plugins/Echo/src/Node.java)
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Node.java
(rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/Node.java 2007-07-08 19:44:10 UTC
(rev 13997)
@@ -0,0 +1,104 @@
+package plugins.echo;
+
+import nu.xom.Document;
+import nu.xom.Element;
+import nu.xom.Attribute;
+import nu.xom.Serializer;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+
+public class Node {
+
+ private String id;
+ private Document doc = null;
+ private Element nodeElement = null;
+ private Element titleElement = null;
+ private Element contentElement = null;
+
+ public Node (String nodeId) {
+
+ this.id = nodeId;
+
+ nodeElement = new Element("node");
+ nodeElement.addAttribute(new Attribute("id", id));
+
+ titleElement = new Element("title");
+ nodeElement.appendChild(titleElement);
+
+ contentElement = new Element("content");
+ nodeElement.appendChild(contentElement);
+
+ doc = new Document(nodeElement);
+
+ }
+
+ protected Node (Document document) {
+
+ this.doc = document;
+
+ }
+
+ private Element getTitleElement() {
+ if(titleElement == null)
+ titleElement = (Element)
doc.query("/node/title").get(0);
+
+ return titleElement;
+ }
+
+ public String getTitle() {
+
+ return getTitleElement().getValue();
+ }
+
+ public void setTitle(String str){
+ Element title = getTitleElement();
+ title.removeChildren();
+ title.appendChild(str);
+ }
+
+ private Element getContentElement() {
+ if(contentElement == null)
+ contentElement = (Element)
doc.query("/node/content").get(0);
+
+ return contentElement;
+ }
+
+ public String getBody() {
+ return getContentElement().getValue();
+ }
+
+ public void setBody(String str) {
+ Element content = getContentElement();
+ content.removeChildren();
+ content.appendChild(str);
+ }
+
+ public String getId() {
+ if(id == null)
+ id = ((Attribute)
doc.query("/node/@id").get(0)).getValue();
+ return id;
+ }
+
+ // FIXME: delete
+ public void write(OutputStream out) throws IOException{
+
+ Serializer serializer = new Serializer(out);
+ serializer.setIndent(4);
+ serializer.setMaxLength(128);
+
+ serializer.write(doc);
+ }
+
+ protected Document getDoc() {
+ return doc;
+ }
+
+ public Element getRoot() {
+
+ return (Element) getDoc().getRootElement().copy();
+
+ }
+
+}
Copied: trunk/plugins/Echo/src/plugins/echo/NodesManager.java (from rev 13995,
trunk/plugins/Echo/src/NodesManager.java)
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/NodesManager.java
(rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/NodesManager.java 2007-07-08
19:44:10 UTC (rev 13997)
@@ -0,0 +1,113 @@
+package plugins.echo;
+
+import nu.xom.Builder;
+import nu.xom.Element;
+import nu.xom.Attribute;
+import nu.xom.Serializer;
+import nu.xom.ParsingException;
+
+import java.util.HashMap;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.FileNotFoundException;
+
+
+public class NodesManager {
+
+ private File nodesDir;
+ private HashMap<String, File> nodes;
+ private Builder parser;
+
+ public NodesManager(File nodesDirectory) {
+
+ nodesDir = nodesDirectory;
+ nodes = new HashMap<String, File> ();
+ parser = new Builder();
+
+ File[] files = nodesDirectory.listFiles();
+ for(File f : files) {
+ if(f.getName().matches("[0-9]{4}.xml"))
+ nodes.put(f.getName().substring(0,4), f);
+ }
+ }
+
+ public Node getNodeById(String nodeId) throws IOException,
ParsingException {
+
+ File file = nodes.get(nodeId);
+ return new Node(parser.build(file));
+
+ }
+
+ // TODO
+ public Node newNode() {
+
+ String id = "";
+ for(int i=1; i < 10000; i++) {
+ id = String.valueOf(i);
+ while(id.length() < 4)
+ id = "0" + id;
+
+ if(!nodes.containsKey(id))
+ break;
+ }
+
+ return new Node(id);
+
+ }
+
+
+ public boolean nodeExists(String nodeId) {
+
+ return nodes.containsKey(nodeId);
+
+ }
+
+ public void deleteNode(String nodeId) throws IOException {
+
+ File file = nodes.get(nodeId);
+ if(!file.delete()) {
+ throw new IOException(file.getPath() + " cannot be
deleted");
+ }
+
+ nodes.remove(nodeId);
+ }
+
+ public void writeNode(Node node) throws FileNotFoundException,
IOException{
+
+ File file;
+ String nodeId = node.getId();
+
+ if(!nodeExists(nodeId)) {
+ file = new File (nodesDir.getPath() + File.separator +
nodeId + ".xml");
+ nodes.put(nodeId, file);
+ } else {
+ file = nodes.get(nodeId);
+ }
+
+ Serializer serializer = new Serializer(new
FileOutputStream(file));
+ serializer.setIndent(4);
+ serializer.setMaxLength(128);
+ serializer.write(node.getDoc());
+
+ }
+
+ public String[] getIds() {
+
+ return nodes.keySet().toArray(new String[]{});
+
+ }
+
+ public Element getXMLNodesList() {
+
+ String[] ids = this.getIds();
+ Element nodesElement = new Element("nodes");
+
+ for(String id : ids) {
+ Element node = new Element("node");
+ node.addAttribute(new Attribute("id", id));
+ nodesElement.appendChild(node);
+ }
+ return nodesElement;
+ }
+}
Copied: trunk/plugins/Echo/src/plugins/echo/Page.java (from rev 13995,
trunk/plugins/Echo/src/Page.java)
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Page.java
(rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/Page.java 2007-07-08 19:44:10 UTC
(rev 13997)
@@ -0,0 +1,68 @@
+package plugins.echo;
+
+import nu.xom.Document;
+import nu.xom.Node;
+import nu.xom.Nodes;
+import nu.xom.Element;
+
+import java.util.Vector;
+
+public class Page {
+
+ private String title = null;
+ private nu.xom.Nodes data;
+ private Vector<String> errors;
+
+ public Page() {
+ data = new nu.xom.Nodes();
+ errors = new Vector<String> ();
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public void setData(nu.xom.Nodes data) {
+ this.data = data;
+ }
+
+ public void appendData(nu.xom.Node data) {
+ this.data.append(data);
+ }
+
+ public void appendError(String desc) {
+ errors.add(desc);
+ }
+
+ public Document getDoc() {
+ Element page = new Element("page");
+
+ Element titleElement = new Element("title");
+ titleElement.appendChild(title);
+ page.appendChild(titleElement);
+
+ if(errors.size() != 0) {
+ Element errorsElement = new Element("errors");
+ for(String e : errors) {
+ Element error = new Element("error");
+ error.appendChild(e);
+ errorsElement.appendChild(error);
+ }
+
+ page.appendChild(errorsElement);
+ }
+
+ Element dataElement = new Element("data");
+ for(int i=0; i < data.size(); i++)
+ dataElement.appendChild(data.get(i));
+
+ page.appendChild(dataElement);
+
+ return new Document(page);
+
+ }
+
+ public int countErrors() {
+ return errors.size();
+ }
+}
Copied: trunk/plugins/Echo/src/plugins/echo/Test.java (from rev 13995,
trunk/plugins/Echo/src/Test.java)
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Test.java
(rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/Test.java 2007-07-08 19:44:10 UTC
(rev 13997)
@@ -0,0 +1,60 @@
+package plugins.echo;
+
+import nu.xom.*;
+import nu.xom.xslt.*;
+
+import java.io.*;
+
+public class Test{
+
+ private static final String PATH_PREFIX = "plugins/Echo/";
+
+ public void generate() throws Exception{
+
+ File nodeDir = new File(PATH_PREFIX + "nodes" + File.separator);
+ File outDir = new File(PATH_PREFIX + "out" + File.separator);
+ outDir.mkdirs();
+
+ NodesManager nodesManager = new NodesManager(nodeDir);
+
+ Builder parser = new Builder();
+ Document styleSheet =
parser.build(getClass().getResourceAsStream("/xml/test.xsl"));
+// Document styleSheet =
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/test.xsl");
+ XSLTransform transform = new XSLTransform(styleSheet);
+ transform.setParameter("contextprefix", (new
File(PATH_PREFIX)).getAbsolutePath() + "/");
+
+ Serializer serializer = new Serializer(System.out);
+ serializer.setIndent(4);
+ serializer.setMaxLength(128);
+
+ TextRender render = new TextRender();
+
+ String[] ids = nodesManager.getIds();
+ for(String id : ids) {
+
+ System.out.println(id);
+
+ Element root = nodesManager.getNodeById(id).getRoot();
+ Element content = (Element)
root.query("./content").get(0);
+ Text contentText = (Text) content.getChild(0);
+
+ Nodes result = render.render(contentText.toXML());
+
+ contentText.detach();
+ for (int i=0; i < result.size(); i++) {
+ content.appendChild(result.get(i));
+ }
+
+ Nodes t = transform.transform(new Document(root));
+ serializer.setOutputStream(new
FileOutputStream(outDir.getPath() + File.separator + id + ".html"));
+ serializer.write(new Document((Element) t.get(0)));
+
+ }
+
+
+ }
+// public static void main(String args[]){
+// Test test = new Test();
+// test.generate();
+// }
+}
\ No newline at end of file
Copied: trunk/plugins/Echo/src/plugins/echo/TextRender.java (from rev 13995,
trunk/plugins/Echo/src/TextRender.java)
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/TextRender.java
(rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/TextRender.java 2007-07-08 19:44:10 UTC
(rev 13997)
@@ -0,0 +1,43 @@
+package plugins.echo;
+
+import org.radeox.api.engine.context.RenderContext;
+import org.radeox.engine.context.BaseRenderContext;
+import org.radeox.api.engine.RenderEngine;
+import org.radeox.engine.BaseRenderEngine;
+
+import nu.xom.Builder;
+import nu.xom.Element;
+import nu.xom.Node;
+import nu.xom.Nodes;
+import nu.xom.ParsingException;
+
+import java.io.IOException;
+
+public class TextRender {
+
+ private RenderContext renderContext;
+ private RenderEngine engine;
+
+ public TextRender() {
+ renderContext = new BaseRenderContext();
+ engine = new BaseRenderEngine();
+ }
+
+ public Nodes render(String text) throws ParsingException, IOException {
+
+ String result = engine.render(text, renderContext);
+ Builder parser = new Builder();
+ // FIXME : bug ?
+ Element renderedContent = parser.build("<rendered>" + result +
"</rendered>", null).getRootElement();
+
+ Nodes nodes = new Nodes();
+ while (renderedContent.getChildCount() != 0) {
+ Node node = renderedContent.getChild(0);
+ node.detach();
+ nodes.append(node);
+ }
+
+ return nodes;
+ }
+
+}
\ No newline at end of file