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 org.codehaus.plexus.metadata.merge.MergeException; 28 import org.codehaus.plexus.metadata.merge.MergeStrategy; 29 import org.jdom2.Element; 30 31 /** 32 * Interface that marks an implementing entity as <b>mergeable</b>.<p> 33 * Not all the elements/tags are expected to implement this interface. <br> 34 * It should be implemented by elements/tags that need to have a certain control on how elements of the same type are merged with them. 35 * 36 * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a> 37 */ 38 public interface Mergeable { 39 /** 40 * Merges an element of same type. 41 * 42 * @param me Another entity that is mergeable. 43 * @throws MergeException if there was an error merging the mergeables. 44 */ 45 void merge(Mergeable me) throws MergeException; 46 47 /** 48 * Applies the passed in {@link MergeStrategy} to merge two {@link Mergeable} instance.<p> 49 * 50 * @param me Recessive {@link Mergeable} instance. 51 * @param strategy {@link MergeStrategy} to apply for merging. 52 * @throws MergeException if there was an error while merging. 53 */ 54 void merge(Mergeable me, MergeStrategy strategy) throws MergeException; 55 56 /** 57 * Returns the wrapped up JDom {@link Element} instance that was used to create this Mergeable. 58 * 59 * @return the wrapped up JDom {@link Element} instance. 60 */ 61 Element getElement(); 62 63 /** 64 * Returns an array of tags/elements that are allowed under the current 65 * element. 66 * 67 * @return the allowedTags 68 */ 69 DescriptorTag[] getAllowedTags(); 70 }