1 package org.apache.maven.plugins.shade.resource;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.ByteArrayInputStream;
23 import java.io.ByteArrayOutputStream;
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.util.HashMap;
27 import java.util.List;
28 import java.util.Map;
29 import java.util.jar.JarEntry;
30 import java.util.jar.JarOutputStream;
31 import java.util.regex.Pattern;
32
33 import org.apache.maven.plugins.shade.relocation.Relocator;
34 import org.codehaus.plexus.util.IOUtil;
35
36
37
38
39
40
41
42 public class ResourceBundleAppendingTransformer implements ResourceTransformer
43 {
44 private Map<String, ByteArrayOutputStream> dataMap = new HashMap<String, ByteArrayOutputStream>();
45
46 private Pattern resourceBundlePattern;
47
48
49
50
51 public void setBasename( String basename )
52 {
53 resourceBundlePattern = Pattern.compile( basename + "(_[a-zA-Z]+){0,3}\\.properties" );
54 }
55
56 public boolean canTransformResource( String r )
57 {
58 if ( resourceBundlePattern != null && resourceBundlePattern.matcher( r ).matches() )
59 {
60 return true;
61 }
62
63 return false;
64 }
65
66 public void processResource( String resource, InputStream is, List<Relocator> relocators )
67 throws IOException
68 {
69 ByteArrayOutputStream data = dataMap.get( resource );
70 if ( data == null )
71 {
72 data = new ByteArrayOutputStream();
73 dataMap.put( resource, data );
74 }
75
76 IOUtil.copy( is, data );
77 data.write( '\n' );
78 }
79
80 public boolean hasTransformedResource()
81 {
82 return !dataMap.isEmpty();
83 }
84
85 public void modifyOutputStream( JarOutputStream jos )
86 throws IOException
87 {
88 for ( Map.Entry<String, ByteArrayOutputStream> dataEntry : dataMap.entrySet() )
89 {
90 jos.putNextEntry( new JarEntry( dataEntry.getKey() ) );
91
92 IOUtil.copy( new ByteArrayInputStream( dataEntry.getValue().toByteArray() ), jos );
93 dataEntry.getValue().reset();
94 }
95 }
96
97 }