1 11 12 package org.eclipse.ui.internal.navigator.filters; 13 14 import java.util.Arrays ; 15 16 import org.eclipse.core.commands.operations.AbstractOperation; 17 import org.eclipse.core.runtime.Assert; 18 import org.eclipse.core.runtime.IAdaptable; 19 import org.eclipse.core.runtime.IProgressMonitor; 20 import org.eclipse.core.runtime.IStatus; 21 import org.eclipse.core.runtime.Status; 22 import org.eclipse.jface.viewers.StructuredSelection; 23 import org.eclipse.jface.viewers.ViewerFilter; 24 import org.eclipse.ui.internal.navigator.CommonNavigatorMessages; 25 import org.eclipse.ui.internal.navigator.NavigatorFilterService; 26 import org.eclipse.ui.navigator.CommonViewer; 27 import org.eclipse.ui.navigator.ICommonFilterDescriptor; 28 import org.eclipse.ui.navigator.INavigatorContentService; 29 import org.eclipse.ui.navigator.INavigatorFilterService; 30 31 43 public class UpdateActiveFiltersOperation extends AbstractOperation { 44 45 private String [] filterIdsToActivate; 46 47 private final CommonViewer commonViewer; 48 49 private final INavigatorContentService contentService; 50 51 private boolean disableTheComplement; 52 53 66 public UpdateActiveFiltersOperation(CommonViewer aCommonViewer, 67 String [] theActiveFilterIds, boolean toDisableTheComplement) { 68 super( 69 CommonNavigatorMessages.UpdateFiltersOperation_Update_CommonViewer_Filter_); 70 Assert.isNotNull(theActiveFilterIds); 71 72 commonViewer = aCommonViewer; 73 contentService = commonViewer.getNavigatorContentService(); 74 filterIdsToActivate = theActiveFilterIds; 75 disableTheComplement = toDisableTheComplement; 76 77 } 78 79 85 public IStatus execute(IProgressMonitor monitor, IAdaptable info) { 86 87 boolean updateFilterActivation = false; 88 89 Arrays.sort(filterIdsToActivate); 91 92 93 try { 94 commonViewer.getControl().setRedraw(false); 95 96 INavigatorFilterService filterService = contentService 97 .getFilterService(); 98 99 if(disableTheComplement) { 100 101 ICommonFilterDescriptor[] visibleFilterDescriptors = filterService 102 .getVisibleFilterDescriptors(); 103 104 int indexofFilterIdToBeActivated; 105 106 107 for (int i = 0; i < visibleFilterDescriptors.length 108 && !updateFilterActivation; i++) { 109 indexofFilterIdToBeActivated = Arrays.binarySearch( 110 filterIdsToActivate, visibleFilterDescriptors[i] 111 .getId()); 112 113 117 if (indexofFilterIdToBeActivated >= 0 118 ^ filterService 119 .isActive(visibleFilterDescriptors[i] 120 .getId())) { 121 updateFilterActivation = true; 122 } 123 } 124 125 126 if (updateFilterActivation) { 127 128 filterService.setActiveFilterIds(filterIdsToActivate); 129 filterService.persistFilterActivationState(); 130 131 commonViewer.resetFilters(); 132 133 ViewerFilter[] visibleFilters = filterService 134 .getVisibleFilters(true); 135 for (int i = 0; i < visibleFilters.length; i++) { 136 commonViewer.addFilter(visibleFilters[i]); 137 } 138 139 commonViewer.setSelection(StructuredSelection.EMPTY); 142 } 143 } else { 144 NavigatorFilterService internalFilterService = (NavigatorFilterService)filterService; 145 146 internalFilterService.addActiveFilterIds(filterIdsToActivate); 147 148 ICommonFilterDescriptor[] visibleDescriptors = filterService 149 .getVisibleFilterDescriptors(); 150 for (int i = 0; i < visibleDescriptors.length; i++) { 151 if(Arrays.binarySearch(filterIdsToActivate, visibleDescriptors[i].getId()) >= 0 ) { 152 commonViewer.addFilter(internalFilterService.getViewerFilter(visibleDescriptors[i])); 153 } 154 } 155 156 commonViewer.setSelection(StructuredSelection.EMPTY); 159 } 160 161 } finally { 162 commonViewer.getControl().setRedraw(true); 163 } 164 return Status.OK_STATUS; 165 } 166 167 173 public IStatus redo(IProgressMonitor monitor, IAdaptable info) { 174 return null; 175 } 176 177 183 public IStatus undo(IProgressMonitor monitor, IAdaptable info) { 184 return null; 185 } 186 } 187 | Popular Tags |