package org.objectstyle.wolips.eomodeler.eclipse;
import java.net.URL;
import java.util.Set;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.JavaCore;
import org.objectstyle.wolips.baseforplugins.util.URLUtils;
import org.objectstyle.wolips.eomodeler.core.model.AbstractEOClassLoader;
import org.objectstyle.wolips.eomodeler.core.model.EOModel;
import org.objectstyle.wolips.eomodeler.utils.EclipseFileUtils;
import org.objectstyle.wolips.launching.actions.WOJavaApplicationLaunchShortcut;
public class EclipseEOClassLoaderFactory extends AbstractEOClassLoader {
@Override
protected String getCacheKey(EOModel model, Set<URL> classpathUrlSet) {
String cacheKey;
IProject project = null;
IFile eclipseFile = EclipseFileUtils.getEclipseFile(model.getModelURL());
if (eclipseFile != null) {
project = eclipseFile.getProject();
}
if (project != null) {
cacheKey = project.getName();
} else {
cacheKey = super.getCacheKey(model, classpathUrlSet);
}
return cacheKey;
}
@Override
protected void fillInDevelopmentClasspath(Set<URL> classpathUrls) throws Exception {
// AK: we don't want to re-jar each time we make a change....
// String workSpacePath =
// VariablesPlugin.getDefault().getWOProjectDevelopmentPath();
// if (workSpacePath != null) {
// URL classUrl = new URL("file://" + workSpacePath +
// "wolips/core/plugins/org.objectstyle.wolips.eomodeler.core/bin/");
// classpathUrls.add(classUrl);
// }
}
@Override
protected void fillInModelClasspath(EOModel model, Set<URL> classpathUrls) throws Exception {
IProject project = null;
IFile eclipseFile = EclipseFileUtils.getEclipseFile(model.getModelURL());
if (eclipseFile != null) {
project = eclipseFile.getProject();
}
if (project == null) {
URL modelURL = model.getModelURL();
if (modelURL != null) {
IContainer[] modelContainers = ResourcesPlugin.getWorkspace().getRoot().findContainersForLocation(new Path(URLUtils.cheatAndTurnIntoFile(modelURL).getAbsolutePath()));
// IContainer[] modelContainers =
// ResourcesPlugin.getWorkspace().getRoot().findContainersForLocation(new
// Path(modelURL.toString()));
for (int modelContainerNum = 0; modelContainerNum < modelContainers.length; modelContainerNum++) {
IContainer modelContainer = modelContainers[modelContainerNum];
IProject modelProject = modelContainer.getProject();
classpathUrls.addAll(WOJavaApplicationLaunchShortcut.createClasspathURLsForProject(JavaCore.create(modelProject)));
}
}
} else {
classpathUrls.addAll(WOJavaApplicationLaunchShortcut.createClasspathURLsForProject(JavaCore.create(project)));
}
}
}