[freenet-cvs] r16337 - in trunk/apps/Echo/src/plugins/echo: . editor

nextgens at freenetproject.org nextgens at freenetproject.org
Wed Dec 5 17:36:35 UTC 2007


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




More information about the cvs mailing list