From: Stephan R. <ste...@us...> - 2005-02-10 18:47:21
|
Update of /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24043/src/org/epic/debug Modified Files: LaunchConfigurationDialogCGI.java DebugModelPresentation.java LaunchConfigurationDelegate.java LaunchConfigurationCGIMainTab.java PerlDB.java CGITarget.java PerlBreakpoint.java PerlRegExpBreakpoint.java Target.java Added Files: CGILaunchConfigurationMainTab.java Log Message: Bugs 1114090, 1113336, 1113326 removed CGI Debug: use Perl files as startup files Check for compilation errors before starting debugger --- NEW FILE: CGILaunchConfigurationMainTab.java --- /******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ /** * @author ruehl * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ package org.epic.debug; //import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IEditorDescriptor; public class CGILaunchConfigurationMainTab extends AbstractLaunchConfigurationTab { /** * A launch configuration tab that displays and edits project and * main type name launch configuration attributes. * <p> * This class may be instantiated. This class is not intended to be subclassed. * </p> * @since 2.0 */ // Project UI widgets protected Label fProjLabel; protected Combo fProjText; protected Button fProjButton; // Main class UI widgets // protected Button fSearchButton; // protected Button fSearchExternalJarsCheckButton; // protected Button fStopInMainCheckButton; protected static final String EMPTY_STRING = ""; //$NON-NLS-1$ private static final String PERL_NATURE_ID = "org.epic.perleditor.perlnature"; /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(Composite) */ public void createControl(Composite parent) { Font font = parent.getFont(); Composite comp = new Composite(parent, SWT.NONE); setControl(comp); GridLayout topLayout = new GridLayout(); comp.setLayout(topLayout); GridData gd; createVerticalSpacer(comp, 1); Composite projComp = new Composite(comp, SWT.NONE); GridLayout projLayout = new GridLayout(); projLayout.numColumns = 2; projLayout.marginHeight = 0; projLayout.marginWidth = 0; projComp.setLayout(projLayout); gd = new GridData(GridData.FILL_HORIZONTAL); projComp.setLayoutData(gd); projComp.setFont(font); fProjLabel = new Label(projComp, SWT.NONE); fProjLabel.setText("&Project:"); //$NON-NLS-1$ gd = new GridData(); gd.horizontalSpan = 2; fProjLabel.setLayoutData(gd); fProjLabel.setFont(font); //fParamText = new Text(projComp, SWT.SINGLE | SWT.BORDER); fProjText = new Combo(projComp, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); gd = new GridData(GridData.FILL_HORIZONTAL); fProjText.setLayoutData(gd); fProjText.setFont(font); fProjText.setItems(getPerlProjects()); fProjText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent evt) { updateLaunchConfigurationDialog(); } }); } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(ILaunchConfiguration) */ public void initializeFrom(ILaunchConfiguration config) { updateProjectFromConfig(config); } protected void updateProjectFromConfig(ILaunchConfiguration config) { String projectName = ""; //$NON-NLS-1$ try { projectName = config.getAttribute( PerlLaunchConfigurationConstants.ATTR_PROJECT_NAME, EMPTY_STRING); } catch (CoreException ce) { PerlDebugPlugin.log(ce); } fProjText.setText(projectName); } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(ILaunchConfigurationWorkingCopy) */ public void performApply(ILaunchConfigurationWorkingCopy config) { config.setAttribute( PerlLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String) fProjText.getText()); } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#dispose() */ public void dispose() { } /** * Show a dialog that lists all main types */ protected void handleSearchButtonSelected() { /* IJavaProject javaProject = getJavaProject(); IJavaSearchScope searchScope = null; if ((javaProject == null) || !javaProject.exists()) { searchScope = SearchEngine.createWorkspaceScope(); } else { searchScope = SearchEngine.createJavaSearchScope(new IJavaElement[] {javaProject}, false); } int constraints = IJavaElementSearchConstants.CONSIDER_BINARIES; if (fSearchExternalJarsCheckButton.getSelection()) { constraints |= IJavaElementSearchConstants.CONSIDER_EXTERNAL_JARS; } Shell shell = getShell(); SelectionDialog dialog = JavaUI.createMainTypeDialog(shell, getLaunchConfigurationDialog(), searchScope, constraints, false, fMainText.getText()); dialog.setTitle(LauncherMessages.getString("JavaMainTab.Choose_Main_Type_11")); //$NON-NLS-1$ dialog.setMessage(LauncherMessages.getString("JavaMainTab.Choose_a_main_&type_to_launch__12")); //$NON-NLS-1$ if (dialog.open() == SelectionDialog.CANCEL) { return; } Object[] results = dialog.getResult(); if ((results == null) || (results.length < 1)) { return; } IType type = (IType)results[0]; if (type != null) { fMainText.setText(type.getFullyQualifiedName()); javaProject = type.getJavaProject(); fProjText.setText(javaProject.getElementName()); }*/ } /** * Show a dialog that lets the user select a project. This in turn provides * context for the main type, allowing the user to key a main type name, or * constraining the search for main types to the specified project. */ protected void handleProjectButtonSelected() { /* IJavaProject project = chooseJavaProject(); if (project == null) { return; } String projectName = project.getElementName(); fProjText.setText(projectName);*/ } /** * Realize a Java Project selection dialog and return the first selected project, * or null if there was none. */ protected IProject choosePerlProject() { IProject[] projects; try { // projects= JavaCore.create(getWorkspaceRoot()).getJavaProjects(); } catch (Exception e) { PerlDebugPlugin.log(e); // projects= new IJavaProject[0]; } /* ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT); ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), labelProvider); dialog.setTitle(LauncherMessages.getString("JavaMainTab.Project_Selection_13")); //$NON-NLS-1$ dialog.setMessage(LauncherMessages.getString("JavaMainTab.Choose_a_&project_to_constrain_the_search_for_main_types__14")); //$NON-NLS-1$ dialog.setElements(projects); IJavaProject javaProject = getJavaProject(); if (javaProject != null) { dialog.setInitialSelections(new Object[] { javaProject }); } if (dialog.open() == ElementListSelectionDialog.OK) { return (IJavaProject) dialog.getFirstResult(); }*/ return null; } /** * Convenience method to get the workspace root. */ private IWorkspaceRoot getWorkspaceRoot() { return ResourcesPlugin.getWorkspace().getRoot(); } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(ILaunchConfiguration) */ public boolean isValid(ILaunchConfiguration config) { setErrorMessage(null); setMessage(null); String name = fProjText.getText().trim(); if (name.length() > 0) { if (!ResourcesPlugin .getWorkspace() .getRoot() .getProject(name) .exists()) { setErrorMessage("Project does not exist"); //$NON-NLS-1$ return false; } } else { setErrorMessage("Specify Project"); //$NON-NLS-1$ return false; } return true; } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy) */ public void setDefaults(ILaunchConfigurationWorkingCopy config) { /* IJavaElement javaElement = getContext(); if (javaElement != null) { initializeJavaProject(javaElement, config); } else {*/ // We set empty attributes for project & main type so that when one config is // compared to another, the existence of empty attributes doesn't cause an // incorrect result (the performApply() method can result in empty values // for these attributes being set on a config if there is nothing in the // corresponding text boxes) config.setAttribute(PerlLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$ } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() */ public String getName() { return "Configuration"; //$NON-NLS-1$ } /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage() */ public Image getImage() { return ( PerlDebugPlugin.getDefaultDesciptorImageRegistry().get( PerlDebugImages.DESC_OBJS_LaunchTabMain)); } /** * Returns a String array whith all Perl projects * @return Stiring[] List of Perl projects */ private String[] getPerlProjects() { List projectList = new ArrayList(); IWorkspaceRoot workspaceRoot = PerlDebugPlugin.getWorkspace().getRoot(); IProject[] projects = workspaceRoot.getProjects(); for (int i = 0; i < projects.length; i++) { IProject project = projects[i]; try { if (project.exists() && project.hasNature(PERL_NATURE_ID)) { //System.out.println("Perl Project: " + project.getName()); projectList.add(project.getName()); } } catch (CoreException e) { e.printStackTrace(); } } return (String[]) projectList.toArray(new String[projectList.size()]); } } Index: LaunchConfigurationDialogCGI.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/LaunchConfigurationDialogCGI.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- LaunchConfigurationDialogCGI.java 20 May 2004 12:49:01 -0000 1.5 +++ LaunchConfigurationDialogCGI.java 10 Feb 2005 18:47:04 -0000 1.6 @@ -30,7 +30,7 @@ ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] { - new LaunchConfigurationCGIWebServerTab(),new LaunchConfigurationCGIEnvTab(), new LaunchConfigurationCGIBrowserTab(),new org.eclipse.debug.ui.CommonTab() + new CGILaunchConfigurationMainTab(), new LaunchConfigurationCGIWebServerTab(),new LaunchConfigurationCGIEnvTab(), new LaunchConfigurationCGIBrowserTab(),new org.eclipse.debug.ui.CommonTab() }; setTabs(tabs); } Index: Target.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/Target.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- Target.java 4 Jan 2005 15:40:55 -0000 1.14 +++ Target.java 10 Feb 2005 18:47:05 -0000 1.15 @@ -103,6 +103,8 @@ public String getJavaHome() { + + return (System.getProperty("java.home")); } Index: PerlDB.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/PerlDB.java,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- PerlDB.java 21 Jan 2005 15:51:11 -0000 1.37 +++ PerlDB.java 10 Feb 2005 18:47:04 -0000 1.38 @@ -304,7 +304,8 @@ DebugPlugin.getDefault().fireDebugEventSet(debugEvents); } } else - generateDebugTermEvent(); + //if (mTarget == null || ! (mTarget instanceof CGITarget)) + generateDebugTermEvent(); } /* @@ -709,8 +710,9 @@ } // System.out.println(currentOutput); - - if (finished == SESSION_TERMINATED) { + //System.out.println("\nCurrent DEBUGOUTPUT:\n" + currentOutput + // + "\n"); + if (finished == SESSION_TERMINATED) { abortSession(); return (false); } Index: PerlBreakpoint.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/PerlBreakpoint.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- PerlBreakpoint.java 27 Jun 2004 14:05:50 -0000 1.8 +++ PerlBreakpoint.java 10 Feb 2005 18:47:05 -0000 1.9 @@ -7,15 +7,30 @@ package org.epic.debug; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; import java.util.HashSet; import java.util.Iterator; import java.util.Set; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.model.Breakpoint; import org.eclipse.debug.core.model.IBreakpoint; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.editors.text.TextEditor; +import org.eclipse.ui.part.FileEditorInput; +import org.epic.core.util.FileUtilities; @@ -159,5 +174,83 @@ // attributes.put(RESOURCE_PATH,mResourcePath.toString()); // // } + + + public IDocument getDocument() + { + IDocument doc = null; + IWorkbench bench = PerlDebugPlugin.getDefault().getWorkbench(); + if (bench != null) { + IWorkbenchWindow window = bench.getActiveWorkbenchWindow(); + if (window != null) { + IWorkbenchPage page = window.getActivePage(); + if (page != null) { + FileEditorInput input = new FileEditorInput( + (IFile) getMarker().getResource()); + TextEditor editor = (TextEditor) page.findEditor(input); + doc = editor.getDocumentProvider().getDocument(input); + } + } + } + if( doc == null ){ + + + StringBuffer sourceCode = new StringBuffer(); + + int BUF_SIZE = 1024; + + // Get the file content + char[] buf = new char[BUF_SIZE]; + File inputFile = new File(getMarker().getResource().getLocation() + .toString()); + BufferedReader in; + try { + in = new BufferedReader(new FileReader(inputFile)); + + int read = 0; + while ((read = in.read(buf)) > 0) { + sourceCode.append(buf, 0, read); + } + in.close(); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + String line = null; + doc = new Document(sourceCode.toString()); + } + + return doc; + } + + public IEditorInput getEditorInput() + { + + IWorkbench bench = PerlDebugPlugin.getDefault().getWorkbench(); + if (bench != null) { + IWorkbenchWindow window = bench.getActiveWorkbenchWindow(); + if (window != null) { + IWorkbenchPage page = window.getActivePage(); + if (page != null) { + FileEditorInput input = new FileEditorInput( + (IFile) getMarker().getResource()); + return input; + } + } + } + + return FileUtilities.getFileEditorInput(getMarker().getResource().getLocation()); + + + + + + } + } Index: DebugModelPresentation.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/DebugModelPresentation.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- DebugModelPresentation.java 5 Jun 2004 14:07:54 -0000 1.12 +++ DebugModelPresentation.java 10 Feb 2005 18:47:04 -0000 1.13 @@ -193,8 +193,8 @@ */ public IEditorInput getEditorInput(Object element) { - IStorageEditorInput i; - StackFrame frame; + IEditorInput i; + StackFrame frame = null; IPath p; System.out.println( @@ -204,9 +204,10 @@ frame = (StackFrame) element; } else { - return (null); + if( element instanceof PerlBreakpoint ) + { return (((PerlBreakpoint) element).getEditorInput());} } - + if( frame == null) return null; p = frame.get_IP_Path(); /*IWorkspaceRoot myWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); IFile file; Index: CGITarget.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/CGITarget.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- CGITarget.java 24 Dec 2004 15:12:28 -0000 1.11 +++ CGITarget.java 10 Feb 2005 18:47:05 -0000 1.12 @@ -10,6 +10,7 @@ import java.util.Iterator; import java.util.List; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.debug.core.DebugEvent; @@ -55,6 +56,7 @@ private CGITarget mTarget; private IBrowser mBrowser; private CGIProxy mCGIProxy; + private String mHtmlRootFileRel ; /** * Constructor for DebugTarget. */ @@ -99,6 +101,8 @@ String htmlRootFile = null; String cgiRootDir = null; String cgiFileExtension = null; + String projectName = null; + IProject project; if (mDebug) { @@ -133,13 +137,17 @@ mLaunch.getLaunchConfiguration().getAttribute( PerlLaunchConfigurationConstants.ATTR_CGI_FILE_EXTENSION, (String) null); - + projectName = + mLaunch.getLaunchConfiguration().getAttribute( + PerlLaunchConfigurationConstants.ATTR_PROJECT_NAME, + (String) null); + } catch (CoreException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } - + project = PerlDebugPlugin.getWorkspace().getRoot().getProject(projectName); Path htmlDirPath = new Path(htmlRootDir); htmlRootDir = htmlDirPath.toString(); @@ -149,7 +157,7 @@ Path cgiDirPath = new Path(cgiRootDir); cgiRootDir = cgiDirPath.toString(); - String htmlRootFileRel = + mHtmlRootFileRel = htmlFilePath .setDevice(null) .removeFirstSegments(htmlDirPath.segments().length) @@ -162,6 +170,7 @@ /* start web-server */ /* create config file */ + brazilProps.append( "\ncgi.Debug=" + mDebug @@ -175,9 +184,9 @@ + "cgi.root=" + cgiRootDir + "\n" - + "file.default=" - + htmlRootFileRel - + "\n" +// + "file.default=" +// + htmlRootFileRel +// + "\n" + "cgi.executable=" + PerlExecutableUtilities.getPerlExecPath() + "\n" @@ -185,6 +194,14 @@ +"\n" + "cgi.DebugInclude="+" -I"+PerlDebugPlugin.getPlugInDir()); + List list = PerlExecutableUtilities.getPerlIncPath(project); + Iterator i = list.iterator(); + int x= 0; + while(i.hasNext()) + { + brazilProps.append("\ncgi.RunInclude["+x+"]="+i.next()); + ++x; + } if (mDebug) { @@ -282,7 +299,7 @@ { public void run() { - startBrowser(mWeberverPort); + startBrowser(mWeberverPort, mHtmlRootFileRel); } }); @@ -310,7 +327,8 @@ } } - void startBrowser(int fPort) + BrowserDescriptor[] browserDescr ; + void startBrowser(int fPort, String htmlRootFileRel) { String browserID = null; String browserPath = null; @@ -356,8 +374,15 @@ } return; } - BrowserDescriptor[] browserDescr = + Shell shell = PerlDebugPlugin.getActiveWorkbenchShell(); + if (shell != null) { + shell.getDisplay().syncExec(new Runnable() { + public void run() { + + browserDescr = BrowserManager.getInstance().getBrowserDescriptors(); + }});} + BrowserDescriptor descr; if (CustomBrowser.isCustomBrowserID(browserID)) @@ -380,7 +405,7 @@ try { - mBrowser.displayURL("http://localhost:" + fPort + "/"); + mBrowser.displayURL("http://localhost:" + fPort + "/"+ htmlRootFileRel); } catch (Exception e) { PerlDebugPlugin.getDefault().logError( @@ -448,6 +473,11 @@ public void run() { mTarget.startSession(); + if( mTarget.mPerlDB.isTerminated()) + { + mTarget.mPerlDB = null; + return; + } mLaunch.addDebugTarget(mTarget); ((DebugTarget) mTarget).getDebuger().generateDebugInitEvent(); getDebuger().generateDebugInitEvent(); @@ -558,4 +588,6 @@ return true; } + + } \ No newline at end of file Index: PerlRegExpBreakpoint.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/PerlRegExpBreakpoint.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- PerlRegExpBreakpoint.java 29 Jan 2005 14:18:06 -0000 1.4 +++ PerlRegExpBreakpoint.java 10 Feb 2005 18:47:05 -0000 1.5 @@ -232,26 +232,12 @@ private String getCurrentSourceLine() { - StringBuffer sourceCode = new StringBuffer(); - - int BUF_SIZE = 1024; + IDocument doc = getDocument(); - IWorkbench bench = PerlDebugPlugin.getDefault().getWorkbench(); - if ( bench == null ) - return null; - IWorkbenchWindow window = bench.getActiveWorkbenchWindow(); - if ( window == null ) - return null; - IWorkbenchPage page = window.getActivePage(); - if ( page == null ) - return null; - FileEditorInput input = new FileEditorInput((IFile)getMarker().getResource()); - TextEditor editor = (TextEditor) page.findEditor(input); - - IDocument doc = editor.getDocumentProvider().getDocument(input); + String line = null; - + try { int length = doc.getLineLength(getLineNumber() - 1); int offset = doc.getLineOffset(getLineNumber() - 1); Index: LaunchConfigurationCGIMainTab.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/LaunchConfigurationCGIMainTab.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- LaunchConfigurationCGIMainTab.java 15 Jan 2005 14:29:26 -0000 1.5 +++ LaunchConfigurationCGIMainTab.java 10 Feb 2005 18:47:04 -0000 1.6 @@ -20,8 +20,14 @@ //import java.lang.reflect.InvocationTargetException; import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; @@ -34,6 +40,8 @@ import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; @@ -41,6 +49,7 @@ import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; +import org.epic.debug.LaunchConfigurationMainTab.PerlProjectVisitor; public class LaunchConfigurationCGIMainTab extends AbstractLaunchConfigurationTab @@ -56,11 +65,7 @@ * @since 2.0 */ - private IntegerFieldEditor fDebugPort; - private DirectoryFieldEditor fCGIRootDir; - private DirectoryFieldEditor fHTMLRootDir; - private FileFieldEditor fHTMLRootFile; - // Project UI widgets + // protected Label fProjLabel; //protected Label fParamLabel; // protected Combo fProjText; @@ -68,8 +73,7 @@ // protected Text fParamText; // Main class UI widgets - protected Label fMainLabel; - protected Combo fMainText; + // protected Button fSearchButton; // protected Button fSearchExternalJarsCheckButton; // protected Button fStopInMainCheckButton; @@ -78,6 +82,8 @@ private static final String PERL_NATURE_ID = "org.epic.perleditor.perlnature"; + private Label fProjLabel; + private Combo fProjText; /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(Composite) @@ -103,82 +109,24 @@ layout.marginWidth = 0; gd = new GridData(GridData.FILL_HORIZONTAL); - Composite htmlRootDirComp = new Composite(comp, SWT.NONE); - htmlRootDirComp.setLayout(layout); - htmlRootDirComp.setLayoutData(gd); - htmlRootDirComp.setFont(font); - - fHTMLRootDir = - new DirectoryFieldEditor( - "Test", - "HTML Root Directory", - htmlRootDirComp); - fHTMLRootDir.fillIntoGrid(htmlRootDirComp, 3); - fHTMLRootDir.setPropertyChangeListener(this); - - createVerticalSpacer(comp, 1); - - layout = new GridLayout(); - layout.numColumns = 1; - layout.marginHeight = 0; - layout.marginWidth = 0; - gd = new GridData(GridData.FILL_HORIZONTAL); - - Composite htmlRootFileComp = new Composite(comp, SWT.NONE); - htmlRootFileComp.setLayout(layout); - htmlRootFileComp.setLayoutData(gd); - htmlRootFileComp.setFont(font); - - fHTMLRootFile = - new FileFieldEditor( - "Test", - "HTML Root File", - true, - htmlRootFileComp); - fHTMLRootFile.fillIntoGrid(htmlRootFileComp, 3); - fHTMLRootFile.setPropertyChangeListener(this); - - createVerticalSpacer(comp, 1); - layout = new GridLayout(); - layout.numColumns = 1; - layout.marginHeight = 0; - layout.marginWidth = 0; - gd = new GridData(GridData.FILL_HORIZONTAL); - - Composite cgiRootDirComp = new Composite(comp, SWT.NONE); - cgiRootDirComp.setLayout(layout); - cgiRootDirComp.setLayoutData(gd); - cgiRootDirComp.setFont(font); - - fCGIRootDir = - new DirectoryFieldEditor( - "Test", - "CGI Root Directory", - cgiRootDirComp); - fCGIRootDir.fillIntoGrid(cgiRootDirComp, 3); - - fCGIRootDir.setPropertyChangeListener(this); - - createVerticalSpacer(comp, 1); - - layout = new GridLayout(); - layout.numColumns = 1; - layout.marginHeight = 0; - layout.marginWidth = 0; + Composite projComp = new Composite(comp, SWT.NONE); + GridLayout projLayout = new GridLayout(); + projLayout.numColumns = 2; + projLayout.marginHeight = 0; + projLayout.marginWidth = 0; + projComp.setLayout(projLayout); gd = new GridData(GridData.FILL_HORIZONTAL); + projComp.setLayoutData(gd); + projComp.setFont(font); - Composite debugPortComp = new Composite(comp, SWT.NONE); - debugPortComp.setLayout(layout); - debugPortComp.setLayoutData(gd); - debugPortComp.setFont(font); - - fDebugPort = - new IntegerFieldEditor("Test", "Debugger Port", debugPortComp); - fDebugPort.fillIntoGrid(debugPortComp, 2); - fDebugPort.setValidRange(1,Integer.MAX_VALUE); + fProjLabel = new Label(projComp, SWT.NONE); + fProjLabel.setText("&Project:"); //$NON-NLS-1$ + gd = new GridData(); + gd.horizontalSpan = 2; + fProjLabel.setLayoutData(gd); + fProjLabel.setFont(font); - fDebugPort.setValidateStrategy(IntegerFieldEditor.VALIDATE_ON_KEY_STROKE); - fDebugPort.setPropertyChangeListener(this); + } /** @@ -194,24 +142,12 @@ { try { - fHTMLRootDir.setStringValue( + fProjText.setText( config.getAttribute( PerlLaunchConfigurationConstants.ATTR_HTML_ROOT_DIR, (String) null)); - fHTMLRootFile.setStringValue( - config.getAttribute( - PerlLaunchConfigurationConstants.ATTR_HTML_ROOT_FILE, - (String) null)); - fCGIRootDir.setStringValue( - config.getAttribute( - PerlLaunchConfigurationConstants.ATTR_CGI_ROOT_DIR, - (String) null)); - - fDebugPort.setStringValue( - config.getAttribute( - PerlLaunchConfigurationConstants.ATTR_DEBUG_PORT, - (String)null)); + } catch (CoreException e) { @@ -226,22 +162,8 @@ public void performApply(ILaunchConfigurationWorkingCopy config) { config.setAttribute( - PerlLaunchConfigurationConstants.ATTR_HTML_ROOT_DIR, - this.fHTMLRootDir.getStringValue()); - config.setAttribute( - PerlLaunchConfigurationConstants.ATTR_HTML_ROOT_FILE, - this.fHTMLRootFile.getStringValue()); - config.setAttribute( - PerlLaunchConfigurationConstants.ATTR_CGI_ROOT_DIR, - this.fCGIRootDir.getStringValue()); - config.setAttribute( - PerlLaunchConfigurationConstants.ATTR_DEBUG_PORT, - fDebugPort.getStringValue()); - config.setAttribute( - PerlLaunchConfigurationConstants.ATTR_DEBUG_CGI, - "OK"); - - + PerlLaunchConfigurationConstants.ATTR_PROJECT_NAME, + fProjText.getText()); } /** @@ -259,105 +181,13 @@ return ResourcesPlugin.getWorkspace().getRoot(); } - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(ILaunchConfiguration) - */ - public boolean isValid(ILaunchConfiguration config) - { - - setErrorMessage(null); - setMessage(null); - - String value = fHTMLRootDir.getStringValue(); - - if (value == null) - { - setErrorMessage("HTML Root Directory is missing"); //$NON-NLS-1$ - return false; - } - - File file = new File(value); - if (!file.exists() || !file.isDirectory()) - { - setErrorMessage("HTML Root Directory is invalid"); //$NON-NLS-1$ - return false; - } - - value = fHTMLRootFile.getStringValue(); - - if (value == null) - { - setErrorMessage("HTML Startup File is missing"); //$NON-NLS-1$ - return false; - } - - file = new File(value); - if (!file.exists() || !file.isFile()) - { - setErrorMessage("HTML Startup File is invalid"); //$NON-NLS-1$ - return false; - } - - if (value.indexOf(fHTMLRootDir.getStringValue()) != 0) - { - setErrorMessage("HTML Startup File must be located within HTML Root Directory (or one of its subfolders)"); //$NON-NLS-1$ - return false; - } - - value = fCGIRootDir.getStringValue(); - if (value == null) - { - setErrorMessage("CGI Root Directory is missing"); //$NON-NLS-1$ - return false; - } - - file = new File(value); - if (!file.exists() || !file.isDirectory()) - { - setErrorMessage("CGI Root Directory is invalid"); //$NON-NLS-1$ - return false; - } - - value = fDebugPort.getStringValue(); - if (value == null ) - { - setErrorMessage("Debug Port is missing"); //$NON-NLS-1$ - return false; - } - else { - try{ - - Integer.parseInt(value); - } - catch(Exception e) - { - setErrorMessage("Debug Port is invalid"); //$NON-NLS-1$ - return false; - } - } - - return true; - } - + /** * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy) */ public void setDefaults(ILaunchConfigurationWorkingCopy config) { - String root = - ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString(); - config.setAttribute(PerlLaunchConfigurationConstants.ATTR_CGI_ROOT_DIR, root); //$NON-NLS-1$ - config.setAttribute(PerlLaunchConfigurationConstants.ATTR_HTML_ROOT_DIR, root); //$NON-NLS-1$ - config.setAttribute(PerlLaunchConfigurationConstants.ATTR_HTML_ROOT_FILE, root); //$NON-NLS-1$ - config.setAttribute( - PerlLaunchConfigurationConstants.ATTR_DEBUG_PORT, - PerlDebugPlugin.getDefaultDebugPort()); - config.setAttribute( - PerlLaunchConfigurationConstants.ATTR_DEBUG_CGI, - "OK"); - config.setAttribute( - PerlLaunchConfigurationConstants.ATTR_CGI_ENV, - (Map)null); + config.setAttribute(PerlLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$ } @@ -422,17 +252,97 @@ */ public void propertyChange(PropertyChangeEvent event) { - if (event.getSource() == fHTMLRootDir) +// if (event.getSource() == fHTMLRootDir) +// { +// if (fHTMLRootFile +// .getStringValue() +// .indexOf(fHTMLRootDir.getStringValue()) +// != 0) +// fHTMLRootFile.setStringValue(fHTMLRootDir.getStringValue()); +// } +// +// updateLaunchConfigurationDialog(); + + } + + private String[] getDirs() + { + String projectName = fProjText.getText(); + + if (projectName == null || projectName.length() == 0) { - if (fHTMLRootFile - .getStringValue() - .indexOf(fHTMLRootDir.getStringValue()) - != 0) - fHTMLRootFile.setStringValue(fHTMLRootDir.getStringValue()); + return (new String[] { + }); } - updateLaunchConfigurationDialog(); + IWorkspaceRoot workspaceRoot = PerlDebugPlugin.getWorkspace().getRoot(); + IProject project = workspaceRoot.getProject(projectName); + IResourceVisitor visitor = new PerlProjectVisitor(); + try + { + project.accept(visitor); + } catch (CoreException e) + { + e.printStackTrace(); + } + return ((PerlProjectVisitor) visitor).getDirList(); + } + + class PerlProjectVisitor implements IResourceVisitor + { + private static final String PERL_EDITOR_ID = + "org.epic.perleditor.editors.PerlEditor"; + private static final String EMB_PERL_FILE_EXTENSION = "epl"; + + private List mDirList = new ArrayList(); + /* (non-Javadoc) + * @see org.eclipse.core.resources.IResourceVisitor#visit(org.eclipse.core.resources.IResource) + */ + public boolean visit(IResource resource) throws CoreException + { + if(resource instanceof IFolder) + + + { + mDirList.add( + resource.getFullPath().removeFirstSegments(1).toString()); + } + + return true; + } + + public String[] getDirList() + { + return (String[]) mDirList.toArray(new String[mDirList.size()]); + } } + /** + * Returns a String array whith all Perl projects + * @return Stiring[] List of Perl projects + */ + private String[] getPerlProjects() + { + List projectList = new ArrayList(); + IWorkspaceRoot workspaceRoot = PerlDebugPlugin.getWorkspace().getRoot(); + IProject[] projects = workspaceRoot.getProjects(); + for (int i = 0; i < projects.length; i++) + { + IProject project = projects[i]; + try + { + if (project.exists() && project.hasNature(PERL_NATURE_ID)) + { + //System.out.println("Perl Project: " + project.getName()); + projectList.add(project.getName()); + } + } catch (CoreException e) + { + e.printStackTrace(); + } -} \ No newline at end of file + } + return (String[]) projectList.toArray(new String[projectList.size()]); + } + +} Index: LaunchConfigurationDelegate.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/LaunchConfigurationDelegate.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- LaunchConfigurationDelegate.java 24 Dec 2004 15:12:14 -0000 1.10 +++ LaunchConfigurationDelegate.java 10 Feb 2005 18:47:04 -0000 1.11 @@ -1,11 +1,13 @@ package org.epic.debug; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchManager; +import org.eclipse.debug.core.Launch; import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; import org.epic.core.Constants; import org.epic.core.Perspective; @@ -19,7 +21,7 @@ * Window>Preferences>Java>Code Generation. */ public class LaunchConfigurationDelegate - implements ILaunchConfigurationDelegate + extends org.eclipse.debug.core.model.LaunchConfigurationDelegate { private ILaunchConfiguration mLaunchConfiguration; @@ -44,17 +46,25 @@ return DebugPlugin.getDefault().getLaunchManager(); } + /*org.eclipse.debug.core.model.ILaunchConfigurationDelegate2#getLaunch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String) + */ + public ILaunch getLaunch(ILaunchConfiguration configuration, String mode) throws CoreException { + return null; + } + /** * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate#launch(ILaunchConfiguration, String, ILaunch, IProgressMonitor) */ + public void launch( ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) + throws CoreException { - + //configuration.launch(mode,monitor); mLaunchConfiguration = configuration; mLaunch = launch; @@ -151,4 +161,37 @@ } + /** + * Returns the set of projects to use when searching for errors or <code>null</code> + * if no search is to be done. + * + * @param projects the list of projects to sort into build order + * @return a list of projects. + */ + protected IProject[] getProjectsForProblemSearch(ILaunchConfiguration configuration, String mode) throws CoreException { + String prjName=null; + try + { + + prjName = + configuration.getAttribute( + PerlLaunchConfigurationConstants.ATTR_PROJECT_NAME, + (String)null); + + + } catch (Exception ce) + { + PerlDebugPlugin.log(ce); + } + + if( prjName == null) return(null); + IProject p[]= new IProject[1]; + p[0]= + PerlDebugPlugin.getWorkspace().getRoot().getProject(prjName); + + + return p; + } + + } |