Author: fred
Date: 2007-09-15 17:49:19 +0000 (Sat, 15 Sep 2007)
New Revision: 15190

Removed:
   trunk/plugins/Echo/src/plugins/echo/Page.java
Modified:
   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/ProjectManager.java
   trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java
   trunk/plugins/Echo/src/plugins/echo/block/BlockManager.java
   trunk/plugins/Echo/src/plugins/echo/i18n/I18n.java
   trunk/plugins/Echo/src/xml/edit.xsl
Log:
Using a monolithic XSL for the editor was a bad idea.

Step 1 :
* Preparing the API
* Rewrite the XSL style sheet to handle the kind of content


Modified: trunk/plugins/Echo/src/plugins/echo/Echo.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Echo.java       2007-09-15 16:14:35 UTC 
(rev 15189)
+++ trunk/plugins/Echo/src/plugins/echo/Echo.java       2007-09-15 17:49:19 UTC 
(rev 15190)
@@ -3,7 +3,9 @@
 import plugins.echo.i18n.I18n;
 import plugins.echo.block.BlockManager;
 import plugins.echo.block.Block;
+import plugins.echo.editor.*;

+
 import freenet.pluginmanager.FredPlugin;
 import freenet.pluginmanager.FredPluginHTTP;
 import freenet.pluginmanager.FredPluginHTTPAdvanced;
@@ -28,6 +30,7 @@
 import nu.xom.ParsingException;
 import nu.xom.xslt.XSLException;

+import java.util.HashMap;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
@@ -38,6 +41,8 @@

 // TODO
 //     * Exceptions !
+//     * var Project / projectManager
+//     * var Page


 public class Echo implements FredPlugin, FredPluginHTTP, 
FredPluginHTTPAdvanced, FredPluginThreadless {
@@ -45,26 +50,21 @@
        public static final File BASE_DIR = new File("plugins/Echo/");
        public static final int PROJECT_ID_LENGTH = 3;
        public static final int NODE_ID_LENGTH = 4;
-       public static final int CATEGORY_ID_LENGTH = 3;

        private static final int MAX_TITLE_LENGTH = 200;
        private static final int MAX_BODY_LENGTH = 100000;
-       private static final int MAX_ID_LENGTH = Math.max(PROJECT_ID_LENGTH, 
Math.max(NODE_ID_LENGTH, CATEGORY_ID_LENGTH));
        private static final int MAX_OBJECT_LENGTH = 8;
        private static final int MAX_CATEGORY_NAME_LENGTH = 100;
-       private static final int MAX_KEY_LENGTH = 1024*1024;

        protected PluginRespirator respirator;
        private Builder parser;
        private XSLTransform transform;
        private I18n i18n;
-       private Page page;
+       private HashMap<String,Page> pages;
        private ProjectManager projectManager;
        private Project project;
        private NodesManager nodesManager;
        private BlockManager blockManager;
-       private Node node;
-       private ClientPutDir clientPutDir;

        public Echo()
        {
@@ -83,10 +83,9 @@

                        parser = new Builder();

-                       Document styleSheet = 
parser.build(getClass().getResourceAsStream("/xml/edit.xsl"));
+                       Document styleSheet = 
parser.build(getClass().getResourceAsStream("/xml/edit2.xsl"));
 //                     Document styleSheet = 
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/edit.xsl");
                        i18n.translateXML(styleSheet);
-                       
                        transform = new XSLTransform(styleSheet);

                        projectManager = new ProjectManager(BASE_DIR, 
respirator.getNode().random);
@@ -94,7 +93,28 @@
                                projectManager.newProject("My Flog");

                        setProject(projectManager.loadProject("001"));
+                       String formPsw = 
respirator.getNode().clientCore.formPassword;
+                       
+                       
+                       pages = new HashMap<String,Page>();

+                       pages.put("plugins.echo.Echo", 
StaticPage.createFromContentFile("Welcome", "welcome.xml"));
+                       
+                       Page nodePage = new NodePage(nodesManager, formPsw);
+                       pages.put("newPost", nodePage);
+                       pages.put("newPage", nodePage);
+                       pages.put("edit", nodePage);
+                       
+                       pages.put("nodes", new 
NodesPage(project.getNodesManager()));
+                       pages.put("blocks", new BlocksPage(blockManager, 
formPsw));
+                       pages.put("categories", new 
CategoriesPage(nodesManager, formPsw));
+                       pages.put("generate", new GeneratePage(projectManager));
+                       pages.put("insert", new InsertPage(projectManager, 
respirator.getNode().clientCore.getFCPServer(), formPsw));
+                       
+                       pages.put("write", 
StaticPage.createFromContentFile(I18n.getString("echo.action.write"), 
"write.xml"));
+                       pages.put("manage", 
StaticPage.createFromContentFile(I18n.getString("echo.action.manage"), 
"manage.xml"));
+                       
pages.put("publish",StaticPage.createFromContentFile(I18n.getString("echo.action.publish"),
 "publish.xml"));
+                       
                } catch (Exception e) {
                        e.printStackTrace();
                }
@@ -110,7 +130,6 @@

        public void terminate() {
                // TODO
-               // Bleh
        }

        private void setProject(Project p) {
@@ -122,40 +141,44 @@

        }

-       private String transform(Page page) {
+
+       private String handleHTTPRequest(HTTPRequest request) {
+               
                try {
+                       String fileName = (new 
File(request.getPath())).getName();
+                       Page p;

-                       return 
transform.transform(page.getDoc()).get(0).toXML();
+                       if(pages.containsKey(fileName))
+                               p = pages.get(fileName);
+                       else
+                               p = StaticPage.createFromContentFile("404 
error", "http404error.xml");

+                       p.handleHTTPRequest(request);
+                       
                        /*
                                Nice but input white space are not respected
-                       
-                       
+                       */
                        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)));
+                       serializer.write(new Document((Element) 
transform.transform(new Document(p.toXML())).get(0)));
                        return baos.toString();

-                       */
-                       
+
+//                     return t.transform(new 
Document(p.toXML())).get(0).toXML();
                } catch (Exception e) {
-                       return e.getMessage();
+                       e.printStackTrace();
+                       return e.toString();
                }
        }

        public String handleHTTPGet(HTTPRequest request) throws 
PluginHTTPException {

-               
                if ("/plugins/plugins.echo.Echo".equals(request.getPath()))
                        throw new RedirectPluginHTTPException("", 
"/plugins/plugins.echo.Echo", "/plugins/plugins.echo.Echo/");

-               
                String fileName = (new File(request.getPath())).getName();
-               String nodeId = request.getParam("node");
-               String catId = request.getParam("category");
-               String blockId = request.getParam("block");

                if ("edit.css".equals(fileName) || 
"echo-logo-small-0.1.png".equals(fileName)) {

@@ -175,155 +198,8 @@
                                return ioe.getMessage();
                        }

-               } else if ("newPost".equals(fileName) || 
"newPage".equals(fileName) || ("edit".equals(fileName) && ! "".equals(nodeId))) 
{
-
-                       page = new Page();
-                       page.appendData(getFormPassword());
-                       
-                       if("edit".equals(fileName)) {
-                               
-                               page.setTitle("Edit");
-                               try {
-                                       
-                                       node = nodesManager.getNodeById(nodeId);
-                                       if(node == null)
-                                               page.appendError("The node " + 
nodeId + "does not exist");
-                                       else 
-                                               page.appendData(node.getRoot());
-
-                               } catch (IOException ioe) {
-                                       page.appendError(ioe.getMessage());
-                               } catch (ParsingException pe) {
-                                       page.appendError("The node " + nodeId  
+ " is damaged : " + pe.getMessage());
-                               }
-                               
-                       } else {
-                               page.setTitle("New " + fileName.substring(3,7));
-                               node = new Node(nodesManager.getFreeNodeId(),
-                                               "newPost".equals(fileName) ? 
Node.NodeType.POST_NODE : Node.NodeType.STATIC_PAGE_NODE);
-                               page.appendData(node.getRoot());
-                       }
-                       
-               } else if ("renameCategory".equals(fileName) &&  ! 
"".equals(catId)) {
-
-                       page = new Page();
-                       page.setTitle(i18n.getString("echo.common.rename"));
-                       Element rename = new Element("rename");
-                       
-                       Element category = new Element("category");
-                       category.addAttribute(new Attribute("id", catId));
-                       category.addAttribute(new Attribute("name", 
nodesManager.getCategoryNameById(catId)));
-                       
-                       rename.appendChild(category);
-                       page.appendData(rename);
-                       page.appendData(getFormPassword());
-                       
-               } else if ("del".equals(fileName) && (! "".equals(nodeId) || ! 
"".equals(catId))) {
-
-                       page = new Page();
-                       page.setTitle(i18n.getString("echo.common.delete"));
-                       
-                       Element object;
-                       if(!"".equals(nodeId)) {
-                               object = new Element("node");
-                               object.addAttribute(new Attribute("id", 
nodeId));
-                       } else {
-                               object = new Element("category");
-                               object.addAttribute(new Attribute("id", catId));
-                       }
-                       
-                       Element del = new Element("delete");
-                       del.appendChild(object);
-                       page.appendData(del);
-                       page.appendData(getFormPassword());
-                       
-               } else if ("configureBlock".equals(fileName) && ! 
"".equals(blockId) ) {
-                       
-                       Element configureBlock = new Element("configure-block");
-                       page = new Page(configureBlock);
-                       if(blockManager.blockExists(blockId)) {
-                               Block block = 
blockManager.getBlockById(blockId);
-                               page.setTitle(i18n.getString("echo.block." + 
block.getType().toString()));
-                               
-                               if(block.isConfigurable())
-                                       
configureBlock.appendChild(block.toXMLElement());
-                               else
-                                       page.appendError("This block is not 
configurable");
-                               
-                       } else {
-                               page.setTitle("Block");
-                               page.appendError("Block not found");
-                       }                       
-                       
-               } else if ("write".equals(fileName) || 
"manage".equals(fileName)) {
-                       
-                       page = new Page();
-                       page.setTitle(i18n.getString("echo.action." + 
fileName));
-                       page.appendData(new Element(fileName));
-                       
-                       
-               } else if ("publish".equals(fileName)) {
-                       
-                       Element pub = new Element("publish");
-                       page = new Page(pub);
-                       page.setTitle(i18n.getString("echo.action.publish"));
-                       
-               } else if ("configure".equals(fileName)) {
-                       
-                       Element configure = new Element("configure");
-                       Element projects = new Element("projects");
-                       configure.appendChild(projects);
-                       
-                       for(String id : projectManager.getProjectsIds()) {
-                       
-                               Element project = new Element("project");
-                               project.addAttribute(new Attribute("id", id));
-                               projects.appendChild(project);
-                       
-                       }
-                       
-                       page = new Page(configure);
-                       page.setTitle(i18n.getString("echo.action.configure"));
-               
-               } else if ("generate".equals(fileName)) {
-               
-                       Element generate = new Element("generate");
-                       page= new Page(generate);
-                       page.setTitle("Generate");
-                       
-                       try {
-                               SiteGenerator test = new SiteGenerator(project);
-                               test.generate();
-
-                               generate.addAttribute(new 
Attribute("outputdir",(new File(BASE_DIR.getPath() + File.separator + 
"out")).getAbsolutePath() + "/"));
-                               
-                       } catch (Exception e) {
-                               e.printStackTrace();
-                               page.appendError(e.getMessage());
-                       }
-               } else if ("insert".equals(fileName)) {
-                       
-                       setInsertPage();
-                               
-               } else if ("nodes".equals(fileName)) {
-                       
-                       setNodesPage();
-                       
-               } else if ("categories".equals(fileName)) {
-
-                       setCategoriesPage();
-                       
-               } else if ("blocks".equals(fileName)) {
-                       
-                       setBlocksPage();
-                       
-               } else {        
-                       
-                       setDefaultPage();
-                       
-               }
-
-               return transform(page);
+               } else
+                       return handleHTTPRequest(request);
        }

        public String handleHTTPPut(HTTPRequest request) throws 
PluginHTTPException {
@@ -331,243 +207,13 @@
        }

        public String handleHTTPPost(HTTPRequest request) throws 
PluginHTTPException {
-               try {
-                       String passwd = request.getPartAsString("formPassword", 
32);                            //
-                       if((passwd == null) || 
!passwd.equals(respirator.getNode().clientCore.formPassword))    // FIXME : 
useless ?
-                               return "Wrong Password !!";                     
                                //
-                       
-                       if(request.isPartSet("confirmdelete") || 
request.isPartSet("cancel")) { // TODO
-                               
-                               String object = 
request.getPartAsString("object", MAX_OBJECT_LENGTH);
-                               
-                               if(request.isPartSet("cancel")) {
-                                       if("node".equals(object))
-                                               setNodesPage();
-                                       else
-                                               setCategoriesPage();
-                               }else {
-                                       
-                                       String id = 
request.getPartAsString("id", MAX_ID_LENGTH);
-                                       
-                                       if("node".equals(object)) {
-                                               
-                                               if(nodesManager.nodeExists(id)) 
{
-                                                       
nodesManager.deleteNode(id);
-                                                       setNodesPage();
-                                               } else {
-                                                       setNodesPage();
-                                                       page.appendError("The 
node " + id + "does not exist");
-                                               }
-                                               
-                                       } else {
-                                               
-                                               setCategoriesPage();
-                                               
if(nodesManager.categoryExists(id)) {
-                                                       
nodesManager.deleteCategory(id);
-                                                       
nodesManager.writeCategories();
-                                               } else
-                                                       page.appendError("The 
category " + id + "does not exist");
-                                       }
-                               }
-                       } else if (request.isPartSet("category-name")) {
-                               
-                               String name = 
request.getPartAsString("category-name", MAX_CATEGORY_NAME_LENGTH).trim();
-                               String catId = 
request.getPartAsString("category-id", CATEGORY_ID_LENGTH);
-                               
-                               if(! "".equals(name)) {
-                                       if(! nodesManager.renameCategory(catId, 
name))
-                                               nodesManager.newCategory(name);
-                                       
-                                       nodesManager.writeCategories();
-                                       
-                                       setCategoriesPage();
-                                       
-                               } else {
-                                       page.appendError("Fied \"name\" is 
empty");
-                               }
-                               
-                       } else if (request.isPartSet("blocks")) {

-                               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));
-                                       
-                                       blockManager.write(block);
-                               }
-
-                               setBlocksPage();
-                               
-                       } else if (request.isPartSet("insert-key")) {
-                               setInsertPage();
-                               
-                               if(clientPutDir == null || 
clientPutDir.hasFinished()) {
-                                       FreenetURI insertURI = null;
-                                       FreenetURI requestURI = null;
-                                       
-                                       try {
-                                               insertURI = new 
FreenetURI(request.getPartAsString("insert-key", MAX_KEY_LENGTH));
-                                       } catch(MalformedURLException mue) {
-                                               page.appendError("Invalid 
insertion key : " + mue.getMessage());
-                                       }
-                                       
-                                       try {
-                                               requestURI = new 
FreenetURI(request.getPartAsString("request-key", MAX_KEY_LENGTH));
-                                       } catch(MalformedURLException mue) {
-                                               page.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);
-                                                       
-                                               }
-                                               
-                                               SiteGenerator generator = new 
SiteGenerator(project);
-                                               generator.generate();
-                                               
-                                               SimpleDirectoryInserter 
inserter = new 
SimpleDirectoryInserter(respirator.getNode().clientCore.getFCPServer());
-                                               clientPutDir = 
inserter.insert(new File(project.getProjectDir(), "out"), "index.html", 
insertURI);
-                                               
-                                               setInsertPage();                
                        
-                                       }
-                               }
-                                                               
-                       } 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);
-                               
-                               String[] cats = nodesManager.getCategoriesIds();
-                               for(String cat : cats)
-                                       node.setCategory(cat, 
request.isPartSet("category-" + cat));
-                                       
-                               if(page.countErrors() == 0) {
-                                       
-                                       setNodesPage();
-                                       
-                                       try {
-
-                                               nodesManager.writeNode(node);
-                                               
-                                       } 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");
-                                       page.appendData(getFormPassword());
-                                       page.appendData(node.getRoot());
-                               }
-                       }
-               } catch (Exception e) {
-                       e.printStackTrace();
-                       return e.getMessage();
-               }
-
-               return transform(page);
-
-       }
-
-       private void setDefaultPage() {
-       
-               page = new Page();
-       
-       }
-
-       private void setNodesPage() {
-               page = new Page();
-               page.setTitle("My nodes");
-               page.appendData(nodesManager.getXMLNodesList());
-       }
-       
-       private void setCategoriesPage() {
-               page = new Page(new Element("categories"));
-               page.setTitle(i18n.getString("echo.common.categories"));
-               page.appendData(getFormPassword());
-       }
-
-       private void setBlocksPage() {
+               String passwd = request.getPartAsString("formPassword", 32);    
                        //
+               if((passwd == null) || 
!passwd.equals(respirator.getNode().clientCore.formPassword))    // FIXME : 
useless ?
+                       return "Wrong Password !!";                             
                        //

-               Element blocksElement = new Element("blocks");
-               Block[] blocks = blockManager.getBlocks();
-               for(Block b : blocks) {
-                       Element block = new Element("block");
-                       block.addAttribute(new Attribute("id", b.getId()));
-                       block.addAttribute(new Attribute("type", 
i18n.getString("echo.block." + b.getType().toString())));
-                       block.addAttribute(new Attribute("position", 
b.getPosition()));
-                       block.addAttribute(new Attribute("weight", 
String.valueOf(b.getWeight())));
-                       
-                       if(b.isConfigurable())
-                               block.addAttribute(new 
Attribute("configurable", "true"));
-                       
-                       blocksElement.appendChild(block);
-               }

-               page = new Page(blocksElement);
-               page.setTitle(i18n.getString("echo.common.blocks"));
-               page.appendData(getFormPassword());
-       }
-       
-       private void setInsertPage() {
-               
-                       Element insert = new Element("insert");
-                       page= new Page(insert);
-                       page.setTitle("Insert");
-                       page.appendData(getFormPassword());
-                       
-                       if(clientPutDir == null || clientPutDir.hasFinished()) {
-                       
-                               FreenetURI uri = project.getInsertURI();
-                               if(uri != null){
-                                       Element insertURI = new 
Element("insertURI");
-                                       insertURI.appendChild(uri.toString());
-                                       insert.appendChild(insertURI);
-                               }
-                               
-                               uri = project.getRequestURI();
-                               if(uri != null){
-                                       Element requestURI = new 
Element("requestURI");
-                                       requestURI.appendChild(uri.toString());
-                                       insert.appendChild(requestURI);
-                               }
-                       } else {
-                               insert.addAttribute(new 
Attribute("running","true"));
-                       }
-       
-       }
-       
-       private Element getFormPassword() {
-               
-               Element formPassword = new Element("formpassword");
-               formPassword.addAttribute(new Attribute("value", 
respirator.getNode().clientCore.formPassword));
+               return handleHTTPRequest(request);

-               return formPassword;
        }
-
 }
\ No newline at end of file

Modified: trunk/plugins/Echo/src/plugins/echo/Node.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Node.java       2007-09-15 16:14:35 UTC 
(rev 15189)
+++ trunk/plugins/Echo/src/plugins/echo/Node.java       2007-09-15 17:49:19 UTC 
(rev 15190)
@@ -16,6 +16,7 @@
 public class Node {

        public enum NodeType { POST_NODE, STATIC_PAGE_NODE };
+       public static final int CATEGORY_ID_LENGTH = 3;

        private String id;
        private NodeType type = null;

Modified: trunk/plugins/Echo/src/plugins/echo/NodesManager.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/NodesManager.java       2007-09-15 
16:14:35 UTC (rev 15189)
+++ trunk/plugins/Echo/src/plugins/echo/NodesManager.java       2007-09-15 
17:49:19 UTC (rev 15190)
@@ -74,6 +74,12 @@

        }

+       public int size() {
+
+               return nodes.size();
+
+       } 
+
        public Nodes getPosts() throws IOException, ParsingException {

                Nodes posts = new Nodes();
@@ -157,7 +163,8 @@
                return nodes.keySet().toArray(new String[]{});

        }
-
+       
+       // Useless ??
        public Element getXMLNodesList() {

                String[] ids = this.getIds();
@@ -182,6 +189,12 @@

        }

+       public int countCategories() {
+       
+               return categories.size();
+       
+       }
+       
        public String getCategoryNameById(String id) {

                return categories.get(id);

Deleted: trunk/plugins/Echo/src/plugins/echo/Page.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Page.java       2007-09-15 16:14:35 UTC 
(rev 15189)
+++ trunk/plugins/Echo/src/plugins/echo/Page.java       2007-09-15 17:49:19 UTC 
(rev 15190)
@@ -1,74 +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 Page(Element content) {
-               this();
-               this.appendData(content);
-       } 
-       
-       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++) {
-                       data.get(i).detach();
-                       dataElement.appendChild(data.get(i));
-               }
-               page.appendChild(dataElement);
-
-               return new Document(page);
-               
-       }
-
-       public int countErrors() {
-               return errors.size();
-       }
-}

Modified: trunk/plugins/Echo/src/plugins/echo/ProjectManager.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/ProjectManager.java     2007-09-15 
16:14:35 UTC (rev 15189)
+++ trunk/plugins/Echo/src/plugins/echo/ProjectManager.java     2007-09-15 
17:49:19 UTC (rev 15190)
@@ -18,6 +18,7 @@
        private File baseDir;
        private HashMap<String,File> projects;
        private RandomSource randomSource;
+       private Project currentProject;

        public ProjectManager(File baseDir, RandomSource randomSource) {

@@ -37,12 +38,19 @@

                if(projects.containsKey(projectId)) {

-                       return new Project(projects.get(projectId));
+                       currentProject = new Project(projects.get(projectId));
+                       return getCurrentProject();

                }

                return null;
        }
+
+       public Project getCurrentProject() {
+
+               return currentProject;
+
+       }

        public Project newProject(String projectTitle) throws IOException, 
ParsingException {


Modified: trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java      2007-09-15 
16:14:35 UTC (rev 15189)
+++ trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java      2007-09-15 
17:49:19 UTC (rev 15190)
@@ -111,4 +111,10 @@
                cssFile.close();

        }
+       
+       public File getOutDir() {
+               
+               return outDir;
+       
+       }
 }
\ No newline at end of file

Modified: trunk/plugins/Echo/src/plugins/echo/block/BlockManager.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/block/BlockManager.java 2007-09-15 
16:14:35 UTC (rev 15189)
+++ trunk/plugins/Echo/src/plugins/echo/block/BlockManager.java 2007-09-15 
17:49:19 UTC (rev 15190)
@@ -96,6 +96,7 @@
                write(blogroll);

                Block categories = new CategoriesBlock("002");
+               categories.setPosition("right");
                write(categories);

        }

Modified: trunk/plugins/Echo/src/plugins/echo/i18n/I18n.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/i18n/I18n.java  2007-09-15 16:14:35 UTC 
(rev 15189)
+++ trunk/plugins/Echo/src/plugins/echo/i18n/I18n.java  2007-09-15 17:49:19 UTC 
(rev 15190)
@@ -24,9 +24,9 @@
        public static final String PREFIX = "echo.i18n.";
        public static final String SUFFIX = ".properties";

-       private String selectedLanguage;
-       private Properties translation;
-       private Properties defaultTranslation = null;
+       private static String selectedLanguage;
+       private static Properties translation;
+       private static Properties defaultTranslation = null;

        public I18n(String language) throws MissingResourceException {

@@ -39,15 +39,15 @@
        *       Set the language
        *       @param language the ISO code of the language 
        */
-       public void setLanguage(String language) throws 
MissingResourceException {
+       public static void setLanguage(String language) throws 
MissingResourceException {

-                       Logger.normal("I18n", "Changing the current language to 
: " + language);
-                       loadTranslation(language, translation);
-                       
-                       if(! language.equals(DEFAULT_LANGUAGE))
-                               loadTranslation(DEFAULT_LANGUAGE, 
defaultTranslation);
-                       
-                       selectedLanguage = language;
+               Logger.normal("I18n", "Changing the current language to : " + 
language);
+               loadTranslation(language, translation);
+               
+               if(! language.equals(DEFAULT_LANGUAGE))
+                       loadTranslation(DEFAULT_LANGUAGE, defaultTranslation);
+               
+               selectedLanguage = language;
        }

        /**
@@ -55,15 +55,15 @@
        *       @param language the ISO code of the language
        *       @param props the properties to load into 
        */
-       private void loadTranslation(String language, Properties props) throws 
MissingResourceException {
+       private static void loadTranslation(String language, Properties props) 
throws MissingResourceException {

                if(props == null)
                        props = new Properties();
                try {
-                       props.load(getClass().getResourceAsStream("/i18n/" + 
PREFIX + language + SUFFIX));
-//                     props.load(new 
FileInputStream("/home/fred/prog/soc/trunk/plugins/Echo/src/plugins/echo/i18n/" 
+ PREFIX + language + SUFFIX));
+//                     
props.load(ClassLoader.getSystemClassLoader().getResourceAsStream("/i18n/" + 
PREFIX + language + SUFFIX));
+                       props.load(new 
FileInputStream("/home/fred/prog/soc/trunk/plugins/Echo/src/plugins/echo/i18n/" 
+ PREFIX + language + SUFFIX));
                } catch (IOException ioe) {
-                       Logger.error(this, "IOException while accessing the " + 
language +"file" + ioe.getMessage(), ioe);
+                       Logger.error("I18n", "IOException while accessing the " 
+ language +"file" + ioe.getMessage(), ioe);
                        throw new MissingResourceException("Unable to load the 
translation file for " + language, "i18n", language);
                }
        }
@@ -73,7 +73,7 @@
        *       @param key
        *       @return the translated String in the selected language, the 
translated String in the default language or the key itself if the key is not 
found in the default language         
        */
-       public String getString(String key) {
+       public static String getString(String key) {

                String str = translation.getProperty(key);
                if(str != null)
@@ -99,7 +99,7 @@
        *       Translate a whole XML document, replace i18n elements by the 
translations of their keys
        *       @param doc the nu.xom.Document to translate
        */
-       public void translateXML(Document doc) {
+       public static void translateXML(Document doc) {

                nu.xom.Nodes i18nNodes = doc.query("//i18n");   


Modified: trunk/plugins/Echo/src/xml/edit.xsl
===================================================================
--- trunk/plugins/Echo/src/xml/edit.xsl 2007-09-15 16:14:35 UTC (rev 15189)
+++ trunk/plugins/Echo/src/xml/edit.xsl 2007-09-15 17:49:19 UTC (rev 15190)
@@ -11,17 +11,7 @@
        doctype-public= "-//W3C//DTD XHTML 1.0 Strict//EN"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";
        indent="yes" />
-       
-       <xsl:preserve-space  elements="content" />
-       
-       <xsl:param name="baseDir" />

-       <xsl:variable name="nodesDir"><xsl:value-of select="$baseDir" 
/>nodes/</xsl:variable>
-       <xsl:variable name="blocksDir"><xsl:value-of select="$baseDir" 
/>blocks/</xsl:variable>
-       <xsl:variable name="categoriesFile"><xsl:value-of select="$nodesDir" 
/>categories.xml</xsl:variable>
-       
-<!--   <xsl:import href="block.xsl" />  -->
-
        <xsl:template match="/page">
                <html>
                        <head>
@@ -44,286 +34,17 @@
                                        </div>

                                        <div id="main">
-                                               <h1><xsl:value-of 
select="title/text()" /></h1>
+                                               <h1><xsl:value-of 
select="@title" /></h1>
                                                <xsl:apply-templates 
select="errors" />
-                                               <xsl:apply-templates 
select="data" />
-<!--                                           <div><xsl:copy-of 
select="/node()" /></div>  -->
-                                       
+                                               <xsl:apply-templates 
select="content" />        
                                        </div>
                                </div>
                        </body>
                </html>
        </xsl:template>

-       <xsl:template match="data">
-               <!--     otherwise nodes list ? (document(..))          -->
-               <xsl:choose>
-                       <xsl:when test="write">
-                               <dl>
-                                       <dt><a href="newPost"><i18n 
key="echo.common.blogPost" /></a></dt>
-                                       <dd><i18n key="echo.write.newPost" 
/></dd>
-                                       
-                                       <dt><a href="newPage"><i18n 
key="echo.common.staticPage" /></a></dt>
-                                       <dd><i18n key="echo.write.newPage" 
/></dd>
-                               </dl>
-                       </xsl:when>
-                       
-                       <xsl:when test="manage">
-                               <dl>
-                                       <!-- Suxx ? -->
-                                       <dt><a href="nodes"><i18n 
key="echo.manage.myNodes" /></a></dt>
-                                       <dd><i18n 
key="echo.manage.myNodes.desc" /></dd>
-
-                                       <dt><a href="categories"><i18n 
key="echo.common.categories" /></a></dt>
-                                       <dd><i18n 
key="echo.manage.categories.desc" /></dd>
-                                       
-                                       <dt><a href="blocks"><i18n 
key="echo.common.blocks" /></a></dt>
-                                       <dd><i18n key="echo.manage.blocks.desc" 
/></dd>
-                                       
-                               </dl>
-                       </xsl:when>
-                       
-                       <xsl:when test="publish">
-                               <dl>
-                                       <dt><a href="generate"><i18n 
key="echo.generate" /></a></dt>
-                                       <dd><i18n key="echo.generate.desc" 
/></dd>
-                                       
-                                       <dt><a href="insert"><i18n 
key="echo.insert" /></a></dt>
-                                       <dd><i18n key="echo.insert.desc" /></dd>
-                               </dl>
-                       </xsl:when>
-                       
-                       <xsl:when test="generate">
-                               <xsl:if test="not(/page/errors)">
-                                       <a 
href="file://{generate/@outputdir}">Output dir</a>
-                               </xsl:if>
-                       </xsl:when>
-                       
-                       <xsl:when test="insert">
-                               <xsl:choose>
-                                       <xsl:when test="insert/@running='true'">
-                                               An insertion is already 
running, you can see its advancement on the <a href="/queue/">queue page</a>.
-                                       </xsl:when>
-                                       <xsl:otherwise>
-                                               <form name="insert" 
method="POST" action="">
-                                                       <label 
for="insert-key">Insert key</label>
-                                                       <input type="text" 
name="insert-key" id="insert-key" size="70">
-                                                       <xsl:if 
test="insert/insertURI" >
-                                                               <xsl:attribute 
name="value">
-                                                                       
<xsl:value-of select="insert/insertURI" />
-                                                               </xsl:attribute>
-                                                       </xsl:if>
-                                                       </input>
-                                                       
-                                                       <label 
for="request-key">Request key</label>
-                                                       <input type="text" 
name="request-key" id="request-key" size="70">
-                                                       <xsl:if 
test="insert/requestURI">
-                                                               <xsl:attribute 
name="value">
-                                                                       
<xsl:value-of select="insert/requestURI" />
-                                                               </xsl:attribute>
-                                                       </xsl:if>
-                                                       </input>
-                                                       <input type="hidden" 
name="formPassword" value="{formpassword/@value}" />
-                                                       <input type="submit" />
-                                               </form>
-                                       </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:when>
-                       
-                       <xsl:when test="configure">
-                               <form name="" method="POST" action="">
-                                       <select name="project">
-                                       <xsl:for-each 
select="configure/projects/project">
-                                               <option 
value="@id"><xsl:value-of select="@id" /></option>
-                                       </xsl:for-each>
-                                       </select>
-                                       <input type="hidden" 
name="formPassword" value="{formpassword/@value}" class="inline" />
-                                       <input type="submit" value="Load" 
class="inline" />
-                               </form>
-                       </xsl:when>
-                       
-                       <xsl:when test="categories">
-                               <xsl:if 
test="count(document($categoriesFile)//category) > 0">
-                               <table>
-                                       <tr>
-                                               <th><i18n 
key="echo.common.name" /></th>
-                                               <th colspan="2"><i18n 
key="echo.common.action" /></th>
-                                       </tr>
-                                       
-                                       <xsl:for-each 
select="document($categoriesFile)//category">
-                                       <xsl:sort select="text()" />
-                                       <tr>
-                                               <xsl:if test="(position() mod 
2) = 0">
-                                                       <xsl:attribute 
name="class">alternate</xsl:attribute>
-                                               </xsl:if>
-                                               
-                                               <td><xsl:value-of 
select="text()" /></td>
-                                               <td><a 
href="renameCategory?category={@id}"><i18n key="echo.common.rename" /></a></td>
-                                               <td><a 
href="del?category={@id}"><i18n key="echo.common.delete" /></a></td>
-                                       </tr>   
-                                       </xsl:for-each>
-                               </table>
-                               </xsl:if>
-
-                               <form name="newCategory" method="POST" 
action="">
-                                       <label for="category-name" 
class="inline"><i18n key="echo.manage.newCategory" /></label>
-                                       <input type="text" id="category-name" 
name="category-name" class="inline" />
-                                       <input type="hidden" 
name="formPassword" value="{formpassword/@value}" class="inline" />
-                                       <input type="submit" value="Create" 
class="inline" />
-                               </form>
-                               
-                       </xsl:when>
-                       <xsl:when test="rename">
-                               <form name="newCategory" method="POST" 
action="">
-                                       <label for="category-name" 
class="inline"><i18n key="echo.common.name" /></label>
-                                       <input type="text" id="category-name" 
name="category-name" value="{rename/category/@name}" class="inline" />
-                                       <input type="hidden" name="category-id" 
value="{rename/category/@id}" class="inline" />
-                                       <input type="hidden" 
name="formPassword" value="{formpassword/@value}" class="inline" />
-                                       <input type="submit" class="inline" />
-                               </form>
-                               
-                       </xsl:when>
-                       <xsl:when test="nodes">
-                               <xsl:choose>
-                               <xsl:when test="count(./nodes/node) > 0">
-                               <table>
-                               <tr>
-                                       <th>Id</th>
-                                       <th><i18n key="echo.common.date" /></th>
-                                       <th><i18n key="echo.common.title" 
/></th>
-                                       <th><i18n key="echo.common.nodeType" 
/></th>
-                                       <th colspan="2"><i18n 
key="echo.common.action" /></th>
-                               </tr>
-                               <xsl:for-each select="nodes/node">
-                               <xsl:sort select="@id" />
-                               <tr>
-                                       <xsl:if test="(position() mod 2) = 0">
-                                               <xsl:attribute 
name="class">alternate</xsl:attribute>
-                                       </xsl:if>
-                                       
-                                       <td><xsl:value-of select="@id" /></td>
-                                       <td><xsl:value-of 
select="document(concat($nodesDir, @id, '.xml'))/node/modified" /></td>
-                                       <td><xsl:value-of 
select="document(concat($nodesDir, @id, '.xml'))/node/title" /></td>
-                                       <td><xsl:value-of 
select="document(concat($nodesDir, @id, '.xml'))/node/@type" /></td>
-                                       <td><a href="edit?node={@id}"><i18n 
key="echo.common.edit" /></a></td>
-                                       <td><a href="del?node={@id}"><i18n 
key="echo.common.delete" /></a></td>
-                               </tr>
-                               </xsl:for-each>
-                               </table>
-                               </xsl:when>
-                               <xsl:otherwise>
-                                       You don't have any node, <a 
href="./write">create a new one</a>.
-                               </xsl:otherwise>
-                               </xsl:choose>
-                       </xsl:when>
-                       
-                       <xsl:when test="./blocks">
-               <!--    <xsl:for-each select="'aa' 'bb'">
-                               j
-                       </xsl:for-each>-->
-                       <form name="blocks" method="POST" action="">
-                               <table>
-                                       <tr>
-                                               <th><i18n 
key="echo.common.name" /></th>
-                                               <th><i18n 
key="echo.common.position" /></th>
-                                               <th><i18n 
key="echo.common.weight" /></th>
-                                               <th><i18n 
key="echo.common.action" /></th>
-                                       </tr>
-                                       <xsl:for-each select="blocks/block">
-                                       <xsl:sort select="@postion" />
-                                       <tr>                                    
-                                               <xsl:if test="(position() mod 
2) = 0">
-                                                       <xsl:attribute 
name="class">alternate</xsl:attribute>
-                                               </xsl:if>
-                                       
-                                               <td><xsl:value-of 
select="@type" /></td>
-                                               <td>
-                                                       <select 
name="position-{@id}">
-                                                               
<xsl:call-template name="blockPosition">
-                                                                       
<xsl:with-param name="blockPosition" select="@position" />
-                                                               
</xsl:call-template>
-                                                       </select>
-                                               </td>
-                                               <td>
-                                                       <select 
name="weight-{@id}">
-                                                               
<xsl:call-template name="blockWeightOption">
-                                                                       
<xsl:with-param name="start" select="0" />
-                                                                       
<xsl:with-param name="end" select="5" />
-                                                                       
<xsl:with-param name="blockWeight" select="@weight" />
-                                                               
</xsl:call-template>
-                                                       </select> 
-                                               </td>
-                                               <td>
-                                                       <xsl:if 
test="@configurable">
-                                                               <a 
href="configureBlock?block={@id}">configure</a>
-
-                                                       </xsl:if>
-                                               </td>
-                                       </tr>
-                                       </xsl:for-each>
-                               </table>
-                               <input type="hidden" name="blocks" value="bleh" 
/> 
-                               <input type="hidden" name="formPassword" 
value="{formpassword/@value}" />
-                               <input type="submit" />
-                       </form>
-                       </xsl:when>
-                       
-                       <xsl:when test="configure-block">
-                               <xsl:if 
test="configure-block/block/@type='blog-roll'">
-                                       <xsl:call-template 
name="block-blog-roll">
-                                               <xsl:with-param name="block" 
select="configure-block/block" />
-                                       </xsl:call-template>
-                               </xsl:if>
-                       </xsl:when>
-                       
-                       <xsl:when test="./node">
-                       <form name="edit" method="POST" action="">
-                               <label for="edit-title"><i18n 
key="echo.common.title" /></label>
-                               <input type="text" id="edit-title" name="title" 
size="100" value="{node/title/text()}"/>
-                               <label for="edit-body"><i18n 
key="echo.write.nodeBody" /></label>
-                               <textarea id="edit-body" name="body" cols="100" 
rows="50">
-                                       <xsl:choose>
-                                               <xsl:when 
test="node/content/text()">
-                                                       <xsl:text><xsl:value-of 
select="node/content" /></xsl:text>
-                                               </xsl:when>
-                                               <xsl:otherwise>
-                                                       <xsl:text> </xsl:text>
-                                               </xsl:otherwise>
-                                       </xsl:choose>
-                               </textarea>
-                               <xsl:if 
test="count(document($categoriesFile)/categories/category) > 0">
-                               <fieldset>
-                                       <legend><i18n 
key="echo.common.categories" /></legend>
-                                       <xsl:call-template 
name="categoriesCheckbox">
-                                               <xsl:with-param 
name="nodeCategories" select="node/categories" />
-                                       </xsl:call-template>
-                               </fieldset>
-                               </xsl:if>
-                               <input type="hidden" name="formPassword" 
value="{formpassword/@value}" />
-                               <input type="submit" />
-                       </form>
-                       </xsl:when>
-                       
-                       <xsl:when test="./delete">
-                       Are you sure you want to delete the
-                               <xsl:value-of select="name(delete/*)" />
-                               <xsl:text> </xsl:text>
-                               <xsl:value-of select="delete/*/@id" /> ?
-                               
-                       <form name="del" method="POST" action=""> 
-                               <input type="hidden" name="object" 
value="{name(delete/*)}" />
-                               <input type="hidden" name="id" 
value="{delete/*/@id}" />
-                               <input type="hidden" name="formPassword" 
value="{formpassword/@value}" />
-                               <input type="submit" name="confirmdelete" 
value="Delete" class="inline" />
-                               <input type="submit" name="cancel" 
value="Cancel" class="inline" />
-                       </form>
-                       </xsl:when>
-                       
-                       <xsl:otherwise>
-                               Welcome
-                       </xsl:otherwise>
-                       
-               </xsl:choose>
+       <xsl:template match="content">
+               <xsl:copy-of select="./node()" />
        </xsl:template> 

        <xsl:template match="errors">
@@ -344,84 +65,4 @@
                </div>
        </xsl:template>

-       <xsl:template name="categoriesCheckbox">
-               <xsl:param name="nodeCategories" />
-               <xsl:for-each 
select="document($categoriesFile)/categories/category">
-               <xsl:sort select="text()" />
-                       <xsl:variable name="id"><xsl:value-of select="@id" 
/></xsl:variable>
-                       
-                       <input type="checkbox" id="category-{@id}" 
name="category-{@id}" class="inline">
-                       <xsl:if test="$nodeCategories/category[@id=$id]">
-                               <xsl:attribute 
name="checked">checked</xsl:attribute>
-                       </xsl:if>
-                       </input>
-                       <label for="category-{@id}" 
class="inline"><xsl:value-of select="text()" /></label>
-               </xsl:for-each>
-               
-       </xsl:template>
-       
-       <xsl:template name="blockPosition">
-               <xsl:param name="blockPosition" />
-               
-               <xsl:call-template name="blockPositionOption">
-                       <xsl:with-param name="position">top</xsl:with-param>
-                       <xsl:with-param name="blockPosition" 
select="$blockPosition" />
-               </xsl:call-template>
-               <xsl:call-template name="blockPositionOption">
-                       <xsl:with-param name="position">bottom</xsl:with-param>
-                       <xsl:with-param name="blockPosition" 
select="$blockPosition" />
-               </xsl:call-template>
-               <xsl:call-template name="blockPositionOption">
-                       <xsl:with-param name="position">left</xsl:with-param>
-                       <xsl:with-param name="blockPosition" 
select="$blockPosition" />
-               </xsl:call-template>
-               <xsl:call-template name="blockPositionOption">
-                       <xsl:with-param name="position">right</xsl:with-param>
-                       <xsl:with-param name="blockPosition" 
select="$blockPosition" />
-               </xsl:call-template>
-               <xsl:call-template name="blockPositionOption">
-                       <xsl:with-param 
name="position">disabled</xsl:with-param>
-                       <xsl:with-param name="blockPosition" 
select="$blockPosition" />
-               </xsl:call-template>
-       </xsl:template>
-       
-       <xsl:template name="blockPositionOption">
-               <xsl:param name="position" />
-               <xsl:param name="blockPosition" />
-               
-               <option value="{$position}">
-                       <xsl:if test="$position = $blockPosition">
-                               <xsl:attribute 
name="selected">selected</xsl:attribute>
-                       </xsl:if>
-                       <xsl:value-of select="$position" />
-               </option>
-       </xsl:template>
-       
-       <xsl:template name="blockWeightOption">
-               <xsl:param name="start" select="0" />
-               <xsl:param name="end" select="0" />
-               <xsl:param name="blockWeight" />
-               
-               <option value="{$start}">
-                       <xsl:if test="$start = $blockWeight">
-                               <xsl:attribute 
name="selected">selected</xsl:attribute>
-                       </xsl:if>
-                       <xsl:value-of select="$start" />
-               </option>
-               
-               <xsl:if test="$start != $end">
-                       <xsl:call-template name="blockWeightOption">
-                               <xsl:with-param name="start" select="$start+1" 
/>
-                               <xsl:with-param name="end" select="$end" /> 
-                               <xsl:with-param name="blockWeight" 
select="$blockWeight" /> 
-                       </xsl:call-template>
-               </xsl:if>
-               
-       </xsl:template>
-       
-       <xsl:template name="block-blog-roll">
-               <xsl:param name="block" />
-               TODO
-       </xsl:template>
-       
 </xsl:stylesheet>
\ No newline at end of file


Reply via email to