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 properties format.
020     *
021     * @author tchemit <chemit@codelutin.com>
022     * @plexus.component role-hint="properties"
023     * @since 1.0
024     */
025    public class PropertiesFileHeaderTransformer
026        extends AbstractFileHeaderTransformer
027    {
028    
029        public static final String NAME = "properties";
030    
031        public static final String DESCRIPTION = "header transformer with properties file 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        protected final String linesep;
040    
041        public PropertiesFileHeaderTransformer()
042        {
043            super( NAME, DESCRIPTION, COMMENT_START_TAG, COMMENT_END_TAG, COMMENT_LINE_PREFIX );
044            linesep = System.getProperty( "line.separator" );
045        }
046    
047        public String[] getDefaultAcceptedExtensions()
048        {
049            return new String[]{ NAME, "sh", "py", "rb", "pl", "pm" };
050        }
051    
052        @Override
053        public String addHeader( String header, String content )
054        {
055    
056            String result;
057    
058            String prolog = null;
059            int startProlog = content.indexOf( "#!" );
060            if ( startProlog > -1 )
061            {
062    
063                // shebang was detected
064    
065                int endProlog = content.indexOf( linesep );
066    
067                if ( endProlog > -1 )
068                {
069    
070                    // prolog end was detected
071                    prolog = content.substring( 0, endProlog + linesep.length() );
072                }
073            }
074    
075            if ( prolog == null )
076            {
077    
078                // no shebang detected
079                result = super.addHeader( header, content );
080            }
081            else
082            {
083    
084                // shebang detected
085                content = content.substring( prolog.length() );
086                result = super.addHeader( prolog + '\n' + header, content );
087            }
088            return result;
089        }
090    }