X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fde%2Ftodesbaum%2Fjsite%2Fgui%2FProjectPage.java;h=98ad847d04d9fca07fc91aeff21497881705b430;hb=e47e15fdbb7515f5a3757c3f5df8c1d0950aee8e;hp=4089364c706d7869418a6da2fcb3839ea6e66585;hpb=6ab16b098b2380c0bb196fd3360ea1fd44a331bc;p=jSite.git diff --git a/src/de/todesbaum/jsite/gui/ProjectPage.java b/src/de/todesbaum/jsite/gui/ProjectPage.java index 4089364..98ad847 100644 --- a/src/de/todesbaum/jsite/gui/ProjectPage.java +++ b/src/de/todesbaum/jsite/gui/ProjectPage.java @@ -1,6 +1,5 @@ /* - * jSite - a tool for uploading websites into Freenet - * Copyright (C) 2006 David Roden + * jSite - ProjectPage.java - Copyright © 2006–2012 David Roden * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -59,6 +58,7 @@ import javax.swing.text.Document; import javax.swing.text.DocumentFilter; import de.todesbaum.jsite.application.Freenet7Interface; +import de.todesbaum.jsite.application.KeyDialog; import de.todesbaum.jsite.application.Project; import de.todesbaum.jsite.i18n.I18n; import de.todesbaum.jsite.i18n.I18nContainer; @@ -89,12 +89,12 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D /** The “clone project” action. */ private Action projectCloneAction; + /** The “manage keys” action. */ + private Action projectManageKeysAction; + /** The “copy URI” action. */ private Action projectCopyURIAction; - /** The “generate key” action. */ - private Action projectGenerateKeyAction; - /** The “reset edition” action. */ private Action projectResetEditionAction; @@ -102,7 +102,7 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D private JFileChooser pathChooser; /** The project list model. */ - private SortedListModel projectListModel; + private SortedListModel projectListModel; /** The project list scroll pane. */ private JScrollPane projectScrollPane; @@ -119,15 +119,15 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D /** The local path textfield. */ private JTextField projectLocalPathTextField; - /** The public key textfield. */ - private JTextField projectPublicKeyTextField; - - /** The private key textfield. */ - private JTextField projectPrivateKeyTextField; + /** The textfield for the complete URI. */ + private JTextField projectCompleteUriTextField; /** The project path textfield. */ private JTextField projectPathTextField; + /** Whether the “copy URI to clipboard” action was used. */ + private boolean uriCopied; + /** * Creates a new project page. * @@ -157,13 +157,13 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D createActions(); pathChooser = new JFileChooser(); - projectListModel = new SortedListModel(); + projectListModel = new SortedListModel(); projectList = new JList(projectListModel); projectList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); projectList.addListSelectionListener(this); - projectList.setPreferredSize(new Dimension(150, projectList.getPreferredSize().height)); add(projectScrollPane = new JScrollPane(projectList), BorderLayout.LINE_START); + projectScrollPane.setPreferredSize(new Dimension(150, projectList.getPreferredSize().height)); add(createInformationPanel(), BorderLayout.CENTER); } @@ -258,16 +258,16 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D projectCopyURIAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_U); projectCopyURIAction.setEnabled(false); - projectGenerateKeyAction = new AbstractAction(I18n.getMessage("jsite.project.action.generate-new-key")) { + projectManageKeysAction = new AbstractAction(I18n.getMessage("jsite.project.action.manage-keys")) { @SuppressWarnings("synthetic-access") public void actionPerformed(ActionEvent actionEvent) { - actionGenerateNewKey(); + actionManageKeys(); } }; - projectGenerateKeyAction.putValue(Action.SHORT_DESCRIPTION, I18n.getMessage("jsite.project.action.generate-new-key.tooltip")); - projectGenerateKeyAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_G); - projectGenerateKeyAction.setEnabled(false); + projectManageKeysAction.putValue(Action.SHORT_DESCRIPTION, I18n.getMessage("jsite.project.action.manage-keys.tooltip")); + projectManageKeysAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_M); + projectManageKeysAction.setEnabled(false); projectResetEditionAction = new AbstractAction(I18n.getMessage("jsite.project.action.reset-edition")) { @@ -294,8 +294,8 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D projectCloneAction.putValue(Action.SHORT_DESCRIPTION, I18n.getMessage("jsite.project.action.clone-project.tooltip")); projectCopyURIAction.putValue(Action.NAME, I18n.getMessage("jsite.project.action.copy-uri")); projectCopyURIAction.putValue(Action.SHORT_DESCRIPTION, I18n.getMessage("jsite.project.action.copy-uri.tooltip")); - projectGenerateKeyAction.putValue(Action.NAME, I18n.getMessage("jsite.project.action.generate-new-key")); - projectGenerateKeyAction.putValue(Action.SHORT_DESCRIPTION, I18n.getMessage("jsite.project.action.generate-new-key.tooltip")); + projectManageKeysAction.putValue(Action.NAME, I18n.getMessage("jsite.project.action.manage-keys")); + projectManageKeysAction.putValue(Action.SHORT_DESCRIPTION, I18n.getMessage("jsite.project.action.manage-keys.tooltip")); projectResetEditionAction.putValue(Action.NAME, I18n.getMessage("jsite.project.action.reset-edition")); projectResetEditionAction.putValue(Action.SHORT_DESCRIPTION, I18n.getMessage("jsite.project.action.reset-edition.tooltip")); pathChooser.setApproveButtonText(I18n.getMessage("jsite.project.action.browse.choose")); @@ -318,7 +318,7 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D functionButtons.add(new JButton(projectAddAction)); functionButtons.add(new JButton(projectDeleteAction)); functionButtons.add(new JButton(projectCloneAction)); - functionButtons.add(new JButton(projectCopyURIAction)); + functionButtons.add(new JButton(projectManageKeysAction)); informationPanel.add(functionButtons, BorderLayout.PAGE_START); informationPanel.add(informationTable, BorderLayout.CENTER); @@ -357,26 +357,6 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D final JLabel projectAddressLabel = new JLabel("" + I18n.getMessage("jsite.project.project.address") + ""); informationTable.add(projectAddressLabel, new GridBagConstraints(0, 4, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(12, 0, 0, 0), 0, 0)); - projectPublicKeyTextField = new JTextField(27); - projectPublicKeyTextField.getDocument().putProperty("name", "project.publickey"); - projectPublicKeyTextField.getDocument().addDocumentListener(this); - projectPublicKeyTextField.setEnabled(false); - - final TLabel projectPublicKeyLabel = new TLabel(I18n.getMessage("jsite.project.project.public-key") + ":", KeyEvent.VK_U, projectPublicKeyTextField); - informationTable.add(projectPublicKeyLabel, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0)); - informationTable.add(projectPublicKeyTextField, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0)); - informationTable.add(new JButton(projectGenerateKeyAction), new GridBagConstraints(2, 5, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0)); - - projectPrivateKeyTextField = new JTextField(27); - projectPrivateKeyTextField.getDocument().putProperty("name", "project.privatekey"); - projectPrivateKeyTextField.getDocument().addDocumentListener(this); - projectPrivateKeyTextField.setEnabled(false); - - final TLabel projectPrivateKeyLabel = new TLabel(I18n.getMessage("jsite.project.project.private-key") + ":", KeyEvent.VK_R, projectPrivateKeyTextField); - informationTable.add(projectPrivateKeyLabel, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0)); - informationTable.add(projectPrivateKeyTextField, new GridBagConstraints(1, 6, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0)); - informationTable.add(new JButton(projectResetEditionAction), new GridBagConstraints(2, 6, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0)); - projectPathTextField = new JTextField(); projectPathTextField.getDocument().putProperty("name", "project.path"); projectPathTextField.getDocument().addDocumentListener(this); @@ -386,21 +366,45 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D * {@inheritDoc} */ @Override + @SuppressWarnings("synthetic-access") public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { super.insertString(fb, offset, string.replaceAll("/", ""), attr); + updateCompleteURI(); } /** * {@inheritDoc} */ @Override + @SuppressWarnings("synthetic-access") public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { super.replace(fb, offset, length, text.replaceAll("/", ""), attrs); + updateCompleteURI(); + } + + /** + * {@inheritDoc} + */ + @Override + @SuppressWarnings("synthetic-access") + public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { + super.remove(fb, offset, length); + updateCompleteURI(); } }); projectPathTextField.setEnabled(false); final TLabel projectPathLabel = new TLabel(I18n.getMessage("jsite.project.project.path") + ":", KeyEvent.VK_P, projectPathTextField); + informationTable.add(projectPathLabel, new GridBagConstraints(0, 5, 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, 5, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0)); + + projectCompleteUriTextField = new JTextField(); + projectCompleteUriTextField.setEditable(false); + final TLabel projectUriLabel = new TLabel(I18n.getMessage("jsite.project.project.uri") + ":", KeyEvent.VK_U, projectCompleteUriTextField); + informationTable.add(projectUriLabel, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(6, 18, 0, 0), 0, 0)); + informationTable.add(projectCompleteUriTextField, new GridBagConstraints(1, 6, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0)); + informationTable.add(new JButton(projectCopyURIAction), new GridBagConstraints(2, 6, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(6, 6, 0, 0), 0, 0)); + I18nContainer.getInstance().registerRunnable(new Runnable() { public void run() { @@ -409,13 +413,10 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D projectDescriptionLabel.setText(I18n.getMessage("jsite.project.project.description") + ":"); projectLocalPathLabel.setText(I18n.getMessage("jsite.project.project.local-path") + ":"); projectAddressLabel.setText("" + I18n.getMessage("jsite.project.project.address") + ""); - projectPublicKeyLabel.setText(I18n.getMessage("jsite.project.project.public-key") + ":"); - projectPrivateKeyLabel.setText(I18n.getMessage("jsite.project.project.private-key") + ":"); projectPathLabel.setText(I18n.getMessage("jsite.project.project.path") + ":"); + projectUriLabel.setText(I18n.getMessage("jsite.project.project.uri") + ":"); } }); - informationTable.add(projectPathLabel, 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)); return informationPanel; } @@ -439,7 +440,7 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D * @return The list of projects */ public Project[] getProjects() { - return (Project[]) projectListModel.toArray(new Project[projectListModel.size()]); + return projectListModel.toArray(new Project[projectListModel.size()]); } /** @@ -462,6 +463,16 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D } /** + * Returns whether the “copy URI to clipboard” button was used. + * + * @return {@code true} if the “copy URI to clipboard” button was used, + * {@code false} otherwise + */ + public boolean wasUriCopied() { + return uriCopied; + } + + /** * Updates the currently selected project with changed information from a * textfield. * @@ -580,30 +591,32 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D Project selectedProject = (Project) projectList.getSelectedValue(); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(new StringSelection(selectedProject.getFinalRequestURI(0)), this); + uriCopied = true; } } /** - * Generates a new key for the currently selected project. + * Opens a {@link KeyDialog} and lets the user manipulate the keys of the + * project. */ - private void actionGenerateNewKey() { - if (JOptionPane.showConfirmDialog(this, I18n.getMessage("jsite.project.warning.generate-new-key"), null, JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) { - return; - } + private void actionManageKeys() { int selectedIndex = projectList.getSelectedIndex(); if (selectedIndex > -1) { Project selectedProject = (Project) projectList.getSelectedValue(); - String[] keyPair = null; - try { - keyPair = freenetInterface.generateKeyPair(); - } catch (IOException ioe1) { - JOptionPane.showMessageDialog(this, MessageFormat.format(I18n.getMessage("jsite.project.keygen.io-error"), ioe1.getMessage()), null, JOptionPane.ERROR_MESSAGE); - return; + KeyDialog keyDialog = new KeyDialog(freenetInterface, wizard); + keyDialog.setPrivateKey(selectedProject.getInsertURI()); + keyDialog.setPublicKey(selectedProject.getRequestURI()); + keyDialog.setVisible(true); + if (!keyDialog.wasCancelled()) { + String originalPublicKey = selectedProject.getRequestURI(); + String originalPrivateKey = selectedProject.getInsertURI(); + selectedProject.setInsertURI(keyDialog.getPrivateKey()); + selectedProject.setRequestURI(keyDialog.getPublicKey()); + if (!originalPublicKey.equals(selectedProject.getRequestURI()) || !originalPrivateKey.equals(selectedProject.getInsertURI())) { + selectedProject.setEdition(-1); + } + updateCompleteURI(); } - selectedProject.setInsertURI(keyPair[0]); - selectedProject.setRequestURI(keyPair[1]); - projectPublicKeyTextField.setText(selectedProject.getRequestURI()); - projectPrivateKeyTextField.setText(selectedProject.getInsertURI()); } } @@ -618,6 +631,18 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D if (selectedIndex > -1) { Project selectedProject = (Project) projectList.getSelectedValue(); selectedProject.setEdition(-1); + updateCompleteURI(); + } + } + + /** + * Updates the complete URI text field. + */ + private void updateCompleteURI() { + int selectedIndex = projectList.getSelectedIndex(); + if (selectedIndex > -1) { + Project selectedProject = (Project) projectList.getSelectedValue(); + projectCompleteUriTextField.setText(selectedProject.getFinalRequestURI(0)); } } @@ -634,29 +659,25 @@ public class ProjectPage extends TWizardPage implements ListSelectionListener, D projectNameTextField.setEnabled(selectedRow > -1); projectDescriptionTextField.setEnabled(selectedRow > -1); projectLocalPathTextField.setEnabled(selectedRow > -1); - projectPublicKeyTextField.setEnabled(selectedRow > -1); - projectPrivateKeyTextField.setEnabled(selectedRow > -1); projectPathTextField.setEnabled(selectedRow > -1); projectLocalPathBrowseAction.setEnabled(selectedRow > -1); projectDeleteAction.setEnabled(selectedRow > -1); projectCloneAction.setEnabled(selectedRow > -1); projectCopyURIAction.setEnabled(selectedRow > -1); - projectGenerateKeyAction.setEnabled(selectedRow > -1); + projectManageKeysAction.setEnabled(selectedRow > -1); projectResetEditionAction.setEnabled(selectedRow > -1); if (selectedRow > -1) { projectNameTextField.setText(selectedProject.getName()); projectDescriptionTextField.setText(selectedProject.getDescription()); projectLocalPathTextField.setText(selectedProject.getLocalPath()); - projectPublicKeyTextField.setText(selectedProject.getRequestURI()); - projectPrivateKeyTextField.setText(selectedProject.getInsertURI()); projectPathTextField.setText(selectedProject.getPath()); + projectCompleteUriTextField.setText("freenet:" + selectedProject.getFinalRequestURI(0)); } else { projectNameTextField.setText(""); projectDescriptionTextField.setText(""); projectLocalPathTextField.setText(""); - projectPublicKeyTextField.setText(""); - projectPrivateKeyTextField.setText(""); projectPathTextField.setText(""); + projectCompleteUriTextField.setText(""); } }