Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 36498 Details for
Bug 123978
Ensure update of working set team state decorations
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Patch
patch123978.txt (text/plain), 8.49 KB, created by
Michael Valenta
on 2006-03-17 11:43:42 EST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Michael Valenta
Created:
2006-03-17 11:43:42 EST
Size:
8.49 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.ui >Index: ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java,v >retrieving revision 1.13 >diff -u -r1.13 WorkingSetAwareContentProvider.java >--- ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java 14 Mar 2006 15:05:34 -0000 1.13 >+++ ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java 17 Mar 2006 16:41:03 -0000 >@@ -220,6 +220,8 @@ > toRefresh.add(newValue); > } else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) { > toRefresh.add(newValue); >+ } else if (WorkingSetModel.CHANGE_WORKING_SET_TEAM_DECORATION.equals(property)) { >+ toRefresh.add(newValue); > } > postRefresh(toRefresh, true); > } >Index: ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java,v >retrieving revision 1.17 >diff -u -r1.17 WorkingSetModel.java >--- ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java 15 Mar 2006 10:34:47 -0000 1.17 >+++ ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java 17 Mar 2006 16:41:03 -0000 >@@ -19,10 +19,15 @@ > import java.util.List; > import java.util.Map; > >+import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IAdaptable; > import org.eclipse.core.runtime.ListenerList; > > import org.eclipse.core.resources.IResource; >+import org.eclipse.core.resources.IResourceChangeEvent; >+import org.eclipse.core.resources.IResourceChangeListener; >+import org.eclipse.core.resources.IResourceDelta; >+import org.eclipse.core.resources.ResourcesPlugin; > > import org.eclipse.jface.util.IPropertyChangeListener; > import org.eclipse.jface.util.PropertyChangeEvent; >@@ -35,11 +40,19 @@ > import org.eclipse.ui.IWorkingSetUpdater; > import org.eclipse.ui.PlatformUI; > >+import org.eclipse.team.ui.mapping.ITeamStateChangeEvent; >+import org.eclipse.team.ui.mapping.ITeamStateChangeListener; >+import org.eclipse.team.ui.mapping.ITeamStateDescription; >+import org.eclipse.team.ui.mapping.ITeamStateProvider; >+import org.eclipse.team.ui.mapping.SynchronizationStateTester; >+ > import org.eclipse.jdt.internal.corext.Assert; > > public class WorkingSetModel { > > public static final String CHANGE_WORKING_SET_MODEL_CONTENT= "workingSetModelChanged"; //$NON-NLS-1$ >+ >+ public static final String CHANGE_WORKING_SET_TEAM_DECORATION= "workingSetTamDecorationChanged"; //$NON-NLS-1$ > > public static final IElementComparer COMPARER= new WorkingSetComparar(); > >@@ -57,6 +70,11 @@ > private ElementMapper fElementMapper= new ElementMapper(); > > private boolean fConfigured; >+ >+ private SynchronizationStateTester fSyncStateTester; >+ private ITeamStateChangeListener fTeamListener; >+ private IResourceChangeListener fResourceListener; >+ private Map fTeamState = new HashMap(); > > private static class WorkingSetComparar implements IElementComparer { > public boolean equals(Object o1, Object o2) { >@@ -248,9 +266,34 @@ > }; > PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(fWorkingSetManagerListener); > fLocalWorkingSetManager.addPropertyChangeListener(fWorkingSetManagerListener); >+ fSyncStateTester = new SynchronizationStateTester() { >+ public void elementDecorated(Object element, ITeamStateDescription description) { >+ if (element instanceof IWorkingSet) { >+ IWorkingSet set = (IWorkingSet) element; >+ // Record the state that was decorated so we will avoid >+ // unnecessary label updates >+ fTeamState.put(set, description); >+ } >+ super.elementDecorated(element, description); >+ } >+ }; >+ fTeamListener = new ITeamStateChangeListener() { >+ public void teamStateChanged(ITeamStateChangeEvent event) { >+ handeTeamStateChange(event); >+ } >+ }; >+ fResourceListener = new IResourceChangeListener() { >+ public void resourceChanged(IResourceChangeEvent event) { >+ handleResourceChange(event.getDelta()); >+ } >+ }; >+ fSyncStateTester.getTeamStateProvider().addDecoratedStateChangeListener(fTeamListener); >+ ResourcesPlugin.getWorkspace().addResourceChangeListener(fResourceListener, IResourceChangeEvent.POST_CHANGE); > } > > public void dispose() { >+ fSyncStateTester.getTeamStateProvider().removeDecoratedStateChangeListener(fTeamListener); >+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(fResourceListener); > if (fWorkingSetManagerListener != null) { > PlatformUI.getWorkbench().getWorkingSetManager().removePropertyChangeListener(fWorkingSetManagerListener); > fLocalWorkingSetManager.removePropertyChangeListener(fWorkingSetManagerListener); >@@ -349,6 +392,7 @@ > > public void setActiveWorkingSets(IWorkingSet[] workingSets) { > fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets)); >+ fTeamState.clear(); > fElementMapper.rebuild(getActiveWorkingSets()); > fOthersWorkingSetUpdater.updateElements(); > fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null)); >@@ -436,4 +480,88 @@ > public boolean isActiveWorkingSet(IWorkingSet changedWorkingSet) { > return fActiveWorkingSets.contains(changedWorkingSet); > } >-} >\ No newline at end of file >+ >+ protected void handeTeamStateChange(ITeamStateChangeEvent event) { >+ for (Iterator iter = fActiveWorkingSets.iterator(); iter.hasNext();) { >+ IWorkingSet set = (IWorkingSet) iter.next(); >+ if (hasPotentialChanges(event, set) && hasRealChanges(set)) >+ fireEvent(new PropertyChangeEvent(WorkingSetModel.this, CHANGE_WORKING_SET_TEAM_DECORATION, null, null)); >+ } >+ } >+ >+ protected void handleResourceChange(IResourceDelta delta) { >+ for (Iterator iter = fActiveWorkingSets.iterator(); iter.hasNext();) { >+ IWorkingSet set = (IWorkingSet) iter.next(); >+ if (hasPotentialChanges(delta, set) && hasRealChanges(set)) { >+ fireEvent(new PropertyChangeEvent(WorkingSetModel.this, CHANGE_WORKING_SET_TEAM_DECORATION, null, null)); >+ } >+ } >+ } >+ >+ private boolean hasRealChanges(IWorkingSet set) { >+ try { >+ ITeamStateProvider decoratedStateProvider = fSyncStateTester.getTeamStateProvider(); >+ if (decoratedStateProvider.isDecorationEnabled(set)) { >+ ITeamStateDescription desc = decoratedStateProvider.getStateDescription(set, >+ ITeamStateProvider.USE_DECORATED_STATE_MASK, null /* use decorated properties */, null /* no progress */); >+ ITeamStateDescription oldDesc = (ITeamStateDescription)fTeamState.get(set); >+ if (oldDesc == desc) >+ return false; >+ boolean changed = (oldDesc == null && desc != null) >+ || (desc == null && oldDesc != null) >+ || (!desc.equals(oldDesc)); >+ if (desc == null) { >+ fTeamState.remove(set); >+ } else { >+ fTeamState.put(set, desc); >+ } >+ return changed; >+ } else { >+ if (fTeamState.containsKey(set)) { >+ fTeamState.remove(set); >+ return true; >+ } >+ } >+ } catch (CoreException e) { >+ // TODO Auto-generated catch block >+ e.printStackTrace(); >+ } >+ return false; >+ } >+ >+ private boolean hasPotentialChanges(IResourceDelta delta, IWorkingSet set) { >+ IAdaptable[] elements = set.getElements(); >+ for (int i = 0; i < elements.length; i++) { >+ IAdaptable adaptable = elements[i]; >+ IResource resource = (IResource)adaptable.getAdapter(IResource.class); >+ if (resource != null) { >+ IResourceDelta memberDelta = delta.findMember(resource.getFullPath()); >+ if (isChangeOfInterest(memberDelta)) { >+ return true; >+ } >+ } >+ } >+ return false; >+ } >+ >+ private boolean isChangeOfInterest(IResourceDelta memberDelta) { >+ if (memberDelta != null >+ && (memberDelta.getKind() & (IResourceDelta.ADDED | IResourceDelta.REMOVED | IResourceDelta.CHANGED)) > 0) { >+ // TODO: Should exclude marker and sync deltas (and possibly others) >+ return true; >+ } >+ return false; >+ } >+ >+ private boolean hasPotentialChanges(ITeamStateChangeEvent event, IWorkingSet set) { >+ IAdaptable[] elements = set.getElements(); >+ for (int i = 0; i < elements.length; i++) { >+ IAdaptable adaptable = elements[i]; >+ IResource resource = (IResource)adaptable.getAdapter(IResource.class); >+ if (resource != null && event.hasChange(resource)) { >+ return true; >+ } >+ } >+ return false; >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 123978
: 36498 |
37071