package org.objectstyle.wolips.eomodeler.factories;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.objectstyle.wolips.eomodeler.core.model.AbstractManifestEOModelGroupFactory;
import org.objectstyle.wolips.eomodeler.core.model.ManifestSearchFolder;
public class SimpleManifestEOModelGroupFactory extends AbstractManifestEOModelGroupFactory {
@Override
public List<ManifestSearchFolder> getSearchFolders(File selectedModelFolder) throws IOException {
List<ManifestSearchFolder> searchFolders = new LinkedList<ManifestSearchFolder>();
fillInSearchFolders(new File(selectedModelFolder, "EntityModeler.modelpath"), searchFolders);
fillInSearchFolders(new File(selectedModelFolder, ".EntityModeler.modelpath"), searchFolders);
if (selectedModelFolder != null) {
for (File modelFolder = selectedModelFolder.getParentFile(); modelFolder != null; modelFolder = modelFolder.getParentFile()) {
fillInSearchFolders(new File(modelFolder, "EntityModeler.modelpath"), searchFolders);
fillInSearchFolders(new File(modelFolder, ".EntityModeler.modelpath"), searchFolders);
}
}
fillInSearchFolders(new File(System.getProperty("user.home"), "EntityModeler.modelpath"), searchFolders);
fillInSearchFolders(new File(System.getProperty("user.home"), ".EntityModeler.modelpath"), searchFolders);
fillInSearchFolders(new File(System.getProperty("user.home") + "/Library", "EntityModeler.modelpath"), searchFolders);
fillInSearchFolders(new File(System.getProperty("user.home") + "/Library", ".EntityModeler.modelpath"), searchFolders);
fillInSearchFolders(new File(System.getProperty("user.home") + "/Library/Preferences", "EntityModeler.modelpath"), searchFolders);
fillInSearchFolders(new File(System.getProperty("user.home") + "/Library/Preferences", ".EntityModeler.modelpath"), searchFolders);
return searchFolders;
}
protected int fillInSearchFolders(File baseFolder, String searchFolderPath, final List<ManifestSearchFolder> searchFolders) throws IOException {
int count = SimpleManifestUtilities.fillInSearchFolders(baseFolder, searchFolderPath, new SimpleManifestUtilities.SearchFolderDelegate() {
public void fileMatched(File file) throws IOException {
searchFolders.add(new ManifestSearchFolder(file.getAbsoluteFile()));
}
});
return count;
}
protected void fillInSearchFolders(File manifestFile, final List<ManifestSearchFolder> searchFolders) throws IOException {
if (manifestFile.exists()) {
BufferedReader manifestReader = new BufferedReader(new FileReader(manifestFile));
try {
String searchFolderPath;
while ((searchFolderPath = manifestReader.readLine()) != null) {
searchFolderPath = searchFolderPath.trim();
if (searchFolderPath.equals("") || searchFolderPath.startsWith("#")) {
continue;
}
if (searchFolderPath.contains(",")) {
for (String possibleFolderPath : searchFolderPath.split(",")) {
int count = fillInSearchFolders(manifestFile.getParentFile(), possibleFolderPath, searchFolders);
if (count > 0) {
break;
}
}
}
else {
fillInSearchFolders(manifestFile.getParentFile(), searchFolderPath, searchFolders);
}
}
} finally {
manifestReader.close();
}
}
}
}