List of usage examples for org.eclipse.jface.viewers AbstractTreeViewer add
public void add(Object parentElementOrTreePath, Object childElement)
From source file:ca.mcgill.cs.swevo.qualyzer.providers.NavigatorContentProvider.java
License:Open Source License
/** * Process a resource delta. Add any runnables */// ww w .java 2s . co m private void processDelta(IResourceDelta delta, Collection<Runnable> runnables) { // he widget may have been destroyed // by the time this is run. Check for this and do nothing if so. Control ctrl = fViewer.getControl(); if (ctrl == null || ctrl.isDisposed()) { return; } if (QualyzerActivator.getDefault().isCreatingProject()) { return; } // Get the affected resource final IResource resource = delta.getResource(); if (resource instanceof IProject) //This fixes the phantom label bug! { return; } // If any children have changed type, just do a full refresh of this // parent, // since a simple update on such children won't work, // and trying to map the change to a remove and add is too dicey. // The case is: folder A renamed to existing file B, answering yes to // overwrite B. IResourceDelta[] affectedChildren = delta.getAffectedChildren(IResourceDelta.CHANGED); for (int i = 0; i < affectedChildren.length; i++) { if ((affectedChildren[i].getFlags() & IResourceDelta.TYPE) != 0) { runnables.add(getRefreshRunnable(resource)); return; } } // Check the flags for changes the Navigator cares about. // See ResourceLabelProvider for the aspects it cares about. // Notice we don't care about F_CONTENT or F_MARKERS currently. int changeFlags = delta.getFlags(); if ((changeFlags & (IResourceDelta.OPEN | IResourceDelta.SYNC | IResourceDelta.TYPE | IResourceDelta.DESCRIPTION)) != 0) { // Runnable updateRunnable = new Runnable(){ // public void run() { // ((StructuredViewer) viewer).update(resource, null); // } // }; // runnables.add(updateRunnable); /* * support the Closed Projects filter; when a project is closed, it may need to be removed from the view. */ runnables.add(getRefreshRunnable(resource.getParent())); } // Replacing a resource may affect its label and its children if ((changeFlags & IResourceDelta.REPLACED) != 0) { runnables.add(getRefreshRunnable(resource)); return; } // Handle changed children . for (int i = 0; i < affectedChildren.length; i++) { processDelta(affectedChildren[i], runnables); } // @issue several problems here: // - should process removals before additions, to avoid multiple equal // elements in viewer // - Kim: processing removals before additions was the indirect cause of // 44081 and its varients // - Nick: no delta should have an add and a remove on the same element, // so processing adds first is probably OK // - using setRedraw will cause extra flashiness // - setRedraw is used even for simple changes // - to avoid seeing a rename in two stages, should turn redraw on/off // around combined removal and addition // - Kim: done, and only in the case of a rename (both remove and add // changes in one delta). IResourceDelta[] addedChildren = delta.getAffectedChildren(IResourceDelta.ADDED); IResourceDelta[] removedChildren = delta.getAffectedChildren(IResourceDelta.REMOVED); if (addedChildren.length == 0 && removedChildren.length == 0) { return; } final Object[] addedObjects; final Object[] removedObjects; // Process additions before removals as to not cause selection // preservation prior to new objects being added // Handle added children. Issue one update for all insertions. int numMovedFrom = 0; int numMovedTo = 0; if (addedChildren.length > 0) { addedObjects = new Object[addedChildren.length]; for (int i = 0; i < addedChildren.length; i++) { addedObjects[i] = addedChildren[i].getResource(); if ((addedChildren[i].getFlags() & IResourceDelta.MOVED_FROM) != 0) { ++numMovedFrom; } } } else { addedObjects = new Object[0]; } // Handle removed children. Issue one update for all removals. if (removedChildren.length > 0) { removedObjects = new Object[removedChildren.length]; for (int i = 0; i < removedChildren.length; i++) { removedObjects[i] = removedChildren[i].getResource(); if ((removedChildren[i].getFlags() & IResourceDelta.MOVED_TO) != 0) { ++numMovedTo; } } } else { removedObjects = new Object[0]; } // heuristic test for items moving within same folder (i.e. renames) final boolean hasRename = numMovedFrom > 0 && numMovedTo > 0; Runnable addAndRemove = new Runnable() { public void run() { if (fViewer instanceof AbstractTreeViewer) { AbstractTreeViewer treeViewer = (AbstractTreeViewer) fViewer; // Disable redraw until the operation is finished so we don't // get a flash of both the new and old item (in the case of // rename) // Only do this if we're both adding and removing files (the // rename case) if (hasRename) { treeViewer.getControl().setRedraw(false); } try { if (addedObjects.length > 0) { treeViewer.add(resource, addedObjects); } if (removedObjects.length > 0) { treeViewer.remove(removedObjects); } } finally { if (hasRename) { treeViewer.getControl().setRedraw(true); } } } else { ((StructuredViewer) fViewer).refresh(resource); } } }; runnables.add(addAndRemove); }
From source file:com.ebmwebsourcing.petals.common.internal.provisional.projectscnf.PetalsProjectContentProvider.java
License:Open Source License
@Override public void resourcesAdded(final Collection<IResource> resources) { if (!(this.viewer instanceof AbstractTreeViewer)) return;/*from ww w . ja v a 2 s .co m*/ // Compute as much things as possible outside the UI thread // Group elements to reduce the number of runnables List<IProject> projects = new ArrayList<IProject>(); Map<Object, List<IResource>> parentToResources = new HashMap<Object, List<IResource>>(); for (final IResource res : resources) { if (res instanceof IProject) { projects.add((IProject) res); } else { final Object parent = getParent(res); List<IResource> list = parentToResources.get(parent); if (list == null) list = new ArrayList<IResource>(); list.add(res); if (parent != null) parentToResources.put(parent, list); else PetalsCommonPlugin.log("Could not find the parent for " + res, IStatus.ERROR); } } // Update the viewer final AbstractTreeViewer treeViewer = (AbstractTreeViewer) this.viewer; // Projects for (final IProject p : projects) { List<PetalsProjectCategory> cats = PetalsProjectManager.INSTANCE.getCategories(p); if (cats == null) cats = Collections.emptyList(); for (final PetalsProjectCategory cat : cats) { Runnable runnable = new Runnable() { @Override public void run() { boolean visible = true; if (treeViewer.getFilters() != null) { for (int i = 0; visible && i < treeViewer.getFilters().length; i++) { ViewerFilter filter = treeViewer.getFilters()[i]; visible = filter.select(treeViewer, cat, p); } } if (visible) { treeViewer.getControl().setRedraw(false); treeViewer.add(cat, p); treeViewer.getControl().setRedraw(true); } } }; this.runnables.add(runnable); } } // Other resources for (final Map.Entry<Object, List<IResource>> entry : parentToResources.entrySet()) { Runnable runnable = new Runnable() { @Override public void run() { treeViewer.getControl().setRedraw(false); treeViewer.add(entry.getKey(), entry.getValue().toArray()); treeViewer.getControl().setRedraw(true); } }; this.runnables.add(runnable); } }
From source file:com.google.dart.tools.ui.internal.search.LevelTreeContentProvider.java
License:Open Source License
@Override public synchronized void elementsChanged(Object[] updatedElements) { if (getSearchResult() == null) { return;/*from ww w .j a va 2 s .c o m*/ } AbstractTreeViewer viewer = (AbstractTreeViewer) getPage().getViewer(); Set<Object> toRemove = new HashSet<Object>(); Set<Object> toUpdate = new HashSet<Object>(); Map<Object, Set<Object>> toAdd = new HashMap<Object, Set<Object>>(); for (int i = 0; i < updatedElements.length; i++) { if (getPage().getDisplayedMatchCount(updatedElements[i]) > 0) { insert(toAdd, toUpdate, updatedElements[i]); } else { remove(toRemove, toUpdate, updatedElements[i]); } } viewer.remove(toRemove.toArray()); for (Iterator<Object> iter = toAdd.keySet().iterator(); iter.hasNext();) { Object parent = iter.next(); Set<Object> children = toAdd.get(parent); viewer.add(parent, children.toArray()); } for (Iterator<Object> elementsToUpdate = toUpdate.iterator(); elementsToUpdate.hasNext();) { viewer.refresh(elementsToUpdate.next()); } }
From source file:eu.artist.postmigration.nfrvt.eval.run.ui.launch.WorkbenchContentProvider.java
License:Open Source License
/** * Process a resource delta. Add any runnables *//*from w w w. j a v a2 s . co m*/ private void processDelta(IResourceDelta delta, Collection<Runnable> runnables) { //he widget may have been destroyed // by the time this is run. Check for this and do nothing if so. Control ctrl = viewer.getControl(); if (ctrl == null || ctrl.isDisposed()) { return; } // Get the affected resource final IResource resource = delta.getResource(); // If any children have changed type, just do a full refresh of this // parent, // since a simple update on such children won't work, // and trying to map the change to a remove and add is too dicey. // The case is: folder A renamed to existing file B, answering yes to // overwrite B. IResourceDelta[] affectedChildren = delta.getAffectedChildren(IResourceDelta.CHANGED); for (int i = 0; i < affectedChildren.length; i++) { if ((affectedChildren[i].getFlags() & IResourceDelta.TYPE) != 0) { runnables.add(getRefreshRunnable(resource)); return; } } // Opening a project just affects icon, but we need to refresh when // a project is closed because if child items have not yet been created // in the tree we still need to update the item's children int changeFlags = delta.getFlags(); if ((changeFlags & IResourceDelta.OPEN) != 0) { if (resource.isAccessible()) { runnables.add(getUpdateRunnable(resource)); } else { runnables.add(getRefreshRunnable(resource)); return; } } // Check the flags for changes the Navigator cares about. // See ResourceLabelProvider for the aspects it cares about. // Notice we don't care about F_CONTENT or F_MARKERS currently. if ((changeFlags & (IResourceDelta.SYNC | IResourceDelta.TYPE | IResourceDelta.DESCRIPTION)) != 0) { runnables.add(getUpdateRunnable(resource)); } // Replacing a resource may affect its label and its children if ((changeFlags & IResourceDelta.REPLACED) != 0) { runnables.add(getRefreshRunnable(resource)); return; } // Handle changed children . for (int i = 0; i < affectedChildren.length; i++) { processDelta(affectedChildren[i], runnables); } // @issue several problems here: // - should process removals before additions, to avoid multiple equal // elements in viewer // - Kim: processing removals before additions was the indirect cause of // 44081 and its varients // - Nick: no delta should have an add and a remove on the same element, // so processing adds first is probably OK // - using setRedraw will cause extra flashiness // - setRedraw is used even for simple changes // - to avoid seeing a rename in two stages, should turn redraw on/off // around combined removal and addition // - Kim: done, and only in the case of a rename (both remove and add // changes in one delta). IResourceDelta[] addedChildren = delta.getAffectedChildren(IResourceDelta.ADDED); IResourceDelta[] removedChildren = delta.getAffectedChildren(IResourceDelta.REMOVED); if (addedChildren.length == 0 && removedChildren.length == 0) { return; } final Object[] addedObjects; final Object[] removedObjects; // Process additions before removals as to not cause selection // preservation prior to new objects being added // Handle added children. Issue one update for all insertions. int numMovedFrom = 0; int numMovedTo = 0; if (addedChildren.length > 0) { addedObjects = new Object[addedChildren.length]; for (int i = 0; i < addedChildren.length; i++) { addedObjects[i] = addedChildren[i].getResource(); if ((addedChildren[i].getFlags() & IResourceDelta.MOVED_FROM) != 0) { ++numMovedFrom; } } } else { addedObjects = new Object[0]; } // Handle removed children. Issue one update for all removals. if (removedChildren.length > 0) { removedObjects = new Object[removedChildren.length]; for (int i = 0; i < removedChildren.length; i++) { removedObjects[i] = removedChildren[i].getResource(); if ((removedChildren[i].getFlags() & IResourceDelta.MOVED_TO) != 0) { ++numMovedTo; } } } else { removedObjects = new Object[0]; } // heuristic test for items moving within same folder (i.e. renames) final boolean hasRename = numMovedFrom > 0 && numMovedTo > 0; Runnable addAndRemove = new Runnable() { public void run() { if (viewer instanceof AbstractTreeViewer) { AbstractTreeViewer treeViewer = (AbstractTreeViewer) viewer; // Disable redraw until the operation is finished so we don't // get a flash of both the new and old item (in the case of // rename) // Only do this if we're both adding and removing files (the // rename case) if (hasRename) { treeViewer.getControl().setRedraw(false); } try { if (addedObjects.length > 0) { treeViewer.add(resource, addedObjects); } if (removedObjects.length > 0) { treeViewer.remove(removedObjects); } } finally { if (hasRename) { treeViewer.getControl().setRedraw(true); } } } else { ((StructuredViewer) viewer).refresh(resource); } } }; runnables.add(addAndRemove); }
From source file:ext.org.eclipse.jdt.internal.ui.search.LevelTreeContentProvider.java
License:Open Source License
@Override public synchronized void elementsChanged(Object[] updatedElements) { if (getSearchResult() == null) return;//w w w . j a v a 2s.c o m AbstractTreeViewer viewer = (AbstractTreeViewer) getPage().getViewer(); Set<Object> toRemove = new HashSet<Object>(); Set<Object> toUpdate = new HashSet<Object>(); Map<Object, Set<Object>> toAdd = new HashMap<Object, Set<Object>>(); for (int i = 0; i < updatedElements.length; i++) { if (getPage().getDisplayedMatchCount(updatedElements[i]) > 0) insert(toAdd, toUpdate, updatedElements[i]); else remove(toRemove, toUpdate, updatedElements[i]); } viewer.remove(toRemove.toArray()); for (Iterator<Object> iter = toAdd.keySet().iterator(); iter.hasNext();) { Object parent = iter.next(); HashSet<Object> children = (HashSet<Object>) toAdd.get(parent); viewer.add(parent, children.toArray()); } for (Iterator<Object> elementsToUpdate = toUpdate.iterator(); elementsToUpdate.hasNext();) { viewer.refresh(elementsToUpdate.next()); } }
From source file:kr.co.apexsoft.stella.modeler.explorer.provider.ApexUMLContentProvider.java
License:Open Source License
/** * Process a resource delta. Add any runnables *//* w w w. j a v a 2 s .co m*/ private void processDelta(IResourceDelta delta, Collection runnables) { //he widget may have been destroyed // by the time this is run. Check for this and do nothing if so. Control ctrl = viewer.getControl(); if (ctrl == null || ctrl.isDisposed()) { return; } // Get the affected resource final IResource resource = delta.getResource(); // If any children have changed type, just do a full refresh of this // parent, // since a simple update on such children won't work, // and trying to map the change to a remove and add is too dicey. // The case is: folder A renamed to existing file B, answering yes to // overwrite B. IResourceDelta[] affectedChildren = delta.getAffectedChildren(IResourceDelta.CHANGED); for (int i = 0; i < affectedChildren.length; i++) { if ((affectedChildren[i].getFlags() & IResourceDelta.TYPE) != 0) { runnables.add(getRefreshRunnable(resource)); return; } } // Opening a project just affects icon, but we need to refresh when // a project is closed because if child items have not yet been created // in the tree we still need to update the item's children int changeFlags = delta.getFlags(); if ((changeFlags & IResourceDelta.OPEN) != 0) { if (resource.isAccessible()) { runnables.add(getUpdateRunnable(resource)); } else { runnables.add(getRefreshRunnable(resource)); return; } } // Check the flags for changes the Navigator cares about. // See ResourceLabelProvider for the aspects it cares about. // Notice we don't care about F_CONTENT or F_MARKERS currently. if ((changeFlags & (IResourceDelta.SYNC | IResourceDelta.TYPE | IResourceDelta.DESCRIPTION)) != 0) { runnables.add(getUpdateRunnable(resource)); } // Replacing a resource may affect its label and its children if ((changeFlags & IResourceDelta.REPLACED) != 0) { runnables.add(getRefreshRunnable(resource)); return; } // Handle changed children . for (int i = 0; i < affectedChildren.length; i++) { processDelta(affectedChildren[i], runnables); } // @issue several problems here: // - should process removals before additions, to avoid multiple equal // elements in viewer // - Kim: processing removals before additions was the indirect cause of // 44081 and its varients // - Nick: no delta should have an add and a remove on the same element, // so processing adds first is probably OK // - using setRedraw will cause extra flashiness // - setRedraw is used even for simple changes // - to avoid seeing a rename in two stages, should turn redraw on/off // around combined removal and addition // - Kim: done, and only in the case of a rename (both remove and add // changes in one delta). IResourceDelta[] addedChildren = delta.getAffectedChildren(IResourceDelta.ADDED); IResourceDelta[] removedChildren = delta.getAffectedChildren(IResourceDelta.REMOVED); if (addedChildren.length == 0 && removedChildren.length == 0) { return; } List<Object> addedList = new ArrayList<>(); List<Object> removedList = new ArrayList<>(); // Process additions before removals as to not cause selection // preservation prior to new objects being added // Handle added children. Issue one update for all insertions. int numMovedFrom = 0; int numMovedTo = 0; for (int i = 0; i < addedChildren.length; i++) { IResource subRes = addedChildren[i].getResource(); if (subRes instanceof IFile && !OneFileUtils.isDi(subRes)) { continue; } addedList.add(subRes); if ((addedChildren[i].getFlags() & IResourceDelta.MOVED_FROM) != 0) { ++numMovedFrom; } } // Handle removed children. Issue one update for all removals. for (int i = 0; i < removedChildren.length; i++) { IResource subRes = removedChildren[i].getResource(); if (subRes instanceof IFile && !OneFileUtils.isDi(subRes)) { continue; } removedList.add(subRes); if ((removedChildren[i].getFlags() & IResourceDelta.MOVED_TO) != 0) { ++numMovedTo; } } final Object[] addedObjects = addedList.toArray(); final Object[] removedObjects = removedList.toArray(); // heuristic test for items moving within same folder (i.e. renames) final boolean hasRename = numMovedFrom > 0 && numMovedTo > 0; Runnable addAndRemove = new Runnable() { public void run() { if (viewer instanceof AbstractTreeViewer) { AbstractTreeViewer treeViewer = (AbstractTreeViewer) viewer; // Disable redraw until the operation is finished so we don't // get a flash of both the new and old item (in the case of // rename) // Only do this if we're both adding and removing files (the // rename case) if (hasRename) { treeViewer.getControl().setRedraw(false); } try { if (addedObjects.length > 0) { treeViewer.add(resource, addedObjects); } if (removedObjects.length > 0) { treeViewer.remove(removedObjects); } } finally { if (hasRename) { treeViewer.getControl().setRedraw(true); } } } else { ((StructuredViewer) viewer).refresh(resource); } } }; runnables.add(addAndRemove); }
From source file:name.neilbartlett.eclipse.bundlemonitor.views.config.ConfigView.java
License:Open Source License
public void configurationEvent(final ConfigurationEvent event) { SWTConcurrencyUtils.safeAsyncUpdate(viewer, new ViewerUpdater() { public void updateViewer(Viewer viewer) { AbstractTreeViewer treeViewer = (AbstractTreeViewer) viewer; boolean found = false; if (event.getType() == ConfigurationEvent.CM_DELETED) { for (Iterator iter = configs.iterator(); iter.hasNext();) { ConfigWrapper wrapper = (ConfigWrapper) iter.next(); if (event.getPid().equals(wrapper.getPid())) { found = true;/*from ww w .ja v a2 s. com*/ iter.remove(); treeViewer.remove(wrapper); } } } else { for (Iterator iter = configs.iterator(); iter.hasNext();) { ConfigWrapper wrapper = (ConfigWrapper) iter.next(); if (event.getPid().equals(wrapper.getPid())) { found = true; treeViewer.refresh(wrapper, true); } } } if (!found) { ConfigurationAdmin cm = (ConfigurationAdmin) tracker.getService(); if (cm != null) { try { Configuration config = cm.getConfiguration(event.getPid()); ConfigWrapper wrapper = new ConfigWrapper(config); configs.add(wrapper); treeViewer.add(configs, wrapper); } catch (IOException e) { e.printStackTrace(); } } else { updater.updateViewer(treeViewer); } } } }); }
From source file:org.eclipse.birt.report.designer.internal.ui.views.WorkbenchContentProvider.java
License:Open Source License
/** * Process a resource delta. Add any runnables *///from www. j a v a2 s . c o m private void processDelta(IResourceDelta delta, Collection runnables) { // he widget may have been destroyed // by the time this is run. Check for this and do nothing if so. Control ctrl = viewer.getControl(); if (ctrl == null || ctrl.isDisposed()) return; // Get the affected resource final IResource resource = delta.getResource(); // If any children have changed type, just do a full refresh of this // parent, // since a simple update on such children won't work, // and trying to map the change to a remove and add is too dicey. // The case is: folder A renamed to existing file B, answering yes // to // overwrite B. IResourceDelta[] affectedChildren = delta.getAffectedChildren(IResourceDelta.CHANGED); for (int i = 0; i < affectedChildren.length; i++) { if ((affectedChildren[i].getFlags() & IResourceDelta.TYPE) != 0) { runnables.add(getRefreshRunnable(resource)); return; } } // Check the flags for changes the Navigator cares about. // See ResourceLabelProvider for the aspects it cares about. // Notice we don't care about F_CONTENT or F_MARKERS currently. int changeFlags = delta.getFlags(); if ((changeFlags & (IResourceDelta.OPEN | IResourceDelta.SYNC | IResourceDelta.TYPE | IResourceDelta.DESCRIPTION)) != 0) { Runnable updateRunnable = new Runnable() { public void run() { ((StructuredViewer) viewer).update(resource, null); } }; runnables.add(updateRunnable); } // Replacing a resource may affect its label and its children if ((changeFlags & IResourceDelta.REPLACED) != 0) { runnables.add(getRefreshRunnable(resource)); return; } // Handle changed children . for (int i = 0; i < affectedChildren.length; i++) { processDelta(affectedChildren[i], runnables); } // @issue several problems here: // - should process removals before additions, to avoid multiple // equal // elements in viewer // - Kim: processing removals before additions was the indirect // cause of // 44081 and its varients // - Nick: no delta should have an add and a remove on the same // element, // so processing adds first is probably OK // - using setRedraw will cause extra flashiness // - setRedraw is used even for simple changes // - to avoid seeing a rename in two stages, should turn redraw // on/off // around combined removal and addition // - Kim: done, and only in the case of a rename (both remove and // add // changes in one delta). IResourceDelta[] addedChildren = delta.getAffectedChildren(IResourceDelta.ADDED); IResourceDelta[] removedChildren = delta.getAffectedChildren(IResourceDelta.REMOVED); if (addedChildren.length == 0 && removedChildren.length == 0) return; final Object[] addedObjects; final Object[] removedObjects; // Process additions before removals as to not cause selection // preservation prior to new objects being added // Handle added children. Issue one update for all insertions. int numMovedFrom = 0; int numMovedTo = 0; if (addedChildren.length > 0) { addedObjects = new Object[addedChildren.length]; for (int i = 0; i < addedChildren.length; i++) { addedObjects[i] = addedChildren[i].getResource(); if ((addedChildren[i].getFlags() & IResourceDelta.MOVED_FROM) != 0) { ++numMovedFrom; } } } else addedObjects = new Object[0]; // Handle removed children. Issue one update for all removals. if (removedChildren.length > 0) { removedObjects = new Object[removedChildren.length]; for (int i = 0; i < removedChildren.length; i++) { removedObjects[i] = removedChildren[i].getResource(); if ((removedChildren[i].getFlags() & IResourceDelta.MOVED_TO) != 0) { ++numMovedTo; } } } else { removedObjects = new Object[0]; } // heuristic test for items moving within same folder (i.e. renames) final boolean hasRename = numMovedFrom > 0 && numMovedTo > 0; Runnable addAndRemove = new Runnable() { public void run() { if (viewer instanceof AbstractTreeViewer) { AbstractTreeViewer treeViewer = (AbstractTreeViewer) viewer; // Disable redraw until the operation is finished so we // don't // get a flash of both the new and old item (in the case // of // rename) // Only do this if we're both adding and removing files // (the // rename case) if (hasRename) { treeViewer.getControl().setRedraw(false); } try { if (addedObjects.length > 0) treeViewer.add(resource, addedObjects); if (removedObjects.length > 0) treeViewer.remove(removedObjects); } finally { if (hasRename) { treeViewer.getControl().setRedraw(true); } } } else { ((StructuredViewer) viewer).refresh(resource); } } }; runnables.add(addAndRemove); }
From source file:org.eclipse.dltk.internal.ui.search.LevelTreeContentProvider.java
License:Open Source License
public synchronized void elementsChanged(Object[] updatedElements) { AbstractTreeViewer viewer = (AbstractTreeViewer) getPage().getViewer(); if (fResult == null) return;/*from w w w . j av a 2 s . c o m*/ Set toRemove = new HashSet(); Set toUpdate = new HashSet(); Map toAdd = new HashMap(); for (int i = 0; i < updatedElements.length; i++) { if (getPage().getDisplayedMatchCount(updatedElements[i]) > 0) insert(toAdd, toUpdate, updatedElements[i]); else remove(toRemove, toUpdate, updatedElements[i]); } viewer.remove(toRemove.toArray()); for (Iterator iter = toAdd.keySet().iterator(); iter.hasNext();) { Object parent = iter.next(); HashSet children = (HashSet) toAdd.get(parent); viewer.add(parent, children.toArray()); } for (Iterator elementsToUpdate = toUpdate.iterator(); elementsToUpdate.hasNext();) { viewer.refresh(elementsToUpdate.next()); } }
From source file:org.eclipse.e4mf.edit.ui.provider.NotifyChangedToViewerRefresh.java
License:Open Source License
public void refreshAbstractTreeViewer(AbstractTreeViewer viewer, Object object, int eventType, Object feature, Object oldValue, Object newValue, int index) { switch (eventType) { case Notification.ADD: { if (newValue == null) { viewer.refresh(object);//from w w w .j a v a 2 s . c o m } else { viewer.add(object, newValue); } break; } case Notification.ADD_MANY: { viewer.add(object, ((Collection<?>) newValue).toArray()); break; } case Notification.REMOVE: { if (oldValue == null) { viewer.refresh(object); } else { viewer.remove(oldValue); } break; } case Notification.REMOVE_MANY: { viewer.remove(((Collection<?>) oldValue).toArray()); break; } case Notification.MOVE: case Notification.UNSET: case Notification.SET: default: { refreshStructuredViewer(viewer, object, eventType, feature, oldValue, newValue, index); break; } } }