// Path: sorter/src/main/java/sortpom/wrapper/content/Wrapper.java
// public interface Wrapper<T extends Content> {
// 
//     /**
//      * Gets the wrapped content.
//      *
//      * @return the content
//      */
//     T getContent();
// 
//     /**
//      * Checks if wrapper should be placed before another wrapper.
//      *
//      * @param wrapper the wrapper
//      * @return true, if is before
//      */
//     boolean isBefore(Wrapper<? extends Content> wrapper);
// 
//     /**
//      * Checks if is content is of type Element. Default behaviour is that it contains an element.
//      *
//      * @return true, if is content element
//      */
//     default boolean isContentElement() {
//         return true;
//     }
// 
//     /**
//      * Checks if wrapper should be sorted. Default behaviour is that it that the Wrapper is sortable.
//      *
//      * @return true, if is sortable
//      */
//     default boolean isSortable() {
//         return true;
//     }
// 
//     /**
//      * Output debug-friendly string
//      *
//      * @param indent The indentation indicates nested elements
//      * @return The debug string
//      */
//     default String toString(String indent) {
//         return indent + toString();
//     }
// 
// }


import org.jdom.Content;
import org.jdom.Element;
import sortpom.wrapper.content.Wrapper;
import java.util.List;
package sortpom.wrapper.operation;



/**
 * This class gives a default implementation of an operation that traverse the xml hierarchy.
 * The operation executes on each xml element recursively 
 * @author bjorn
 * @since 2013-11-01
 */
public interface HierarchyWrapperOperation {
    /** Override this if the operation wants to do something before each element has been processed */
    default void startOfProcess() {
    }

    /** Override this if the operation wants to do something with each 'other content' that
     * belongs to the element being processed
     * @param content such as newlines and comments
     */
    default void processOtherContent(Wrapper<Content> content) {
    }

    /** Override this if the operation wants to do something with the actual element being processed */
// Path: sorter/src/main/java/sortpom/wrapper/content/Wrapper.java
// public interface Wrapper<T extends Content> {
// 
//     /**
//      * Gets the wrapped content.
//      *
//      * @return the content
//      */
//     T getContent();
// 
//     /**
//      * Checks if wrapper should be placed before another wrapper.
//      *
//      * @param wrapper the wrapper
//      * @return true, if is before
//      */
//     boolean isBefore(Wrapper<? extends Content> wrapper);
// 
//     /**
//      * Checks if is content is of type Element. Default behaviour is that it contains an element.
//      *
//      * @return true, if is content element
//      */
//     default boolean isContentElement() {
//         return true;
//     }
// 
//     /**
//      * Checks if wrapper should be sorted. Default behaviour is that it that the Wrapper is sortable.
//      *
//      * @return true, if is sortable
//      */
//     default boolean isSortable() {
//         return true;
//     }
// 
//     /**
//      * Output debug-friendly string
//      *
//      * @param indent The indentation indicates nested elements
//      * @return The debug string
//      */
//     default String toString(String indent) {
//         return indent + toString();
//     }
// 
// }


// Path: sorter/src/main/java/sortpom/wrapper/operation/HierarchyWrapperOperation.java
import org.jdom.Content;
import org.jdom.Element;
import sortpom.wrapper.content.Wrapper;
import java.util.List;

package sortpom.wrapper.operation;



/**
 * This class gives a default implementation of an operation that traverse the xml hierarchy.
 * The operation executes on each xml element recursively 
 * @author bjorn
 * @since 2013-11-01
 */
public interface HierarchyWrapperOperation {
    /** Override this if the operation wants to do something before each element has been processed */
    default void startOfProcess() {
    }

    /** Override this if the operation wants to do something with each 'other content' that
     * belongs to the element being processed
     * @param content such as newlines and comments
     */
    default void processOtherContent(Wrapper<Content> content) {
    }

    /** Override this if the operation wants to do something with the actual element being processed */
    default void processElement(Wrapper<Element> element) {