Expose whether the insert is currently running.
[jSite.git] / src / de / todesbaum / jsite / gui / ProjectInsertPage.java
index 3b852a9..86305aa 100644 (file)
@@ -34,6 +34,8 @@ import java.awt.event.KeyEvent;
 import java.text.DateFormat;
 import java.text.MessageFormat;
 import java.util.Date;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -62,6 +64,9 @@ import de.todesbaum.util.swing.TWizardPage;
  */
 public class ProjectInsertPage extends TWizardPage implements InsertListener, ClipboardOwner {
 
+       /** The logger. */
+       private static final Logger logger = Logger.getLogger(ProjectInsertPage.class.getName());
+
        /** The project inserter. */
        private ProjectInserter projectInserter;
 
@@ -83,6 +88,12 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl
        /** The number of inserted blocks. */
        private volatile int insertedBlocks;
 
+       /** Whether the “copy URI to clipboard” button was used. */
+       private boolean uriCopied;
+
+       /** Whether the insert is currently running. */
+       private volatile boolean running = false;
+
        /**
         * Creates a new progress insert wizard page.
         *
@@ -203,6 +214,7 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl
         * Starts the insert.
         */
        public void startInsert() {
+               running = true;
                wizard.setNextEnabled(false);
                copyURIAction.setEnabled(false);
                progressBar.setValue(0);
@@ -212,6 +224,26 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl
        }
 
        /**
+        * Stops the currently running insert.
+        */
+       public void stopInsert() {
+               if (running) {
+                       wizard.setNextEnabled(false);
+                       projectInserter.stop();
+               }
+       }
+
+       /**
+        * Returns whether the insert is currently running.
+        *
+        * @return {@code true} if the insert is currently running, {@code false}
+        *         otherwise
+        */
+       public boolean isRunning() {
+               return running;
+       }
+
+       /**
         * Sets the project to insert.
         *
         * @param project
@@ -250,6 +282,16 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl
                projectInserter.setTempDirectory(tempDirectory);
        }
 
+       /**
+        * Returns whether the “copy URI to clipboard” button was used.
+        *
+        * @return {@code true} if an URI was copied to clipboard, {@code false}
+        *         otherwise
+        */
+       public boolean wasUriCopied() {
+               return uriCopied;
+       }
+
        //
        // INTERFACE InsertListener
        //
@@ -287,6 +329,25 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl
                                requestURITextField.setText(uri);
                        }
                });
+               logger.log(Level.FINEST, "Insert generated URI: " + uri);
+               int slash = uri.indexOf('/');
+               slash = uri.indexOf('/', slash + 1);
+               int secondSlash = uri.indexOf('/', slash + 1);
+               if (secondSlash == -1) {
+                       secondSlash = uri.length();
+               }
+               String editionNumber = uri.substring(slash + 1, secondSlash);
+               logger.log(Level.FINEST, "Extracted edition number: " + editionNumber);
+               int edition = -1;
+               try {
+                       edition = Integer.valueOf(editionNumber);
+               } catch (NumberFormatException nfe1) {
+                       /* ignore. */
+               }
+               logger.log(Level.FINEST, "Insert edition: " + edition + ", Project edition: " + project.getEdition());
+               if ((edition != -1) && (edition == project.getEdition())) {
+                       JOptionPane.showMessageDialog(this, I18n.getMessage("jsite.insert.reinserted-edition"), I18n.getMessage("jsite.insert.reinserted-edition.title"), JOptionPane.INFORMATION_MESSAGE);
+               }
        }
 
        /**
@@ -319,9 +380,10 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl
         * {@inheritDoc}
         */
        public void projectInsertFinished(Project project, boolean success, Throwable cause) {
+               running = false;
                if (success) {
                        String copyURILabel = I18n.getMessage("jsite.insert.okay-copy-uri");
-                       int selectedValue = JOptionPane.showOptionDialog(this, I18n.getMessage("jsite.insert.inserted"), I18n.getMessage("jsite.insert.done.title"), 0, JOptionPane.INFORMATION_MESSAGE, null, new Object[] { I18n.getMessage("jsite.insert.okay"), copyURILabel }, copyURILabel);
+                       int selectedValue = JOptionPane.showOptionDialog(this, I18n.getMessage("jsite.insert.inserted"), I18n.getMessage("jsite.insert.done.title"), 0, JOptionPane.INFORMATION_MESSAGE, null, new Object[] { I18n.getMessage("jsite.general.ok"), copyURILabel }, copyURILabel);
                        if (selectedValue == 1) {
                                actionCopyURI();
                        }
@@ -352,6 +414,7 @@ public class ProjectInsertPage extends TWizardPage implements InsertListener, Cl
         * Copies the request URI of the project to the clipboard.
         */
        private void actionCopyURI() {
+               uriCopied = true;
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                clipboard.setContents(new StringSelection(requestURITextField.getText()), this);
        }