package org.objectstyle.wolips.eomodeler.factories; import java.io.File; import java.io.IOException; public class SimpleManifestUtilities { public static interface SearchFolderDelegate { public void fileMatched(File file) throws IOException; } public static int fillInSearchFolders(File baseFolder, String pattern, SearchFolderDelegate delegate) throws IOException { int patternSegment; File finalBaseFolder; if (pattern.startsWith(File.separator)) { patternSegment = 1; finalBaseFolder = new File(File.separator); } else { patternSegment = 0; finalBaseFolder = baseFolder; } return SimpleManifestUtilities.fillInSearchFolders(finalBaseFolder, pattern.split(File.separator), patternSegment, delegate); } public static int fillInSearchFolders(File baseFile, String[] pattern, int patternSegment, SearchFolderDelegate delegate) throws IOException { int matchesFound = 0; if (patternSegment == pattern.length) { if (baseFile.exists()) { matchesFound ++; delegate.fileMatched(baseFile); } } else if (pattern[patternSegment].startsWith("*")) { File[] childrenFiles = baseFile.listFiles(); if (childrenFiles != null) { for (File childFile : childrenFiles) { if (pattern[patternSegment].length() == 1 || childFile.getName().endsWith(pattern[patternSegment].substring(1))) { matchesFound += fillInSearchFolders(childFile, pattern, patternSegment + 1, delegate); } } } } else { matchesFound += fillInSearchFolders(new File(baseFile, pattern[patternSegment]), pattern, patternSegment + 1, delegate); } return matchesFound; } }