### Eclipse Workspace Patch 1.0 #P org.eclipse.pde.ui Index: src/org/eclipse/pde/internal/ui/editor/site/CategorySection.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategorySection.java,v retrieving revision 1.43 diff -u -r1.43 CategorySection.java --- src/org/eclipse/pde/internal/ui/editor/site/CategorySection.java 15 Aug 2007 20:12:52 -0000 1.43 +++ src/org/eclipse/pde/internal/ui/editor/site/CategorySection.java 4 Sep 2007 08:49:47 -0000 @@ -12,6 +12,8 @@ import java.util.ArrayList; import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.Action; @@ -171,7 +173,7 @@ fModel.addModelChangedListener(this); Composite container = createClientContainer(section, 2, toolkit); - createViewerPartControl(container, SWT.SINGLE, 2, toolkit); + createViewerPartControl(container, SWT.MULTI, 2, toolkit); fCategoryTreePart = getTreePart(); fCategoryViewer = fCategoryTreePart.getTreeViewer(); fCategoryViewer.setContentProvider(new CategoryContentProvider()); @@ -418,13 +420,27 @@ private boolean handleRemove() { IStructuredSelection ssel = (IStructuredSelection) fCategoryViewer .getSelection(); - Object object = ssel.getFirstElement(); - if (object == null) - return true; - if (object instanceof ISiteCategoryDefinition) { - return handleRemoveCategoryDefinition((ISiteCategoryDefinition) object); + Iterator iterator = ssel.iterator(); + boolean success = true; + Set removedCategories = new HashSet(); + while(iterator.hasNext()) { + Object object = iterator.next(); + if (object == null) continue; + if (object instanceof ISiteCategoryDefinition) { + if(! handleRemoveCategoryDefinition((ISiteCategoryDefinition) object)) { + success = false; + } + } else { + //check if some of features was not removed during category removal + SiteFeatureAdapter fa = (SiteFeatureAdapter) object; + if(removedCategories.contains(fa.category)) continue; + + if(!handleRemoveSiteFeatureAdapter(fa)) { + success = false; + } + } } - return handleRemoveSiteFeatureAdapter((SiteFeatureAdapter) object); + return success; } private boolean handleRemoveCategoryDefinition( @@ -553,6 +569,10 @@ if (actionId.equals(ActionFactory.DELETE.getId())) { return handleRemove(); } + if (actionId.equals(ActionFactory.SELECT_ALL.getId())) { + fCategoryViewer.getTree().selectAll(); + refresh(); + } return false; } @@ -568,11 +588,20 @@ } IStructuredSelection sel = (IStructuredSelection) fCategoryViewer .getSelection(); - fCategoryTreePart.setButtonEnabled(BUTTON_BUILD_FEATURE, - !sel.isEmpty() - && sel.getFirstElement() instanceof SiteFeatureAdapter - && findFeature(((SiteFeatureAdapter) sel - .getFirstElement()).feature) != null); + + if(!sel.isEmpty()) { + boolean success = true; + Iterator i = sel.iterator(); + while (i.hasNext()) { + Object next = i.next(); + if (!(next instanceof SiteFeatureAdapter && + findFeature(((SiteFeatureAdapter) next).feature) != null)) { + success = false; + break; + } + } + fCategoryTreePart.setButtonEnabled(BUTTON_BUILD_FEATURE, success); + } else fCategoryTreePart.setButtonEnabled(BUTTON_BUILD_FEATURE, false); int featureCount = fModel.getSite().getFeatures().length; fCategoryTreePart.setButtonEnabled(BUTTON_BUILD_ALL, featureCount > 0); fCategoryTreePart.setButtonEnabled(BUTTON_IMPORT_ENVIRONMENT, featureCount > 0); @@ -642,10 +671,18 @@ private void handleBuild() { IStructuredSelection sel = (IStructuredSelection) fCategoryViewer .getSelection(); - if (!sel.isEmpty() - && sel.getFirstElement() instanceof SiteFeatureAdapter) { - ISiteFeature feature = ((SiteFeatureAdapter) sel.getFirstElement()).feature; - ((SiteEditor)getPage().getPDEEditor()).handleBuild(new ISiteFeature[] { feature }); + if (!sel.isEmpty()) { + ArrayList features = new ArrayList(sel.size()); + Iterator iterator = sel.iterator(); + while(iterator.hasNext()) { + Object next = iterator.next(); + if(next instanceof SiteFeatureAdapter) { + if((((SiteFeatureAdapter) next).feature) != null) { + features.add(((SiteFeatureAdapter) next).feature); + } + } + } + ((SiteEditor)getPage().getPDEEditor()).handleBuild((ISiteFeature[]) features.toArray(new ISiteFeature[0])); } }