001    package org.springframework.beans;
002    
003    import java.io.File;
004    import java.io.FileFilter;
005    import java.io.IOException;
006    import java.util.ArrayList;
007    import java.util.List;
008    
009    public class MisplacedXMLPrologDetector {
010    
011        public static void main(String[] args) {
012            new MisplacedXMLPrologDetector().exec(args);
013        }
014    
015        protected void exec(String[] args) {
016            try {
017                long beg = System.currentTimeMillis();
018                String dir = "c:/eclipse/sts/2.6.1/ide/ws/rice-trunk";
019                FileFilter exclude = new CommonIgnoresFilter();
020                FileFilter include = new FilenameContainsDotXFilter();
021                FileFilter problem = new MisplacedXMLPrologFilter();
022                List<File> files = getFiles(new File(dir), exclude, include);
023                System.out.println(files.size());
024                List<File> problemFiles = getProblemFiles(files, problem);
025                System.out.println(problemFiles.size());
026                for (int i = 0; i < problemFiles.size(); i++) {
027                    File problemFile = problemFiles.get(i);
028                    System.out.println(problemFile.getAbsolutePath());
029                }
030                long end = System.currentTimeMillis();
031                long elapsed = end - beg;
032                double seconds = elapsed / 1000D;
033                System.out.println(seconds);
034            } catch (Throwable t) {
035                t.printStackTrace();
036            }
037        }
038    
039        protected List<File> getProblemFiles(List<File> files, FileFilter problem) throws IOException {
040            List<File> problemFiles = new ArrayList<File>();
041            for (File file : files) {
042                if (problem.accept(file)) {
043                    problemFiles.add(file);
044                }
045            }
046            return problemFiles;
047        }
048    
049        protected List<File> getFiles(File dir, FileFilter exclude, FileFilter include) {
050            File[] contents = dir.listFiles();
051            List<File> files = new ArrayList<File>();
052            for (File file : contents) {
053                if (exclude.accept(file)) {
054                    continue;
055                }
056                if (file.isDirectory()) {
057                    files.addAll(getFiles(file, exclude, include));
058                } else {
059                    if (include.accept(file)) {
060                        files.add(file);
061                    }
062                }
063            }
064            return files;
065        }
066    }