version 0.5: show usk keys only, update usk on insert completion
authorDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Mon, 17 Jul 2006 18:24:50 +0000 (18:24 +0000)
committerDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Mon, 17 Jul 2006 18:24:50 +0000 (18:24 +0000)
44 files changed:
src/de/todesbaum/jsite/application/EditionProject.java
src/de/todesbaum/jsite/application/FileOption.java
src/de/todesbaum/jsite/application/Freenet7Interface.java
src/de/todesbaum/jsite/application/InsertListener.java
src/de/todesbaum/jsite/application/Node.java
src/de/todesbaum/jsite/application/Project.java
src/de/todesbaum/jsite/application/ProjectInserter.java
src/de/todesbaum/jsite/gui/NodeManagerListener.java
src/de/todesbaum/jsite/gui/NodeManagerPage.java
src/de/todesbaum/jsite/gui/ProjectFilesPage.java
src/de/todesbaum/jsite/gui/ProjectInsertPage.java
src/de/todesbaum/jsite/gui/ProjectPage.java
src/de/todesbaum/jsite/i18n/I18n.java
src/de/todesbaum/jsite/i18n/jSite.properties
src/de/todesbaum/jsite/i18n/jSite_de.properties
src/de/todesbaum/jsite/main/CLI.java
src/de/todesbaum/jsite/main/Configuration.java
src/de/todesbaum/jsite/main/Main.java
src/de/todesbaum/util/freenet/fcp2/Client.java
src/de/todesbaum/util/freenet/fcp2/ClientHello.java
src/de/todesbaum/util/freenet/fcp2/ClientPut.java
src/de/todesbaum/util/freenet/fcp2/ClientPutComplexDir.java
src/de/todesbaum/util/freenet/fcp2/ClientPutDir.java
src/de/todesbaum/util/freenet/fcp2/Command.java
src/de/todesbaum/util/freenet/fcp2/Connection.java
src/de/todesbaum/util/freenet/fcp2/ConnectionListener.java
src/de/todesbaum/util/freenet/fcp2/DirectFileEntry.java
src/de/todesbaum/util/freenet/fcp2/DiskFileEntry.java
src/de/todesbaum/util/freenet/fcp2/FileEntry.java
src/de/todesbaum/util/freenet/fcp2/GenerateSSK.java
src/de/todesbaum/util/freenet/fcp2/Message.java
src/de/todesbaum/util/freenet/fcp2/Node.java
src/de/todesbaum/util/freenet/fcp2/Persistence.java
src/de/todesbaum/util/freenet/fcp2/PriorityClass.java
src/de/todesbaum/util/freenet/fcp2/Verbosity.java
src/de/todesbaum/util/image/IconLoader.java
src/de/todesbaum/util/io/LineInputStream.java
src/de/todesbaum/util/io/ReplacingOutputStream.java
src/de/todesbaum/util/io/StreamCopier.java
src/de/todesbaum/util/swing/SortedListModel.java
src/de/todesbaum/util/swing/TLabel.java
src/de/todesbaum/util/swing/TWizard.java
src/de/todesbaum/util/swing/TWizardPage.java
src/de/todesbaum/util/swing/WizardListener.java

index e548115..df06111 100644 (file)
@@ -24,7 +24,7 @@ package de.todesbaum.jsite.application;
  * currently the only project type.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: EditionProject.java 417 2006-03-29 12:36:54Z bombe $
+ * @version $Id$
  */
 public class EditionProject extends Project {
 
@@ -75,8 +75,8 @@ public class EditionProject extends Project {
         * @return The final request URI
         */
        @Override
-       public String getFinalURI(int editionOffset) {
-               return requestURI + path + "-" + (edition + editionOffset) + "/";
+       public String getFinalRequestURI(int offset) {
+               return "freenet:USK@" + requestURI + "/" + path + "/" + (edition + offset) + "/";
        }
 
 }
index 6b1ed81..94cd9b7 100644 (file)
@@ -39,10 +39,10 @@ public class FileOption {
                insert = DEFAULT_INSERT;
                customKey = DEFAULT_CUSTOM_KEY;
                this.defaultMimeType = defaultMimeType;
-               this.mimeType = defaultMimeType;
-               this.container = DEFAULT_CONTAINER;
-               this.editionRange = DEFAULT_EDITION_RANGE;
-               this.replaceEdition = DEFAULT_REPLACE_EDITION;
+               mimeType = defaultMimeType;
+               container = DEFAULT_CONTAINER;
+               editionRange = DEFAULT_EDITION_RANGE;
+               replaceEdition = DEFAULT_REPLACE_EDITION;
        }
 
        /**
@@ -124,18 +124,24 @@ public class FileOption {
        }
 
        public boolean isCustom() {
-               if (insert != DEFAULT_INSERT)
+               if (insert != DEFAULT_INSERT) {
                        return true;
-               if (!customKey.equals(DEFAULT_CUSTOM_KEY))
+               }
+               if (!customKey.equals(DEFAULT_CUSTOM_KEY)) {
                        return true;
-               if (!defaultMimeType.equals(mimeType))
+               }
+               if (!defaultMimeType.equals(mimeType)) {
                        return true;
-               if (!DEFAULT_CONTAINER.equals(container))
+               }
+               if (!DEFAULT_CONTAINER.equals(container)) {
                        return true;
-               if (replaceEdition != DEFAULT_REPLACE_EDITION)
+               }
+               if (replaceEdition != DEFAULT_REPLACE_EDITION) {
                        return true;
-               if (editionRange != DEFAULT_EDITION_RANGE)
+               }
+               if (editionRange != DEFAULT_EDITION_RANGE) {
                        return true;
+               }
                return false;
        }
 
index fefb220..5b93654 100644 (file)
@@ -29,7 +29,7 @@ import de.todesbaum.util.freenet.fcp2.Node;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Freenet7Interface.java 418 2006-03-29 17:49:16Z bombe $
+ * @version $Id$
  */
 public class Freenet7Interface {
 
index 0966e10..e3328cc 100644 (file)
@@ -23,7 +23,7 @@ import java.util.EventListener;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: InsertListener.java 397 2006-03-25 16:11:34Z bombe $
+ * @version $Id$
  */
 public interface InsertListener extends EventListener {
 
@@ -32,6 +32,7 @@ public interface InsertListener extends EventListener {
        }
 
        public void projectInsertStarted(Project project);
+       public void projectURIGenerated(Project project, String uri);
 
        public void projectInsertProgress(Project project, int succeeded, int failed, int fatal, int total, boolean finalized);
 
index 7db0cb0..838346e 100644 (file)
@@ -21,7 +21,7 @@ package de.todesbaum.jsite.application;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Node.java 419 2006-03-29 17:49:46Z bombe $
+ * @version $Id$
  */
 public class Node extends de.todesbaum.util.freenet.fcp2.Node {
 
@@ -78,6 +78,7 @@ public class Node extends de.todesbaum.util.freenet.fcp2.Node {
                this.port = port;
        }
        
+       @Override
        public boolean equals(Object o) {
                if ((o == null) || !(o instanceof Node)) {
                        return false;
@@ -86,10 +87,12 @@ public class Node extends de.todesbaum.util.freenet.fcp2.Node {
                return name.equals(node.name) && hostname.equals(node.hostname) && (port == node.port);
        }
        
+       @Override
        public int hashCode() {
                return name.hashCode() ^ hostname.hashCode() ^ port;
        }
 
+       @Override
        public String toString() {
                return name + " (" + hostname + ":" + port + ")";
        }
index 0f28ef3..807385a 100644 (file)
@@ -28,7 +28,7 @@ import de.todesbaum.util.mime.DefaultMIMETypes;
 
 /**
  * @author David Roden <dr@todesbaum.dyndns.org>
- * @version $Id: Project.java 357 2006-03-24 15:46:03Z bombe $
+ * @version $Id$
  */
 public abstract class Project implements Comparable {
 
@@ -77,7 +77,7 @@ public abstract class Project implements Comparable {
         *            The title to set.
         */
        public void setName(String title) {
-               this.name = title;
+               name = title;
        }
 
        /**
@@ -137,7 +137,7 @@ public abstract class Project implements Comparable {
         *            The lastInserted to set.
         */
        public void setLastInsertionTime(long lastInserted) {
-               this.lastInsertionTime = lastInserted;
+               lastInsertionTime = lastInserted;
        }
 
        /**
@@ -152,7 +152,7 @@ public abstract class Project implements Comparable {
         *            The name to set.
         */
        public void setPath(String name) {
-               this.path = name;
+               path = name;
        }
 
        /**
@@ -167,7 +167,7 @@ public abstract class Project implements Comparable {
         *            The insertURI to set.
         */
        public void setInsertURI(String insertURI) {
-               this.insertURI = insertURI;
+               this.insertURI = shortenURI(insertURI);
        }
 
        /**
@@ -182,12 +182,26 @@ public abstract class Project implements Comparable {
         *            The requestURI to set.
         */
        public void setRequestURI(String requestURI) {
-               this.requestURI = requestURI;
+               this.requestURI = shortenURI(requestURI);
        }
 
+       @Override
        public String toString() {
                return name;
        }
+       
+       private String shortenURI(String uri) {
+               if (uri.startsWith("freenet:")) {
+                       uri = uri.substring("freenet:".length());
+               }
+               if (uri.startsWith("SSK@")) {
+                       uri = uri.substring("SSK@".length());
+               }
+               if (uri.endsWith("/")) {
+                       uri = uri.substring(0, uri.length() - 1);
+               }
+               return uri;
+       }
 
        public String shortenFilename(File file) {
                String filename = file.getPath();
@@ -210,14 +224,18 @@ public abstract class Project implements Comparable {
        }
 
        public void setFileOption(String filename, FileOption fileOption) {
-               fileOptions.put(filename, fileOption);
+               if (fileOption != null) {
+                       fileOptions.put(filename, fileOption);
+               } else {
+                       fileOptions.remove(filename);
+               }
        }
 
        /**
         * @return Returns the fileOptions.
         */
        public Map<String, FileOption> getFileOptions() {
-               return Collections.unmodifiableMap(fileOptions);
+               return Collections.unmodifiableMap(new HashMap<String, FileOption>(fileOptions));
        }
 
        /**
@@ -228,9 +246,9 @@ public abstract class Project implements Comparable {
                this.fileOptions.clear();
                this.fileOptions.putAll(fileOptions);
        }
-
-       public String getFinalURI(int editionOffset) {
-               return requestURI + path + "/";
+       
+       public String getFinalRequestURI(int offset) {
+               return "freenet:USK@" + requestURI + "/" + path + "/";
        }
 
        /**
index d525ddb..ced3008 100644 (file)
@@ -48,7 +48,7 @@ import de.todesbaum.util.io.StreamCopier;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ProjectInserter.java 486 2006-04-27 10:58:34Z bombe $
+ * @version $Id$
  */
 public class ProjectInserter implements FileScannerListener, Runnable {
 
@@ -74,6 +74,12 @@ public class ProjectInserter implements FileScannerListener, Runnable {
                        insertListener.projectInsertStarted(project);
                }
        }
+       
+       protected void fireProjectURIGenerated(String uri) {
+               for (InsertListener insertListener: insertListeners) {
+                       insertListener.projectURIGenerated(project, uri);
+               }
+       }
 
        protected void fireProjectInsertProgress(int succeeded, int failed, int fatal, int total, boolean finalized) {
                for (InsertListener insertListener: insertListeners) {
@@ -134,11 +140,10 @@ public class ProjectInserter implements FileScannerListener, Runnable {
                ByteArrayOutputStream filteredByteOutputStream = new ByteArrayOutputStream(Math.min(Integer.MAX_VALUE, (int) length[0]));
                ReplacingOutputStream outputStream = new ReplacingOutputStream(filteredByteOutputStream);
                FileInputStream fileInput = new FileInputStream(file);
-               outputStream.addReplacement("$[CONTAINER]", "/");
                outputStream.addReplacement("$[EDITION]", String.valueOf(edition));
-               outputStream.addReplacement("$[URI]", project.getFinalURI(0));
+               outputStream.addReplacement("$[URI]", project.getFinalRequestURI(0));
                for (int index = 1; index <= fileOption.getEditionRange(); index++) {
-                       outputStream.addReplacement("$[URI+" + index + "]", project.getFinalURI(index));
+                       outputStream.addReplacement("$[URI+" + index + "]", project.getFinalRequestURI(index));
                        outputStream.addReplacement("$[EDITION+" + index + "]", String.valueOf(edition + index));
                }
                StreamCopier.copy(fileInput, outputStream, length[0]);
@@ -262,7 +267,7 @@ public class ProjectInserter implements FileScannerListener, Runnable {
 
                /* collect files */
                int edition = ((EditionProject) project).getEdition();
-               String dirURI = project.getInsertURI() + project.getPath() + "-" + edition;
+               String dirURI = "freenet:USK@" + project.getInsertURI() + "/" + project.getPath() + "/" + edition + "/";
                ClientPutComplexDir putDir = new ClientPutComplexDir("dir-" + counter++, dirURI);
                putDir.setDefaultName(project.getIndexFile());
                putDir.setVerbosity(Verbosity.ALL);
@@ -283,17 +288,20 @@ public class ProjectInserter implements FileScannerListener, Runnable {
                }
 
                /* parse progress and success messages */
-               boolean success = true;
+               boolean success = false;
                boolean finished = false;
                boolean disconnected = false;
                while (!finished) {
                        Message message = client.readMessage();
-                       finished = (message == null) && (disconnected = client.isDisconnected());
+                       finished = (message == null) || (disconnected = client.isDisconnected());
                        if (debug) {
                                System.out.println(message);
                        }
                        if (!finished) {
                                String messageName = message.getName();
+                               if ("URIGenerated".equals(messageName)) {
+                                       fireProjectURIGenerated(message.get("URI"));
+                               }
                                if ("SimpleProgress".equals(messageName)) {
                                        int total = Integer.parseInt(message.get("Total"));
                                        int succeeded = Integer.parseInt(message.get("Succeeded"));
index 039561e..3a14a50 100644 (file)
@@ -26,7 +26,7 @@ import de.todesbaum.jsite.application.Node;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: NodeManagerListener.java 418 2006-03-29 17:49:16Z bombe $
+ * @version $Id$
  */
 public interface NodeManagerListener extends EventListener {
 
index 1309fbf..2c23dc5 100644 (file)
@@ -61,7 +61,7 @@ import de.todesbaum.util.swing.TWizardPage;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: NodeManagerPage.java 418 2006-03-29 17:49:16Z bombe $
+ * @version $Id$
  */
 public class NodeManagerPage extends TWizardPage implements ListSelectionListener, DocumentListener, ChangeListener {
 
index 1b5b8c6..b256e51 100644 (file)
@@ -31,6 +31,7 @@ import java.awt.event.KeyEvent;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 import javax.swing.AbstractAction;
@@ -71,7 +72,7 @@ import de.todesbaum.util.swing.TWizardPage;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ProjectFilesPage.java 404 2006-03-26 02:11:03Z bombe $
+ * @version $Id$
  */
 public class ProjectFilesPage extends TWizardPage implements ActionListener, ListSelectionListener, DocumentListener, FileScannerListener, ChangeListener {
 
@@ -143,6 +144,7 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
                deleteContainerAction.setEnabled(false);
        }
 
+       @Override
        public void pageAdded(TWizard wizard) {
                this.wizard = wizard;
                actionScan();
@@ -351,6 +353,13 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
                                        rebuildContainerComboBox();
                                }
                        });
+                       Iterator<String> filenames = project.getFileOptions().keySet().iterator();
+                       while (filenames.hasNext()) {
+                               String filename = filenames.next();
+                               if (!files.contains(filename)) {
+                                       project.setFileOption(filename, null);
+                               }
+                       }
                } else {
                        JOptionPane.showMessageDialog(wizard, I18n.getMessage("jsite.project-files.scan-error"), null, JOptionPane.ERROR_MESSAGE);
                }
@@ -462,8 +471,9 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
 
        private void processDocumentUpdate(DocumentEvent documentEvent) {
                String filename = (String) projectFileList.getSelectedValue();
-               if (filename == null)
+               if (filename == null) {
                        return;
+               }
                FileOption fileOption = project.getFileOption(filename);
                Document document = documentEvent.getDocument();
                try {
@@ -503,8 +513,9 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
         */
        public void stateChanged(ChangeEvent changeEvent) {
                String filename = (String) projectFileList.getSelectedValue();
-               if (filename == null)
+               if (filename == null) {
                        return;
+               }
                FileOption fileOption = project.getFileOption(filename);
                Object source = changeEvent.getSource();
                if (source instanceof JSpinner) {
index ef06fc5..c2b42b0 100644 (file)
@@ -35,7 +35,6 @@ import javax.swing.JProgressBar;
 import javax.swing.JTextField;
 import javax.swing.SwingUtilities;
 
-import de.todesbaum.jsite.application.EditionProject;
 import de.todesbaum.jsite.application.Freenet7Interface;
 import de.todesbaum.jsite.application.InsertListener;
 import de.todesbaum.jsite.application.Project;
@@ -46,7 +45,7 @@ import de.todesbaum.util.swing.TWizardPage;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ProjectInsertPage.java 408 2006-03-29 09:31:10Z bombe $
+ * @version $Id$
  */
 public class ProjectInsertPage extends TWizardPage implements InsertListener {
 
@@ -77,8 +76,6 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener {
 
                requestURITextField = new JTextField();
                requestURITextField.setEditable(false);
-               requestURITextField.setBackground(getBackground());
-               requestURITextField.setBorder(null);
 
                startTimeLabel = new JLabel();
 
@@ -127,18 +124,11 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener {
                SwingUtilities.invokeLater(new Runnable() {
 
                        public void run() {
-                               StringBuffer uriBuffer = new StringBuffer();
-                               uriBuffer.append(project.getRequestURI());
-                               uriBuffer.append(project.getPath());
-                               if (project instanceof EditionProject) {
-                                       uriBuffer.append('-').append(((EditionProject) project).getEdition());
-                               }
-                               uriBuffer.append('/');
-                               requestURITextField.setText(uriBuffer.toString());
+                               requestURITextField.setText(project.getFinalRequestURI(0));
                        }
                });
        }
-
+       
        public void setFreenetInterface(Freenet7Interface freenetInterface) {
                projectInserter.setFreenetInterface(freenetInterface);
        }
@@ -159,6 +149,17 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener {
                        }
                });
        }
+       
+       /**
+        * {@inheritDoc}
+        */
+       public void projectURIGenerated(Project project, final String uri) {
+               SwingUtilities.invokeLater(new Runnable() {
+                       public void run() {
+                               requestURITextField.setText(uri);
+                       }
+               });
+       }
 
        /**
         * {@inheritDoc}
index 96a027d..0ff7b3c 100644 (file)
@@ -66,7 +66,7 @@ import de.todesbaum.util.swing.TWizardPage;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ProjectPage.java 418 2006-03-29 17:49:16Z bombe $
+ * @version $Id$
  */
 public class ProjectPage extends TWizardPage implements ListSelectionListener, ChangeListener, DocumentListener {
 
@@ -86,7 +86,6 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, C
        private JTextField projectPublicKeyTextField;
        private JTextField projectPrivateKeyTextField;
        private JTextField projectPathTextField;
-       private JSpinner projectEditionSpinner;
 
        public ProjectPage() {
                super();
@@ -240,15 +239,6 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, C
                informationTable.add(new TLabel(I18n.getMessage("jsite.project.project.path") + ":", KeyEvent.VK_P, projectPathTextField), new GridBagConstraints(0, 7, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
                informationTable.add(projectPathTextField, new GridBagConstraints(1, 7, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
 
-               projectEditionSpinner = new JSpinner(new SpinnerNumberModel(1, 0, Integer.MAX_VALUE, 1));
-               ((NumberEditor) projectEditionSpinner.getEditor()).getTextField().setColumns(6);
-               projectEditionSpinner.setName("project.edition");
-               projectEditionSpinner.addChangeListener(this);
-               projectEditionSpinner.setEnabled(false);
-
-               informationTable.add(new TLabel(I18n.getMessage("jsite.project.project.edition") + ":", KeyEvent.VK_E, projectEditionSpinner), new GridBagConstraints(0, 8, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
-               informationTable.add(projectEditionSpinner, new GridBagConstraints(1, 8, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 6, 0, 0), 0, 0));
-
                return informationPanel;
        }
 
@@ -308,8 +298,9 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, C
 
        protected void actionLocalPathBrowse() {
                Project project = (Project) projectList.getSelectedValue();
-               if (project == null)
+               if (project == null) {
                        return;
+               }
                pathChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                if (pathChooser.showDialog(this, I18n.getMessage("jsite.project.action.browse.choose")) == JFileChooser.APPROVE_OPTION) {
                        projectLocalPathTextField.setText(pathChooser.getSelectedFile().getPath());
@@ -380,7 +371,6 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, C
                projectPublicKeyTextField.setEnabled(selectedRow > -1);
                projectPrivateKeyTextField.setEnabled(selectedRow > -1);
                projectPathTextField.setEnabled(selectedRow > -1);
-               projectEditionSpinner.setEnabled(selectedRow > -1);
                projectLocalPathBrowseAction.setEnabled(selectedRow > -1);
                projectDeleteAction.setEnabled(selectedRow > -1);
                projectCloneAction.setEnabled(selectedRow > -1);
@@ -393,7 +383,6 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, C
                        projectPathTextField.setText(selectedProject.getPath());
                        if (selectedProject instanceof EditionProject) {
                                EditionProject editionProject = (EditionProject) selectedProject;
-                               projectEditionSpinner.setValue(editionProject.getEdition());
                        }
                } else {
                        projectNameTextField.setText("");
@@ -402,7 +391,6 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, C
                        projectPublicKeyTextField.setText("");
                        projectPrivateKeyTextField.setText("");
                        projectPathTextField.setText("");
-                       projectEditionSpinner.setValue(0);
                }
        }
 
index 38a6916..ccda88b 100644 (file)
 package de.todesbaum.jsite.i18n;
 
 import java.util.Locale;
+import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: I18n.java 355 2006-03-24 15:04:11Z bombe $
+ * @version $Id$
  */
 public class I18n {
 
+       private static Locale defaultLocale = new Locale("en");
        private static Locale currentLocale;
 
        public static Locale getLocale() {
-               if (currentLocale == null)
+               if (currentLocale == null) {
                        currentLocale = Locale.getDefault();
+               }
                return currentLocale;
        }
 
@@ -50,7 +53,11 @@ public class I18n {
        }
 
        public static String getMessage(String key) {
-               return getResourceBundle().getString(key);
+               try {
+                       return getResourceBundle().getString(key);
+               } catch (MissingResourceException mre1) {
+                       return getResourceBundle(defaultLocale).getString(key);
+               }
        }
 
 }
index 46fc098..c09e05a 100644 (file)
@@ -125,3 +125,4 @@ jsite.project-files.index-not-html=<html><b>Default file is not HTML</b><br><br>
 jsite.project-files.no-node-running=<html><b>Node is not running</b><br><br>You can not insert a project if your node is not running.<br>Please start your node and try again.</html>
 jsite.project-files.no-custom-key=<html><b>No custom key for file</b><br><br>You specified not to insert <code>{0}</code><br>but failed to enter a key to redirect to!</html>
 jsite.project-files.no-node-selected=<html><b>No node selected</b><br><br>Please select a node from the menu!</html>
+jsite.project-files.insert-now=Insert now
index 140b1bc..9db0e47 100644 (file)
@@ -125,3 +125,4 @@ jsite.project-files.index-not-html=<html><b>Index-Datei ist kein HTML</b><br><br
 jsite.project-files.no-node-running=<html><b>Der Node läuft nicht</b><br><br>Sie können das Projekt nicht einfügen, wenn<br>Ihr Node nicht läuft. Bitte starten Sie Ihren Node<br>und probieren Sie es erneut.</html> 
 jsite.project-files.no-custom-key=<html><b>Kein externer Schlüssel</b><br><br>Sie haben angegeben, dass die Datei <code>{0}</code><br>nicht eingefügt werden soll. Allerdings haben Sie<br>keinen extern erstellten Schlüssel angegeben.</html>
 jsite.project-files.no-node-selected=<html><b>Kein Node ausgewählt</b><br><br>Bitte wählen Sie einen Node aus dem Menü!</html>
+jsite.project-files.insert-now=Jetzt einfügen
index c401aaa..1533c11 100644 (file)
@@ -30,7 +30,7 @@ import de.todesbaum.jsite.application.ProjectInserter;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: CLI.java 418 2006-03-29 17:49:16Z bombe $
+ * @version $Id$
  */
 public class CLI implements InsertListener {
 
@@ -75,8 +75,7 @@ public class CLI implements InsertListener {
                projectInserter.setFreenetInterface(freenetInterface);
 
                Project currentProject = null;
-               for (int argumentIndex = 0, argumentSize = args.length; argumentIndex < argumentSize; argumentIndex++) {
-                       String argument = args[argumentIndex];
+               for (String argument: args) {
                        String value = argument.substring(argument.indexOf('=') + 1).trim();
                        if (argument.startsWith("--node=")) {
                                Node newNode = getNode(value);
@@ -187,6 +186,10 @@ public class CLI implements InsertListener {
                outputWriter.println("Starting Insert of project \"" + project.getName() + "\".");
        }
 
+       public void projectURIGenerated(Project project, String uri) {
+               outputWriter.println("URI: " + uri);
+       }
+
        /**
         * {@inheritDoc}
         */
@@ -198,7 +201,7 @@ public class CLI implements InsertListener {
         * {@inheritDoc}
         */
        public void projectInsertFinished(Project project, boolean success, Throwable cause) {
-               outputWriter.println("Request URI: " + project.getFinalURI(0));
+               outputWriter.println("Request URI: " + project.getFinalRequestURI(0));
                finished = true;
                if (success) {
                        if (project instanceof EditionProject) {
index 1a06f37..9b43784 100644 (file)
@@ -44,7 +44,7 @@ import de.todesbaum.util.xml.XML;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Configuration.java 418 2006-03-29 17:49:16Z bombe $
+ * @version $Id$
  */
 public class Configuration {
 
@@ -176,6 +176,7 @@ public class Configuration {
         * @return The hostname of the node
         * @deprecated Use {@link #getSelectedNode()} instead
         */
+       @Deprecated
        public String getNodeAddress() {
                return getNodeValue(new String[] { "node-address" }, "localhost");
        }
@@ -185,6 +186,7 @@ public class Configuration {
         * @param nodeAddress The hostname of the node
         * @deprecated Use {@link #setSelectedNode(Node)} instead
         */
+       @Deprecated
        public void setNodeAddress(String nodeAddress) {
                rootNode.replace("node-address", nodeAddress);
        }
@@ -194,6 +196,7 @@ public class Configuration {
         * @return The port number of the node
         * @deprecated Use {@link #getSelectedNode()} instead. 
         */
+       @Deprecated
        public int getNodePort() {
                return getNodeIntValue(new String[] { "node-port" }, 9481);
        }
@@ -203,6 +206,7 @@ public class Configuration {
         * @param nodePort The port number of the node
         * @deprecated Use {@link #setSelectedNode(Node)} instead
         */
+       @Deprecated
        public void setNodePort(int nodePort) {
                rootNode.replace("node-port", String.valueOf(nodePort));
        }
index aba3080..76d456d 100644 (file)
@@ -59,7 +59,7 @@ import de.todesbaum.util.swing.WizardListener;
 
 /**
  * @author <a href="mailto:droden@gmail.com">David Roden </a>
- * @version $Id: Main.java 464 2006-04-04 21:53:33Z bombe $
+ * @version $Id$
  */
 public class Main implements ActionListener, ListSelectionListener, WizardListener, NodeManagerListener {
 
@@ -278,6 +278,7 @@ public class Main implements ActionListener, ListSelectionListener, WizardListen
                        ((ProjectFilesPage) pages.get(PageType.PAGE_PROJECT_FILES)).setProject(project);
                        ((ProjectInsertPage) pages.get(PageType.PAGE_INSERT_PROJECT)).setProject(project);
                        showPage(PageType.PAGE_PROJECT_FILES);
+                       wizard.setNextName(I18n.getMessage("jsite.project-files.insert-now"));
                        wizard.setPreviousName(I18n.getMessage("jsite.wizard.previous"));
                } else if ("page.project.files".equals(pageName)) {
                        ProjectPage projectPage = (ProjectPage) pages.get(PageType.PAGE_PROJECTS);
@@ -320,6 +321,7 @@ public class Main implements ActionListener, ListSelectionListener, WizardListen
                                return;
                        }
                        configuration.save();
+                       wizard.setNextName(I18n.getMessage("jsite.wizard.next"));
                        showPage(PageType.PAGE_INSERT_PROJECT);
                        nodeMenu.setEnabled(false);
                } else if ("page.project.insert".equals(pageName)) {
@@ -338,6 +340,7 @@ public class Main implements ActionListener, ListSelectionListener, WizardListen
                        wizard.setPreviousName(I18n.getMessage("jsite.wizard.previous"));
                } else if ("page.project.files".equals(pageName)) {
                        showPage(PageType.PAGE_PROJECTS);
+                       wizard.setNextName(I18n.getMessage("jsite.wizard.next"));
                        wizard.setPreviousName((String) manageNodeAction.getValue(Action.NAME));
                } else if ("page.project.insert".equals(pageName)) {
                        showPage(PageType.PAGE_PROJECT_FILES);
index e904a26..bf02444 100644 (file)
@@ -28,7 +28,7 @@ import java.util.List;
  * {@link Node} and delivers resulting {@link Message}s.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Client.java 413 2006-03-29 12:22:31Z bombe $
+ * @version $Id$
  */
 public class Client implements ConnectionListener {
 
index a482345..ef84667 100644 (file)
@@ -30,7 +30,7 @@ import java.io.Writer;
  * The node can answer with the following messages: <code>NodeHello</code>.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ClientHello.java 356 2006-03-24 15:13:38Z bombe $
+ * @version $Id$
  */
 public class ClientHello extends Command {
 
index 1d97ed3..b6b91b1 100644 (file)
@@ -27,7 +27,7 @@ import java.io.Writer;
  * requests have in common.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ClientPut.java 356 2006-03-24 15:13:38Z bombe $
+ * @version $Id$
  */
 public abstract class ClientPut extends Command {
 
index 08c8a53..2feec72 100644 (file)
@@ -32,7 +32,7 @@ import java.util.Vector;
  * command can be used to insert directories that do not exist on disk.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ClientPutComplexDir.java 356 2006-03-24 15:13:38Z bombe $
+ * @version $Id$
  */
 public class ClientPutComplexDir extends ClientPutDir {
 
index 1181e11..1474c7d 100644 (file)
@@ -26,7 +26,7 @@ import java.io.Writer;
  * Abstract base class for all put requests that insert a directory.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ClientPutDir.java 356 2006-03-24 15:13:38Z bombe $
+ * @version $Id$
  */
 public class ClientPutDir extends ClientPut {
 
index 5dd9593..d1086c8 100644 (file)
@@ -35,7 +35,7 @@ import java.io.Writer;
  * something you did not expect.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Command.java 371 2006-03-25 10:38:13Z bombe $
+ * @version $Id$
  */
 public abstract class Command {
 
index 1eeded0..1109aec 100644 (file)
@@ -39,7 +39,7 @@ import de.todesbaum.util.io.TempFileInputStream;
  * A physical connection to a Freenet node.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Connection.java 413 2006-03-29 12:22:31Z bombe $
+ * @version $Id$
  */
 public class Connection {
 
@@ -155,9 +155,6 @@ public class Connection {
                        nodeSocket.setReceiveBufferSize(65535);
                        nodeInputStream = nodeSocket.getInputStream();
                        nodeOutputStream = nodeSocket.getOutputStream();
-                       // nodeWriter = new TeeWriter(new
-                       // OutputStreamWriter(nodeOutputStream, Charset.forName("UTF-8")),
-                       // new PrintWriter(System.out));
                        nodeWriter = new OutputStreamWriter(nodeOutputStream, Charset.forName("UTF-8"));
                        nodeReader = new NodeReader(nodeInputStream);
                        Thread nodeReaderThread = new Thread(nodeReader);
@@ -267,7 +264,7 @@ public class Connection {
         * listeners about the messages.
         * 
         * @author David Roden &lt;droden@gmail.com&gt;
-        * @version $Id: Connection.java 413 2006-03-29 12:22:31Z bombe $
+        * @version $Id$
         */
        private class NodeReader implements Runnable {
 
@@ -297,7 +294,7 @@ public class Connection {
                                Message message = null;
                                while (line != null) {
                                        line = nodeReader.readLine();
-                                       // System.err.println("> " + line);
+                                        System.err.println("> " + line);
                                        if (line == null) {
                                                break;
                                        }
index 0bc77bb..86b33d6 100644 (file)
@@ -25,7 +25,7 @@ import java.util.EventListener;
  * Interface for clients that want to be notified when a message was received.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ConnectionListener.java 356 2006-03-24 15:13:38Z bombe $
+ * @version $Id$
  */
 public interface ConnectionListener extends EventListener {
 
index a337d17..351fb9c 100644 (file)
@@ -27,7 +27,7 @@ import java.io.InputStream;
  * existing FCP connection.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: DirectFileEntry.java 413 2006-03-29 12:22:31Z bombe $
+ * @version $Id$
  */
 public class DirectFileEntry extends FileEntry {
 
index c4fed77..e2eabc8 100644 (file)
@@ -23,7 +23,7 @@ package de.todesbaum.util.freenet.fcp2;
  * A {@link FileEntry} that reads the content from a file on the disk.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: DiskFileEntry.java 413 2006-03-29 12:22:31Z bombe $
+ * @version $Id$
  */
 public class DiskFileEntry extends FileEntry {
 
index 7567725..117c27f 100644 (file)
@@ -25,7 +25,7 @@ package de.todesbaum.util.freenet.fcp2;
  * the files of an insert.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: FileEntry.java 413 2006-03-29 12:22:31Z bombe $
+ * @version $Id$
  */
 public abstract class FileEntry {
 
index cfeaa74..a0699f7 100644 (file)
@@ -25,7 +25,7 @@ package de.todesbaum.util.freenet.fcp2;
  * The node can answer with the following messages: <code>SSKKeypair</code>.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: GenerateSSK.java 413 2006-03-29 12:22:31Z bombe $
+ * @version $Id$
  */
 public class GenerateSSK extends Command {
 
index a8460f8..a966d67 100644 (file)
@@ -32,7 +32,7 @@ import java.util.Map.Entry;
  * <code>SSKKeypair</code>, and <code>EndListPersistentRequests</code>.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Message.java 413 2006-03-29 12:22:31Z bombe $
+ * @version $Id$
  * @see de.todesbaum.util.freenet.fcp2.Client
  */
 public class Message {
index e444d22..b60de44 100644 (file)
@@ -23,7 +23,7 @@ package de.todesbaum.util.freenet.fcp2;
  * Contains the hostname and port number of the Freenet node.
  * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Node.java 356 2006-03-24 15:13:38Z bombe $
+ * @version $Id$
  */
 public class Node {
 
index 105fdb1..b111a3e 100644 (file)
 package de.todesbaum.util.freenet.fcp2;
 
 /**
+ * The possible persistence options. This specify whether (and for how long) the
+ * node remembers to execute a request and the results. Possible values are
+ * <code>connection</code>, <code>reboot</code>, and <code>forever</code>.
+ * <code>connection</code> means that a request is aborted as soon as the
+ * connection to the node is severed. <code>reboot</code> means that a request
+ * is remembered as long as the node is running but not after restarts.
+ * <code>forever</code> finally means that a request persists until it is
+ * explicitely deleted.
+ * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Persistence.java 373 2006-03-25 10:42:52Z bombe $
+ * @version $Id$
+ * @see de.todesbaum.util.freenet.fcp2.ModifyPersistentRequest
+ * @see de.todesbaum.util.freenet.fcp2.RemovePersistentRequest
  */
 public final class Persistence {
 
+       /**
+        * Denotes that a request should be terminated if the connection to the node
+        * is severed.
+        */
        public static final Persistence CONNECTION = new Persistence("connection");
+
+       /** Denotes that a request should be remembered until the node is restarted. */
        public static final Persistence REBOOT = new Persistence("reboot");
+
+       /**
+        * Denotes that a request should be remembered until it is explicitely
+        * deleted.
+        */
        public static final Persistence FOREVER = new Persistence("forever");
 
+       /** The name of this persistence option. */
        private String name;
 
+       /**
+        * Private constructor that creates a persistence option with the specified
+        * name.
+        * 
+        * @param name
+        *            The name of the persistence option.
+        */
        private Persistence(String name) {
                this.name = name;
        }
 
        /**
-        * @return Returns the name.
+        * Returns the name of this persistence option.
+        * 
+        * @return The name of this persistence option
         */
        public String getName() {
                return name;
        }
 
+       /**
+        * Returns a textual representation of this persistence option. The result
+        * is identical to calling {@link #getName()}.
+        * 
+        * @return The name of this persistence option
+        */
        public String toString() {
                return name;
        }
index 9f9ea0e..13b149e 100644 (file)
 package de.todesbaum.util.freenet.fcp2;
 
 /**
+ * The possible priority classes. Possible values are, in order of descending
+ * priority: <code>maximum</code> (anything more important than fproxy),
+ * <code>interactive</code> (fproxy), <code>semi-interactive</code> (fproxy
+ * immediate mode large file downloads, not to disk), <code>updatable</code>
+ * (updatable site checks), <code>bulk</code> (large file downloads to disk),
+ * <code>prefetch</code>, <code>minimum</code>.
+ * 
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: PriorityClass.java 356 2006-03-24 15:13:38Z bombe $
+ * @version $Id$
  */
 public final class PriorityClass {
 
+       /** Denotes <code>maximum</code> priority class. */
        public static final PriorityClass MAXIMUM = new PriorityClass("maximum", 0);
+
+       /** Denotes <code>interactive</code> priority class. */
        public static final PriorityClass INTERACTIVE = new PriorityClass("interactive", 1);
+
+       /** Denotes <code>semi-interactive</code> priority class. */
        public static final PriorityClass SEMI_INTERACTIVE = new PriorityClass("semiInteractive", 2);
+
+       /** Denotes <code>updatable</code> priority class. */
        public static final PriorityClass UPDATABLE = new PriorityClass("updatable", 3);
+
+       /** Denotes <code>bulk</code> priority class. */
        public static final PriorityClass BULK = new PriorityClass("bulk", 4);
+
+       /** Denotes <code>prefetch</code> priority class. */
        public static final PriorityClass PREFETCH = new PriorityClass("prefetch", 5);
+
+       /** Denotes <code>minimum</code> priority class. */
        public static final PriorityClass MINIMUM = new PriorityClass("minimum", 6);
 
+       /** The name of the priority class. */
        private String name;
+
+       /** The value of the priority class. */
        private int value;
 
+       /**
+        * Creates a new priority class with the specified name and value.
+        * 
+        * @param name
+        *            The name of the priority class
+        * @param value
+        *            The value of the priority class
+        */
        private PriorityClass(String name, int value) {
                this.name = name;
                this.value = value;
        }
 
        /**
-        * @return Returns the name.
+        * Returns the name of this priority class.
+        * 
+        * @return The name of this priority class
         */
        public String getName() {
                return name;
        }
 
        /**
-        * @return Returns the value.
+        * Returns the value of this priority class.
+        * 
+        * @return The value of this priority class
         */
        public int getValue() {
                return value;
index f027779..4214d9c 100644 (file)
@@ -21,7 +21,7 @@ package de.todesbaum.util.freenet.fcp2;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: Verbosity.java 356 2006-03-24 15:13:38Z bombe $
+ * @version $Id$
  */
 public final class Verbosity {
 
index a889481..793e8a0 100644 (file)
@@ -25,7 +25,7 @@ import javax.swing.ImageIcon;
 
 /**
  * @author <a href="mailto:droden@gmail.com">David Roden</a>
- * @version $Id: IconLoader.java 130 2006-02-18 18:27:11Z bombe $
+ * @version $Id$
  */
 public class IconLoader {
 
index 48500bb..b548afc 100644 (file)
@@ -26,7 +26,7 @@ import java.io.InputStream;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: LineInputStream.java 429 2006-03-29 18:04:48Z bombe $
+ * @version $Id$
  */
 public class LineInputStream extends FilterInputStream {
        
index 65e9c5d..17d8242 100644 (file)
@@ -30,7 +30,7 @@ import java.util.Map.Entry;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: ReplacingOutputStream.java 431 2006-03-29 18:06:18Z bombe $
+ * @version $Id$
  */
 public class ReplacingOutputStream extends FilterOutputStream {
 
index 982d556..e79a900 100644 (file)
@@ -25,7 +25,7 @@ import java.io.OutputStream;
  * Copies input from an {@link InputStream} to an {@link OutputStream}.
  * 
  * @author <a href="mailto:droden@gmail.com">David Roden</a>
- * @version $Id: StreamCopier.java 428 2006-03-29 18:03:36Z bombe $
+ * @version $Id$
  */
 public class StreamCopier {
 
index 9d341dd..eebf86a 100644 (file)
@@ -31,7 +31,7 @@ import javax.swing.AbstractListModel;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: SortedListModel.java 338 2006-03-20 15:40:48Z bombe $
+ * @version $Id$
  */
 public class SortedListModel extends AbstractListModel implements List {
        
index 617f1d7..65474ac 100644 (file)
@@ -26,7 +26,7 @@ import javax.swing.JLabel;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: TLabel.java 280 2006-03-17 20:24:27Z bombe $
+ * @version $Id$
  */
 public class TLabel extends JLabel {
 
index 234f969..e865ed4 100644 (file)
@@ -42,7 +42,7 @@ import javax.swing.border.EmptyBorder;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: TWizard.java 426 2006-03-29 18:02:50Z bombe $
+ * @version $Id$
  */
 public class TWizard extends JFrame implements WindowListener {
        
index ec5942e..f660ec5 100644 (file)
@@ -23,7 +23,7 @@ import javax.swing.JPanel;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: TWizardPage.java 427 2006-03-29 18:03:06Z bombe $
+ * @version $Id$
  */
 public class TWizardPage extends JPanel {
 
index b4328fc..bfb19c3 100644 (file)
@@ -24,7 +24,7 @@ import java.util.EventListener;
 
 /**
  * @author David Roden &lt;droden@gmail.com&gt;
- * @version $Id: WizardListener.java 280 2006-03-17 20:24:27Z bombe $
+ * @version $Id$
  */
 public interface WizardListener extends EventListener {