Java tutorial
/******************************************************************************* * Copyright (c) 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.team.internal.ccvs.ui.mappings; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.*; import org.eclipse.core.resources.mapping.ResourceTraversal; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.TreePath; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.team.core.diff.IDiffTree; import org.eclipse.team.internal.ccvs.core.mapping.ChangeSetModelProvider; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; import org.eclipse.team.internal.ccvs.ui.subscriber.CVSParticipantLabelDecorator; import org.eclipse.team.internal.core.subscribers.*; import org.eclipse.team.internal.ui.mapping.ResourceModelLabelProvider; import org.eclipse.team.internal.ui.synchronize.ChangeSetCapability; import org.eclipse.team.ui.mapping.ITeamContentProviderManager; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.ModelSynchronizeParticipant; import org.eclipse.ui.navigator.ICommonContentExtensionSite; public class ChangeSetLabelProvider extends ResourceModelLabelProvider { private CVSParticipantLabelDecorator decorator; public void init(ICommonContentExtensionSite site) { super.init(site); ISynchronizePageConfiguration configuration = getConfiguration(); if (isCompare(configuration)) { decorator = new CVSParticipantLabelDecorator(configuration); } } private ISynchronizePageConfiguration getConfiguration() { return (ISynchronizePageConfiguration) getExtensionSite().getExtensionStateModel() .getProperty(ITeamContentProviderManager.P_SYNCHRONIZATION_PAGE_CONFIGURATION); } private boolean isCompare(ISynchronizePageConfiguration configuration) { return configuration.getParticipant() instanceof ModelCompareParticipant; } public String getText(Object element) { String text = super.getText(element); if (decorator != null && isChangeSetsEnabled()) text = decorator.decorateText(text, element); return text; } private boolean isChangeSetsEnabled() { String id = (String) getConfiguration().getProperty(ModelSynchronizeParticipant.P_VISIBLE_MODEL_PROVIDER); return id.equals(ChangeSetModelProvider.ID); } protected String getDelegateText(Object elementOrPath) { Object element = internalGetElement(elementOrPath); if (element instanceof DiffChangeSet) { DiffChangeSet set = (DiffChangeSet) element; return set.getName(); } return super.getDelegateText(elementOrPath); } protected Image getDelegateImage(Object elementOrPath) { Object element = internalGetElement(elementOrPath); if (element instanceof DiffChangeSet) { return getChangeSetImage(); } return super.getDelegateImage(elementOrPath); } private Image getChangeSetImage() { return getImageManager() .getImage(CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_CHANGELOG)); } public void dispose() { if (decorator != null) decorator.dispose(); super.dispose(); } protected boolean isBusy(Object elementOrPath) { Object element = internalGetElement(elementOrPath); if (element instanceof DiffChangeSet) { DiffChangeSet dcs = (DiffChangeSet) element; IResource[] resources = dcs.getResources(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; if (getContext().getDiffTree().getProperty(resource.getFullPath(), IDiffTree.P_BUSY_HINT)) return true; } return false; } return super.isBusy(elementOrPath); } protected boolean hasDecendantConflicts(Object elementOrPath) { Object element = internalGetElement(elementOrPath); if (element instanceof DiffChangeSet) { DiffChangeSet dcs = (DiffChangeSet) element; IResource[] resources = dcs.getResources(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; if (getContext().getDiffTree().getProperty(resource.getFullPath(), IDiffTree.P_HAS_DESCENDANT_CONFLICTS)) return true; } return false; } if (elementOrPath instanceof TreePath && element instanceof IResource) { DiffChangeSet set = internalGetChangeSet(elementOrPath); if (set != null) { ResourceTraversal[] traversals = getTraversalCalculator().getTraversals(set, (TreePath) elementOrPath); return (getContext().getDiffTree().hasMatchingDiffs(traversals, CONFLICT_FILTER)); } } return super.hasDecendantConflicts(elementOrPath); } private DiffChangeSet internalGetChangeSet(Object elementOrPath) { if (elementOrPath instanceof TreePath) { TreePath tp = (TreePath) elementOrPath; Object o = tp.getFirstSegment(); if (o instanceof DiffChangeSet) { return (DiffChangeSet) o; } } return null; } protected int getMarkerSeverity(Object elementOrPath) { Object element = internalGetElement(elementOrPath); if (element instanceof DiffChangeSet) { DiffChangeSet dcs = (DiffChangeSet) element; Set projects = new HashSet(); IResource[] resources = dcs.getResources(); int severity = -1; for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; IProject project = resource.getProject(); if (!projects.contains(project)) { projects.add(project); int next = super.getMarkerSeverity(project); if (next == IMarker.SEVERITY_ERROR) return IMarker.SEVERITY_ERROR; if (next == IMarker.SEVERITY_WARNING) severity = next; } } return severity; } return super.getMarkerSeverity(elementOrPath); } protected void updateLabels(Object[] elements) { super.updateLabels(addSetsContainingElements(elements)); } private Object[] addSetsContainingElements(Object[] elements) { Set result = new HashSet(); for (int i = 0; i < elements.length; i++) { Object object = elements[i]; result.add(object); if (object instanceof IProject) { IProject project = (IProject) object; ChangeSet[] sets = getSetsContaing(project); for (int j = 0; j < sets.length; j++) { ChangeSet set = sets[j]; result.add(set); } } } return result.toArray(); } private ChangeSet[] getSetsContaing(IProject project) { return getContentProvider().getSetsShowingPropogatedStateFrom(project.getFullPath()); } private ChangeSetContentProvider getContentProvider() { return (ChangeSetContentProvider) getExtensionSite().getExtension().getContentProvider(); } private Object internalGetElement(Object elementOrPath) { if (elementOrPath instanceof TreePath) { TreePath tp = (TreePath) elementOrPath; return tp.getLastSegment(); } return elementOrPath; } public Font getFont(Object element) { element = internalGetElement(element); if (element instanceof ActiveChangeSet && isDefaultActiveSet((ActiveChangeSet) element)) { return JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT); } return super.getFont(element); } private boolean isDefaultActiveSet(ActiveChangeSet set) { ChangeSetCapability changeSetCapability = getContentProvider().getChangeSetCapability(); if (changeSetCapability != null) { ActiveChangeSetManager activeChangeSetManager = changeSetCapability.getActiveChangeSetManager(); if (activeChangeSetManager != null) return activeChangeSetManager.isDefault(set); } return false; } }