You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2010/08/23 11:59:41 UTC

svn commit: r988052 - in /ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse: retrieve/StandaloneRetrieveSetup.java ui/menu/CleanCacheContributionItem.java ui/menu/IvyMenuContributionItem.java ui/menu/RetrieveAction.java

Author: hibou
Date: Mon Aug 23 09:59:41 2010
New Revision: 988052

URL: http://svn.apache.org/viewvc?rev=988052&view=rev
Log:
IVYDE-56: ...work still in progress...
 * rework the menu to add entries for the retrieve

Added:
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java   (with props)
Removed:
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/CleanCacheContributionItem.java
Modified:
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/StandaloneRetrieveSetup.java
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/StandaloneRetrieveSetup.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/StandaloneRetrieveSetup.java?rev=988052&r1=988051&r2=988052&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/StandaloneRetrieveSetup.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/StandaloneRetrieveSetup.java Mon Aug 23 09:59:41 2010
@@ -21,7 +21,7 @@ import org.apache.ivyde.eclipse.cpcontai
 
 public class StandaloneRetrieveSetup {
 
-    private String name = "";
+    private String name = "dependencies";
 
     private IvySettingsSetup ivySettingsSetup = new IvySettingsSetup();
 

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java?rev=988052&r1=988051&r2=988052&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java Mon Aug 23 09:59:41 2010
@@ -17,7 +17,9 @@
  */
 package org.apache.ivyde.eclipse.ui.menu;
 
+import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -25,7 +27,12 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Map.Entry;
 
+import org.apache.ivy.Ivy;
+import org.apache.ivy.core.cache.RepositoryCacheManager;
+import org.apache.ivy.core.cache.ResolutionCacheManager;
+import org.apache.ivyde.eclipse.IvyDEException;
 import org.apache.ivyde.eclipse.IvyNature;
 import org.apache.ivyde.eclipse.IvyPlugin;
 import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainer;
@@ -36,10 +43,17 @@ import org.apache.ivyde.eclipse.handlers
 import org.apache.ivyde.eclipse.handlers.RemoveIvyNatureHandler;
 import org.apache.ivyde.eclipse.handlers.ResolveHandler;
 import org.apache.ivyde.eclipse.handlers.ViewReverseDependenciesHandler;
+import org.apache.ivyde.eclipse.retrieve.RetrieveSetupManager;
+import org.apache.ivyde.eclipse.retrieve.StandaloneRetrieveSetup;
+import org.apache.ivyde.eclipse.ui.menu.CleanCacheAction.Cleanable;
+import org.apache.ivyde.eclipse.ui.menu.CleanCacheAction.RepositoryCacheCleanable;
+import org.apache.ivyde.eclipse.ui.menu.CleanCacheAction.ResolutionCacheCleanable;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.internal.ui.packageview.ClassPathContainer;
+import org.eclipse.jface.action.ActionContributionItem;
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.ISelection;
@@ -72,15 +86,20 @@ public class IvyMenuContributionItem ext
             return new IContributionItem[0];
         }
 
-        Map/* <IProject, Set<IvyClasspathContainer>> */projects = new HashMap();
+        Map/* <IProject, Set<IvyClasspathContainer>> */containers = new HashMap();
+
+        Map/* <IProject, Set<StandaloneRetrieveSetup>> */retrieveSetups = new HashMap();
 
         // this give info about if the selection is only based of classpath containers
         boolean onlyContainers = true;
 
+        int totalSelected = 0;
+
         Iterator it = ((IStructuredSelection) selection).iterator();
         while (it.hasNext()) {
+            totalSelected++;
             Object element = it.next();
-            boolean projectCollected = collectProject(projects, element);
+            boolean projectCollected = collectProject(containers, retrieveSetups, element);
             if (projectCollected) {
                 onlyContainers = false;
             } else {
@@ -89,10 +108,10 @@ public class IvyMenuContributionItem ext
                     onlyContainers = false;
                     IAdaptable[] elements = workingSet.getElements();
                     for (int i = 0; i < elements.length; i++) {
-                        collectProject(projects, elements[i]);
+                        collectProject(containers, retrieveSetups, elements[i]);
                     }
                 } else if (element instanceof ClassPathContainer) {
-                    collectContainer(projects, (ClassPathContainer) element);
+                    collectContainer(containers, (ClassPathContainer) element);
                 }
             }
         }
@@ -109,18 +128,64 @@ public class IvyMenuContributionItem ext
             items = Collections.singletonList(menuManager);
         }
 
-        addCommand(menuManager, items, ResolveHandler.COMMAND_ID);
-        addCommand(menuManager, items, RefreshHandler.COMMAND_ID);
-        addCommand(menuManager, items, ReloadSettingsHandler.COMMAND_ID);
-        fillMenu(menuManager, items, new IvyMenuSeparator());
-        addCommand(menuManager, items, OpenIvyFileHandler.COMMAND_ID);
-        fillMenu(menuManager, items, new IvyMenuSeparator());
-        CleanCacheContributionItem cleanCacheContributionItem = new CleanCacheContributionItem();
-        cleanCacheContributionItem.initialize(serviceLocator);
-        fillMenu(menuManager, items, cleanCacheContributionItem);
-        fillMenu(menuManager, items, new IvyMenuSeparator());
-        addCommand(menuManager, items, ViewReverseDependenciesHandler.COMMAND_ID);
-        fillMenu(menuManager, items, new IvyMenuSeparator());
+        // add resolve, refresh, reload settings
+        if (!containers.isEmpty()) {
+            addCommand(menuManager, items, ResolveHandler.COMMAND_ID);
+            addCommand(menuManager, items, RefreshHandler.COMMAND_ID);
+            addCommand(menuManager, items, ReloadSettingsHandler.COMMAND_ID);
+            fillMenu(menuManager, items, new IvyMenuSeparator());
+        }
+
+        // add retrieve
+        if (!retrieveSetups.isEmpty()) {
+            boolean oneProject = retrieveSetups.size() == 1 && totalSelected == 1;
+            Iterator itProject = retrieveSetups.entrySet().iterator();
+            while (itProject.hasNext()) {
+                Entry entry = (Entry) itProject.next();
+                IProject project = (IProject) entry.getKey();
+                Iterator itSetup = ((Set) entry.getValue()).iterator();
+                while (itSetup.hasNext()) {
+                    StandaloneRetrieveSetup retrieveSetup = (StandaloneRetrieveSetup) itSetup
+                            .next();
+                    RetrieveAction action = new RetrieveAction(retrieveSetup);
+                    action.setText("Retrieve '" + retrieveSetup.getName()
+                            + (oneProject ? "'" : "' of " + project.getName()));
+                    fillMenu(menuManager, items, new ActionContributionItem(action));
+                }
+            }
+            fillMenu(menuManager, items, new IvyMenuSeparator());
+        }
+
+        // add open file
+        if (!containers.isEmpty()) {
+            addCommand(menuManager, items, OpenIvyFileHandler.COMMAND_ID);
+            fillMenu(menuManager, items, new IvyMenuSeparator());
+        }
+
+        // add clean cache
+        if (!containers.isEmpty()) {
+            if (totalSelected == 1 && containers.size() == 1
+                    && ((Set) containers.values().iterator().next()).size() == 1) {
+                // only one container
+                IvyClasspathContainer ivycp = (IvyClasspathContainer) ((Set) containers.values()
+                        .iterator().next()).iterator().next();
+                Ivy ivy = getSafelyIvy(ivycp);
+                if (ivy != null) {
+                    addCleanableForSingleContainer(menuManager, items, ivy);
+                }
+            } else {
+                addCleanableForManyContainers(menuManager, items, containers.values());
+            }
+            fillMenu(menuManager, items, new IvyMenuSeparator());
+        }
+
+        // add reverse dependency explorer
+        if (!containers.isEmpty()) {
+            addCommand(menuManager, items, ViewReverseDependenciesHandler.COMMAND_ID);
+            fillMenu(menuManager, items, new IvyMenuSeparator());
+        }
+
+        // add remove ivy nature
         addCommand(menuManager, items, RemoveIvyNatureHandler.COMMAND_ID);
 
         return (IContributionItem[]) items.toArray(new IContributionItem[items.size()]);
@@ -142,43 +207,136 @@ public class IvyMenuContributionItem ext
         }
     }
 
-    private boolean collectProject(Map/* <IProject, Set<IvyClasspathContainer>> */projects,
-            Object element) {
+    private boolean collectProject(Map/* <IProject, Set<IvyClasspathContainer>> */containers,
+            Map/* <IProject, Set<StandaloneRetrieveSetup>> */retrieveSetups, Object element) {
         IProject project = (IProject) IvyPlugin.adapt(element, IProject.class);
         if (project != null && project.isOpen() && IvyNature.hasNature(project)) {
-            doCollectProject(projects, project);
+            doCollectProject(containers, retrieveSetups, project);
             return true;
         }
         return false;
     }
 
-    private void doCollectProject(Map/* <IProject, Set<IvyClasspathContainer>> */projects,
-            IProject project) {
-        List containers = IvyClasspathUtil.getIvyClasspathContainers(project);
-        if (!containers.isEmpty()) {
-            projects.put(project, new HashSet(containers));
+    private void doCollectProject(Map/* <IProject, Set<IvyClasspathContainer>> */containers,
+            Map/* <IProject, Set<StandaloneRetrieveSetup>> */retrieveSetups, IProject project) {
+        List ivycps = IvyClasspathUtil.getIvyClasspathContainers(project);
+        if (!ivycps.isEmpty()) {
+            containers.put(project, new HashSet(ivycps));
+        }
+        RetrieveSetupManager manager = IvyPlugin.getDefault().getRetrieveSetupManager();
+        List setupList;
+        try {
+            setupList = manager.getSetup(project);
+        } catch (IOException e) {
+            IvyPlugin.log(IStatus.WARNING, "Unable to get the retrieve setup for project "
+                    + project.getName(), e);
+            return;
+        }
+        if (!setupList.isEmpty()) {
+            retrieveSetups.put(project, new HashSet(setupList));
         }
     }
 
-    private boolean collectContainer(Map/* <IProject, Set<IvyClasspathContainer>> */projects,
+    private boolean collectContainer(Map/* <IProject, Set<IvyClasspathContainer>> */containers,
             ClassPathContainer element) {
         IvyClasspathContainer ivycp = IvyClasspathUtil.jdt2IvyCPC(element);
         if (ivycp == null) {
             return false;
         }
-        doCollectContainer(projects, ivycp);
+        doCollectContainer(containers, ivycp);
         return true;
     }
 
-    private void doCollectContainer(Map/* <IProject, Set<IvyClasspathContainer>> */projects,
+    private void doCollectContainer(Map/* <IProject, Set<IvyClasspathContainer>> */containers,
             IvyClasspathContainer ivycp) {
         IJavaProject javaProject = ivycp.getConf().getJavaProject();
-        Set/* <IvyClasspathContainer> */cplist = (Set) projects.get(javaProject.getProject());
+        Set/* <IvyClasspathContainer> */cplist = (Set) containers.get(javaProject.getProject());
         if (cplist == null) {
             cplist = new HashSet();
-            projects.put(javaProject.getProject(), cplist);
+            containers.put(javaProject.getProject(), cplist);
         }
         cplist.add(ivycp);
     }
 
+    private Ivy getSafelyIvy(IvyClasspathContainer ivycp) {
+        try {
+            return ivycp.getState().getCachedIvy();
+        } catch (IvyDEException e) {
+            e.log(IStatus.WARNING, "Cache deletion actions could not be populated for "
+                    + ivycp.getConf().toString());
+            return null;
+        }
+    }
+
+    private void addCleanableForSingleContainer(MenuManager menuManager,
+            List/* <IContributionItem> */items, Ivy ivy) {
+        List/* <Cleanable> */allCleanables = new ArrayList();
+        List/* <Cleanable> */repositoryCleanables = new ArrayList();
+        List/* <Cleanable> */resolutionCleanables = new ArrayList();
+
+        addResolutionCleanable(allCleanables, ivy);
+        addResolutionCleanable(resolutionCleanables, ivy);
+
+        addRepositoryCleanable(allCleanables, ivy);
+        addRepositoryCleanable(repositoryCleanables, ivy);
+
+        addCleanable(menuManager, items, "Clean all caches", allCleanables);
+        addCleanable(menuManager, items, "Clean the resolution cache", resolutionCleanables);
+        addCleanable(menuManager, items, "Clean every repository cache", repositoryCleanables);
+        Iterator itCleanble = resolutionCleanables.iterator();
+        while (itCleanble.hasNext()) {
+            Cleanable cleanable = (Cleanable) itCleanble.next();
+            addCleanable(menuManager, items, "Clean the cache '" + cleanable.getName() + "'",
+                Collections.singletonList(cleanable));
+        }
+    }
+
+    private void addCleanableForManyContainers(MenuManager menuManager,
+            List/* <IContributionItem> */items, Collection/*
+                                                           * <Set<IvyClasspathContainer >>
+                                                           */containerSets) {
+        List/* <Cleanable> */allCleanables = new ArrayList();
+        List/* <Cleanable> */repositoryCleanables = new ArrayList();
+        List/* <Cleanable> */resolutionCleanables = new ArrayList();
+
+        Iterator itSet = containerSets.iterator();
+        while (itSet.hasNext()) {
+            Set set = (Set) itSet.next();
+            Iterator itContainer = set.iterator();
+            while (itContainer.hasNext()) {
+                IvyClasspathContainer ivycp = (IvyClasspathContainer) itContainer.next();
+                Ivy ivy = getSafelyIvy(ivycp);
+                if (ivy != null) {
+                    addResolutionCleanable(allCleanables, ivy);
+                    addResolutionCleanable(resolutionCleanables, ivy);
+
+                    addRepositoryCleanable(allCleanables, ivy);
+                    addRepositoryCleanable(repositoryCleanables, ivy);
+                }
+            }
+        }
+        addCleanable(menuManager, items, "Clean all caches", allCleanables);
+        addCleanable(menuManager, items, "Clean every resolution cache", resolutionCleanables);
+        addCleanable(menuManager, items, "Clean every repository cache", repositoryCleanables);
+    }
+
+    private void addResolutionCleanable(List/* <Cleanable> */cleanables, Ivy ivy) {
+        ResolutionCacheManager manager = ivy.getSettings().getResolutionCacheManager();
+        cleanables.add(new ResolutionCacheCleanable(manager));
+    }
+
+    private void addRepositoryCleanable(List/* <Cleanable> */cleanables, Ivy ivy) {
+        RepositoryCacheManager[] managers = ivy.getSettings().getRepositoryCacheManagers();
+        for (int i = 0; i < managers.length; i++) {
+            cleanables.add(new RepositoryCacheCleanable(managers[i]));
+        }
+    }
+
+    public void addCleanable(MenuManager menuManager, List/* <IContributionItem> */items,
+            String name, List/* <Cleanable> */cleanables) {
+        CleanCacheAction action = new CleanCacheAction(cleanables);
+        action.setText(name);
+        fillMenu(menuManager, items, new ActionContributionItem(action));
+    }
+
 }

Added: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java?rev=988052&view=auto
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java (added)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java Mon Aug 23 09:59:41 2010
@@ -0,0 +1,37 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.ivyde.eclipse.ui.menu;
+
+import org.apache.ivyde.eclipse.IvyPlugin;
+import org.apache.ivyde.eclipse.retrieve.StandaloneRetrieveSetup;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.action.Action;
+
+public class RetrieveAction extends Action {
+
+    private final StandaloneRetrieveSetup retrieveSetup;
+
+    public RetrieveAction(StandaloneRetrieveSetup retrieveSetup) {
+        this.retrieveSetup = retrieveSetup;
+    }
+
+    public void run() {
+        // TODO
+        IvyPlugin.log(IStatus.INFO, "retrieve of " + retrieveSetup.getName(), null);
+    }
+}

Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain