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());
}
/**