add javadoc
[jSite2.git] / src / net / pterodactylus / jsite / gui / SwingInterface.java
index 54dec0d..d00ebe1 100644 (file)
 package net.pterodactylus.jsite.gui;
 
 import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
+import java.util.Properties;
 
 import javax.swing.JOptionPane;
 
 import net.pterodactylus.jsite.core.Core;
 import net.pterodactylus.jsite.core.CoreListener;
 import net.pterodactylus.jsite.core.Node;
+import net.pterodactylus.jsite.core.Project;
 import net.pterodactylus.jsite.i18n.I18n;
 import net.pterodactylus.jsite.i18n.gui.I18nAction;
+import net.pterodactylus.util.io.Closer;
 
 /**
- * TODO
+ * The Swing user interface.
  * 
  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
  * @version $Id$
@@ -43,6 +50,9 @@ public class SwingInterface implements CoreListener {
        /** The application core. */
        private final Core core;
 
+       /** The configuration directory. */
+       private final String configDirectory;
+
        /** The main window. */
        private MainWindow mainWindow;
 
@@ -76,18 +86,46 @@ public class SwingInterface implements CoreListener {
        /** The “add project” action. */
        private I18nAction addProjectAction;
 
+       /** The “clone project” action. */
+       private I18nAction cloneProjectAction;
+
+       /** The “delete project” action. */
+       private I18nAction deleteProjectAction;
+
+       /** The “about” dialog. */
+       private AboutDialog aboutDialog;
+
+       /** The configuration dialog. */
+       private ConfigurationDialog configurationDialog;
+
        /** The list of all defined nodes. */
        private List<Node> nodeList;
 
+       //
+       // CONFIGURATION
+       //
+
+       /** Whether to beautify the GUI. */
+       private boolean beautify;
+
        /**
         * Creates a new swing interface.
         * 
         * @param core
         *            The core to operate on
+        * @param configDirectory
+        *            The directory the configuration is stored in
         */
-       public SwingInterface(Core core) {
+       public SwingInterface(Core core, String configDirectory) {
                this.core = core;
-               I18n.setLocale(Locale.ENGLISH); /* TODO - load config */
+               this.configDirectory = configDirectory;
+               I18n.setLocale(Locale.ENGLISH);
+               loadConfig();
+               if (beautify) {
+                       System.setProperty("swing.aatext", "true");
+                       System.setProperty("swing.plaf.metal.controlFont", "Tahoma");
+                       System.setProperty("swing.plaf.metal.userFont", "Tahoma");
+               }
                initActions();
                initDialogs();
        }
@@ -195,6 +233,24 @@ public class SwingInterface implements CoreListener {
                return addProjectAction;
        }
 
+       /**
+        * Returns the “clone project” action.
+        * 
+        * @return The “clone project” action
+        */
+       I18nAction getCloneProjectAction() {
+               return cloneProjectAction;
+       }
+
+       /**
+        * Returns the “delete project” action.
+        * 
+        * @return The “delete project” action
+        */
+       I18nAction getDeleteProjectAction() {
+               return deleteProjectAction;
+       }
+
        //
        // ACTIONS
        //
@@ -215,6 +271,62 @@ public class SwingInterface implements CoreListener {
        //
 
        /**
+        * Loads the configuration of the interface.
+        */
+       private void loadConfig() {
+               /* initialize default stuff. */
+               beautify = false;
+               /* now read config. */
+               File configFile = new File(configDirectory, "swing-interface.properties");
+               if (!configFile.exists() || !configFile.canRead() || !configFile.isFile()) {
+                       System.err.println("could not find “" + configFile.getAbsolutePath() + "”!");
+                       return;
+               }
+               Properties configProperties = new Properties();
+               FileInputStream configInputStream = null;
+               try {
+                       configInputStream = new FileInputStream(configFile);
+                       configProperties.load(configInputStream);
+               } catch (IOException ioe1) {
+                       System.err.println("could not load config, " + ioe1.getMessage());
+               } finally {
+                       Closer.close(configInputStream);
+               }
+               if (configProperties.containsKey("beautify")) {
+                       beautify = Boolean.valueOf(configProperties.getProperty("beautify"));
+               }
+       }
+
+       /**
+        * Saves the configuration.
+        */
+       private void saveConfig() {
+               File configDirectory = new File(this.configDirectory);
+               if (!configDirectory.exists()) {
+                       if (!configDirectory.mkdirs()) {
+                               System.err.println("could not create “" + this.configDirectory + "”!");
+                               return;
+                       }
+               }
+               if (!configDirectory.exists() || !configDirectory.isDirectory() || !configDirectory.canWrite()) {
+                       System.err.println("can not access “" + this.configDirectory + "”!");
+                       return;
+               }
+               File configFile = new File(configDirectory, "swing-interface.properties");
+               Properties configProperties = new Properties();
+               configProperties.setProperty("beautify", String.valueOf(beautify));
+               FileOutputStream configOutputStream = null;
+               try {
+                       configOutputStream = new FileOutputStream(configFile);
+                       configProperties.store(configOutputStream, "configuration of swing interface");
+               } catch (IOException ioe1) {
+                       System.err.println("could not save config, " + ioe1.getMessage());
+               } finally {
+                       Closer.close(configOutputStream);
+               }
+       }
+
+       /**
         * Initializes all actions.
         */
        private void initActions() {
@@ -311,6 +423,26 @@ public class SwingInterface implements CoreListener {
                                addProject();
                        }
                };
+               cloneProjectAction = new I18nAction("mainWindow.button.cloneProject") {
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @SuppressWarnings("synthetic-access")
+                       public void actionPerformed(ActionEvent actionEvent) {
+                               cloneProject();
+                       }
+               };
+               deleteProjectAction = new I18nAction("mainWindow.button.deleteProject") {
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @SuppressWarnings("synthetic-access")
+                       public void actionPerformed(ActionEvent actionEvent) {
+                               deleteProject();
+                       }
+               };
        }
 
        /**
@@ -318,6 +450,8 @@ public class SwingInterface implements CoreListener {
         */
        private void initDialogs() {
                manageNodesDialog = new ManageNodesDialog(this);
+               aboutDialog = new AboutDialog(this);
+               configurationDialog = new ConfigurationDialog(this);
        }
 
        //
@@ -328,6 +462,12 @@ public class SwingInterface implements CoreListener {
         * Shows the configuration dialog.
         */
        private void configure() {
+               configurationDialog.setBeautify(beautify);
+               configurationDialog.setVisible(true);
+               if (!configurationDialog.wasCancelled()) {
+                       beautify = configurationDialog.getBeautify();
+                       saveConfig();
+               }
        }
 
        /**
@@ -340,6 +480,7 @@ public class SwingInterface implements CoreListener {
         * Quits jSite.
         */
        private void quit() {
+               saveConfig();
                System.exit(0);
        }
 
@@ -384,12 +525,28 @@ public class SwingInterface implements CoreListener {
         * Shows the “about” dialog.
         */
        private void helpAbout() {
+               aboutDialog.setVisible(true);
        }
 
        /**
         * Adds a project.
         */
        private void addProject() {
+               Project project = new Project();
+               project.setName("New Project");
+               project.setDescription("");
+       }
+
+       /**
+        * Clones a project.
+        */
+       private void cloneProject() {
+       }
+
+       /**
+        * Deletes a project.
+        */
+       private void deleteProject() {
        }
 
        //