Author: tchemit Date: 2009-08-26 22:10:08 +0200 (Wed, 26 Aug 2009) New Revision: 264 Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/LicenseFilter.java Log: fix BUG #27 on maven-license-plugin Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/LicenseFilter.java =================================================================== --- trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/LicenseFilter.java 2009-08-26 20:09:20 UTC (rev 263) +++ trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/LicenseFilter.java 2009-08-26 20:10:08 UTC (rev 264) @@ -16,6 +16,9 @@ * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */ package org.nuiton.processor.filters; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /** * Un filtre pour remplacer la license d'un fichier source java. * <p/> @@ -25,6 +28,8 @@ */ public class LicenseFilter extends DefaultFilter { + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(LicenseFilter.class); public static final String HEADER = "*" + "#" + "#" + "%"; public static final String FOOTER = "#" + "#" + "%" + "*"; /** @@ -32,40 +37,73 @@ * commence par un ' * ', sauf pour la premiere et derniere ligne). */ protected String licenseHeader; - /** flag pour indiquer si la licence a ete trouvee entre le header et le footer */ protected boolean touched; + /** flag pour indiquer si on a rencontree le header du filtre */ + protected boolean detectHeader; public LicenseFilter(String licenseHeader) { this.licenseHeader = " " + licenseHeader + " "; } + @Override protected String performInFilter(String ch) { - if (touched) { - // on autorise pas deux process de la licence dans un fichier java - throw new IllegalStateException("has find more than once the license processor tags in a file"); + if (log.isDebugEnabled()) { + log.debug(ch); } - touched = true; - return HEADER + licenseHeader + FOOTER; + if (getMatchIndexFor(ch, HEADER) == NOT_FOUND) { + // on est bien dans la license, on peut effectuer le changement + if (touched) { + // on autorise pas deux process de la licence dans un fichier java + throw new IllegalStateException("has find more than once the license processor tags in a file"); + } + touched = true; + return HEADER + licenseHeader + FOOTER; + } + // ce cas arrive lorsque l'on a parcouru tout le fichier avec detection + // de la balise header mais sans balise footer + // et on arrive dans cette methode dans le flush du filter + return ch; } + @Override protected String performOutFilter(String ch) { + if (log.isDebugEnabled()) { + log.debug(ch); + } return ch; } + @Override protected String getHeader() { return HEADER; } + @Override protected String getFooter() { return FOOTER; } + @Override + protected void changeState(State newState) { + super.changeState(newState); + if (newState == State.SEARCH_FOOTER) { + // on a decouvert un header + detectHeader = true; + } + } + public boolean wasTouched() { return touched; } + public boolean isDetectHeader() { + return detectHeader; + } + public void reset() { touched = false; + detectHeader = false; + state = State.SEARCH_HEADER; } }