Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/MergeResultDialog.java')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/MergeResultDialog.java206
1 files changed, 206 insertions, 0 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/MergeResultDialog.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/MergeResultDialog.java
new file mode 100644
index 0000000000..d46f4d7dcb
--- /dev/null
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/MergeResultDialog.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com>
+ *
+ * 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
+ *******************************************************************************/
+package org.eclipse.egit.ui.internal.merge;
+
+import java.io.IOException;
+
+import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.UIText;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jgit.api.MergeResult;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Dialog for displaying a MergeResult
+ *
+ */
+public class MergeResultDialog extends Dialog {
+
+ private static final String SPACE = " "; //$NON-NLS-1$
+
+ private static final String EMPTY = ""; //$NON-NLS-1$
+
+ private final MergeResult mergeResult;
+
+ private final Repository repository;
+
+ private ObjectReader objectReader;
+
+ /**
+ * @param parentShell
+ * @param repository
+ * @param mergeResult
+ */
+ public MergeResultDialog(Shell parentShell, Repository repository,
+ MergeResult mergeResult) {
+ super(parentShell);
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ this.repository = repository;
+ this.mergeResult = mergeResult;
+ objectReader = repository.newObjectReader();
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(final Composite parent) {
+ createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
+ true);
+ }
+
+ @Override
+ protected Control createDialogArea(final Composite parent) {
+ final Composite composite = (Composite) super.createDialogArea(parent);
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 2;
+ composite.setLayout(gridLayout);
+ // result
+ Label resultLabel = new Label(composite, SWT.NONE);
+ resultLabel.setText(UIText.MergeResultDialog_result);
+ resultLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false,
+ false));
+ Text resultText = new Text(composite, SWT.READ_ONLY);
+ resultText.setText(mergeResult.getMergeStatus().toString());
+ resultText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ // new head
+ Label newHeadLabel = new Label(composite, SWT.NONE);
+ newHeadLabel.setText(UIText.MergeResultDialog_newHead);
+ newHeadLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false,
+ false));
+ Text newHeadText = new Text(composite, SWT.READ_ONLY);
+ ObjectId newHead = mergeResult.getNewHead();
+ if (newHead != null)
+ newHeadText.setText(getCommitMessage(newHead) + SPACE
+ + abbreviate(mergeResult.getNewHead(), true));
+ newHeadText
+ .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ // Merge Input
+ Label mergeInputLabel = new Label(composite, SWT.NONE);
+ mergeInputLabel.setText(UIText.MergeResultDialog_mergeInput);
+ GridDataFactory.fillDefaults().align(SWT.LEAD, SWT.CENTER).span(2, 1)
+ .applyTo(mergeInputLabel);
+ TableViewer viewer = new TableViewer(composite);
+ viewer.setContentProvider(new IStructuredContentProvider() {
+
+ public void dispose() {
+ // empty
+ }
+
+ public void inputChanged(Viewer theViewer, Object oldInput,
+ Object newInput) {
+ // empty
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return mergeResult.getMergedCommits();
+ }
+ });
+ TableViewerColumn idColumn = new TableViewerColumn(viewer, SWT.LEFT);
+ idColumn.getColumn().setText(UIText.MergeResultDialog_id);
+ idColumn.getColumn().setWidth(100);
+ TableViewerColumn textColumn = new TableViewerColumn(viewer, SWT.LEFT);
+ textColumn.getColumn().setText(UIText.MergeResultDialog_description);
+ textColumn.getColumn().setWidth(300);
+ Table table = viewer.getTable();
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+ viewer.setLabelProvider(new ITableLabelProvider() {
+
+ public void removeListener(ILabelProviderListener listener) {
+ // empty
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void dispose() {
+ // empty
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ // empty
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ ObjectId commitId = (ObjectId) element;
+ if (columnIndex == 0)
+ return abbreviate(commitId, false);
+ else if (columnIndex == 1)
+ return getCommitMessage(commitId);
+ return EMPTY;
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+ });
+ getShell().setText(UIText.MergeResultDialog_mergeResult);
+ applyDialogFont(composite);
+ getShell().addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ if (objectReader != null)
+ objectReader.release();
+ }
+ });
+ GridDataFactory.fillDefaults().grab(true, true)
+ .align(SWT.FILL, SWT.FILL).span(2, 1)
+ .applyTo(viewer.getControl());
+ viewer.setInput(mergeResult);
+ return composite;
+ }
+
+ private String getCommitMessage(ObjectId id) {
+ RevCommit commit;
+ try {
+ commit = new RevWalk(repository).parseCommit(id);
+ } catch (IOException e) {
+ Activator.logError(UIText.MergeResultDialog_couldNotFindCommit, e);
+ return UIText.MergeResultDialog_couldNotFindCommit;
+ }
+ return commit.getShortMessage();
+ }
+
+ private String abbreviate(ObjectId id, boolean addBrackets) {
+ StringBuilder result = new StringBuilder(EMPTY);
+ if (addBrackets)
+ result.append("["); //$NON-NLS-1$
+ try {
+ result.append(objectReader.abbreviate(id).name());
+ } catch (IOException e) {
+ result.append(id.name());
+ }
+ if (addBrackets)
+ result.append("]"); //$NON-NLS-1$
+ return result.toString();
+ }
+
+}

Back to the top