Implement way to not insert a file at all.
authorDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Thu, 21 Jan 2010 14:51:57 +0000 (15:51 +0100)
committerDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Thu, 21 Jan 2010 14:51:57 +0000 (15:51 +0100)
src/de/todesbaum/jsite/application/FileOption.java
src/de/todesbaum/jsite/application/ProjectInserter.java
src/de/todesbaum/jsite/gui/ProjectFilesPage.java
src/de/todesbaum/jsite/i18n/jSite.properties
src/de/todesbaum/jsite/i18n/jSite_de.properties
src/de/todesbaum/jsite/main/Configuration.java
src/de/todesbaum/jsite/main/Main.java

index 6b979a6..46396f6 100644 (file)
@@ -44,6 +44,9 @@ public class FileOption {
        /** The insert state. */
        private boolean insert;
 
+       /** Whether to insert a redirect. */
+       private boolean insertRedirect;
+
        /** The custom key. */
        private String customKey;
 
@@ -80,7 +83,8 @@ public class FileOption {
 
        /**
         * Returns the custom key. The custom key is only used when
-        * {@link #isInsert()} returns <code>true</code>.
+        * {@link #isInsert()} and {@link #isInsertRedirect()} both return {@code
+        * true}.
         *
         * @return The custom key
         */
@@ -90,7 +94,7 @@ public class FileOption {
 
        /**
         * Sets the custom key. The custom key is only used when {@link #isInsert()}
-        * returns <code>true</code>.
+        * and {@link #isInsertRedirect()} both return {@code true}.
         *
         * @param customKey
         *            The custom key
@@ -104,8 +108,9 @@ public class FileOption {
        }
 
        /**
-        * Returns whether the file should be inserted. If a file is not inserted, a
-        * custom key has to be specified for it.
+        * Returns whether the file should be inserted. If a file is not inserted
+        * and {@link #isInsertRedirect()} is also {@code false}, the file will not
+        * be inserted at all.
         *
         * @see #setCustomKey(String)
         * @return <code>true</code> if the file should be inserted,
@@ -116,8 +121,9 @@ public class FileOption {
        }
 
        /**
-        * Sets whether the file should be inserted. If a file is not inserted, a
-        * custom key has to be specified for it.
+        * Sets whether the file should be inserted. If a file is not inserted and
+        * {@link #isInsertRedirect()} is also {@code false}, the file will not be
+        * inserted at all.
         *
         * @param insert
         *            <code>true</code> if the file should be inserted,
@@ -128,6 +134,34 @@ public class FileOption {
        }
 
        /**
+        * Returns whether a redirect to a different key should be inserted. This
+        * will only matter if {@link #isInsert()} returns {@code false}. The key
+        * that should be redirected to still needs to be specified via
+        * {@link #setCustomKey(String)}.
+        *
+        * @return {@code true} if a redirect should be inserted, {@code false}
+        *         otherwise
+        */
+       public boolean isInsertRedirect() {
+               return insertRedirect;
+       }
+
+       /**
+        * Sets whether a redirect should be inserted. This will only matter if
+        * {@link #isInsert()} returns {@code false}, i.e. it has been
+        * {@link #setInsert(boolean)} to {@code false}. The key that should be
+        * redirected to still needs to be specified via
+        * {@link #setCustomKey(String)}.
+        *
+        * @param insertRedirect
+        *            {@code true} if a redirect should be inserted, {@code false}
+        *            otherwise
+        */
+       public void setInsertRedirect(boolean insertRedirect) {
+               this.insertRedirect = insertRedirect;
+       }
+
+       /**
         * Sets the MIME type of the file. Setting the MIME type to
         * <code>null</code> will set the MIME type to the default MIME type.
         *
index c6d0f85..569e2fe 100644 (file)
@@ -344,7 +344,9 @@ public class ProjectInserter implements FileScannerListener, Runnable {
                                        /* ignore, null is returned. */
                                }
                        } else {
-                               fileEntry = new RedirectFileEntry(filename, fileOption.getMimeType(), fileOption.getCustomKey());
+                               if (fileOption.isInsertRedirect()) {
+                                       fileEntry = new RedirectFileEntry(filename, fileOption.getMimeType(), fileOption.getCustomKey());
+                               }
                        }
                }
                return fileEntry;
index 146161c..5fc0bcb 100644 (file)
@@ -106,6 +106,9 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
        /** The “insert” checkbox. */
        private JCheckBox fileOptionsInsertCheckBox;
 
+       /** The “insert redirect” checkbox. */
+       private JCheckBox fileOptionsInsertRedirectCheckBox;
+
        /** The “custom key” textfield. */
        private JTextField fileOptionsCustomKeyTextField;
 
@@ -268,9 +271,16 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
                fileOptionsCustomKeyTextField.setEnabled(false);
                fileOptionsCustomKeyTextField.getDocument().addDocumentListener(this);
 
+               fileOptionsInsertRedirectCheckBox = new JCheckBox(I18n.getMessage("jsite.project-files.insert-redirect"), false);
+               fileOptionsInsertRedirectCheckBox.setToolTipText(I18n.getMessage("jsite.project-files.insert-redirect.tooltip"));
+               fileOptionsInsertRedirectCheckBox.setName("insert-redirect");
+               fileOptionsInsertRedirectCheckBox.setMnemonic(KeyEvent.VK_R);
+               fileOptionsInsertRedirectCheckBox.addActionListener(this);
+
                final TLabel customKeyLabel = new TLabel(I18n.getMessage("jsite.project-files.custom-key") + ":", KeyEvent.VK_K, fileOptionsCustomKeyTextField);
-               fileOptionsPanel.add(customKeyLabel, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
-               fileOptionsPanel.add(fileOptionsCustomKeyTextField, new GridBagConstraints(1, 5, 4, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
+               fileOptionsPanel.add(fileOptionsInsertRedirectCheckBox, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0));
+               fileOptionsPanel.add(customKeyLabel, new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 6, 0, 0), 0, 0));
+               fileOptionsPanel.add(fileOptionsCustomKeyTextField, new GridBagConstraints(2, 5, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0));
 
                fileOptionsMIMETypeComboBox = new JComboBox(DefaultMIMETypes.getAllMIMETypes());
                fileOptionsMIMETypeComboBox.setToolTipText(I18n.getMessage("jsite.project-files.mime-type.tooltip"));
@@ -340,6 +350,8 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
                                defaultFileCheckBox.setToolTipText(I18n.getMessage("jsite.project-files.default.tooltip"));
                                fileOptionsInsertCheckBox.setText(I18n.getMessage("jsite.project-files.insert"));
                                fileOptionsInsertCheckBox.setToolTipText(I18n.getMessage("jsite.project-files.insert.tooltip"));
+                               fileOptionsInsertRedirectCheckBox.setText(I18n.getMessage("jsite.project-files.insert-redirect"));
+                               fileOptionsInsertRedirectCheckBox.setToolTipText(I18n.getMessage("jsite.project-files.insert-redirect.tooltip"));
                                fileOptionsCustomKeyTextField.setToolTipText(I18n.getMessage("jsite.project-files.custom-key.tooltip"));
                                customKeyLabel.setText(I18n.getMessage("jsite.project-files.custom-key") + ":");
                                fileOptionsMIMETypeComboBox.setToolTipText(I18n.getMessage("jsite.project-files.mime-type.tooltip"));
@@ -564,11 +576,15 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
                                }
                        } else if ("insert".equals(checkBox.getName())) {
                                boolean isInsert = checkBox.isSelected();
-                               fileOptionsCustomKeyTextField.setEnabled(!isInsert);
                                fileOption.setInsert(isInsert);
                                if (!isInsert) {
                                        fileOptionsContainerComboBox.setSelectedItem("");
                                }
+                               fileOptionsInsertRedirectCheckBox.setEnabled(!isInsert);
+                       } else if ("insert-redirect".equals(checkBox.getName())) {
+                               boolean isInsertRedirect = checkBox.isSelected();
+                               fileOption.setInsertRedirect(isInsertRedirect);
+                               fileOptionsCustomKeyTextField.setEnabled(isInsertRedirect);
                        } else if ("project-files.replace-edition".equals(checkBox.getName())) {
                                boolean replaceEdition = checkBox.isSelected();
                                fileOption.setReplaceEdition(replaceEdition);
@@ -604,7 +620,6 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
                boolean insert = fileOptionsInsertCheckBox.isSelected();
                defaultFileCheckBox.setEnabled(enabled);
                fileOptionsInsertCheckBox.setEnabled(enabled);
-               fileOptionsCustomKeyTextField.setEnabled(enabled && !insert);
                fileOptionsMIMETypeComboBox.setEnabled(enabled);
                fileOptionsContainerComboBox.setEnabled(enabled);
                addContainerAction.setEnabled(enabled);
@@ -615,6 +630,9 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
                        FileOption fileOption = project.getFileOption(filename);
                        defaultFileCheckBox.setSelected(filename.equals(project.getIndexFile()));
                        fileOptionsInsertCheckBox.setSelected(fileOption.isInsert());
+                       fileOptionsInsertRedirectCheckBox.setEnabled(!fileOption.isInsert());
+                       fileOptionsInsertRedirectCheckBox.setSelected(fileOption.isInsertRedirect());
+                       fileOptionsCustomKeyTextField.setEnabled(fileOption.isInsertRedirect());
                        fileOptionsCustomKeyTextField.setText(fileOption.getCustomKey());
                        fileOptionsMIMETypeComboBox.getModel().setSelectedItem(fileOption.getMimeType());
                        fileOptionsContainerComboBox.setSelectedItem(fileOption.getContainer());
@@ -624,6 +642,9 @@ public class ProjectFilesPage extends TWizardPage implements ActionListener, Lis
                } else {
                        defaultFileCheckBox.setSelected(false);
                        fileOptionsInsertCheckBox.setSelected(true);
+                       fileOptionsInsertRedirectCheckBox.setEnabled(false);
+                       fileOptionsInsertRedirectCheckBox.setSelected(false);
+                       fileOptionsCustomKeyTextField.setEnabled(false);
                        fileOptionsCustomKeyTextField.setText("CHK@");
                        fileOptionsMIMETypeComboBox.getModel().setSelectedItem(DefaultMIMETypes.DEFAULT_MIME_TYPE);
                        fileOptionsContainerComboBox.setSelectedItem("");
index ff74685..c356bc8 100644 (file)
@@ -150,6 +150,8 @@ jsite.project-files.default=Default file
 jsite.project-files.default.tooltip=Specify that this file is the project\u2019s index file
 jsite.project-files.insert=Insert
 jsite.project-files.insert.tooltip=Uncheck if this file was inserted externally
+jsite.project-files.insert-redirect=Redirect
+jsite.project-files.insert-redirect.tooltip=Check if you want to insert a redirect for this file
 jsite.project-files.custom-key=Custom key
 jsite.project-files.custom-key.tooltip=The externally created key for the file
 jsite.project-files.mime-type=MIME type
index 67dc81c..fddeda9 100644 (file)
@@ -150,6 +150,8 @@ jsite.project-files.default=Index-Datei
 jsite.project-files.default.tooltip=Lege Index-Datei f\u00fcr Projekt fest
 jsite.project-files.insert=Einf\u00fcgen
 jsite.project-files.insert.tooltip=jSite f\u00fcgt diese Datei ein
+jsite.project-files.insert-redirect=Umleitung
+jsite.project-files.insert-redirect.tooltip=F\u00fcgt eine Umleitung ein
 jsite.project-files.custom-key=Extern erstellter Schl\u00fcssel
 jsite.project-files.custom-key.tooltip=Der extern erstellte Schl\u00fcssel f\u00fcr diese Datei
 jsite.project-files.mime-type=MIME-Typ
index 3bbce38..a54d529 100644 (file)
@@ -356,6 +356,9 @@ public class Configuration {
                                                        String filename = fileOptionNode.getNode("filename").getValue();
                                                        FileOption fileOption = project.getFileOption(filename);
                                                        fileOption.setInsert(Boolean.parseBoolean(fileOptionNode.getNode("insert").getValue()));
+                                                       if (fileOptionNode.getNode("insert-redirect") != null) {
+                                                               fileOption.setInsertRedirect(Boolean.parseBoolean(fileOptionNode.getNode("insert-redirect").getValue()));
+                                                       }
                                                        fileOption.setCustomKey(fileOptionNode.getNode("custom-key").getValue(""));
                                                        fileOption.setMimeType(fileOptionNode.getNode("mime-type").getValue(""));
                                                        fileOption.setContainer(fileOptionNode.getNode("container").getValue());
@@ -404,6 +407,7 @@ public class Configuration {
                                        SimpleXML fileOptionNode = fileOptionsNode.append("file-option");
                                        fileOptionNode.append("filename", entry.getKey());
                                        fileOptionNode.append("insert", String.valueOf(fileOption.isInsert()));
+                                       fileOptionNode.append("insert-redirect", String.valueOf(fileOption.isInsertRedirect()));
                                        fileOptionNode.append("custom-key", fileOption.getCustomKey());
                                        fileOptionNode.append("mime-type", fileOption.getMimeType());
                                        fileOptionNode.append("container", fileOption.getContainer());
index 38a2347..80e0dd0 100644 (file)
@@ -541,7 +541,7 @@ public class Main implements ActionListener, ListSelectionListener, WizardListen
                        Set<Entry<String, FileOption>> fileOptionEntries = fileOptions.entrySet();
                        for (Entry<String, FileOption> fileOptionEntry : fileOptionEntries) {
                                FileOption fileOption = fileOptionEntry.getValue();
-                               if (!fileOption.isInsert() && ((fileOption.getCustomKey().length() == 0) || "CHK@".equals(fileOption.getCustomKey()))) {
+                               if (!fileOption.isInsert() && fileOption.isInsertRedirect() && ((fileOption.getCustomKey().length() == 0) || "CHK@".equals(fileOption.getCustomKey()))) {
                                        JOptionPane.showMessageDialog(wizard, MessageFormat.format(I18n.getMessage("jsite.project-files.no-custom-key"), fileOptionEntry.getKey()), null, JOptionPane.ERROR_MESSAGE);
                                        return;
                                }