blob: e07ed65e2f6200de0ca724d8207f7e550a266abf [file] [log] [blame]
/*******************************************************************************
* Copyright 2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* All rights reserved. This program and the accompanying materials
* are made available under the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
******************************************************************************/
package org.eclipse.emf.emfstore.client.ui.dialogs.merge.ui.components;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.emfstore.client.model.changeTracking.merging.conflict.Conflict;
import org.eclipse.emf.emfstore.client.model.changeTracking.merging.conflict.ConflictDescription;
import org.eclipse.emf.emfstore.client.model.changeTracking.merging.util.DecisionUtil;
import org.eclipse.emf.emfstore.client.ui.dialogs.merge.ui.DecisionBox;
import org.eclipse.emf.emfstore.client.ui.dialogs.merge.util.UIDecisionUtil;
import org.eclipse.emf.emfstore.client.ui.views.changes.ChangePackageVisualizationHelper;
import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
/**
* Displays the description in the decision box.
*
* @author wesendon
*/
public class DescriptionComponent extends Composite {
/**
* Default constructor.
*
* @param parent
* parent
* @param conflict
* conflict
*/
public DescriptionComponent(DecisionBox parent, Conflict conflict) {
super(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
layout.horizontalSpacing = 20;
setLayout(layout);
setLayoutData(new GridData(GridData.FILL_BOTH));
Label image = new Label(this, SWT.NONE);
image.setImage(UIDecisionUtil.getImage(conflict.getConflictDescription().getImage()));
image.setToolTipText(conflict.getClass().getSimpleName());
image.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
image.setBackground(parent.getBackground());
ArrayList<StyleRange> styleRanges = new ArrayList<StyleRange>();
String description = "";
for (String tmp : splitText(parent, conflict.getConflictDescription())) {
if (tmp.startsWith("::")) {
styleRanges.add(createStyleRange(description.length(), tmp.length() - 2));
description += tmp.substring(2);
} else {
description += tmp;
}
}
Group group = new Group(this, SWT.NONE);
group.setLayoutData(new GridData(GridData.FILL_BOTH));
FillLayout groupLayout = new FillLayout();
groupLayout.marginHeight = 5;
groupLayout.marginWidth = 6;
group.setLayout(groupLayout);
group.setBackground(parent.getBackground());
group.setText("Conflict Description:");
StyledText styledDescription = new StyledText(group, SWT.WRAP | SWT.MULTI | SWT.READ_ONLY);
styledDescription.setEditable(false);
styledDescription.setEnabled(false);
styledDescription.setText(description + "\n");
styledDescription.setWordWrap(true);
styledDescription.setStyleRanges(styleRanges.toArray(new StyleRange[styleRanges.size()]));
styledDescription.setBackground(parent.getBackground());
}
private StyleRange createStyleRange(int start, int length) {
StyleRange styleRange = new StyleRange();
styleRange.start = start;
styleRange.length = length;
styleRange.fontStyle = SWT.BOLD;
return styleRange;
}
private List<String> splitText(DecisionBox box, ConflictDescription conflict) {
String description = conflict.getDescription();
// for(String string : description.split("\\["+"[a-zA-Z]*"+"\\]")) {
ChangePackageVisualizationHelper visualHelper = UIDecisionUtil.getChangePackageVisualizationHelper(box
.getDecisionManager());
ArrayList<String> result = new ArrayList<String>();
for (String string : description.split("\\[")) {
String[] split = string.split("\\]");
if (split.length > 1) {
Object obj = conflict.getValues().get(split[0]);
String tmp = "";
if (obj instanceof AbstractOperation) {
tmp = visualHelper.getDescription((AbstractOperation) obj);
visualHelper.dispose();
} else if (obj instanceof EObject) {
tmp = DecisionUtil.getClassAndName((EObject) obj);
tmp = DecisionUtil.cutString(tmp, 45, true);
} else if (obj != null) {
tmp = obj.toString();
tmp = UIDecisionUtil.cutString(tmp, 85, true);
} else {
tmp = "";
}
tmp = UIDecisionUtil.stripNewLine(tmp);
split[0] = "::" + tmp;
}
result.addAll(Arrays.asList(split));
}
return result;
}
}