package org.objectstyle.wolips.eomodeler.core.model;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URL;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.objectstyle.wolips.baseforplugins.util.URLUtils;
public abstract class AbstractManifestEOModelGroupFactory implements IEOModelGroupFactory {
public boolean loadModelGroup(Object modelGroupResource, EOModelGroup modelGroup, Set<EOModelVerificationFailure> failures, boolean skipOnDuplicates, IProgressMonitor progressMonitor) throws EOModelException {
int previousModelCount = modelGroup.getModels().size();
try {
File modelGroupFile = null;
if (modelGroupResource == null) {
modelGroupFile = null;
} else if (modelGroupResource instanceof IResource) {
modelGroupFile = ((IResource) modelGroupResource).getLocation().toFile();
} else if (modelGroupResource instanceof File) {
modelGroupFile = (File) modelGroupResource;
} else if (modelGroupResource instanceof URL) {
modelGroupFile = URLUtils.cheatAndTurnIntoFile((URL) modelGroupResource);
} else if (modelGroupResource instanceof URI) {
modelGroupFile = URLUtils.cheatAndTurnIntoFile((URI) modelGroupResource);
} else {
throw new EOModelException("Unknown model resource: " + modelGroupResource);
}
List<ManifestSearchFolder> searchFolders = getSearchFolders(modelGroupFile);
if (searchFolders != null) {
LinkedHashSet<ManifestSearchFolder> uniqueSearchFolders = new LinkedHashSet<ManifestSearchFolder>(searchFolders);
boolean printedHeader = false;
for (ManifestSearchFolder searchFolder : uniqueSearchFolders) {
if (!printedHeader) {
System.out.println(getClass().getSimpleName() + ", Searching: ");
printedHeader = true;
}
System.out.println(" " + searchFolder);
modelGroup.loadModelsFromURL(searchFolder.getFolder().toURL(), searchFolder.getDepth(), failures, skipOnDuplicates, progressMonitor);
}
}
if (modelGroupFile != null && modelGroupFile.getName().endsWith(".eomodeld")) {
modelGroup.loadModelsFromURL(modelGroupFile.toURL(), 1, failures, skipOnDuplicates, progressMonitor);
}
} catch (IOException e) {
throw new EOModelException("Failed to load model groups.", e);
}
boolean allModelsLoaded = modelGroup.getModels().size() - previousModelCount > 1;
return allModelsLoaded;
}
public abstract List<ManifestSearchFolder> getSearchFolders(File selectedModelFolder) throws IOException, EOModelException;
}