blob: 47ce99a0c8f0e61d9f4a0b27efc3aebd09ec06cb [file] [log] [blame]
package org.eclipse.wst.common.componentcore.internal.impl;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.URIConverterImpl;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
import org.eclipse.wst.common.componentcore.UnresolveableURIException;
import org.eclipse.wst.common.componentcore.internal.ComponentResource;
import org.eclipse.wst.common.componentcore.internal.StructureEdit;
import org.eclipse.wst.common.internal.emf.resource.MappedXMIHelper;
public class MappedComponentXMIHelper extends MappedXMIHelper {
public MappedComponentXMIHelper(XMLResource resource, Map prefixesToURIs) {
super(resource, prefixesToURIs);
// TODO Auto-generated constructor stub
}
public URI resolve(URI relative, URI base) {
URI resolved = null;
boolean isMapped = false;
ResourceSet set = getResource().getResourceSet();
if (set != null) {
URI localresourceURI = null;
if (relative.hasFragment())
localresourceURI = relative.trimFragment();
else
localresourceURI = relative;
isMapped = !(((URIConverterImpl.URIMap) set.getURIConverter().getURIMap()).getURI(localresourceURI).equals(localresourceURI));
}
if (!isMapped) {
String compName = null;
ComponentResource theResource = null;
URI compPath = relative;
StructureEdit se = null;
try {
se = StructureEdit.getStructureEditForRead(getProject());
theResource = se.findResourcesBySourcePath(WorkbenchResourceHelperBase.getPathInProject(getProject(),new Path(WorkbenchResourceHelperBase.getNonPlatformURIString(base))))[0];
if (theResource != null) {
compPath = URI.createURI((theResource.getComponent().findResourcesByRuntimePath(new Path(relative.path()))[0]).getSourcePath().toOSString());
if (set != null) {
resolved = set.getURIConverter().normalize(compPath);
}
}
} catch (UnresolveableURIException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (se != null)
se.dispose();
}
} else {
resolved = relative;
}
return resolved == null ? super.resolve(relative, base) : resolved;
}
private IProject getProject() {
return ((ProjectResourceSet)getResource().getResourceSet()).getProject();
}
}