package net.sourceforge.phpdt.internal.debug.ui;
+import java.util.Map;
+import java.util.Iterator;
+
+import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame;
+import net.sourceforge.phpdt.internal.launching.PHPLaunchConfigurationAttribute;
import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import net.sourceforge.phpeclipse.builder.ExternalEditorInput;
+import net.sourceforge.phpeclipse.builder.FileStorage;
+
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.model.IPersistableSourceLocator;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.ui.ISourcePresentation;
+//import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorInput;
+//import org.eclipse.ui.IEditorRegistry;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
-import net.sourceforge.phpdt.internal.launching.PHPLaunchConfigurationAttribute;
public class PHPSourceLocator implements IPersistableSourceLocator, ISourcePresentation {
private String absoluteWorkingDirectory;
+ private Map pathMap = null;
+ private boolean remoteDebug;
+ private IPath remoteSourcePath;
+ private String projectName;
public PHPSourceLocator() {
*/
public void initializeDefaults(ILaunchConfiguration configuration) throws CoreException {
this.absoluteWorkingDirectory = configuration.getAttribute(PHPLaunchConfigurationAttribute.WORKING_DIRECTORY, "");
+ this.remoteDebug=configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_DEBUG,false);
+ this.pathMap = configuration.getAttribute(PHPLaunchConfigurationAttribute.FILE_MAP, (Map)null);
+ this.projectName =configuration.getAttribute(PHPLaunchConfigurationAttribute.PROJECT_NAME, "");
+
+ if (Platform.getOS().equals(Platform.OS_WIN32))
+ this.remoteSourcePath= new Path((configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH, "")).toLowerCase());
+ else
+ this.remoteSourcePath= new Path(configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH, ""));
+
+// system.os.name
+
}
/**
* @see org.eclipse.debug.core.model.ISourceLocator#getSourceElement(IStackFrame)
*/
public Object getSourceElement(IStackFrame stackFrame) {
- return null;
- //return ((PHPStackFrame) stackFrame).getFileName();
+
+ String fileName=((PHPStackFrame) stackFrame).getFileName();
+ String file="";
+
+ if (remoteDebug)
+ {
+ IPath path = new Path(fileName);
+ if (remoteSourcePath.isPrefixOf(path))
+ {
+ IPath projectPath;
+ path=path.removeFirstSegments(remoteSourcePath.matchingFirstSegments(path));
+ file=path.toString();
+ projectPath=(PHPeclipsePlugin.getWorkspace().getRoot().getProject(projectName).getLocation());
+ return (projectPath.append(path)).toOSString();
+ }
+
+ if (pathMap == null) {
+ return fileName;
+ }
+ Iterator iterator = pathMap.keySet().iterator();
+ while (iterator.hasNext()) {
+ String local = (String) iterator.next();
+ IPath remotePath = new Path((String) pathMap.get(local));
+ if (remotePath.isPrefixOf(path)) {
+ path=path.removeFirstSegments(remotePath.matchingFirstSegments(path));
+ IPath localPath= new Path(local);
+ return localPath.append(path).toOSString();
+ }
+ }
+ return fileName;
+ } else {
+ return fileName;
+ }
}
/**
public IEditorInput getEditorInput(Object element) {
String filename = (String) element;
- IFile eclipseFile = PHPeclipsePlugin.getWorkspace().getRoot().getFileForLocation(new Path(filename));
- if (eclipseFile == null) {
- filename = this.getAbsoluteWorkingDirectory() + "/" + filename;
- eclipseFile = PHPeclipsePlugin.getWorkspace().getRoot().getFileForLocation(new Path(filename));
- if (eclipseFile == null) {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ IWorkbenchWindow window = workbench.getWorkbenchWindows()[0];
+ IWorkbenchPage page = window.getActivePage();
+ IPath path = new Path(filename);
+
+
+
+ // If the file exists in the workspace, open it
+ IFile eclipseFile = PHPeclipsePlugin.getWorkspace().getRoot().getFileForLocation(path);
+ // IFile eclipseFile = PHPeclipsePlugin.getWorkspace().getRoot().getFileForLocation(new Path(filename));
+// if (eclipseFile == null) {
+// filename = this.getAbsoluteWorkingDirectory() + "/" + filename;
+// eclipseFile = PHPeclipsePlugin.getWorkspace().getRoot().getFileForLocation(new Path(filename));
+// if (eclipseFile == null) {
+// PHPeclipsePlugin.log(IStatus.INFO, "Could not find file \"" + element + "\".");
+// return null;
+// }
+// } else
+ if (eclipseFile == null || !eclipseFile.exists()) {
+ // Otherwise open the stream directly
+ if (page == null) {
PHPeclipsePlugin.log(IStatus.INFO, "Could not find file \"" + element + "\".");
return null;
}
+ FileStorage storage = new FileStorage(path);
+ storage.setReadOnly();
+ // IEditorRegistry registry = workbench.getEditorRegistry();
+ // IEditorDescriptor desc = registry.getDefaultEditor(filename);
+ // if (desc == null) {
+ // desc = registry.getDefaultEditor();
+ // }
+ return new ExternalEditorInput(storage);
}
return new FileEditorInput(eclipseFile);