/** * <copyright> * * Copyright (c) 2016 Thales Global Services S.A.S. * 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: * Thales Global Services S.A.S. - initial API and implementation * * </copyright> */ package org.eclipse.emf.diffmerge.ui.viewers.categories; import org.eclipse.emf.diffmerge.api.Role; import org.eclipse.emf.diffmerge.api.diff.IDifference; import org.eclipse.emf.diffmerge.api.diff.IPresenceDifference; import org.eclipse.emf.diffmerge.ui.EMFDiffMergeUIPlugin; import org.eclipse.emf.diffmerge.ui.Messages; import org.eclipse.emf.diffmerge.ui.EMFDiffMergeUIPlugin.ImageID; import org.eclipse.emf.diffmerge.ui.viewers.EMFDiffNode; import org.eclipse.swt.graphics.Image; /** * A difference category that covers 3-way element moves on the right or on the left. * @author Olivier Constant */ public class ThreeWayMoveCategory extends AbstractSideRelatedDifferenceCategory { /** The ID of this category in the left-hand-side case */ public static final String ID_LEFT = "Technical.3WayMove.Left"; //$NON-NLS-1$ /** The ID of this category in the right-hand-side case */ public static final String ID_RIGHT = "Technical.3WayMove.Right"; //$NON-NLS-1$ /** * Constructor * @param sideIsLeft_p whether the category is relative to differences on the left-hand side */ public ThreeWayMoveCategory(boolean sideIsLeft_p) { super(sideIsLeft_p); } /** * @see org.eclipse.emf.diffmerge.ui.viewers.IDifferenceCategory#covers(org.eclipse.emf.diffmerge.api.diff.IDifference, org.eclipse.emf.diffmerge.ui.viewers.EMFDiffNode) */ public boolean covers(IDifference difference_p, EMFDiffNode node_p) { boolean result = false; if (node_p.isThreeWay() && node_p.getCategoryManager().isMove(difference_p)) { Role sideRole = node_p.getRoleForSide(isLeftSide()); result = ((IPresenceDifference)difference_p).getPresenceRole() == sideRole && !difference_p.isAlignedWithAncestor(); } return result; } /** * @see org.eclipse.emf.diffmerge.ui.viewers.IDifferenceCategory#getID() */ public String getID() { return isLeftSide()? ID_LEFT: ID_RIGHT; } /** * @see org.eclipse.emf.diffmerge.ui.viewers.categories.AbstractDifferenceCategory#getImage(org.eclipse.emf.diffmerge.ui.viewers.EMFDiffNode) */ @Override public Image getImage(EMFDiffNode node_p) { return EMFDiffMergeUIPlugin.getDefault().getImage(ImageID.TREE); } /** * @see org.eclipse.emf.diffmerge.ui.viewers.IDifferenceCategory#getText(org.eclipse.emf.diffmerge.ui.viewers.EMFDiffNode) */ public String getText(EMFDiffNode node_p) { String result; if (isLeftSide()) result = Messages.ThreeWayMoveCategory_TextMovedLeft; else result = Messages.ThreeWayMoveCategory_TextMovedRight; return result; } /** * @see org.eclipse.emf.diffmerge.ui.viewers.categories.AbstractDifferenceCategory#isApplicable(org.eclipse.emf.diffmerge.ui.viewers.EMFDiffNode) */ @Override public boolean isApplicable(EMFDiffNode node_p) { return node_p.isThreeWay(); } }