Author: fmancinelli
Date: 2007-10-31 19:14:28 +0100 (Wed, 31 Oct 2007)
New Revision: 5587

Added:
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageDocumentProvider.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditor.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditorContributor.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditorInput.java
Modified:
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/META-INF/MANIFEST.MF
   xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/plugin.xml
   
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/adapters/AdapterFactory.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/adapters/XWikiConnectionAdapter.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/handlers/RemoveConnectionHandler.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/XWikiPage.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/views/XWikiExplorerView.java
Log:
XECLIPSE-30

* Fixed nasty bugs in the model save operation that caused version misalignment 
between cached and remote versions after synchronization.

* Added refactored editors

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/META-INF/MANIFEST.MF
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/META-INF/MANIFEST.MF
 2007-10-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/META-INF/MANIFEST.MF
 2007-10-31 18:14:28 UTC (rev 5587)
@@ -15,8 +15,8 @@
  org.eclipse.jface.text,
  org.eclipse.core.resources,
  org.eclipse.ui.editors,
- org.eclipse.ui.ide,
  org.eclipse.ui.workbench.texteditor,
- org.eclipse.core.expressions
+ org.eclipse.core.expressions,
+ org.eclipse.ui.ide
 Eclipse-LazyStart: true
 Export-Package: org.xwiki.plugins.eclipse.model

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/plugin.xml
===================================================================
--- xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/plugin.xml   
2007-10-31 18:06:19 UTC (rev 5586)
+++ xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/plugin.xml   
2007-10-31 18:14:28 UTC (rev 5587)
@@ -12,6 +12,13 @@
             class="org.xwiki.plugins.eclipse.editors.XWikiEditor"
             id="org.xwiki.plugins.eclipse.editors.XWikiEditor">
       </editor>
+      <editor
+            class="org.xwiki.xeclipse.editors.XWikiPageEditor"
+            
contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
+            icon="icons/xwiki.png"
+            id="org.xwiki.xeclipse.editors.XWikiPage"
+            name="XWiki page editor">
+      </editor>
    </extension>
    <extension
          point="org.eclipse.ui.views">
@@ -100,6 +107,9 @@
                type="org.eclipse.ui.model.IWorkbenchAdapter">
          </adapter>
          <adapter
+               type="org.eclipse.ui.model.IWorkbenchAdapter2">
+         </adapter>
+         <adapter
                type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter">
          </adapter>
       </factory>

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-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiConnectionManager.java
 2007-10-31 18:14:28 UTC (rev 5587)
@@ -75,7 +75,7 @@
 
     public void removeConnection(IXWikiConnection xwikiConnection)
     {
-        xwikiConnections.remove(xwikiConnection);
+        xwikiConnections.remove(xwikiConnection);        
         fireConnectionRemoved(xwikiConnection);
     }
     

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/adapters/AdapterFactory.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/adapters/AdapterFactory.java
        2007-10-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/adapters/AdapterFactory.java
        2007-10-31 18:14:28 UTC (rev 5587)
@@ -22,6 +22,7 @@
 
 import org.eclipse.core.runtime.IAdapterFactory;
 import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.ui.model.IWorkbenchAdapter2;
 import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
 import org.xwiki.xeclipse.model.IXWikiConnection;
 import org.xwiki.xeclipse.model.IXWikiPage;
@@ -64,6 +65,10 @@
             return xwikiConnectionAdapter;
         }
         
+        if (adapterType == IWorkbenchAdapter2.class && adaptableObject 
instanceof IXWikiConnection) {
+            return xwikiConnectionAdapter;
+        }
+        
         if (adapterType == IDeferredWorkbenchAdapter.class
             && adaptableObject instanceof IXWikiSpace) {
             return xwikiSpaceAdapter;
@@ -87,7 +92,7 @@
      */
     public Class[] getAdapterList()
     {
-        return new Class[] {IDeferredWorkbenchAdapter.class, 
IWorkbenchAdapter.class};
+        return new Class[] {IDeferredWorkbenchAdapter.class, 
IWorkbenchAdapter.class, IWorkbenchAdapter2.class};
     }
 
 }

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/adapters/XWikiConnectionAdapter.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/adapters/XWikiConnectionAdapter.java
        2007-10-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/adapters/XWikiConnectionAdapter.java
        2007-10-31 18:14:28 UTC (rev 5587)
@@ -25,6 +25,10 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.ui.model.IWorkbenchAdapter2;
 import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
 import org.eclipse.ui.progress.IElementCollector;
 import org.xwiki.plugins.eclipse.XWikiEclipsePlugin;
@@ -36,7 +40,7 @@
 /**
  * The adapter for XWiki connections
  */
-public class XWikiConnectionAdapter implements IDeferredWorkbenchAdapter
+public class XWikiConnectionAdapter implements IDeferredWorkbenchAdapter, 
IWorkbenchAdapter2
 {
     /**
      * [EMAIL PROTECTED]
@@ -82,9 +86,8 @@
             IXWikiConnection xwikiConnection = (IXWikiConnection) object;
 
             return String
-                .format("[EMAIL PROTECTED] %s", xwikiConnection.getUserName(),
-                    xwikiConnection.getServerUrl(), 
xwikiConnection.isConnected() ? "[Connected]"
-                        : "[Disconnected]");
+                .format("[EMAIL PROTECTED]", xwikiConnection.getUserName(),
+                    xwikiConnection.getServerUrl());
         }
 
         return null;
@@ -132,4 +135,30 @@
     {
         return true;
     }
+
+    public RGB getBackground(Object element)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public FontData getFont(Object element)
+    {
+        if (element instanceof IXWikiConnection) {
+            IXWikiConnection xwikiConnection = (IXWikiConnection) element;
+
+            if (xwikiConnection.isConnected()) {
+                return 
JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+                    .getFontData()[0];
+            }
+        }
+
+        return null;
+    }
+
+    public RGB getForeground(Object element)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageDocumentProvider.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageDocumentProvider.java
                              (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageDocumentProvider.java
      2007-10-31 18:14:28 UTC (rev 5587)
@@ -0,0 +1,62 @@
+package org.xwiki.xeclipse.editors;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentPartitioner;
+import org.eclipse.jface.text.rules.FastPartitioner;
+import org.eclipse.jface.text.source.IAnnotationModel;
+import org.eclipse.ui.editors.text.StorageDocumentProvider;
+import org.eclipse.ui.texteditor.AbstractDocumentProvider;
+import org.xwiki.plugins.eclipse.XWikiEclipsePlugin;
+import org.xwiki.xeclipse.model.IXWikiPage;
+import org.xwiki.xeclipse.model.XWikiConnectionException;
+
+public class XWikiPageDocumentProvider extends StorageDocumentProvider
+{
+
+    @Override
+    protected IDocument createDocument(Object element) throws CoreException
+    {
+        IDocument document = new Document();
+        if (element instanceof XWikiPageEditorInput) {
+            XWikiPageEditorInput input = (XWikiPageEditorInput) element;
+            document.set(input.getXWikiPage().getContent());
+        }
+
+        return document;
+    }
+
+    @Override
+    public boolean isModifiable(Object element)
+    {
+        return true;
+    }
+ 
+    @Override
+    public boolean isReadOnly(Object element)
+    {
+        return false;
+    }
+
+    @Override
+    protected void doSaveDocument(IProgressMonitor monitor, Object element, 
IDocument document,
+        boolean overwrite) throws CoreException
+    {
+        XWikiPageEditorInput input = (XWikiPageEditorInput) element;
+        IXWikiPage xwikiPage = input.getXWikiPage();
+
+        xwikiPage.setContent(document.get());
+
+        try {            
+            xwikiPage.save();
+        } catch (XWikiConnectionException e) {
+            throw new CoreException(new Status(IStatus.ERROR, 
XWikiEclipsePlugin.PLUGIN_ID, "Unable to save", e));            
+        }
+    }
+
+}

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditor.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditor.java
                                (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditor.java
        2007-10-31 18:14:28 UTC (rev 5587)
@@ -0,0 +1,17 @@
+package org.xwiki.xeclipse.editors;
+
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.ui.editors.text.TextEditor;
+import org.eclipse.ui.texteditor.AbstractTextEditor;
+
+public class XWikiPageEditor extends AbstractTextEditor
+{
+    public static final String ID = "org.xwiki.xeclipse.editors.XWikiPage";    
+
+    public XWikiPageEditor()
+    {
+        super();        
+        setDocumentProvider(new XWikiPageDocumentProvider());
+        setSourceViewerConfiguration(new SourceViewerConfiguration());
+    }
+}

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditorContributor.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditorContributor.java
                             (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditorContributor.java
     2007-10-31 18:14:28 UTC (rev 5587)
@@ -0,0 +1,50 @@
+package org.xwiki.xeclipse.editors;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.texteditor.BasicTextEditorActionContributor;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
+
+public class XWikiPageEditorContributor extends 
BasicTextEditorActionContributor
+{
+    public XWikiPageEditorContributor()
+    {
+        super();
+    }
+
+    @Override
+    public void setActiveEditor(IEditorPart part)
+    {
+        super.setActiveEditor(part);
+        
+        if (!(part instanceof ITextEditor)) {
+            return;
+        }
+
+        IActionBars actionBars = getActionBars();
+
+        if (actionBars == null) {
+            return;
+        }
+
+        ITextEditor editor = (ITextEditor) part;
+
+        actionBars.setGlobalActionHandler(ActionFactory.SAVE.getId(), 
getAction(editor,
+            ITextEditorActionConstants.SAVE));
+
+        IAction action = getAction(editor, ITextEditorActionConstants.CUT);
+        actionBars.setGlobalActionHandler(action.getActionDefinitionId(), 
action);
+
+        action = getAction(editor, ITextEditorActionConstants.COPY);
+        actionBars.setGlobalActionHandler(action.getActionDefinitionId(), 
action);
+
+        action = getAction(editor, ITextEditorActionConstants.PASTE);
+        actionBars.setGlobalActionHandler(action.getActionDefinitionId(), 
action);
+
+        actionBars.updateActionBars();
+    }
+
+}

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditorInput.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditorInput.java
                           (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/editors/XWikiPageEditorInput.java
   2007-10-31 18:14:28 UTC (rev 5587)
@@ -0,0 +1,76 @@
+package org.xwiki.xeclipse.editors;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+import org.xwiki.xeclipse.model.IXWikiPage;
+
+public class XWikiPageEditorInput implements IEditorInput
+{
+    private IXWikiPage xwikiPage;
+    
+    public XWikiPageEditorInput(IXWikiPage page) {
+        this.xwikiPage = page;
+    }
+    
+    public boolean exists()
+    { 
+        return false;
+    }
+
+    public ImageDescriptor getImageDescriptor()
+    {      
+        return null;
+    }
+
+    public String getName()
+    {
+        return xwikiPage.getTitle();
+    }
+
+    public IPersistableElement getPersistable()
+    {
+        return null;
+    }
+
+    public String getToolTipText()
+    {
+        return xwikiPage.getTitle();
+    }
+
+    public Object getAdapter(Class adapter)
+    {
+        return null;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if(super.equals(obj)) {
+            return true;
+        }
+        
+        if(!(obj instanceof XWikiPageEditorInput)) {
+            return false;
+        }
+        
+        XWikiPageEditorInput other = (XWikiPageEditorInput) obj;
+        
+        return xwikiPage.getId().equals(other.xwikiPage.getId());
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return xwikiPage.getId().hashCode();        
+    }
+
+    public IXWikiPage getXWikiPage()
+    {
+        return xwikiPage;
+    }    
+    
+    public void setXWikiPage(IXWikiPage xwikiPage) {
+        this.xwikiPage = xwikiPage;
+    }
+}

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/handlers/RemoveConnectionHandler.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/handlers/RemoveConnectionHandler.java
       2007-10-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/handlers/RemoveConnectionHandler.java
       2007-10-31 18:14:28 UTC (rev 5587)
@@ -44,9 +44,7 @@
             IXWikiConnection xwikiConnection = (IXWikiConnection) 
selectedObject;
 
             try {
-                if (xwikiConnection.isConnected()) {
-                    xwikiConnection.disconnect();
-                }
+                xwikiConnection.dispose();
             } catch (XWikiConnectionException e) {
                 // TODO Auto-generated catch block
                 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-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/AbstractXWikiConnection.java
     2007-10-31 18:14:28 UTC (rev 5587)
@@ -77,7 +77,12 @@
         }
     }
 
-    abstract void savePage(Page page) throws XWikiConnectionException;
+    /**
+     * @param page The page to be saved.
+     * @return The page after that has been saved with all the information 
updated (version, etc.).
+     * @throws XWikiConnectionException
+     */
+    abstract Page savePage(Page page) throws XWikiConnectionException;
 
     abstract boolean isPageDirty(String pageId);
 

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-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiCachedConnection.java
       2007-10-31 18:14:28 UTC (rev 5587)
@@ -5,6 +5,7 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -50,9 +51,9 @@
     protected void init() throws XWikiConnectionException
     {
         super.init();
-        
+
         try {
-            cacheDAO = new DiskCacheDAO(new File(cacheDir, getId()));          
  
+            cacheDAO = new DiskCacheDAO(new File(cacheDir, getId()));
         } catch (Exception e) {
             throw new XWikiConnectionException(e);
         }
@@ -95,22 +96,22 @@
      * @throws XWikiDAOException
      * @throws XWikiConnectionException
      */
-    void synchronize(String pageId) throws XWikiDAOException, 
XWikiConnectionException
+    Page synchronize(String pageId) throws XWikiDAOException, 
XWikiConnectionException
     {
         assertNotDisposed();
 
-        // If we are not connected then do nothing.
-        if (!isConnected()) {
-            return;
-        }
-
         // Get the cached and remote version of the page. If there is no 
cached version then there
         // is nothing to synchronize so just return.
         Page cachedPage = cacheDAO.getPage(pageId);
         if (cachedPage == null) {
-            return;
+            return null;
         }
 
+        // If we are not connected then do nothing.
+        if (!isConnected()) {
+            return cachedPage;
+        }
+
         // Get the remote page
         Page remotePage = remoteDAO.getPage(pageId);
 
@@ -125,7 +126,7 @@
             cacheDAO.setDirty(pageId, false);
             cacheDAO.setConflict(pageId, false);
 
-            return;
+            return remotePage;
         }
 
         // This is case 2.x
@@ -160,6 +161,8 @@
                 cacheDAO.setConflict(pageId, false);
             }
         }
+        
+        return remotePage;
     }
 
     /**
@@ -170,7 +173,11 @@
      */
     void synchronizeAll() throws XWikiDAOException, XWikiConnectionException
     {
-        Set<String> dirtyPages = cacheDAO.getDirtyPages();
+        /* This is necessary in order to avoid concurrent modification to the 
dirtyPages set when synchronizing.
+         * In fact, in synchronize we remove elements from 
cacheDAO.getDirtyPages() and we cannot use it
+         * directly for iterating.
+         */
+        Set<String> dirtyPages = new HashSet<String>(cacheDAO.getDirtyPages());
         for (String pageId : dirtyPages) {
             synchronize(pageId);
         }
@@ -202,7 +209,7 @@
                 }
             }
 
-            remoteDAO = null;            
+            remoteDAO = null;
 
             throw new XWikiConnectionException(e);
         }
@@ -375,13 +382,13 @@
     }
 
     /**
+     * [EMAIL PROTECTED]
+     * 
      * Save the page locally, propagating the changes to the remote XWiki 
instance if working in
      * "online" mode.
      * 
-     * @param page The page to be saved.
-     * @throws XWikiConnectionException
      */
-    void savePage(Page page) throws XWikiConnectionException
+    Page savePage(Page page) throws XWikiConnectionException
     {
         assertNotDisposed();
 
@@ -390,7 +397,7 @@
             cacheDAO.setDirty(page.getId(), true);
 
             // Synchronize the page immediately.
-            synchronize(page.getId());
+            return synchronize(page.getId());
         } catch (Exception e) {
             throw new XWikiConnectionException(e);
         }
@@ -420,7 +427,7 @@
 
         return cacheDAO.isInConflict(pageId);
     }
-    
+
     private synchronized void writeObject(java.io.ObjectOutputStream s) throws 
IOException
     {
         s.defaultWriteObject();
@@ -432,8 +439,8 @@
         s.defaultReadObject();
         try {
             init();
-        } catch (XWikiConnectionException e) {        
-            e.printStackTrace();            
+        } catch (XWikiConnectionException e) {
+            e.printStackTrace();
         }
     }
 

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiPage.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiPage.java
   2007-10-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiPage.java
   2007-10-31 18:14:28 UTC (rev 5587)
@@ -95,7 +95,8 @@
 
     public void save() throws XWikiConnectionException
     {
-        connection.savePage(page);
+        Page updatedPage = connection.savePage(page);
+        this.page = updatedPage;
     }
 
     public void setContent(String content)

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-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/XWikiPlainConnection.java
        2007-10-31 18:14:28 UTC (rev 5587)
@@ -198,18 +198,15 @@
     }
 
     /**
-     * Save the page locally, propagating the changes to the remote XWiki 
instance if working in
-     * "online" mode.
-     * 
-     * @param page The page to be saved.
-     * @throws XWikiConnectionException
+     * [EMAIL PROTECTED]
      */
-    void savePage(Page page) throws XWikiConnectionException
+    Page savePage(Page page) throws XWikiConnectionException
     {
         assertNotDisposed();
 
         try {
-            remoteDAO.storePage(page);            
+            remoteDAO.storePage(page);
+            return remoteDAO.getPage(page.getId());
         } catch (Exception e) {
             throw new XWikiConnectionException(e);
         }

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/views/XWikiExplorerView.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/views/XWikiExplorerView.java
        2007-10-31 18:06:19 UTC (rev 5586)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/views/XWikiExplorerView.java
        2007-10-31 18:14:28 UTC (rev 5587)
@@ -27,6 +27,8 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.swt.SWT;
@@ -34,7 +36,9 @@
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.ui.ISources;
 import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.menus.CommandContributionItem;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
@@ -42,11 +46,14 @@
 import org.xwiki.xeclipse.IXWikiConnectionManagerListener;
 import org.xwiki.xeclipse.XWikiConnectionManager;
 import org.xwiki.xeclipse.XWikiEclipseConstants;
+import org.xwiki.xeclipse.editors.XWikiPageEditor;
+import org.xwiki.xeclipse.editors.XWikiPageEditorInput;
 import org.xwiki.xeclipse.handlers.ConnectHandler;
 import org.xwiki.xeclipse.handlers.DisconnectHandler;
 import org.xwiki.xeclipse.handlers.RemoveConnectionHandler;
 import org.xwiki.xeclipse.model.IXWikiConnection;
 import org.xwiki.xeclipse.model.IXWikiConnectionListener;
+import org.xwiki.xeclipse.model.IXWikiPage;
 import org.xwiki.xeclipse.utils.XWikiEclipseUtil;
 
 public class XWikiExplorerView extends ViewPart implements 
IXWikiConnectionManagerListener,
@@ -65,7 +72,26 @@
         treeViewer.setLabelProvider(new WorkbenchLabelProvider());
         getSite().setSelectionProvider(treeViewer);
         treeViewer.setInput(XWikiConnectionManager.getDefault());
+        
+        treeViewer.addDoubleClickListener(new IDoubleClickListener() {
 
+            public void doubleClick(DoubleClickEvent event)
+            {
+                IWorkbenchPage page =
+                    
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+                Object selectedObject =  
XWikiEclipseUtil.getSingleSelectedObjectInStructuredSelection(treeViewer.getSelection());
+                if(selectedObject instanceof IXWikiPage) {
+                    IXWikiPage xwikiPage = (IXWikiPage) selectedObject;
+                    XWikiPageEditorInput editorInput = new 
XWikiPageEditorInput(xwikiPage);
+                    try {
+                        page.openEditor(editorInput, XWikiPageEditor.ID);
+                    } catch (PartInitException e) {                     
+                        e.printStackTrace();
+                    }
+                }                
+            }            
+        });
+
         hookContextMenu();
     }
 

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

Reply via email to