1 package org.codehaus.plexus.metadata.merge.support; 2 3 /* 4 * The MIT License 5 * 6 * Copyright (c) 2006, The Codehaus 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy of 9 * this software and associated documentation files (the "Software"), to deal in 10 * the Software without restriction, including without limitation the rights to 11 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 12 * of the Software, and to permit persons to whom the Software is furnished to do 13 * so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included in all 16 * copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 * SOFTWARE. 25 */ 26 27 import java.util.Collections; 28 import java.util.List; 29 30 import org.codehaus.plexus.metadata.merge.MergeException; 31 import org.codehaus.plexus.metadata.merge.MergeStrategy; 32 33 /** 34 * Collection of available Merge Strategies.<p> 35 * TODO: Revisit and factor {@link Mergeable#merge(Mergeable)} to use a {@link MergeStrategy}. 36 * 37 * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a> 38 */ 39 public class MergeStrategies { 40 /** 41 * {@link MergeStrategy} implementation wherein the elements are merged 42 * down to the deepest available {@link Mergeable} instance in the DOM tree. 43 */ 44 public static final MergeStrategy DEEP = new MergeStrategy() { 45 public void apply(Mergeable dElt, Mergeable rElt) throws MergeException { 46 dElt.merge(rElt); 47 } 48 }; 49 50 /** 51 * {@link MergeStrategy} implementation wherein only the element on 52 * which the merge operation is called is 'merged'. The merge does not 53 * traverse the DOM tree any further. 54 */ 55 public static final MergeStrategy SHALLOW = new MergeStrategy() { 56 /** 57 * @throws MergeException 58 * @see org.codehaus.plexus.metadata.merge.MergeStrategy#apply(Mergeable,Mergeable) 59 */ 60 public void apply(Mergeable dElt, Mergeable rElt) throws MergeException { 61 AbstractMergeableElement dame = (AbstractMergeableElement) dElt; 62 AbstractMergeableElement rame = (AbstractMergeableElement) rElt; 63 64 // check if the dominant was in conflict with recessive. 65 List elementNames = dame.getElementNamesForConflictResolution(Collections.EMPTY_LIST); 66 67 if (!dame.isRecessiveElementInConflict(rame, elementNames)) { 68 // no conflict, simply add recessive to dominant's parent 69 dame.getElement().addContent(rame.getElement()); 70 } 71 } 72 }; 73 }