Author: fmancinelli
Date: 2007-10-30 00:37:13 +0100 (Tue, 30 Oct 2007)
New Revision: 5564

Modified:
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/plugins/eclipse/XWikiEclipsePlugin.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiConnectionManager.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/handlers/ConnectHandler.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/AbstractXWikiConnection.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiCachedConnection.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiPlainConnection.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizard.java
Log:
XECLIPSE-30 Added connection persistence

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/plugins/eclipse/XWikiEclipsePlugin.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/plugins/eclipse/XWikiEclipsePlugin.java
      2007-10-29 22:28:56 UTC (rev 5563)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/plugins/eclipse/XWikiEclipsePlugin.java
      2007-10-29 23:37:13 UTC (rev 5564)
@@ -21,15 +21,13 @@
 
 package org.xwiki.plugins.eclipse;
 
-import java.net.URL;
+import java.io.File;
 
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 import org.xwiki.plugins.eclipse.model.IXWikiConnection;
 import org.xwiki.plugins.eclipse.model.impl.XWikiConnectionManager;
-import org.xwiki.plugins.eclipse.util.XWikiConstants;
 
 /**
  * The activator class controls the plug-in life cycle, this is a mandatory 
class and is used by the
@@ -61,8 +59,12 @@
      * @see 
org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
      */
     public void start(BundleContext context) throws Exception
-    {
+    {        
         super.start(context);
+        File connections = new File(getStateLocation().toFile(), 
"connections.data");
+        if(connections.exists()) {
+            
org.xwiki.xeclipse.XWikiConnectionManager.getDefault().restoreConnections(connections);
+        }
     }
 
     /**
@@ -79,6 +81,10 @@
                 // Nothing to do.
             }
         }
+        
+        File connections = new File(getStateLocation().toFile(), 
"connections.data");
+        
org.xwiki.xeclipse.XWikiConnectionManager.getDefault().saveConnections(connections);
        
+        
         plugin = null;
         super.stop(context);
     }

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiConnectionManager.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiConnectionManager.java
 2007-10-29 22:28:56 UTC (rev 5563)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiConnectionManager.java
 2007-10-29 23:37:13 UTC (rev 5564)
@@ -20,8 +20,15 @@
  */
 package org.xwiki.xeclipse;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.runtime.ListenerList;
 import org.xwiki.xeclipse.model.IXWikiConnection;
@@ -31,6 +38,7 @@
     private static XWikiConnectionManager sharedInstance;
 
     private List<IXWikiConnection> xwikiConnections;
+    private Map<String, String> idToPasswordMapping;
 
     private ListenerList connectionManagerListenerList;
 
@@ -46,6 +54,7 @@
     private XWikiConnectionManager()
     {
         xwikiConnections = new ArrayList<IXWikiConnection>();
+        idToPasswordMapping = new HashMap<String, String>();
         connectionManagerListenerList = new ListenerList();
     }
 
@@ -54,20 +63,43 @@
         return xwikiConnections;
     }
 
-    public void addConnection(IXWikiConnection xwikiConnection)
+    public void addConnection(IXWikiConnection xwikiConnection, String 
password)
     {
         if (!xwikiConnections.contains(xwikiConnection)) {
             xwikiConnections.add(xwikiConnection);
+            idToPasswordMapping.put(xwikiConnection.getId(), password);
             fireConnectionAdded(xwikiConnection);
         }
-    }
+    }    
 
     public void removeConnection(IXWikiConnection xwikiConnection)
     {
         xwikiConnections.remove(xwikiConnection);
         fireConnectionRemoved(xwikiConnection);
     }
-
+    
+    public String getPasswordForConnection(String id) {
+        return idToPasswordMapping.get(id);
+    }
+    
+    public void saveConnections(File output) throws Exception {
+        ObjectOutputStream oos = new ObjectOutputStream(new 
FileOutputStream(output));
+        oos.writeObject(xwikiConnections);
+        
+        /* This should be written with some encryption mechanism */
+        oos.writeObject(idToPasswordMapping);
+        
+        oos.close();
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void restoreConnections(File input) throws Exception {
+        ObjectInputStream ois = new ObjectInputStream(new 
FileInputStream(input));
+        xwikiConnections = (List<IXWikiConnection>) ois.readObject();
+        idToPasswordMapping = (Map<String, String>) ois.readObject();
+        ois.close();        
+    }
+        
     // /////////////////////////// Event listeners management 
/////////////////////////////
 
     public void addConnectionManagerListener(IXWikiConnectionManagerListener 
listener)

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/handlers/ConnectHandler.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/handlers/ConnectHandler.java
        2007-10-29 22:28:56 UTC (rev 5563)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/handlers/ConnectHandler.java
        2007-10-29 23:37:13 UTC (rev 5564)
@@ -26,6 +26,7 @@
 import org.eclipse.jface.dialogs.InputDialog;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.handlers.HandlerUtil;
+import org.xwiki.xeclipse.XWikiConnectionManager;
 import org.xwiki.xeclipse.model.IXWikiConnection;
 import org.xwiki.xeclipse.model.XWikiConnectionException;
 import org.xwiki.xeclipse.utils.XWikiEclipseUtil;
@@ -44,11 +45,23 @@
             IXWikiConnection xwikiConnection = (IXWikiConnection) 
selectedObject;
 
             try {
-                InputDialog inputDialog = new 
InputDialog(HandlerUtil.getActiveShell(event), "Password", "password", null, 
null);
-                inputDialog.open();
-                String password = inputDialog.getValue();
+
+                String password =
+                    
XWikiConnectionManager.getDefault().getPasswordForConnection(
+                        xwikiConnection.getId());
+                if (password == null) {
+                    InputDialog inputDialog =
+                        new InputDialog(HandlerUtil.getActiveShell(event),
+                            "Password",
+                            String.format("Password for [EMAIL PROTECTED]:", 
xwikiConnection.getUserName(), xwikiConnection.getServerUrl()),
+                            null,
+                            null);
+                    inputDialog.open();
+                    password = inputDialog.getValue();
+                }
+
                 xwikiConnection.connect(password);
-            } catch (XWikiConnectionException e) {            
+            } catch (XWikiConnectionException e) {
                 e.printStackTrace();
             }
 

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/AbstractXWikiConnection.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/AbstractXWikiConnection.java
     2007-10-29 22:28:56 UTC (rev 5563)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/AbstractXWikiConnection.java
     2007-10-29 23:37:13 UTC (rev 5564)
@@ -1,5 +1,7 @@
 package org.xwiki.xeclipse.model.impl;
 
+import java.io.File;
+import java.io.IOException;
 import java.io.Serializable;
 import java.util.UUID;
 
@@ -11,7 +13,7 @@
 import org.xwiki.xeclipse.model.XWikiConnectionException;
 
 /**
- * This is the base class for different type of XWiki connections 
+ * This is the base class for different type of XWiki connections
  */
 public abstract class AbstractXWikiConnection implements IXWikiConnection, 
Serializable
 {
@@ -22,7 +24,7 @@
     private String userName;
 
     protected transient boolean isDisposed;
-    
+
     private transient ListenerList connectionListenerList;
 
     /**
@@ -30,8 +32,9 @@
      * 
      * @param serverUrl The url where the XML RPC endpoint is located.
      * @param userName The user name to be used when connecting to the remote 
server.
+     * @throws XWikiConnectionException 
      */
-    public AbstractXWikiConnection(String serverUrl, String userName)
+    public AbstractXWikiConnection(String serverUrl, String userName) throws 
XWikiConnectionException
     {
         this.serverUrl = serverUrl;
         this.userName = userName;
@@ -43,7 +46,7 @@
     /**
      * Initialize transient fields.
      */
-    private void init()
+    protected void init() throws XWikiConnectionException
     {
         isDisposed = false;
         connectionListenerList = new ListenerList();
@@ -66,7 +69,7 @@
     {
         return userName;
     }
-    
+
     protected void assertNotDisposed()
     {
         if (isDisposed) {
@@ -75,7 +78,7 @@
     }
 
     abstract void savePage(Page page) throws XWikiConnectionException;
-    
+
     abstract boolean isPageDirty(String pageId);
 
     abstract boolean isPageConflict(String pageId);
@@ -83,9 +86,9 @@
     abstract Page getRawPage(String pageId) throws XWikiConnectionException;
 
     abstract Space getRawSpace(String key);
-    
- // /////////////////////////// Event listeners management 
/////////////////////////////
 
+    // /////////////////////////// Event listeners management 
/////////////////////////////
+
     public void addConnectionEstablishedListener(IXWikiConnectionListener 
listener)
     {
         connectionListenerList.add(listener);
@@ -112,6 +115,5 @@
             final IXWikiConnectionListener listener = 
(IXWikiConnectionListener) listeners[i];
             listener.connectionClosed(this);
         }
-    }
-
+    }    
 }

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiCachedConnection.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiCachedConnection.java
       2007-10-29 22:28:56 UTC (rev 5563)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiCachedConnection.java
       2007-10-29 23:37:13 UTC (rev 5564)
@@ -1,20 +1,17 @@
 package org.xwiki.xeclipse.model.impl;
 
 import java.io.File;
+import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
-import java.util.UUID;
 
 import org.codehaus.swizzle.confluence.Page;
 import org.codehaus.swizzle.confluence.PageSummary;
 import org.codehaus.swizzle.confluence.Space;
 import org.codehaus.swizzle.confluence.SpaceSummary;
-import org.eclipse.core.runtime.ListenerList;
-import org.xwiki.xeclipse.model.IXWikiConnection;
-import org.xwiki.xeclipse.model.IXWikiConnectionListener;
 import org.xwiki.xeclipse.model.IXWikiPage;
 import org.xwiki.xeclipse.model.IXWikiSpace;
 import org.xwiki.xeclipse.model.XWikiConnectionException;
@@ -50,8 +47,10 @@
      * 
      * @throws XWikiConnectionException
      */
-    private void init() throws XWikiConnectionException
+    protected void init() throws XWikiConnectionException
     {
+        super.init();
+        
         try {
             cacheDAO = new DiskCacheDAO(new File(cacheDir, getId()));          
  
         } catch (Exception e) {
@@ -422,7 +421,23 @@
 
         return cacheDAO.isInConflict(pageId);
     }
+    
+    private synchronized void writeObject(java.io.ObjectOutputStream s) throws 
IOException
+    {
+        s.defaultWriteObject();
+    }
 
+    private synchronized void readObject(java.io.ObjectInputStream s) throws 
IOException,
+        ClassNotFoundException
+    {
+        s.defaultReadObject();
+        try {
+            init();
+        } catch (XWikiConnectionException e) {        
+            e.printStackTrace();            
+        }
+    }
+
     /**
      * USED ONLY FOR UNIT TESTING
      * 

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiPlainConnection.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiPlainConnection.java
        2007-10-29 22:28:56 UTC (rev 5563)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiPlainConnection.java
        2007-10-29 23:37:13 UTC (rev 5564)
@@ -1,5 +1,6 @@
 package org.xwiki.xeclipse.model.impl;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -19,9 +20,7 @@
     private static final long serialVersionUID = -8019449922717442495L;
 
     private transient IXWikiDAO remoteDAO;
-
-    private transient ListenerList connectionListenerList;
-
+   
     /**
      * Constructor.
      * 
@@ -33,20 +32,7 @@
         throws XWikiConnectionException
     {
         super(serverUrl, username);
-
-        init();
     }
-
-    /**
-     * Initialization of transient fields.
-     * 
-     * @throws XWikiConnectionException
-     */
-    private void init() throws XWikiConnectionException
-    {
-        connectionListenerList = new ListenerList();
-    }
-
  
     /**
      * [EMAIL PROTECTED]
@@ -253,6 +239,17 @@
 
         return false;
     }
+    
+    private synchronized void writeObject(java.io.ObjectOutputStream s) throws 
IOException
+    {
+        s.defaultWriteObject();
+    }
+
+    private synchronized void readObject(java.io.ObjectInputStream s) throws 
IOException,
+        ClassNotFoundException
+    {
+        s.defaultReadObject();        
+    }
    
     /**
      * USED ONLY FOR UNIT TESTING

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizard.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizard.java
    2007-10-29 22:28:56 UTC (rev 5563)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizard.java
    2007-10-29 23:37:13 UTC (rev 5564)
@@ -80,7 +80,7 @@
         
         try {            
             IXWikiConnection connection = 
XWikiConnectionFactory.createCachedConnection(newConnectionWizardState.getServerUrl(),
 newConnectionWizardState.getUserName(), new 
File(XWikiEclipsePlugin.getDefault().getStateLocation().toFile(), "cache"));
-            XWikiConnectionManager.getDefault().addConnection(connection);
+            XWikiConnectionManager.getDefault().addConnection(connection, 
newConnectionWizardState.getPassword());
         } catch (Exception e) {
             e.printStackTrace();
             return false;

_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications

Reply via email to