/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.xml.diff3;
import org.jdom2.Element;
/**
* This conflict occurs when 2 Elements are inserted under the same parent and that the parent cannot accept more than one child of this
* type. This is checked against xml mappings.
*
* @author bmangez
*
*/
public class UnresolvedInsertionConflict extends UnresolvedConflict {
private Element _parent;
private Element _existingChild;
private Element _rejectedChild;
public UnresolvedInsertionConflict(XMLDiff3 merge, int index, Element parent, Element existingChild, Element rejectedChild) {
super(merge, index);
_parent = parent;
_existingChild = existingChild;
_rejectedChild = rejectedChild;
}
@Override
public String toString() {
return "Element " + _parent.getName() + " (id=" + _parent.getAttributeValue("id") + ") can only accept one child named "
+ _existingChild.getName() + "\n" + "\texisting child :" + getExistingChildName() + "\n" + "\trejected child :"
+ getRejectedChildName();
}
public String getExistingChildName() {
return _existingChild.getName() + "(id=" + _existingChild.getAttributeValue("id") + ")";
}
public String getRejectedChildName() {
return _rejectedChild.getName() + "(id=" + _rejectedChild.getAttributeValue("id") + ")";
}
@Override
public MergeAction buildDiscardYourChangeAction() {
return new MergeElementAction(getConflictIndex(), MergeActionType.DONOTHING, _parent, _existingChild, _rejectedChild, -1);
}
@Override
public MergeAction buildKeepYourChangeAction() {
return new InsertionSwapAction(getConflictIndex(), _parent, _rejectedChild, _existingChild);
}
}