Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java')
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java
new file mode 100644
index 000000000..86c5fff2d
--- /dev/null
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 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.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+
+import org.eclipse.compare.CompareUI;
+import org.eclipse.compare.IEncodedStreamContentAccessor;
+import org.eclipse.compare.ITypedElement;
+import org.eclipse.compare.internal.CompareUIPlugin;
+import org.eclipse.compare.internal.core.patch.DiffProject;
+import org.eclipse.compare.internal.core.patch.FileDiffResult;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.swt.graphics.Image;
+
+public class PatchFileTypedElement implements ITypedElement,
+ IEncodedStreamContentAccessor {
+
+ private final FileDiffResult result;
+ private final boolean isAfterState;
+
+ public PatchFileTypedElement(FileDiffResult result, boolean isAfterState) {
+ this.result = result;
+ this.isAfterState = isAfterState;
+ }
+
+ public Image getImage() {
+ IFile file = getPatcher().getTargetFile(result.getDiff());
+ if (file == null) {
+ // We don't get a target file if the file doesn't exist
+ DiffProject project = result.getDiff().getProject();
+ if (project != null) {
+ file = Utilities.getProject(project).getFile(
+ result.getDiff().getPath(
+ result.getConfiguration().isReversed()));
+ } else {
+ IResource target = getPatcher().getTarget();
+ if (target instanceof IFile) {
+ file = (IFile) target;
+ } else if (target instanceof IContainer) {
+ IContainer container = (IContainer) target;
+ file = container.getFile(result.getTargetPath());
+ }
+ }
+ }
+ Image image = null;
+ if (file != null) {
+ image = CompareUI.getImage(file);
+ }
+ if (result.containsProblems()) {
+ LocalResourceManager imageCache = PatchCompareEditorInput
+ .getImageCache(result.getConfiguration());
+ image = HunkTypedElement.getHunkErrorImage(image, imageCache, true);
+ }
+ return image;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.compare.ITypedElement#getName()
+ */
+ public String getName() {
+ return result.getTargetPath().toString();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.compare.ITypedElement#getType()
+ */
+ public String getType() {
+ return result.getTargetPath().getFileExtension();
+ }
+
+ public String getCharset() throws CoreException {
+ return result.getCharset();
+ }
+
+ public InputStream getContents() throws CoreException {
+ // If there are cached contents, use them
+ if (isAfterState && getPatcher().hasCachedContents(result.getDiff()))
+ return new ByteArrayInputStream(getPatcher().getCachedContents(
+ result.getDiff()));
+ // Otherwise, get the lines from the diff result
+ List lines;
+ if (isAfterState) {
+ lines = result.getAfterLines();
+ } else {
+ lines = result.getBeforeLines();
+ }
+ String contents = LineReader.createString(getPatcher()
+ .isPreserveLineDelimeters(), lines);
+ String charSet = getCharset();
+ byte[] bytes = null;
+ if (charSet != null) {
+ try {
+ bytes = contents.getBytes(charSet);
+ } catch (UnsupportedEncodingException e) {
+ CompareUIPlugin.log(e);
+ }
+ }
+ if (bytes == null) {
+ bytes = contents.getBytes();
+ }
+ return new ByteArrayInputStream(bytes);
+ }
+
+ private Patcher getPatcher() {
+ return Patcher.getPatcher(result.getConfiguration());
+ }
+
+}

Back to the top