Author: nextgens
Date: 2007-12-05 17:36:35 +0000 (Wed, 05 Dec 2007)
New Revision: 16337

Modified:
   trunk/apps/Echo/src/plugins/echo/Echo.java
   trunk/apps/Echo/src/plugins/echo/Project.java
   trunk/apps/Echo/src/plugins/echo/ProjectManager.java
   trunk/apps/Echo/src/plugins/echo/SiteGenerator.java
   trunk/apps/Echo/src/plugins/echo/editor/GeneratePage.java
   trunk/apps/Echo/src/plugins/echo/editor/InsertPage.java
   trunk/apps/Echo/src/plugins/echo/editor/Page.java
Log:
Echo: more bugfixes ... there is still a problem with USKs

Modified: trunk/apps/Echo/src/plugins/echo/Echo.java
===================================================================
--- trunk/apps/Echo/src/plugins/echo/Echo.java  2007-12-05 17:30:34 UTC (rev 
16336)
+++ trunk/apps/Echo/src/plugins/echo/Echo.java  2007-12-05 17:36:35 UTC (rev 
16337)
@@ -60,9 +60,7 @@

                        I18n.translateXML(styleSheet);
                        this.transform = new XSLTransform(styleSheet);
-
-                       this.projectManager = new ProjectManager(this);
-
+                       this.projectManager = new ProjectManager();
                        this.welcomePage = 
StaticPage.createFromContentFile("Welcome", "welcome.xml");
                        this.pages = new HashMap<String, Page>();
                } catch (Exception e) {
@@ -96,7 +94,7 @@
                        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("insert", new InsertPage(projectManager, 
respirator.getNode().clientCore.getFCPServer(), formPsw, 
respirator.getNode().random));

                        pages.put("write", 
StaticPage.createFromContentFile(I18n.getString("echo.action.write"), 
"write.xml"));
                        pages.put("manage", 
StaticPage.createFromContentFile(I18n.getString("echo.action.manage"), 
"manage.xml"));
@@ -116,7 +114,7 @@
        }

        public void terminate() {
-               // TODO
+               project.writeConfig();
        }

        public String handleHTTPGet(HTTPRequest request) throws 
PluginHTTPException {

Modified: trunk/apps/Echo/src/plugins/echo/Project.java
===================================================================
--- trunk/apps/Echo/src/plugins/echo/Project.java       2007-12-05 17:30:34 UTC 
(rev 16336)
+++ trunk/apps/Echo/src/plugins/echo/Project.java       2007-12-05 17:36:35 UTC 
(rev 16337)
@@ -1,5 +1,6 @@
 package plugins.echo;

+import freenet.crypt.RandomSource;
 import plugins.echo.block.BlockManager;

 import freenet.keys.FreenetURI;
@@ -20,11 +21,13 @@
 */
 public class Project {

-       private File projectDir;
-       private File projectConfigFile;
-       private Properties projectConfig;
+       private final File projectDir;
+       private final File projectConfigFile;
+       private final Properties projectConfig;
        private NodesManager nodesManager;
        private BlockManager blockManager;
+       private InsertableClientSSK keys = null;
+       private long edition = 1;

        /**
        * Class constructor specifying the base dir of the project.
@@ -38,8 +41,29 @@

                nodesManager = new NodesManager(new File(projectDir.getPath() + 
File.separator + "nodes"));
                blockManager = new BlockManager(new File(projectDir.getPath() + 
File.separator + "blocks"));
+       }
+       
+       public Project(File baseDir, String projectTitle, String id) {
+               this.projectDir = new File(baseDir.getPath() + File.separator + 
id);
+               this.projectConfigFile = new File(projectDir.getPath() + 
File.separator + "conf.xml");
+               this.projectConfig = new Properties();

+               projectDir.mkdirs();
+               (new File(projectDir.getPath() + File.separator + 
"nodes")).mkdirs();
+               (new File(projectDir.getPath() + File.separator + 
"blocks")).mkdirs();
+
+               projectConfig.setProperty("title", projectTitle);
+               try {
+                       writeConfig();
+                       this.nodesManager = new NodesManager(new 
File(projectDir.getPath() + File.separator + "nodes"));
+                       this.blockManager = new BlockManager(new 
File(projectDir.getPath() + File.separator + "blocks"));
+               } catch(ParsingException e) {
+               } catch(FileNotFoundException e) {
+               } catch(IOException e) {
+                       System.err.println("ECHO: Error writing the config. 
file!!" + e.getMessage());
+               }
        }
+                               
        /**
        *       Returns the project base dir
        *       @return the project base dir
@@ -65,9 +89,9 @@
        *       @return the insert URI of this project
        */
        public FreenetURI getInsertURI() {
+               InsertableClientSSK key = getKeys();
+               return (key == null ? null : key.getInsertURI());

-               return getURI("insertURI").getInsertURI();
-               
        }

        /**
@@ -75,33 +99,49 @@
        *       @return the request URI of this project
        */
        public FreenetURI getRequestURI() {
-               
-               return getURI("insertURI").getURI();
+               InsertableClientSSK key = getKeys();
+               return (key == null ? null : 
key.getURI().setSuggestedEdition(edition));

        }
+       
+       public static InsertableClientSSK generateKeys(RandomSource rand, 
String docName) {
+               return InsertableClientSSK.createRandom(rand, docName);
+       }

-       private InsertableClientSSK getURI(String key) {
-               
-               String str = projectConfig.getProperty(key);
-               if(str == null)
-                       return null;
-               
-               try {
-                       return InsertableClientSSK.create(new FreenetURI(str));
-                       
-               } catch (MalformedURLException mue) {
-                       return null;
+       private InsertableClientSSK getKeys() {
+               if(keys == null) {
+                       String str = projectConfig.getProperty("insertURI");
+                       String ed = projectConfig.getProperty("edition");
+                       if(str == null || ed == null) {
+                               return null;
+                       }
+                       try {
+                               keys = InsertableClientSSK.create(new 
FreenetURI(str));
+                               edition = Long.parseLong(ed);
+                       } catch(MalformedURLException mue) {
+                               return null;
+                       }
                }
+               return keys;
        }

        /**
        *       Registers the URI to insert this project
        *       @param uri the new insert URI
        */
-       public void setInsertURI(InsertableClientSSK uri) {
-       
+       public InsertableClientSSK setInsertURI(InsertableClientSSK uri) {
                projectConfig.setProperty("insertURI", uri.toString());
+               projectConfig.setProperty("edition", "1");
+               writeConfig();
+               
+               return keys = uri;
+       }

+       public void incrementEditionNumber() {
+               projectConfig.setProperty("insertURI", keys.toString());
+               projectConfig.setProperty("edition", String.valueOf(edition));
+               
+               writeConfig();
        }

        /**
@@ -128,12 +168,14 @@
        /**
        *       Stores the project config into the file conf.xml
        */
-       public void writeConfig() throws FileNotFoundException, IOException {
-       
-               FileOutputStream out = new FileOutputStream(projectConfigFile);
-               projectConfig.storeToXML(out, null);
-               out.close();
-               
+       public void writeConfig(){
+               try {
+                       FileOutputStream out = new 
FileOutputStream(projectConfigFile);
+                       projectConfig.storeToXML(out, null);
+                       out.close();
+               } catch (FileNotFoundException e){
+               } catch (IOException ioe) {
+               }
        }



Modified: trunk/apps/Echo/src/plugins/echo/ProjectManager.java
===================================================================
--- trunk/apps/Echo/src/plugins/echo/ProjectManager.java        2007-12-05 
17:30:34 UTC (rev 16336)
+++ trunk/apps/Echo/src/plugins/echo/ProjectManager.java        2007-12-05 
17:36:35 UTC (rev 16337)
@@ -1,12 +1,9 @@
 package plugins.echo;

-import freenet.crypt.RandomSource;
 import freenet.keys.InsertableClientSSK;

 import java.util.HashMap;
-import java.util.Properties;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.FileNotFoundException;

@@ -18,13 +15,12 @@
 public class ProjectManager {
        private HashMap<String,File> projects;
        private Project currentProject;
-       private Echo _e;
+       private InsertableClientSSK currentProjectKeys;

        /**
        *       Class constructor specifying the projects base dir and the 
random source used to generate the projects keys.
        */
-       public ProjectManager(Echo e) {
-               this._e = e;
+       public ProjectManager() {
                this.projects = new HashMap<String,File>();

                File[] files = Echo.BASE_DIR.listFiles();
@@ -78,32 +74,11 @@
                        if(! projects.containsKey(id))
                                break;
                }
-               
-               File projectDir = new File(Echo.BASE_DIR, id);
-               if(projectDir.mkdirs()) {
+               Project project = new Project(Echo.BASE_DIR, projectTitle, id);
+               projects.put(id, project.getProjectDir());
+               project.getBlockManager().createDefaultBlocks();

-                       (new File(projectDir.getPath() + File.separator + 
"nodes")).mkdirs();
-                       (new File(projectDir.getPath() + File.separator + 
"blocks")).mkdirs();
-                       
-                       FileOutputStream configFile = new 
FileOutputStream(projectDir.getPath() + File.separator + "conf.xml");
-                       Properties conf = new Properties();
-                       conf.setProperty("title", projectTitle);
-                       
-                       InsertableClientSSK key = 
InsertableClientSSK.createRandom(_e.respirator.getNode().random, projectTitle);
-                       conf.setProperty("insertURI", key.toString());
-                       
-                       conf.storeToXML(configFile, null);
-                       configFile.close();
-                       
-                       projects.put(id, projectDir);
-                       Project project = loadProject(id);
-                       project.getBlockManager().createDefaultBlocks();
-                       
-                       return project;
-                       
-               } else 
-                       throw new IOException("Unable to make the project 
directory");
-               
+               return project;
        }

        /**
@@ -135,8 +110,13 @@
        */
        public String[] getProjectsIds() {

-               return projects.keySet().toArray(new String[]{});
+               return projects.keySet().toArray(new String[0]);


        }
+       
+       public InsertableClientSSK getProjectKeys() {
+               
+               return currentProjectKeys;
+       }
 }
\ No newline at end of file

Modified: trunk/apps/Echo/src/plugins/echo/SiteGenerator.java
===================================================================
--- trunk/apps/Echo/src/plugins/echo/SiteGenerator.java 2007-12-05 17:30:34 UTC 
(rev 16336)
+++ trunk/apps/Echo/src/plugins/echo/SiteGenerator.java 2007-12-05 17:36:35 UTC 
(rev 16337)
@@ -7,6 +7,7 @@
 import nu.xom.xslt.*;

 import java.io.*;
+import plugins.echo.editor.InsertPage;

 public class SiteGenerator {

@@ -81,7 +82,7 @@
                for(Node post : posts) {
                        index.appendChild(post.summary().getRoot());
                }
-               makePage(index, "index.html");
+               makePage(index, InsertPage.DEFAULT_DOCUMENT_NAME);

 //             writeToFile(rssTransform.transform(new Document(index)), 
"feed.rss");


Modified: trunk/apps/Echo/src/plugins/echo/editor/GeneratePage.java
===================================================================
--- trunk/apps/Echo/src/plugins/echo/editor/GeneratePage.java   2007-12-05 
17:30:34 UTC (rev 16336)
+++ trunk/apps/Echo/src/plugins/echo/editor/GeneratePage.java   2007-12-05 
17:36:35 UTC (rev 16337)
@@ -38,7 +38,7 @@
                        String path = generator.getOutDir().getAbsolutePath();

                        appendContent("See the result : ");
-                       appendContent(HTMLHelper.link("file://" + path, path));
+                       appendContent(HTMLHelper.link("file://" + path + '/' + 
InsertPage.DEFAULT_DOCUMENT_NAME, path));
                }
        }


Modified: trunk/apps/Echo/src/plugins/echo/editor/InsertPage.java
===================================================================
--- trunk/apps/Echo/src/plugins/echo/editor/InsertPage.java     2007-12-05 
17:30:34 UTC (rev 16336)
+++ trunk/apps/Echo/src/plugins/echo/editor/InsertPage.java     2007-12-05 
17:36:35 UTC (rev 16337)
@@ -1,11 +1,11 @@
 package plugins.echo.editor;

+import freenet.crypt.RandomSource;
 import plugins.echo.Project;
 import plugins.echo.ProjectManager;
 import plugins.echo.SiteGenerator;
 import plugins.echo.SimpleDirectoryInserter;
 import freenet.keys.FreenetURI;
-import freenet.keys.InsertableClientSSK;
 import freenet.keys.USK;
 import freenet.support.api.HTTPRequest;
 import freenet.node.fcp.FCPServer;
@@ -18,6 +18,7 @@

 public class InsertPage extends Page {

+       public static final String DEFAULT_DOCUMENT_NAME = "index.html";
        public static final int KEY_INPUT_SIZE = 70;
        public static final int MAX_KEY_LENGTH = 1024*1024;

@@ -25,13 +26,15 @@
        private Project project;
        private FCPServer fcpServer;
        private String formPassword;
+       private final RandomSource random;

-       public InsertPage(ProjectManager projectManager, FCPServer server, 
String formPassword){
+       public InsertPage(ProjectManager projectManager, FCPServer server, 
String formPassword, RandomSource rand){

                super("Insert");
                this.formPassword = formPassword;
                this.projectManager = projectManager;
                this.fcpServer = server;
+               this.random = rand;
        }

        public void handleHTTPRequest(HTTPRequest request, boolean isPost) {
@@ -40,25 +43,32 @@
                project = projectManager.getCurrentProject();
                USK requestURI = null;
                try {
-                       requestURI = USK.create(project.getRequestURI());
+                       FreenetURI tmp = project.getRequestURI();
+                       if(tmp == null) { // generate the keypair
+                               
project.setInsertURI(Project.generateKeys(random, DEFAULT_DOCUMENT_NAME));
+                               tmp = project.getRequestURI();
+                       }
+                       requestURI = USK.create(tmp.setKeyType("USK"));
                } catch (MalformedURLException e) {
                        appendError(e);
+                       return;
                }

-               if (request.isPartSet("insert-key")) {                          
        
+               if (request.isPartSet("insert-it") && isPost) {                 
                
                        try {
+                               FreenetURI insertUri = project.getInsertURI();
+                               
                                SiteGenerator generator = new 
SiteGenerator(project);
                                generator.generate();

                                SimpleDirectoryInserter inserter = new 
SimpleDirectoryInserter(fcpServer);
-                               inserter.insert(new 
File(project.getProjectDir(), "out"), "index.html", project.getInsertURI());
+                               inserter.insert(new 
File(project.getProjectDir(), "out"), DEFAULT_DOCUMENT_NAME, insertUri);

-                               InsertableClientSSK insertURI = 
InsertableClientSSK.create(project.getInsertURI().setSuggestedEdition(requestURI.suggestedEdition
 + 1));
-                               project.setInsertURI(insertURI);
-
+                               project.incrementEditionNumber();
                                appendContent(HTMLHelper.link("/queue/", "Go to 
the queue page."));
                        } catch(Exception e) {
                                appendError(e);
+                               return;
                        }
 //                             }
                } else {
@@ -70,16 +80,12 @@

                Element form = HTMLHelper.form("", formPassword);

-               HTMLHelper.label(form, "insert-key", "Insert key");
-               Element insertKeyInput = HTMLHelper.input(form, "text", 
"insert-key");
-               insertKeyInput.addAttribute(new Attribute("size", 
String.valueOf(KEY_INPUT_SIZE)));
-               insertKeyInput.addAttribute(new Attribute("value", 
uri.getBaseSSK().toString()));
+               HTMLHelper.label(form, "request-key", "Request key:");
+               appendContent(HTMLHelper.link('/'+uri.getURI().toString(), 
uri.getURI().toString()));
+               
+               Element actionInput = HTMLHelper.input(form, "hidden", 
"insert-it");
+               actionInput.addAttribute(new Attribute("name", "insert-it"));

-               HTMLHelper.label(form, "request-key", "Request key");
-               Element requestKeyInput = HTMLHelper.input(form, "text", 
"request-key");
-               requestKeyInput.addAttribute(new Attribute("size", 
String.valueOf(KEY_INPUT_SIZE)));
-               requestKeyInput.addAttribute(new Attribute("value", 
uri.toString()));
-
                HTMLHelper.input(form, "submit", "submit");

                return form;

Modified: trunk/apps/Echo/src/plugins/echo/editor/Page.java
===================================================================
--- trunk/apps/Echo/src/plugins/echo/editor/Page.java   2007-12-05 17:30:34 UTC 
(rev 16336)
+++ trunk/apps/Echo/src/plugins/echo/editor/Page.java   2007-12-05 17:36:35 UTC 
(rev 16337)
@@ -77,8 +77,7 @@
        */
        protected void appendError(Throwable t){

-               errors.add(t.toString());
-
+               errors.add(t.getMessage());
        }

        /**


Reply via email to