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


Reply via email to