Author: fmancinelli
Date: 2007-11-07 16:59:47 +0100 (Wed, 07 Nov 2007)
New Revision: 5697

Added:
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/icons/working-set-banner.png
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/icons/working-set.png
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSet.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSetFilter.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSetManager.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/dialogs/ManageWorkingSetsDialog.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewWorkingSetWizard.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewWorkingSetWizardState.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/WorkingSetSelection.java
Modified:
   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/plugins/eclipse/XWikiEclipsePlugin.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiEclipseConstants.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/DiskCacheDAO.java
   
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/wizards/NewConnectionWizard.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizardState.java
   
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewPageWizardState.java
Log:
* Added "working-set" functionality to restrict the focus on a subset of xwiki 
resources. 

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/icons/working-set-banner.png
===================================================================
(Binary files differ)


Property changes on: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/icons/working-set-banner.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/icons/working-set.png
===================================================================
(Binary files differ)


Property changes on: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/icons/working-set.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/plugin.xml
===================================================================
--- xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/plugin.xml   
2007-11-07 14:56:18 UTC (rev 5696)
+++ xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/plugin.xml   
2007-11-07 15:59:47 UTC (rev 5697)
@@ -184,6 +184,11 @@
             id="org.xwiki.xeclipse.wizard.category.XWiki"
             name="XWiki">
       </category>
+      <wizard
+            class="org.xwiki.xeclipse.wizards.NewWorkingSetWizard"
+            id="WORKINGSET"
+            name="WorkingSet">
+      </wizard>
    </extension>
 
 </plugin>

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-11-07 14:56:18 UTC (rev 5696)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/plugins/eclipse/XWikiEclipsePlugin.java
      2007-11-07 15:59:47 UTC (rev 5697)
@@ -39,6 +39,9 @@
      * The plugin ID.
      */
     public static final String PLUGIN_ID = "org.xwiki.eclipse";
+    
+    public static final String CONNECTIONS_FILE_NAME = "connections.data";
+    public static final String WORKINGSETS_FILE_NAME = "workingsets.data";
 
     /**
      * The shared instance.
@@ -61,10 +64,15 @@
     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);
+        File connectionsFile = new File(getStateLocation().toFile(), 
CONNECTIONS_FILE_NAME);
+        if(connectionsFile.exists()) {
+            
org.xwiki.xeclipse.XWikiConnectionManager.getDefault().restoreConnections(connectionsFile);
         }
+        
+        File workingSetsFile = new File(getStateLocation().toFile(), 
WORKINGSETS_FILE_NAME);
+        if(workingSetsFile.exists()) {
+            
org.xwiki.xeclipse.WorkingSetManager.getDefault().restoreWorkingSets(workingSetsFile);
+        }
     }
 
     /**
@@ -82,10 +90,13 @@
             }
         }
         
-        File connections = new File(getStateLocation().toFile(), 
"connections.data");
+        File connections = new File(getStateLocation().toFile(), 
CONNECTIONS_FILE_NAME);
         
org.xwiki.xeclipse.XWikiConnectionManager.getDefault().saveConnections(connections);
         org.xwiki.xeclipse.XWikiConnectionManager.getDefault().dispose();
         
+        File workingSetsFile = new File(getStateLocation().toFile(), 
WORKINGSETS_FILE_NAME);
+        
org.xwiki.xeclipse.WorkingSetManager.getDefault().saveWorkingSets(workingSetsFile);
+        
         plugin = null;
         super.stop(context);
     }

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSet.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSet.java
                             (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSet.java
     2007-11-07 15:59:47 UTC (rev 5697)
@@ -0,0 +1,82 @@
+package org.xwiki.xeclipse;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.xwiki.xeclipse.model.IXWikiConnection;
+import org.xwiki.xeclipse.model.IXWikiPage;
+import org.xwiki.xeclipse.model.IXWikiSpace;
+
+public class WorkingSet implements Serializable
+{
+    private static final long serialVersionUID = 2374252363910602198L;
+    private String name;
+    private Set<String> ids;
+    
+    public WorkingSet(String name)
+    {
+        this.name = name;
+        ids = new HashSet<String>();
+    }
+    
+    public void add(IXWikiConnection xwikiConnection) {
+        ids.add(getId(xwikiConnection));       
+    }
+    
+    public void add(IXWikiSpace xwikiSpace) {
+        ids.add(getId(xwikiSpace));
+    }
+    
+    public void add(IXWikiPage xwikiPage) {
+        ids.add(getId(xwikiPage));
+    }
+    
+    public void remove(IXWikiConnection xwikiConnection) {
+        ids.remove(getId(xwikiConnection));       
+    }
+    
+    public void remove(IXWikiSpace xwikiSpace) {
+        ids.remove(getId(xwikiSpace));
+    }
+    
+    public void remove(IXWikiPage xwikiPage) {
+        ids.remove(getId(xwikiPage));
+    }
+    
+    public boolean contains(IXWikiConnection xwikiConnection) {
+        return ids.contains(getId(xwikiConnection));       
+    }
+    
+    public boolean contains(IXWikiSpace xwikiSpace) {
+        return ids.contains(getId(xwikiSpace));
+    }
+    
+    public boolean contains(IXWikiPage xwikiPage) {
+        return ids.contains(getId(xwikiPage));
+    }
+    
+    
+    private String getId(IXWikiConnection xwikiConnection) {
+        return xwikiConnection.getId();
+    }
+    
+    private String getId(IXWikiSpace xwikiSpace) {
+        return String.format("%s#%s", xwikiSpace.getConnection().getId(), 
xwikiSpace.getKey());
+    }
+    
+    private String getId(IXWikiPage xwikiPage) {
+        return String.format("%s#%s", xwikiPage.getConnection().getId(), 
xwikiPage.getId());
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+    
+}   

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSetFilter.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSetFilter.java
                               (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSetFilter.java
       2007-11-07 15:59:47 UTC (rev 5697)
@@ -0,0 +1,37 @@
+package org.xwiki.xeclipse;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.xwiki.xeclipse.model.IXWikiConnection;
+import org.xwiki.xeclipse.model.IXWikiPage;
+import org.xwiki.xeclipse.model.IXWikiSpace;
+
+public class WorkingSetFilter extends ViewerFilter {
+    private WorkingSet workingSet;
+    
+    public WorkingSetFilter(WorkingSet workingSet) {
+        this.workingSet = workingSet;
+    }
+
+    @Override
+    public boolean select(Viewer viewer, Object parentElement, Object element)
+    {
+        if(element instanceof IXWikiConnection) {
+            IXWikiConnection connection = (IXWikiConnection) element;
+            return workingSet.contains(connection);
+        }
+        
+        if(element instanceof IXWikiSpace) {
+            IXWikiSpace space = (IXWikiSpace) element;
+            return workingSet.contains(space);
+        }
+        
+        if(element instanceof IXWikiPage) {
+            IXWikiPage page = (IXWikiPage) element;
+            return workingSet.contains(page);
+        }
+        
+        return false;
+    }
+    
+}
\ No newline at end of file

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSetManager.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSetManager.java
                              (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/WorkingSetManager.java
      2007-11-07 15:59:47 UTC (rev 5697)
@@ -0,0 +1,68 @@
+package org.xwiki.xeclipse;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.xwiki.plugins.eclipse.XWikiEclipsePlugin;
+
+public class WorkingSetManager
+{
+    private Set<WorkingSet> workingSets;
+
+    private static WorkingSetManager sharedInstance;
+
+    private WorkingSetManager()
+    {
+        workingSets = new HashSet<WorkingSet>();
+    }
+
+    private WorkingSetManager(Set<WorkingSet> workingSets)
+    {
+        this.workingSets = workingSets;
+    }
+
+    @SuppressWarnings("unchecked")
+    public static WorkingSetManager getDefault()
+    {
+        if (sharedInstance == null) {            
+                sharedInstance = new WorkingSetManager();            
+        }
+
+        return sharedInstance;
+    }
+
+    public void add(WorkingSet workingSet)
+    {
+        workingSets.add(workingSet);
+    }
+
+    public void remove(WorkingSet workingSet)
+    {
+        workingSets.remove(workingSet);
+    }
+
+    public Set<WorkingSet> getWorkingSets()
+    {
+        return workingSets;
+    }
+
+    public void restoreWorkingSets(File inputFile) throws Exception
+    {
+        ObjectInputStream ois = new ObjectInputStream(new 
FileInputStream(inputFile));
+        workingSets = (Set<WorkingSet>) ois.readObject();
+        ois.close();
+    }
+
+    public void saveWorkingSets(File outputFile) throws Exception
+    {
+        ObjectOutputStream oos = new ObjectOutputStream(new 
FileOutputStream(outputFile));
+        oos.writeObject(workingSets);
+        oos.close();
+    }
+}

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiEclipseConstants.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiEclipseConstants.java
  2007-11-07 14:56:18 UTC (rev 5696)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/XWikiEclipseConstants.java
  2007-11-07 15:59:47 UTC (rev 5697)
@@ -14,10 +14,12 @@
     
     public static final String CONNECTION_SETTINGS_BANNER = 
"icons/connection-settings-banner.png";
     public static final String SPACE_SETTINGS_BANNER = 
"icons/space-settings-banner.png";
+    public static final String WORKING_SET_BANNER = 
"icons/working-set-banner.png";
     public static final String XWIKI_ICON = "icons/xwiki.png";
     public static final String XWIKI_SPACE_ICON = "icons/xwiki-space.png";
     public static final String XWIKI_PAGE_ICON = "icons/xwiki-page.png";
     public static final String XWIKI_PAGE_CACHED_ICON = 
"icons/xwiki-page-cached.png";
     public static final String XWIKI_PAGE_CONFLICT_ICON = 
"icons/xwiki-page-conflict.png";
+    public static final String WORKING_SET_ICON = "icons/working-set.png";
     public static final String SHOW_EDITOR_PREVIEW_ICON = 
"icons/show-editor-preview.gif";
 }

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/dialogs/ManageWorkingSetsDialog.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/dialogs/ManageWorkingSetsDialog.java
                                (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/dialogs/ManageWorkingSetsDialog.java
        2007-11-07 15:59:47 UTC (rev 5697)
@@ -0,0 +1,198 @@
+package org.xwiki.xeclipse.dialogs;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.xwiki.plugins.eclipse.XWikiEclipsePlugin;
+import org.xwiki.xeclipse.WorkingSet;
+import org.xwiki.xeclipse.WorkingSetManager;
+import org.xwiki.xeclipse.XWikiEclipseConstants;
+import org.xwiki.xeclipse.wizards.NewWorkingSetWizard;
+
+public class ManageWorkingSetsDialog extends Dialog
+{
+    public ManageWorkingSetsDialog(Shell parentShell)
+    {
+        super(parentShell);
+        setShellStyle(getShellStyle() | SWT.RESIZE);
+    }
+
+    @Override
+    protected void configureShell(Shell shell)
+    {
+        super.configureShell(shell);
+
+        shell.setText("Manage working sets");
+        shell.setSize(600, 300);
+
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent)
+    {
+        Composite composite = new Composite(parent, SWT.NONE);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
true).applyTo(
+            composite);
+        GridLayoutFactory.fillDefaults().margins(10, 
10).numColumns(2).applyTo(composite);
+
+        final TableViewer tableViewer = new TableViewer(composite, SWT.BORDER);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
true).applyTo(
+            tableViewer.getControl());
+        tableViewer.setContentProvider(new IStructuredContentProvider()
+        {
+
+            public void dispose()
+            {
+            }
+
+            public void inputChanged(Viewer viewer, Object oldInput, Object 
newInput)
+            {
+            }
+
+            public Object[] getElements(Object inputElement)
+            {
+                return 
WorkingSetManager.getDefault().getWorkingSets().toArray();
+            }
+        });
+
+        tableViewer.setLabelProvider(new LabelProvider()
+        {
+
+            @Override
+            public String getText(Object element)
+            {
+                if (element instanceof WorkingSet) {
+                    WorkingSet workingSet = (WorkingSet) element;
+
+                    return workingSet.getName();
+                }
+
+                return super.getText(element);
+            }
+
+            @Override
+            public Image getImage(Object element)
+            {
+                if (element instanceof WorkingSet) {
+                    return XWikiEclipsePlugin.getImageDescriptor(
+                        XWikiEclipseConstants.WORKING_SET_ICON).createImage();
+                }
+
+                return super.getImage(element);
+            }
+
+        });
+        tableViewer.setInput(WorkingSetManager.getDefault().getWorkingSets());
+
+        Composite buttonBar = new Composite(composite, SWT.NONE);
+        GridLayoutFactory.fillDefaults().applyTo(buttonBar);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(false, 
true).applyTo(
+            buttonBar);
+
+        Button button = new Button(buttonBar, SWT.PUSH);
+        button.setText("New...");
+        button.addSelectionListener(new SelectionListener()
+        {
+
+            public void widgetDefaultSelected(SelectionEvent e)
+            {
+            }
+
+            public void widgetSelected(SelectionEvent event)
+            {
+                try {
+                    NewWorkingSetWizard wizard = new NewWorkingSetWizard();
+
+                    WizardDialog dialog = new WizardDialog(getShell(), wizard);
+                    dialog.create();
+                    dialog.open();
+                    tableViewer.refresh();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+            }
+
+        });
+
+        button = new Button(buttonBar, SWT.PUSH);
+        button.setText("Remove");
+        button.addSelectionListener(new SelectionListener()
+        {
+
+            public void widgetDefaultSelected(SelectionEvent e)
+            {
+                // TODO Auto-generated method stub
+
+            }
+
+            public void widgetSelected(SelectionEvent e)
+            {
+                IStructuredSelection selection =
+                    (IStructuredSelection) tableViewer.getSelection();
+                if (!selection.isEmpty()) {
+                    Object selectedObject = selection.getFirstElement();
+                    if (selectedObject instanceof WorkingSet) {
+                        WorkingSet workingSet = (WorkingSet) selectedObject;
+
+                        MessageBox messageBox =
+                            new MessageBox(getShell(), SWT.YES | SWT.NO | 
SWT.ICON_QUESTION);
+                        messageBox.setMessage(String.format(
+                            "Do you really want to remove the working set 
'%s'?", workingSet
+                                .getName()));
+                        int result = messageBox.open();
+                        if (result == SWT.YES) {
+                            WorkingSetManager.getDefault().remove(workingSet);
+                            tableViewer.refresh();
+                        }
+                    }
+                }
+
+            }
+
+        });
+
+        return composite;
+    }
+
+    @Override
+    protected void createButtonsForButtonBar(Composite parent)
+    {
+        Button button =
+            createButton(parent, IDialogConstants.CLOSE_ID, 
IDialogConstants.CLOSE_LABEL, true);
+        button.addSelectionListener(new SelectionListener()
+        {
+
+            public void widgetDefaultSelected(SelectionEvent e)
+            {
+                // TODO Auto-generated method stub
+
+            }
+
+            public void widgetSelected(SelectionEvent e)
+            {
+                close();
+            }
+
+        });
+
+    }
+
+}

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/DiskCacheDAO.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/DiskCacheDAO.java
        2007-11-07 14:56:18 UTC (rev 5696)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/model/impl/DiskCacheDAO.java
        2007-11-07 15:59:47 UTC (rev 5697)
@@ -244,7 +244,7 @@
             Set<String> pageIds = 
indexAggregate.getSpaceToPagesIndex().get(spaceKey);
             if (pageIds != null) {
                 for (String pageId : pageIds) {
-                    String dataFileName = 
indexAggregate.pageToDataFileNameIndex.get(pageId);                    
+                    String dataFileName = 
indexAggregate.pageToDataFileNameIndex.get(pageId);
                     ObjectInputStream ois =
                         new ObjectInputStream(new FileInputStream(new 
File(cacheDir, dataFileName)));
                     Map map = (Map) ois.readObject();
@@ -309,7 +309,7 @@
             if (pagesInSpace == null) {
                 pagesInSpace = new HashSet<String>();
                 indexAggregate.getSpaceToPagesIndex().put(page.getSpace(), 
pagesInSpace);
-            }            
+            }
             pagesInSpace.add(page.getId());
         } catch (Exception e) {
             throw new XWikiDAOException(e);
@@ -418,7 +418,7 @@
         indexAggregate.getDirtyPagesIndex().remove(id);
         indexAggregate.getConflictPagesIndex().remove(id);
         Set<String> pages = indexAggregate.getSpaceToPagesIndex().get(space);
-        if(pages != null) {
+        if (pages != null) {
             pages.remove(id);
         }
         indexAggregate.getPageToSpaceIndex().remove(id);

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-11-07 14:56:18 UTC (rev 5696)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/views/XWikiExplorerView.java
        2007-11-07 15:59:47 UTC (rev 5697)
@@ -25,6 +25,9 @@
 import org.eclipse.core.expressions.ExpressionInfo;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.viewers.DoubleClickEvent;
@@ -38,6 +41,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.ISources;
 import org.eclipse.ui.IViewSite;
 import org.eclipse.ui.IWorkbenchPage;
@@ -48,11 +52,16 @@
 import org.eclipse.ui.menus.CommandContributionItem;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 import org.eclipse.ui.part.ViewPart;
+import org.xwiki.plugins.eclipse.XWikiEclipsePlugin;
 import org.xwiki.xeclipse.IXWikiEclipseEventListener;
+import org.xwiki.xeclipse.WorkingSet;
+import org.xwiki.xeclipse.WorkingSetFilter;
+import org.xwiki.xeclipse.WorkingSetManager;
 import org.xwiki.xeclipse.XWikiConnectionManager;
 import org.xwiki.xeclipse.XWikiEclipseConstants;
 import org.xwiki.xeclipse.XWikiEclipseEvent;
 import org.xwiki.xeclipse.XWikiEclipseNotificationCenter;
+import org.xwiki.xeclipse.dialogs.ManageWorkingSetsDialog;
 import org.xwiki.xeclipse.editors.XWikiPageEditor;
 import org.xwiki.xeclipse.editors.XWikiPageEditorInput;
 import org.xwiki.xeclipse.handlers.ConnectHandler;
@@ -76,6 +85,41 @@
 
     private IHandlerActivation deleteCommandActivation;
 
+    private WorkingSet currentWorkingSet;
+
+    private class SelectWorkingSetAction extends Action
+    {
+        private WorkingSet workingSet;
+
+        private TreeViewer treeViewer;
+
+        public SelectWorkingSetAction(WorkingSet workingSet, TreeViewer 
treeViewer)
+        {
+            super(null, Action.AS_CHECK_BOX);
+            setText(workingSet != null ? workingSet.getName() : "No working 
set");
+            setChecked(workingSet == currentWorkingSet);
+            this.workingSet = workingSet;
+            this.treeViewer = treeViewer;
+
+            if (workingSet != null) {
+                setImageDescriptor(XWikiEclipsePlugin
+                    
.getImageDescriptor(XWikiEclipseConstants.WORKING_SET_ICON));
+            }
+
+        }
+
+        @Override
+        public void run()
+        {
+            currentWorkingSet = workingSet;
+            treeViewer.resetFilters();
+            if (workingSet != null) {
+                treeViewer.addFilter(new WorkingSetFilter(workingSet));
+            }
+        }
+
+    }
+
     @Override
     public void createPartControl(Composite parent)
     {
@@ -115,9 +159,61 @@
             }
         });
 
+        contributeToActionBars();
         hookContextMenu();
     }
 
+    private void contributeToActionBars()
+    {
+        IActionBars actionBars = getViewSite().getActionBars();
+        IMenuManager viewMenuManager = actionBars.getMenuManager();
+        MenuManager workingSetMenuManager = new MenuManager("Working sets", 
"workingSet");
+        workingSetMenuManager.add(new Action()
+        {
+        });
+        workingSetMenuManager.setRemoveAllWhenShown(true);
+        workingSetMenuManager.addMenuListener(new IMenuListener()
+        {
+            public void menuAboutToShow(IMenuManager manager)
+            {
+                manager.add(new SelectWorkingSetAction(null, treeViewer));
+
+                for (WorkingSet workingSet : 
WorkingSetManager.getDefault().getWorkingSets()) {
+
+                    manager.add(new SelectWorkingSetAction(workingSet, 
treeViewer));
+                }
+
+                manager.add(new Separator());
+
+                manager.add(new Action("Manage working sets...")
+                {
+                    @Override
+                    public void run()
+                    {
+                        ManageWorkingSetsDialog dialog =
+                            new ManageWorkingSetsDialog(getSite().getShell());
+                        dialog.open();
+
+                        /*
+                         * If the current working set has been deleted then 
set the current working
+                         * set to null
+                         */
+                        if 
(!WorkingSetManager.getDefault().getWorkingSets().contains(
+                            currentWorkingSet)) {
+                            currentWorkingSet = null;
+                            treeViewer.resetFilters();
+                        }
+                    }
+
+                });
+
+            }
+        });
+
+        viewMenuManager.add(workingSetMenuManager);
+
+    }
+
     private void hookContextMenu()
     {
         MenuManager menuManager = new MenuManager("#Popup");

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-11-07 14:56:18 UTC (rev 5696)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizard.java
    2007-11-07 15:59:47 UTC (rev 5697)
@@ -79,7 +79,11 @@
         }
         
         try {            
-            IXWikiConnection connection = 
XWikiConnectionFactory.createCachedConnection(newConnectionWizardState.getServerUrl(),
 newConnectionWizardState.getUserName(), new 
File(XWikiEclipsePlugin.getDefault().getStateLocation().toFile(), "cache"));
+            IXWikiConnection connection =
+                XWikiConnectionFactory
+                    
.createCachedConnection(newConnectionWizardState.getServerUrl(),
+                        newConnectionWizardState.getUserName(), new 
File(XWikiEclipsePlugin
+                            .getDefault().getStateLocation().toFile(), 
"cache"));
             XWikiConnectionManager.getDefault().addConnection(connection, 
newConnectionWizardState.getPassword());
             connection.connect(newConnectionWizardState.getPassword());
         } catch (Exception e) {

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizardState.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizardState.java
       2007-11-07 14:56:18 UTC (rev 5696)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewConnectionWizardState.java
       2007-11-07 15:59:47 UTC (rev 5697)
@@ -23,61 +23,75 @@
 public class NewConnectionWizardState
 {
     private String serverUrl;
+
     private String userName;
+
     private String password;
+
     private boolean useProxy;
+
     private String proxyHost;
+
     private String proxyPort;
-    
+
     public String getServerUrl()
     {
         return serverUrl;
     }
+
     public void setServerUrl(String serverUrl)
     {
         this.serverUrl = serverUrl;
     }
+
     public String getUserName()
     {
         return userName;
     }
+
     public void setUserName(String userName)
     {
         this.userName = userName;
     }
+
     public String getPassword()
     {
         return password;
     }
+
     public void setPassword(String password)
     {
         this.password = password;
     }
+
     public boolean isUseProxy()
     {
         return useProxy;
     }
+
     public void setUseProxy(boolean useProxy)
     {
         this.useProxy = useProxy;
     }
+
     public String getProxyHost()
     {
         return proxyHost;
     }
+
     public void setProxyHost(String proxyHost)
     {
         this.proxyHost = proxyHost;
     }
+
     public String getProxyPort()
     {
         return proxyPort;
     }
+
     public void setProxyPort(String proxyPort)
     {
         this.proxyPort = proxyPort;
     }
-    
-    
 
 }

Modified: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewPageWizardState.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewPageWizardState.java
     2007-11-07 14:56:18 UTC (rev 5696)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewPageWizardState.java
     2007-11-07 15:59:47 UTC (rev 5697)
@@ -23,7 +23,7 @@
 public class NewPageWizardState
 {
     private String title;
-                
+
     public String getTitle()
     {
         return title;

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewWorkingSetWizard.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewWorkingSetWizard.java
                            (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewWorkingSetWizard.java
    2007-11-07 15:59:47 UTC (rev 5697)
@@ -0,0 +1,74 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *
+ */
+package org.xwiki.xeclipse.wizards;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.xwiki.xeclipse.WorkingSetManager;
+
+public class NewWorkingSetWizard extends Wizard implements INewWizard
+{
+    private NewWorkingSetWizardState newWorkingSetWizardState;
+    
+    public NewWorkingSetWizard()
+    {
+        super();
+        newWorkingSetWizardState = new NewWorkingSetWizardState();
+    }
+
+    
+    
+    @Override
+    public boolean performFinish()
+    {
+        
WorkingSetManager.getDefault().add(newWorkingSetWizardState.getWorkingSet());
+        
+        return true;
+    }
+
+    @Override
+    public void addPages()
+    {
+        addPage(new WorkingSetSelection("Working set selection"));
+    }
+
+    @Override
+    public boolean canFinish()
+    {
+        if(newWorkingSetWizardState.getWorkingSet().getName() == null || 
newWorkingSetWizardState.getWorkingSet().getName().length() == 0) {
+            return false;
+        }
+        
+        return true;
+    }
+
+    public void init(IWorkbench workbench, IStructuredSelection selection)
+    {
+    }
+
+    public NewWorkingSetWizardState getNewWorkingSetState()
+    {
+        return newWorkingSetWizardState;
+    }
+
+}

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewWorkingSetWizardState.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewWorkingSetWizardState.java
                               (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/NewWorkingSetWizardState.java
       2007-11-07 15:59:47 UTC (rev 5697)
@@ -0,0 +1,20 @@
+package org.xwiki.xeclipse.wizards;
+
+import org.xwiki.xeclipse.WorkingSet;
+
+public class NewWorkingSetWizardState
+{
+    private WorkingSet workingSet;
+    
+    public NewWorkingSetWizardState()
+    {
+        workingSet = new WorkingSet(null);
+    }
+    
+    public WorkingSet getWorkingSet()
+    {
+        return workingSet;
+    }
+    
+    
+}

Added: 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/WorkingSetSelection.java
===================================================================
--- 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/WorkingSetSelection.java
                            (rev 0)
+++ 
xwiki-extensions/xwiki-eclipse/trunk/plugins/org.xwiki.eclipse/src/main/java/org/xwiki/xeclipse/wizards/WorkingSetSelection.java
    2007-11-07 15:59:47 UTC (rev 5697)
@@ -0,0 +1,205 @@
+package org.xwiki.xeclipse.wizards;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.xwiki.plugins.eclipse.XWikiEclipsePlugin;
+import org.xwiki.xeclipse.WorkingSet;
+import org.xwiki.xeclipse.WorkingSetFilter;
+import org.xwiki.xeclipse.XWikiConnectionManager;
+import org.xwiki.xeclipse.XWikiEclipseConstants;
+import org.xwiki.xeclipse.model.IXWikiConnection;
+import org.xwiki.xeclipse.model.IXWikiPage;
+import org.xwiki.xeclipse.model.IXWikiSpace;
+import org.xwiki.xeclipse.views.XWikiExplorerContentProvider;
+
+public class WorkingSetSelection extends WizardPage
+{
+    private NewWorkingSetWizardState newWorkingSetWizardState;
+
+    private TreeViewer previewTreeViewer;
+
+    private WorkingSetFilter workingSetFilter;
+
+    protected WorkingSetSelection(String pageName)
+    {
+        super(pageName);
+        setTitle("New working set");
+        setImageDescriptor(XWikiEclipsePlugin
+            .getImageDescriptor(XWikiEclipseConstants.WORKING_SET_BANNER));
+    }
+
+    
+    
+    private void checkPath(TreeItem item, boolean checked, boolean grayed)
+    {
+        if (item == null) {
+            return;
+        }
+
+        if (grayed) {
+            checked = true;
+        } else {
+            int index = 0;
+            TreeItem[] items = item.getItems();
+            while (index < items.length) {
+                TreeItem child = items[index];
+                if (child.getGrayed() || checked != child.getChecked()) {
+                    checked = grayed = true;
+                    break;
+                }
+                index++;
+            }
+        }
+
+        item.setChecked(checked);
+        item.setGrayed(grayed);
+        updateWorkingSet(newWorkingSetWizardState.getWorkingSet(), 
item.getData(), checked);
+        checkPath(item.getParentItem(), checked, grayed);
+    }
+
+    private void checkItems(TreeItem item, boolean checked)
+    {
+        item.setGrayed(false);
+        item.setChecked(checked);
+        TreeItem[] items = item.getItems();
+        for (int i = 0; i < items.length; i++) {
+            checkItems(items[i], checked);
+            updateWorkingSet(newWorkingSetWizardState.getWorkingSet(), 
items[i].getData(),
+                checked);
+        }
+    }
+
+    public void createControl(Composite parent)
+    {
+        newWorkingSetWizardState = ((NewWorkingSetWizard) 
getWizard()).getNewWorkingSetState();
+        Composite composite = new Composite(parent, SWT.NONE);
+        GridLayoutFactory.fillDefaults().applyTo(composite);
+
+        Group group = new Group(composite, SWT.NONE);
+        GridLayoutFactory.fillDefaults().numColumns(2).margins(5, 
5).applyTo(group);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
false).applyTo(group);
+
+        Label label = new Label(group, SWT.NONE);
+        label.setText("Working set name:");
+
+        final Text workingSetNameText = new Text(group, SWT.BORDER);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
false).applyTo(
+            workingSetNameText);
+        workingSetNameText.addModifyListener(new ModifyListener()
+        {
+            public void modifyText(ModifyEvent e)
+            {
+                
newWorkingSetWizardState.getWorkingSet().setName(workingSetNameText.getText());
+                getContainer().updateButtons();
+            }
+        });
+
+        SashForm sashForm = new SashForm(composite, SWT.HORIZONTAL);
+        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(sashForm);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
true).applyTo(
+            sashForm);
+
+        group = new Group(sashForm, SWT.NONE);
+        GridLayoutFactory.fillDefaults().margins(5, 5).applyTo(group);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
true).applyTo(group);
+        group.setText("Working set content selection");
+
+        final TreeViewer treeViewer = new TreeViewer(group, SWT.CHECK);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
true).applyTo(
+            treeViewer.getControl());
+        treeViewer.setComparator(new ViewerComparator());
+        treeViewer.setContentProvider(new 
XWikiExplorerContentProvider(treeViewer));
+        treeViewer.setLabelProvider(new WorkbenchLabelProvider());
+        treeViewer.setInput(XWikiConnectionManager.getDefault());
+        treeViewer.getTree().addListener(SWT.Selection, new Listener()
+        {
+            public void handleEvent(Event event)
+            {
+                if (event.detail == SWT.CHECK) {
+                    TreeItem item = (TreeItem) event.item;
+                    boolean checked = item.getChecked();
+                    checkItems(item, checked);
+                    checkPath(item.getParentItem(), checked, false);
+
+                    updateWorkingSet(newWorkingSetWizardState.getWorkingSet(), 
item.getData(),
+                        checked);
+
+                    if (workingSetFilter != null) {
+                        previewTreeViewer.removeFilter(workingSetFilter);
+                    }
+
+                    workingSetFilter =
+                        new 
WorkingSetFilter(newWorkingSetWizardState.getWorkingSet());
+                    previewTreeViewer.addFilter(workingSetFilter);
+                }
+            }
+        });
+
+        group = new Group(sashForm, SWT.NONE);
+        GridLayoutFactory.fillDefaults().margins(5, 5).applyTo(group);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
true).applyTo(group);
+        group.setText("Selected working set preview");
+
+        previewTreeViewer = new TreeViewer(group, SWT.NONE);
+        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, 
true).applyTo(
+            previewTreeViewer.getControl());
+        previewTreeViewer.setComparator(new ViewerComparator());
+        previewTreeViewer.setContentProvider(new 
XWikiExplorerContentProvider(previewTreeViewer));
+        previewTreeViewer.setLabelProvider(new WorkbenchLabelProvider());
+        previewTreeViewer.setInput(XWikiConnectionManager.getDefault());
+
+        workingSetFilter = new 
WorkingSetFilter(newWorkingSetWizardState.getWorkingSet());
+        previewTreeViewer.addFilter(workingSetFilter);
+
+        sashForm.setWeights(new int[] {50, 50});
+
+        setControl(composite);
+    }
+
+    private void updateWorkingSet(WorkingSet workingSet, Object object, 
boolean add)
+    {
+        if (object instanceof IXWikiConnection) {
+            IXWikiConnection connection = (IXWikiConnection) object;
+            if (add) {
+                workingSet.add(connection);
+            } else {
+                workingSet.remove(connection);
+            }
+        }
+
+        if (object instanceof IXWikiSpace) {
+            IXWikiSpace space = (IXWikiSpace) object;
+            if (add) {
+                workingSet.add(space);
+            } else {
+                workingSet.remove(space);
+            }
+        }
+
+        if (object instanceof IXWikiPage) {
+            IXWikiPage page = (IXWikiPage) object;
+            if (add) {
+                workingSet.add(page);
+            } else {
+                workingSet.remove(page);
+            }
+        }
+
+    }
+
+}

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

Reply via email to