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 import org.codehaus.mojo.license.header.transformer.FileHeaderTransformer; 019 import org.nuiton.processor.Processor; 020 021 import java.io.File; 022 import java.io.FileReader; 023 import java.io.FileWriter; 024 import java.io.IOException; 025 026 /** 027 * File header processor. 028 * 029 * @author tchemit <chemit@codelutin.com> 030 * @plexus.component role="org.nuiton.processor.Processor" role-hint="file-header" 031 * @since 1.0 032 */ 033 public class FileHeaderProcessor 034 extends Processor 035 { 036 037 /** 038 * processor configuration 039 */ 040 protected FileHeaderProcessorConfiguration configuration; 041 042 /** 043 * internal file header filter 044 */ 045 protected FileHeaderFilter filter; 046 047 public FileHeaderProcessor() 048 { 049 } 050 051 public FileHeaderProcessorConfiguration getConfiguration() 052 { 053 return configuration; 054 } 055 056 public FileHeaderFilter getFilter() 057 { 058 return filter; 059 } 060 061 /** 062 * @return {@code true} if processed file was touched (says the header was 063 * fully found), {@code false} otherwise 064 * @see FileHeaderFilter#isTouched() 065 */ 066 public boolean isTouched() 067 { 068 return getFilter() != null && getFilter().isTouched(); 069 } 070 071 /** 072 * @return {@code true} if processed file was modified (says the header was 073 * fully found and content changed), {@code false} otherwise 074 * @see FileHeaderFilter#isModified() 075 */ 076 public boolean isModified() 077 { 078 return getFilter() != null && getFilter().isModified(); 079 } 080 081 /** 082 * @return {@code true} if header of header was detected 083 * @see FileHeaderFilter#isDetectHeader() 084 */ 085 public boolean isDetectHeader() 086 { 087 return getFilter() != null && getFilter().isDetectHeader(); 088 } 089 090 public void process( File filein, File fileout ) 091 throws IOException, IllegalStateException 092 { 093 094 checkInit(); 095 reset(); 096 097 FileReader input = new FileReader( filein ); 098 try 099 { 100 FileWriter output = new FileWriter( fileout ); 101 try 102 { 103 process( input, output ); 104 } 105 finally 106 { 107 output.close(); 108 } 109 } 110 finally 111 { 112 input.close(); 113 } 114 } 115 116 public void populateFilter() 117 { 118 FileHeader fileHeader = getConfiguration().getFileHeader(); 119 boolean change = false; 120 121 FileHeaderFilter filter = getFilter(); 122 123 if ( !fileHeader.equals( filter.getFileHeader() ) ) 124 { 125 126 // change file header 127 128 filter.setFileHeader( fileHeader ); 129 change = true; 130 } 131 FileHeaderTransformer transformer = getConfiguration().getTransformer(); 132 if ( !transformer.equals( filter.getTransformer() ) ) 133 { 134 135 // change file transformer 136 137 filter.setTransformer( transformer ); 138 change = true; 139 } 140 if ( change ) 141 { 142 143 // something has changed, must reset content cache 144 filter.resetContent(); 145 } 146 } 147 148 public void setConfiguration( FileHeaderProcessorConfiguration configuration ) 149 { 150 this.configuration = configuration; 151 } 152 153 public void setFilter( FileHeaderFilter filter ) 154 { 155 this.filter = filter; 156 setInputFilter( filter ); 157 } 158 159 public void reset() 160 { 161 if ( filter != null ) 162 { 163 filter.reset(); 164 } 165 } 166 167 protected FileHeader getFileHeader() 168 { 169 return getConfiguration().getFileHeader(); 170 } 171 172 protected FileHeaderTransformer getTransformer() 173 { 174 return getConfiguration().getTransformer(); 175 } 176 177 protected void checkInit() 178 throws IllegalStateException 179 { 180 if ( getConfiguration() == null ) 181 { 182 throw new IllegalStateException( "no configuration set." ); 183 } 184 if ( getFileHeader() == null ) 185 { 186 throw new IllegalStateException( "no file header set." ); 187 } 188 if ( getTransformer() == null ) 189 { 190 throw new IllegalStateException( "no file header transformer set." ); 191 } 192 if ( getFilter() == null ) 193 { 194 throw new IllegalStateException( "no file header filter set." ); 195 } 196 } 197 }