View Javadoc

1   package net_alchim31_maven_yuicompressor;
2   
3   import java.io.File;
4   import java.io.FileInputStream;
5   import java.io.FileOutputStream;
6   import java.util.ArrayList;
7   import java.util.Arrays;
8   import java.util.List;
9   
10  import org.codehaus.plexus.util.DirectoryScanner;
11  import org.codehaus.plexus.util.IOUtil;
12  
13  public class Aggregation {
14      public File inputDir;
15      public File output;
16      public String[] includes;
17      public String[] excludes;
18      public boolean removeIncluded = false;
19      public boolean insertNewLine = false;
20      public boolean fixLastSemicolon = false;
21      
22      public void run() throws Exception {
23          defineInputDir();
24          List<File> files = getIncludedFiles();
25          if (files.size() != 0) {
26              output = output.getCanonicalFile();
27              output.getParentFile().mkdirs();
28              FileOutputStream out = new FileOutputStream(output);
29              try {
30                  for (File file : files) {
31                      if (file.getCanonicalPath().equals(output.getCanonicalPath())) {
32                          continue;
33                      }
34                      FileInputStream in = new FileInputStream(file);
35                      try {
36                          IOUtil.copy(in, out);
37                          if (fixLastSemicolon) {
38                          	out.write(';');
39                          }
40                          if (insertNewLine) {
41                              out.write('\n');
42                          }
43                      } finally {
44                          IOUtil.close(in);
45                          in = null;
46                      }
47                      if (removeIncluded) {
48                          file.delete();
49                      }
50                  }
51              } finally {
52                  IOUtil.close(out);
53                  out = null;
54              }
55          }
56      }
57  
58      private void defineInputDir() throws Exception {
59        if (inputDir == null) {
60          inputDir = output.getParentFile();
61        }
62        inputDir = inputDir.getCanonicalFile();
63      }
64      
65      private List<File> getIncludedFiles() throws Exception {
66          ArrayList<File> back = new ArrayList<File>();
67          if (includes != null) {
68              for (String include : includes) {
69                  addInto(include, back);
70              }
71          }
72          return back;
73      }
74  
75      private void addInto(String include, List<File> includedFiles) throws Exception {
76          if (include.indexOf('*') > -1) {
77              DirectoryScanner scanner = newScanner();
78              scanner.setIncludes(new String[] { include });
79              scanner.scan();
80              String[] rpaths = scanner.getIncludedFiles();
81              Arrays.sort(rpaths);
82              for (String rpath : rpaths) {
83                  File file = new File(scanner.getBasedir(), rpath);
84                  if (!includedFiles.contains(file)) {
85                      includedFiles.add(file);
86                  }
87              }
88          } else {
89              File file = new File(include);
90              if (!file.isAbsolute()) {
91                  file = new File(inputDir, include);
92              }
93              if (!includedFiles.contains(file)) {
94                  includedFiles.add(file);
95              }
96          }
97      }
98  
99      private DirectoryScanner newScanner() throws Exception {
100         DirectoryScanner scanner = new DirectoryScanner();
101         scanner.setBasedir(inputDir);
102         if ((excludes != null) && (excludes.length != 0)) {
103             scanner.setExcludes(excludes);
104         }
105         scanner.addDefaultExcludes();
106         return scanner;
107     }
108 }