001 /* 002 * #%L 003 * License Maven Plugin 004 * 005 * $Id: FileHeaderProcessor.java 13519 2011-02-05 09:32:50Z tchemit $ 006 * $HeadURL: http://svn.codehaus.org/mojo/tags/license-maven-plugin-1.0/src/main/java/org/codehaus/mojo/license/header/FileHeaderProcessor.java $ 007 * %% 008 * Copyright (C) 2008 - 2011 CodeLutin, Codehaus, Tony Chemit 009 * %% 010 * This program is free software: you can redistribute it and/or modify 011 * it under the terms of the GNU Lesser General Public License as 012 * published by the Free Software Foundation, either version 3 of the 013 * License, or (at your option) any later version. 014 * 015 * This program is distributed in the hope that it will be useful, 016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 018 * GNU General Lesser Public License for more details. 019 * 020 * You should have received a copy of the GNU General Lesser Public 021 * License along with this program. If not, see 022 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 023 * #L% 024 */ 025 026 package org.codehaus.mojo.license.header; 027 028 import org.codehaus.mojo.license.header.transformer.FileHeaderTransformer; 029 import org.nuiton.processor.Processor; 030 031 import java.io.File; 032 import java.io.FileReader; 033 import java.io.FileWriter; 034 import java.io.IOException; 035 036 /** 037 * File header processor. 038 * 039 * @author tchemit <chemit@codelutin.com> 040 * @plexus.component role="org.nuiton.processor.Processor" role-hint="file-header" 041 * @since 1.0 042 */ 043 public class FileHeaderProcessor 044 extends Processor 045 { 046 047 /** 048 * processor configuration 049 */ 050 protected FileHeaderProcessorConfiguration configuration; 051 052 /** 053 * internal file header filter 054 */ 055 protected FileHeaderFilter filter; 056 057 public FileHeaderProcessor() 058 { 059 } 060 061 public FileHeaderProcessorConfiguration getConfiguration() 062 { 063 return configuration; 064 } 065 066 public FileHeaderFilter getFilter() 067 { 068 return filter; 069 } 070 071 /** 072 * @return {@code true} if processed file was touched (says the header was 073 * fully found), {@code false} otherwise 074 * @see FileHeaderFilter#isTouched() 075 */ 076 public boolean isTouched() 077 { 078 return getFilter() != null && getFilter().isTouched(); 079 } 080 081 /** 082 * @return {@code true} if processed file was modified (says the header was 083 * fully found and content changed), {@code false} otherwise 084 * @see FileHeaderFilter#isModified() 085 */ 086 public boolean isModified() 087 { 088 return getFilter() != null && getFilter().isModified(); 089 } 090 091 /** 092 * @return {@code true} if header of header was detected 093 * @see FileHeaderFilter#isDetectHeader() 094 */ 095 public boolean isDetectHeader() 096 { 097 return getFilter() != null && getFilter().isDetectHeader(); 098 } 099 100 public void process( File filein, File fileout ) 101 throws IOException, IllegalStateException 102 { 103 104 checkInit(); 105 reset(); 106 107 FileReader input = new FileReader( filein ); 108 try 109 { 110 FileWriter output = new FileWriter( fileout ); 111 try 112 { 113 process( input, output ); 114 } 115 finally 116 { 117 output.close(); 118 } 119 } 120 finally 121 { 122 input.close(); 123 } 124 } 125 126 public void populateFilter() 127 { 128 FileHeader fileHeader = getConfiguration().getFileHeader(); 129 boolean change = false; 130 131 FileHeaderFilter filter = getFilter(); 132 133 if ( !fileHeader.equals( filter.getFileHeader() ) ) 134 { 135 136 // change file header 137 138 filter.setFileHeader( fileHeader ); 139 change = true; 140 } 141 FileHeaderTransformer transformer = getConfiguration().getTransformer(); 142 if ( !transformer.equals( filter.getTransformer() ) ) 143 { 144 145 // change file transformer 146 147 filter.setTransformer( transformer ); 148 change = true; 149 } 150 if ( change ) 151 { 152 153 // something has changed, must reset content cache 154 filter.resetContent(); 155 } 156 } 157 158 public void setConfiguration( FileHeaderProcessorConfiguration configuration ) 159 { 160 this.configuration = configuration; 161 } 162 163 public void setFilter( FileHeaderFilter filter ) 164 { 165 this.filter = filter; 166 setInputFilter( filter ); 167 } 168 169 public void reset() 170 { 171 if ( filter != null ) 172 { 173 filter.reset(); 174 } 175 } 176 177 protected FileHeader getFileHeader() 178 { 179 return getConfiguration().getFileHeader(); 180 } 181 182 protected FileHeaderTransformer getTransformer() 183 { 184 return getConfiguration().getTransformer(); 185 } 186 187 protected void checkInit() 188 throws IllegalStateException 189 { 190 if ( getConfiguration() == null ) 191 { 192 throw new IllegalStateException( "no configuration set." ); 193 } 194 if ( getFileHeader() == null ) 195 { 196 throw new IllegalStateException( "no file header set." ); 197 } 198 if ( getTransformer() == null ) 199 { 200 throw new IllegalStateException( "no file header transformer set." ); 201 } 202 if ( getFilter() == null ) 203 { 204 throw new IllegalStateException( "no file header filter set." ); 205 } 206 } 207 }