diff options
Diffstat (limited to 'bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java')
-rw-r--r-- | bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java | 433 |
1 files changed, 0 insertions, 433 deletions
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java deleted file mode 100644 index c8bc3da77..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java +++ /dev/null @@ -1,433 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 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.compare.internal.patch; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.compare.CompareUI; -import org.eclipse.compare.CompareViewerPane; -import org.eclipse.compare.IContentChangeListener; -import org.eclipse.compare.IContentChangeNotifier; -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.internal.ICompareUIConstants; -import org.eclipse.compare.internal.core.patch.DiffProject; -import org.eclipse.compare.internal.core.patch.FileDiffResult; -import org.eclipse.compare.internal.core.patch.FilePatch2; -import org.eclipse.compare.internal.core.patch.HunkResult; -import org.eclipse.compare.patch.PatchConfiguration; -import org.eclipse.compare.structuremergeviewer.DiffNode; -import org.eclipse.compare.structuremergeviewer.DiffTreeViewer; -import org.eclipse.compare.structuremergeviewer.Differencer; -import org.eclipse.compare.structuremergeviewer.ICompareInput; -import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.action.ToolBarManager; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.resource.LocalResourceManager; -import org.eclipse.jface.viewers.IDecoration; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.IOpenListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.OpenEvent; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerFilter; -import org.eclipse.osgi.util.NLS; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Composite; - -public abstract class PatchCompareEditorInput extends CompareEditorInput { - - private static final String IMAGE_CACHE_KEY = "IMAGE_CACHE"; //$NON-NLS-1$ - - public static ImageDescriptor createOverlay(Image baseImage, ImageDescriptor overlayImage, int quadrant) { - return new DecoratorOverlayIcon(baseImage, createArrayFrom(overlayImage, quadrant), new Point(Math.max(baseImage.getBounds().width, 16), Math.max(baseImage.getBounds().height, 16))); - } - - private static ImageDescriptor[] createArrayFrom( - ImageDescriptor overlayImage, int quadrant) { - ImageDescriptor[] descs = new ImageDescriptor[] { null, null, null, null, null }; - descs[quadrant] = overlayImage; - return descs; - } - - class PatcherCompareEditorLabelProvider extends LabelProvider { - private ILabelProvider wrappedProvider; - - public PatcherCompareEditorLabelProvider(ILabelProvider labelProvider) { - wrappedProvider = labelProvider; - } - - public String getText(Object element) { - String text = wrappedProvider.getText(element); - if (element instanceof PatchDiffNode){ - PatchDiffNode node = (PatchDiffNode) element; - if (node instanceof PatchProjectDiffNode) { - PatchProjectDiffNode projectNode = (PatchProjectDiffNode) node; - if (!Utilities.getProject(projectNode.getDiffProject()).exists()) { - text = NLS.bind(PatchMessages.Diff_2Args, new String[]{text, PatchMessages.PreviewPatchLabelDecorator_ProjectDoesNotExist}); - } - } - if (!node.isEnabled()) { - return NLS.bind(PatchMessages.Diff_2Args, - new String[]{text, PatchMessages.PatcherCompareEditorInput_NotIncluded}); - } - if (node instanceof PatchFileDiffNode) { - PatchFileDiffNode fileNode = (PatchFileDiffNode) node; - if (getPatcher().hasCachedContents(fileNode.getDiffResult().getDiff())) { - text = NLS.bind(PatchMessages.Diff_2Args, new String[] {text, PatchMessages.HunkMergePage_Merged}); - } - if (!fileNode.fileExists()) { - text = NLS.bind(PatchMessages.Diff_2Args, new String[] {text, PatchMessages.PatchCompareEditorInput_0}); - } - } - if (node instanceof HunkDiffNode) { - HunkDiffNode hunkNode = (HunkDiffNode) node; - if (hunkNode.isManuallyMerged()) { - text = NLS.bind(PatchMessages.Diff_2Args, new String[] {text, PatchMessages.HunkMergePage_Merged}); - } - if (hunkNode.isFuzzUsed()) { - text = NLS.bind(PatchMessages.Diff_2Args, - new String[] { text, - NLS.bind(hunkNode.isAllContextIgnored() ? PatchMessages.PreviewPatchPage_AllContextIgnored : PatchMessages.PreviewPatchPage_FuzzUsed, - new String[] { hunkNode.getHunkResult().getFuzz() + ""}) }); //$NON-NLS-1$ - } - } - if (getPatcher().isRetargeted(node.getPatchElement())) - return NLS.bind(PatchMessages.Diff_2Args, - new String[]{getPatcher().getOriginalPath(node.getPatchElement()).toString(), - NLS.bind(PatchMessages.PreviewPatchPage_Target, new String[]{node.getName()})}); - } - return text; - } - - public Image getImage(Object element) { - Image image = wrappedProvider.getImage(element); - if (element instanceof PatchDiffNode){ - PatchDiffNode node = (PatchDiffNode) element; - if (!node.isEnabled() && image != null) { - LocalResourceManager imageCache = PatchCompareEditorInput.getImageCache(getPatcher().getConfiguration()); - return imageCache.createImage(createOverlay(image, CompareUIPlugin.getImageDescriptor(ICompareUIConstants.REMOVED_OVERLAY), IDecoration.TOP_LEFT)); - } - } - if (element instanceof HunkDiffNode) { - HunkDiffNode node = (HunkDiffNode) element; - if (node.isManuallyMerged()) { - LocalResourceManager imageCache = PatchCompareEditorInput.getImageCache(getPatcher().getConfiguration()); - return imageCache.createImage(PatchCompareEditorInput.createOverlay(image, CompareUIPlugin.getImageDescriptor(ICompareUIConstants.IS_MERGED_OVERLAY), IDecoration.TOP_LEFT)); - } - } - return image; - } - } - - private final DiffNode root; - private final WorkspacePatcher patcher; - private TreeViewer viewer; - private boolean fShowAll; - private boolean showMatched = false; - - /** - * Creates a new PatchCompareEditorInput and makes use of the passed in CompareConfiguration - * to configure the UI elements. - * @param patcher - * @param configuration - */ - public PatchCompareEditorInput(WorkspacePatcher patcher, CompareConfiguration configuration) { - super(configuration); - Assert.isNotNull(patcher); - this.patcher = patcher; - root = new DiffNode(Differencer.NO_CHANGE) { - public boolean hasChildren() { - return true; - } - }; - initializeImageCache(); - } - - private void initializeImageCache() { - initializeImageCache(patcher.getConfiguration()); - } - - private static LocalResourceManager initializeImageCache(PatchConfiguration patchConfiguration) { - LocalResourceManager imageCache = new LocalResourceManager(JFaceResources.getResources()); - patchConfiguration.setProperty(IMAGE_CACHE_KEY, imageCache); - return imageCache; - } - - protected void handleDispose() { - super.handleDispose(); - getImageCache(getPatcher().getConfiguration()).dispose(); - } - - public static LocalResourceManager getImageCache(PatchConfiguration patchConfiguration) { - LocalResourceManager cache = (LocalResourceManager)patchConfiguration.getProperty(IMAGE_CACHE_KEY); - if (cache == null) { - return initializeImageCache(patchConfiguration); - } - return cache; - } - - protected Object prepareInput(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - initLabels(); - return root; - } - - private void initLabels() { - CompareConfiguration cc = getCompareConfiguration(); - // set left editable so that unmatched hunks can be edited - cc.setLeftEditable(true); - cc.setRightEditable(false); - //cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, new Boolean(false)); - cc.setLeftLabel(getCompareConfiguration().getLeftLabel(root)); - cc.setLeftImage(getCompareConfiguration().getLeftImage(root)); - cc.setRightLabel(getCompareConfiguration().getRightLabel(root)); - cc.setRightImage(getCompareConfiguration().getRightImage(root)); - } - - /** - * Update the presentation of the diff tree. - */ - protected void updateTree() { - if (getViewer() != null && !getViewer().getControl().isDisposed()) - getViewer().refresh(true); - } - - /** - * Build the diff tree. - */ - protected void buildTree(){ - - // Reset the input node so it is empty - if (getRoot().hasChildren()) { - resetRoot(); - } - // Reset the input of the viewer so the old state is no longer used - getViewer().setInput(getRoot()); - - // Refresh the patcher state - getPatcher().refresh(); - - // Build the diff tree - if (getPatcher().isWorkspacePatch()){ - processProjects(getPatcher().getDiffProjects()); - } else { - processDiffs(getPatcher().getDiffs()); - } - - // Refresh the viewer - getViewer().refresh(); - } - - private void processDiffs(FilePatch2[] diffs) { - for (int i = 0; i < diffs.length; i++) { - processDiff(diffs[i], getRoot()); - } - } - - private void processProjects(DiffProject[] diffProjects) { - //create diffProject nodes - for (int i = 0; i < diffProjects.length; i++) { - PatchProjectDiffNode projectNode = new PatchProjectDiffNode(getRoot(), diffProjects[i], getPatcher().getConfiguration()); - FilePatch2[] diffs = diffProjects[i].getFileDiffs(); - for (int j = 0; j < diffs.length; j++) { - FilePatch2 fileDiff = diffs[j]; - processDiff(fileDiff, projectNode); - } - } - } - - private void processDiff(FilePatch2 diff, DiffNode parent) { - FileDiffResult diffResult = getPatcher().getDiffResult(diff); - PatchFileDiffNode node = PatchFileDiffNode.createDiffNode(parent, diffResult); - HunkResult[] hunkResults = diffResult.getHunkResults(); - for (int i = 0; i < hunkResults.length; i++) { - HunkResult hunkResult = hunkResults[i]; - if (!hunkResult.isOK()) { - HunkDiffNode hunkNode = HunkDiffNode.createDiffNode(node, hunkResult, true); - Object left = hunkNode.getLeft(); - if (left instanceof UnmatchedHunkTypedElement) { - UnmatchedHunkTypedElement element = (UnmatchedHunkTypedElement) left; - element.addContentChangeListener(new IContentChangeListener() { - public void contentChanged(IContentChangeNotifier source) { - if (getViewer() == null || getViewer().getControl().isDisposed()) - return; - getViewer().refresh(true); - } - }); - } - } else if (showMatched) { - HunkDiffNode.createDiffNode(node, hunkResult, false, true, false); - } - } - } - - /* (non-Javadoc) - * @see org.eclipse.compare.CompareEditorInput#createDiffViewer(org.eclipse.swt.widgets.Composite) - */ - public Viewer createDiffViewer(Composite parent) { - viewer = new DiffTreeViewer(parent, getCompareConfiguration()){ - protected void fillContextMenu(IMenuManager manager) { - PatchCompareEditorInput.this.fillContextMenu(manager); - } - }; - - viewer.setLabelProvider(new PatcherCompareEditorLabelProvider((ILabelProvider)viewer.getLabelProvider())); - viewer.getTree().setData(CompareUI.COMPARE_VIEWER_TITLE, PatchMessages.PatcherCompareEditorInput_PatchContents); - viewer.addOpenListener(new IOpenListener() { - public void open(OpenEvent event) { - IStructuredSelection sel= (IStructuredSelection) event.getSelection(); - Object obj= sel.getFirstElement(); - if (obj instanceof HunkDiffNode) { - if (((HunkDiffNode) obj).getHunkResult().isOK()) { - getCompareConfiguration().setLeftLabel(PatchMessages.PatcherCompareEditorInput_LocalCopy); - getCompareConfiguration().setRightLabel(PatchMessages.PreviewPatchPage2_MatchedHunk); - } else { - getCompareConfiguration().setLeftLabel(PatchMessages.PreviewPatchPage2_PatchedLocalFile); - getCompareConfiguration().setRightLabel(PatchMessages.PreviewPatchPage2_OrphanedHunk); - } - } else { - getCompareConfiguration().setLeftLabel(PatchMessages.PatcherCompareEditorInput_LocalCopy); - getCompareConfiguration().setRightLabel(PatchMessages.PatcherCompareEditorInput_AfterPatch); - } - } - - }); - viewer.setFilters(getFilters()); - viewer.setInput(root); - return viewer; - } - - private ViewerFilter[] getFilters() { - return new ViewerFilter[] { new ViewerFilter() { - public boolean select(Viewer v, Object parentElement, Object element) { - if (element instanceof PatchDiffNode) { - PatchDiffNode node = (PatchDiffNode) element; - return node.isEnabled() || isShowAll(); - } - return false; - } - } }; - } - - protected boolean isShowAll() { - return fShowAll; - } - - protected void setShowAll(boolean show) { - fShowAll = show; - } - - public boolean isShowMatched() { - return showMatched; - } - - protected void setShowMatched(boolean show) { - showMatched = show; - } - - public void contributeDiffViewerToolbarItems(Action[] actions, boolean workspacePatch){ - ToolBarManager tbm= CompareViewerPane.getToolBarManager(viewer.getControl().getParent()); - if (tbm != null) { - tbm.removeAll(); - - tbm.add(new Separator("contributed")); //$NON-NLS-1$ - - for (int i = 0; i < actions.length; i++) { - tbm.appendToGroup("contributed", actions[i]); //$NON-NLS-1$ - } - - tbm.update(true); - } - } - - public TreeViewer getViewer() { - return viewer; - } - - public DiffNode getRoot() { - return root; - } - - public void resetRoot() { - IDiffElement[] children = root.getChildren(); - for (int i = 0; i < children.length; i++) { - IDiffElement child = children[i]; - root.remove(child); - } - } - - public WorkspacePatcher getPatcher() { - return patcher; - } - - public boolean confirmRebuild(String message) { - if (getPatcher().hasCachedContents()) { - if (promptToDiscardCachedChanges(message)) { - getPatcher().clearCachedContents(); - return true; - } - return false; - } - return true; - } - - private boolean promptToDiscardCachedChanges(String message) { - return MessageDialog.openConfirm(viewer.getControl().getShell(), PatchMessages.PatcherCompareEditorInput_0, message); - } - - /** - * Return whether this input has a result to apply. The input - * has a result to apply if at least one hunk is selected for inclusion. - * @return whether this input has a result to apply - */ - public boolean hasResultToApply() { - boolean atLeastOneIsEnabled = false; - if (getViewer() != null) { - IDiffElement[] elements = getRoot().getChildren(); - for (int i = 0; i < elements.length; i++) { - IDiffElement element = elements[i]; - if (isEnabled(element)) { - atLeastOneIsEnabled = true; - break; - } - } - } - return atLeastOneIsEnabled; - } - - private boolean isEnabled(IDiffElement element) { - if (element instanceof PatchDiffNode) { - PatchDiffNode node = (PatchDiffNode) element; - return node.isEnabled(); - } - return false; - } - - protected abstract void fillContextMenu(IMenuManager manager); - - public Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, - Composite parent) { - if (org.eclipse.compare.internal.Utilities.isHunk(input)) - return null; - return super.findStructureViewer(oldViewer, input, parent); - } -} |