package org.codehaus.mojo.shade.resource; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; public class ApacheNoticeResourceTransformer implements ResourceTransformer { Set entries = new HashSet(); String projectName; String preamble1 = "// ------------------------------------------------------------------\n" + "// NOTICE file corresponding to the section 4d of The Apache License,\n" + "// Version 2.0, in this case for "; String preamble2 = "\n// ------------------------------------------------------------------\n\n"; String preamble3 = "This product includes software developed at\n" + "Apache Software Foundation (http://www.apache.org/).\n"; String copyright; public boolean canTransformResource( String resource ) { String s = resource.toLowerCase(); if (s.equals( "meta-inf/notice.txt" ) || s.equals( "meta-inf/notice" ) ) { return true; } return false; } public void processResource( InputStream is ) throws IOException { copyright = projectName + "\nCopyright 2006-2007 Apache Software Foundation\n"; BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = reader.readLine(); StringBuffer sb = new StringBuffer(); while (line != null) { line = line.trim(); if (!line.startsWith("//")) { if (line.length() > 0) { sb.append(line).append("\n"); } else { entries.add(sb.toString()); sb = new StringBuffer(); } } line = reader.readLine(); } entries.remove(preamble3); entries.remove(copyright); } public boolean hasTransformedResource() { return true; } public void modifyOutputStream( JarOutputStream jos ) throws IOException { jos.putNextEntry( new JarEntry( "META-INF/NOTICE" ) ); OutputStreamWriter writer = new OutputStreamWriter(jos); writer.write(preamble1); writer.write(projectName); writer.write(preamble2); writer.write(copyright); writer.write("\n"); writer.write(preamble3); writer.write("\n"); for (Iterator itr = entries.iterator(); itr.hasNext();) { String line = (String) itr.next(); writer.append(line); writer.append('\n'); } writer.flush(); } }