| /******************************************************************************* |
| * Copyright (c) 2008-2011 Chair for Applied Software Engineering, |
| * Technische Universitaet Muenchen. |
| * 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: |
| ******************************************************************************/ |
| package org.eclipse.emf.emfstore.client.ui.dialogs.merge.conflict.options; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.emf.ecore.util.EcoreUtil; |
| import org.eclipse.emf.emfstore.client.ui.dialogs.merge.conflict.ConflictOption; |
| import org.eclipse.emf.emfstore.client.ui.dialogs.merge.util.DecisionConfig; |
| import org.eclipse.emf.emfstore.client.ui.dialogs.merge.util.DecisionUtil; |
| import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation; |
| import org.eclipse.emf.emfstore.server.model.versioning.operations.AttributeOperation; |
| |
| /** |
| * Special option to merge longer texts. |
| * |
| * @author wesendon |
| */ |
| public class MergeTextOption extends ConflictOption { |
| |
| private List<ConflictOption> list; |
| private String text; |
| |
| /** |
| * Default constructor. |
| */ |
| public MergeTextOption() { |
| super("Select Edited/Merged Value", OptionType.MergeText); |
| list = new ArrayList<ConflictOption>(); |
| setDetailProvider(DecisionConfig.WIDGET_MULTILINE_EDITABLE); |
| } |
| |
| /** |
| * Add options which should be merged. ATM: only "my" and "their" are supported |
| * |
| * @param option other option |
| */ |
| public void add(ConflictOption option) { |
| list.add(option); |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public String getFullOptionLabel() { |
| String result = ""; |
| for (ConflictOption option : list) { |
| result += " " + option.getFullOptionLabel(); |
| } |
| return result; |
| } |
| |
| /** |
| * Returns "my" text. |
| * |
| * @return text |
| */ |
| public String getMyText() { |
| ConflictOption option = DecisionUtil.getConflictOptionByType(list, OptionType.MyOperation); |
| return (option == null) ? "" : option.getFullOptionLabel(); |
| } |
| |
| /** |
| * Returns "their" text. |
| * |
| * @return text |
| */ |
| public String getTheirString() { |
| ConflictOption option = DecisionUtil.getConflictOptionByType(list, OptionType.TheirOperation); |
| return (option == null) ? "" : option.getFullOptionLabel(); |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<AbstractOperation> getOperations() { |
| if (text != null) { |
| for (ConflictOption option : list) { |
| if (option.getType().equals(OptionType.MyOperation)) { |
| if (option.getOperations().size() == 0) { |
| continue; |
| } |
| AbstractOperation tmp = option.getOperations().get(0); |
| if (tmp instanceof AttributeOperation) { |
| option.getOperations().remove(0); |
| AttributeOperation mergedOp = (AttributeOperation) EcoreUtil.copy(tmp); |
| mergedOp.setIdentifier(EcoreUtil.generateUUID()); |
| mergedOp.setNewValue(text); |
| option.getOperations().add(0, mergedOp); |
| return option.getOperations(); |
| } |
| } |
| } |
| } |
| |
| return super.getOperations(); |
| } |
| |
| /** |
| * Set resulted merged text. |
| * |
| * @param text text |
| */ |
| public void setMergedText(String text) { |
| this.text = text; |
| } |
| |
| /** |
| * Get merged text. |
| * |
| * @return text |
| */ |
| public String getMergedText() { |
| return text; |
| } |
| } |