001    /**
002     * Copyright 2010-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.codehaus.mojo.license.header.transformer;
017    
018    /**
019     * Implementation of {@link FileHeaderTransformer} for xml format.
020     *
021     * @author tchemit <chemit@codelutin.com>
022     * @plexus.component role-hint="xml"
023     * @since 1.0
024     */
025    public class XmlFileHeaderTransformer
026        extends AbstractFileHeaderTransformer
027    {
028    
029        public static final String NAME = "xml";
030    
031        public static final String DESCRIPTION = "header transformer with xml comment style";
032    
033        public static final String COMMENT_LINE_PREFIX = "  ";
034    
035        public static final String COMMENT_START_TAG = "<!--";
036    
037        public static final String COMMENT_END_TAG = "  -->";
038    
039        public XmlFileHeaderTransformer()
040        {
041            super( NAME, DESCRIPTION, COMMENT_START_TAG, COMMENT_END_TAG, COMMENT_LINE_PREFIX );
042        }
043    
044        public String[] getDefaultAcceptedExtensions()
045        {
046            return new String[]{ "pom", "xml", "xhtml", "mxlm", "dtd", "fml", "xsl", "html", "htm", "jaxx", "kml", "gsp",
047                "tml" };
048        }
049    
050        @Override
051        public String addHeader( String header, String content )
052        {
053    
054            String result;
055    
056            String prolog = null;
057            int startProlog = content.indexOf( "<?xml" );
058            if ( startProlog > -1 )
059            {
060    
061                // prolog start was detected
062                int endProlog = content.indexOf( "?>", startProlog );
063    
064                if ( endProlog > -1 )
065                {
066    
067                    // prolog end was detected
068                    prolog = content.substring( 0, endProlog + 2 );
069                }
070            }
071    
072            if ( prolog == null )
073            {
074    
075                // no prolog detected
076                result = super.addHeader( header, content );
077            }
078            else
079            {
080    
081                // prolog detected
082                content = content.substring( prolog.length() );
083                result = super.addHeader( prolog + '\n' + header, content );
084            }
085            return result;
086        }
087    }