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 }