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;
017    
018    
019    import org.codehaus.mojo.license.header.transformer.FileHeaderTransformer;
020    
021    /**
022     * Implementation of {@link FileHeaderFilter} to update an incoming header.
023     *
024     * @author tchemit <chemit@codelutin.com>
025     * @plexus.component role="org.codehaus.mojo.license.header.FileHeaderFilter" role-hint="update-file-header"
026     * @since 1.0
027     */
028    public class UpdateFileHeaderFilter
029        extends FileHeaderFilter
030    {
031    
032        /**
033         * Flag sets to {@code true} if description can be updated.
034         */
035        protected boolean updateDescription;
036    
037        /**
038         * Flag set to {@code true} if license can be updated.
039         */
040        protected boolean updateLicense;
041    
042        /**
043         * Flag sets to {@code true} if copyright can be updated.
044         */
045        protected boolean updateCopyright;
046    
047        public UpdateFileHeaderFilter()
048        {
049        }
050    
051        @Override
052        protected FileHeader getNewHeader( FileHeader oldHeader )
053        {
054    
055            FileHeader result = new FileHeader();
056    
057            FileHeader newHeader = getFileHeader();
058    
059            FileHeaderTransformer transformer = getTransformer();
060    
061            boolean modified = false;
062    
063            // by default, reuse the old header
064            result.setDescription( oldHeader.getDescription() );
065            result.setCopyrightFirstYear( oldHeader.getCopyrightFirstYear() );
066            result.setCopyrightLastYear( oldHeader.getCopyrightLastYear() );
067            result.setCopyrightHolder( oldHeader.getCopyrightHolder() );
068            result.setLicense( oldHeader.getLicense() );
069    
070            if ( isUpdateDescription() && !transformer.isDescriptionEquals( oldHeader, newHeader ) )
071            {
072    
073                // can update description and it has changed
074    
075                if ( log.isDebugEnabled() )
076                {
077                    log.debug( "description has changed from [" + oldHeader.getDescription() + "] to [" +
078                                   newHeader.getDescription() + "]" );
079                }
080    
081                // description has changed, mark header to be updated
082                modified = true;
083    
084                // use the new description
085                result.setDescription( newHeader.getDescription() );
086            }
087    
088            if ( isUpdateCopyright() && !transformer.isCopyrightEquals( oldHeader, newHeader ) )
089            {
090    
091                // can update copyright and it has changed
092    
093                if ( log.isDebugEnabled() )
094                {
095                    log.debug(
096                        "copyright has changed from [" + oldHeader.getCopyright() + "] to [" + newHeader.getCopyright() +
097                            "]" );
098                }
099    
100                // description has changed, mark header to be updated
101                modified = true;
102    
103                // use the new copyright
104                result.setCopyrightFirstYear( newHeader.getCopyrightFirstYear() );
105                result.setCopyrightLastYear( newHeader.getCopyrightLastYear() );
106                result.setCopyrightHolder( newHeader.getCopyrightHolder() );
107            }
108    
109            if ( isUpdateLicense() && !transformer.isLicenseEquals( oldHeader, newHeader ) )
110            {
111    
112                // can update license and it has changed
113    
114                if ( log.isDebugEnabled() )
115                {
116                    log.debug(
117                        "license has changed from [" + oldHeader.getLicense() + "] to [" + newHeader.getLicense() + "]" );
118                }
119    
120                // description has changed, mark header to be updated
121                modified = true;
122    
123                // use the new license
124                result.setLicense( newHeader.getLicense() );
125            }
126    
127            if ( !modified )
128            {
129    
130                // nothing has to be updated, so return a {@code null} result
131                result = null;
132            }
133    
134            return result;
135        }
136    
137        public boolean isUpdateCopyright()
138        {
139            return updateCopyright;
140        }
141    
142        public void setUpdateCopyright( boolean updateCopyright )
143        {
144            this.updateCopyright = updateCopyright;
145        }
146    
147        public boolean isUpdateDescription()
148        {
149            return updateDescription;
150        }
151    
152        public void setUpdateDescription( boolean updateDescription )
153        {
154            this.updateDescription = updateDescription;
155        }
156    
157        public boolean isUpdateLicense()
158        {
159            return updateLicense;
160        }
161    
162        public void setUpdateLicense( boolean updateLicense )
163        {
164            this.updateLicense = updateLicense;
165        }
166    }