You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2013/04/29 16:51:06 UTC

svn commit: r1477113 [6/18] - in /uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide: ./ core/ core/builder/ core/codeassist/ core/extensions/ core/packages/ core/parser/ core/search/ debug/ debug/ui/ debug/ui/handlers/ debug/ui...

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/RutaToggleBreakpointAdapter.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/RutaToggleBreakpointAdapter.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/RutaToggleBreakpointAdapter.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/RutaToggleBreakpointAdapter.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,191 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ruta.ide.debug.ui;
+
+import org.apache.uima.ruta.ide.debug.RutaDebugConstants;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.model.IBreakpoint;
+import org.eclipse.debug.core.model.ILineBreakpoint;
+import org.eclipse.dltk.debug.core.DLTKDebugPlugin;
+import org.eclipse.dltk.debug.ui.breakpoints.BreakpointUtils;
+import org.eclipse.dltk.debug.ui.breakpoints.ScriptToggleBreakpointAdapter;
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.dltk.ui.DLTKUIPlugin;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+public class RutaToggleBreakpointAdapter extends ScriptToggleBreakpointAdapter {
+  // Line breakpoints
+
+  @Override
+  protected String getDebugModelId() {
+    return RutaDebugConstants.DEBUG_MODEL_ID;
+  }
+
+  @Override
+  public boolean canToggleLineBreakpoints(IWorkbenchPart part, ISelection selection) {
+
+    return true;
+  }
+
+  @Override
+  public void toggleLineBreakpoints(IWorkbenchPart part, ISelection selection) throws CoreException {
+    if (selection instanceof ITextSelection) {
+      ITextEditor textEditor = getTextEditor(part);
+      ITextSelection textSelection = (ITextSelection) selection;
+      int lineNumber = textSelection.getStartLine() + 1; // one based
+
+      ILineBreakpoint breakpoint = BreakpointUtils.findLineBreakpoint(textEditor, lineNumber);
+      if (breakpoint != null) {
+        breakpoint.delete();
+        return;
+      }
+
+      if (textEditor instanceof ScriptEditor) {
+        ScriptEditor scriptEditor = (ScriptEditor) textEditor;
+        try {
+          IDocument doc = scriptEditor.getScriptSourceViewer().getDocument();
+
+          IRegion region = doc.getLineInformation(lineNumber - 1);
+          String string = doc.get(region.getOffset(), region.getLength());
+          int index = string.indexOf("function");
+          if (index != -1) {
+            string = string.substring(index + "function".length()).trim();
+            int apos = string.indexOf('(');
+            if (apos >= 0) {
+              string = string.substring(0, apos).trim();
+            }
+
+            BreakpointUtils.addMethodEntryBreakpoint(textEditor, lineNumber, string);
+
+            return;
+          }
+        } catch (BadLocationException e) {
+          DLTKDebugPlugin.log(e);
+          return;
+        }
+      }
+      // else
+      BreakpointUtils.addLineBreakpoint(textEditor, lineNumber);
+    }
+  }
+
+  // Method breakpoints
+  public boolean canToggleMethodBreakpoints(IWorkbenchPart part, ISelection selection) {
+    return false;
+  }
+
+  public void toggleMethodBreakpoints(IWorkbenchPart part, ISelection selection)
+          throws CoreException {
+
+  }
+
+  // Watchpoints
+  public boolean canToggleWatchpoints(IWorkbenchPart part, ISelection selection) {
+    if (selection instanceof ITextSelection) {
+      final ITextSelection textSelection = (ITextSelection) selection;
+      final String text = textSelection.getText();
+      if (part instanceof ScriptEditor) {
+        ScriptEditor scriptEditor = (ScriptEditor) part;
+        try {
+          IDocument doc = scriptEditor.getScriptSourceViewer().getDocument();
+          IRegion region = doc.getLineInformation(textSelection.getStartLine());
+          String string = doc.get(region.getOffset(), region.getLength());
+
+          return string.indexOf('=') != -1 || string.trim().startsWith("var ");
+        } catch (BadLocationException e) {
+          DLTKUIPlugin.log(e);
+        }
+      }
+
+      return text.indexOf("=") != -1;
+    }
+    return true;
+  }
+
+  public void toggleWatchpoints(IWorkbenchPart part, ISelection selection) throws CoreException {
+    if (selection instanceof ITextSelection) {
+      ITextEditor editor = getTextEditor(part);
+      ITextSelection textSelection = (ITextSelection) selection;
+      int lineNumber = textSelection.getStartLine() + 1; // one based
+
+      IResource resource = BreakpointUtils.getBreakpointResource(editor);
+      IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints();
+
+      for (int i = 0; i < breakpoints.length; i++) {
+        IBreakpoint breakpoint = breakpoints[i];
+        if (resource.equals(breakpoint.getMarker().getResource())) {
+          if (((ILineBreakpoint) breakpoint).getLineNumber() == lineNumber) {
+            breakpoint.delete(); // delete existing
+            // breakpoint
+            return;
+          }
+        }
+      }
+
+      if (editor instanceof ScriptEditor) {
+
+        try {
+          ScriptEditor scriptEditor = (ScriptEditor) editor;
+          IDocument doc = scriptEditor.getScriptSourceViewer().getDocument();
+          IRegion region = doc.getLineInformation(lineNumber - 1);
+          String string = doc.get(region.getOffset(), region.getLength());
+
+          int index = string.indexOf('=');
+          if (index != -1) {
+            string = string.substring(0, index);
+          }
+          index = string.lastIndexOf('.');
+          if (index != -1) {
+            string = string.substring(index + 1);
+          }
+          string = string.trim();
+          index = string.lastIndexOf(' ');
+          if (index != -1) {
+            string = string.substring(index + 1).trim();
+          }
+
+          if (string.endsWith(";")) {
+            string = string.substring(0, string.length() - 1);
+          }
+
+          BreakpointUtils.addWatchPoint(editor, lineNumber, string);
+        } catch (BadLocationException e) {
+          DLTKUIPlugin.log(e);
+        }
+      }
+    }
+  }
+
+  public void toggleBreakpoints(IWorkbenchPart part, ISelection selection) throws CoreException {
+    toggleLineBreakpoints(part, selection);
+  }
+
+  public boolean canToggleBreakpoints(IWorkbenchPart part, ISelection selection) {
+    return canToggleLineBreakpoints(part, selection);
+  }
+}

Modified: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleClassVariablesHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleClassVariablesHandler.java?rev=1477113&r1=1477112&r2=1477113&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleClassVariablesHandler.java (original)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleClassVariablesHandler.java Mon Apr 29 14:50:56 2013
@@ -17,10 +17,10 @@
  * under the License.
  */
 
-package org.apache.uima.textmarker.ide.debug.ui.handlers;
+package org.apache.uima.ruta.ide.debug.ui.handlers;
 
-import org.apache.uima.textmarker.ide.TextMarkerIdePlugin;
-import org.apache.uima.textmarker.ide.debug.TextMarkerDebugConstants;
+import org.apache.uima.ruta.ide.RutaIdePlugin;
+import org.apache.uima.ruta.ide.debug.RutaDebugConstants;
 import org.eclipse.dltk.debug.ui.handlers.AbstractToggleClassVariableHandler;
 import org.eclipse.dltk.ui.PreferencesAdapter;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -32,7 +32,7 @@ public class ToggleClassVariablesHandler
    */
   @Override
   protected String getModelId() {
-    return TextMarkerDebugConstants.DEBUG_MODEL_ID;
+    return RutaDebugConstants.DEBUG_MODEL_ID;
   }
 
   /*
@@ -40,6 +40,6 @@ public class ToggleClassVariablesHandler
    */
   @Override
   protected IPreferenceStore getPreferenceStore() {
-    return new PreferencesAdapter(TextMarkerIdePlugin.getDefault().getPluginPreferences());
+    return new PreferencesAdapter(RutaIdePlugin.getDefault().getPluginPreferences());
   }
 }

Modified: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleGlobalVariablesHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleGlobalVariablesHandler.java?rev=1477113&r1=1477112&r2=1477113&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleGlobalVariablesHandler.java (original)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleGlobalVariablesHandler.java Mon Apr 29 14:50:56 2013
@@ -17,10 +17,10 @@
  * under the License.
  */
 
-package org.apache.uima.textmarker.ide.debug.ui.handlers;
+package org.apache.uima.ruta.ide.debug.ui.handlers;
 
-import org.apache.uima.textmarker.ide.TextMarkerIdePlugin;
-import org.apache.uima.textmarker.ide.debug.TextMarkerDebugConstants;
+import org.apache.uima.ruta.ide.RutaIdePlugin;
+import org.apache.uima.ruta.ide.debug.RutaDebugConstants;
 import org.eclipse.dltk.debug.ui.handlers.AbstractToggleGlobalVariableHandler;
 import org.eclipse.dltk.ui.PreferencesAdapter;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -31,7 +31,7 @@ public class ToggleGlobalVariablesHandle
    */
   @Override
   protected String getModelId() {
-    return TextMarkerDebugConstants.DEBUG_MODEL_ID;
+    return RutaDebugConstants.DEBUG_MODEL_ID;
   }
 
   /*
@@ -39,6 +39,6 @@ public class ToggleGlobalVariablesHandle
    */
   @Override
   protected IPreferenceStore getPreferenceStore() {
-    return new PreferencesAdapter(TextMarkerIdePlugin.getDefault().getPluginPreferences());
+    return new PreferencesAdapter(RutaIdePlugin.getDefault().getPluginPreferences());
   }
 }

Modified: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleLocalVariablesHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleLocalVariablesHandler.java?rev=1477113&r1=1477112&r2=1477113&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleLocalVariablesHandler.java (original)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/handlers/ToggleLocalVariablesHandler.java Mon Apr 29 14:50:56 2013
@@ -17,10 +17,10 @@
  * under the License.
  */
 
-package org.apache.uima.textmarker.ide.debug.ui.handlers;
+package org.apache.uima.ruta.ide.debug.ui.handlers;
 
-import org.apache.uima.textmarker.ide.TextMarkerIdePlugin;
-import org.apache.uima.textmarker.ide.debug.TextMarkerDebugConstants;
+import org.apache.uima.ruta.ide.RutaIdePlugin;
+import org.apache.uima.ruta.ide.debug.RutaDebugConstants;
 import org.eclipse.dltk.debug.ui.handlers.AbstractToggleLocalVariableHandler;
 import org.eclipse.dltk.ui.PreferencesAdapter;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -32,7 +32,7 @@ public class ToggleLocalVariablesHandler
    */
   @Override
   protected String getModelId() {
-    return TextMarkerDebugConstants.DEBUG_MODEL_ID;
+    return RutaDebugConstants.DEBUG_MODEL_ID;
   }
 
   /*
@@ -40,6 +40,6 @@ public class ToggleLocalVariablesHandler
    */
   @Override
   protected IPreferenceStore getPreferenceStore() {
-    return new PreferencesAdapter(TextMarkerIdePlugin.getDefault().getPluginPreferences());
+    return new PreferencesAdapter(RutaIdePlugin.getDefault().getPluginPreferences());
   }
 }

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/AddRutaInterpreterDialog.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/AddRutaInterpreterDialog.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/AddRutaInterpreterDialog.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/AddRutaInterpreterDialog.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ruta.ide.debug.ui.interpreters;
+
+import org.eclipse.dltk.internal.debug.ui.interpreters.AbstractInterpreterLibraryBlock;
+import org.eclipse.dltk.internal.debug.ui.interpreters.AddScriptInterpreterDialog;
+import org.eclipse.dltk.internal.debug.ui.interpreters.IAddInterpreterDialogRequestor;
+import org.eclipse.dltk.launching.IInterpreterInstall;
+import org.eclipse.dltk.launching.IInterpreterInstallType;
+import org.eclipse.swt.widgets.Shell;
+
+public class AddRutaInterpreterDialog extends AddScriptInterpreterDialog {
+  public AddRutaInterpreterDialog(IAddInterpreterDialogRequestor requestor, Shell shell,
+          IInterpreterInstallType[] interpreterInstallTypes, IInterpreterInstall editedInterpreter) {
+    super(requestor, shell, interpreterInstallTypes, editedInterpreter);
+  }
+
+  @Override
+  protected AbstractInterpreterLibraryBlock createLibraryBlock(AddScriptInterpreterDialog dialog) {
+    return new RutaInterpreterLibraryBlock(dialog);
+  }
+
+  @Override
+  protected boolean useInterpreterArgs() {
+    return false;
+  }
+
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterComboBlock.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterComboBlock.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterComboBlock.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterComboBlock.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ruta.ide.debug.ui.interpreters;
+
+import org.eclipse.dltk.internal.debug.ui.interpreters.AbstractInterpreterComboBlock;
+import org.eclipse.dltk.internal.debug.ui.interpreters.IInterpreterComboBlockContext;
+import org.eclipse.jface.preference.IPreferencePage;
+
+public class RutaInterpreterComboBlock extends AbstractInterpreterComboBlock {
+
+  public RutaInterpreterComboBlock(IInterpreterComboBlockContext context) {
+    super(context);
+  }
+
+  @Override
+  protected void showInterpreterPreferencePage() {
+    IPreferencePage page = new RutaInterpreterPreferencePage();
+  }
+
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterContainerWizardPage.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterContainerWizardPage.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterContainerWizardPage.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterContainerWizardPage.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ruta.ide.debug.ui.interpreters;
+
+import org.apache.uima.ruta.ide.core.RutaNature;
+import org.eclipse.dltk.internal.debug.ui.interpreters.AbstractInterpreterContainerWizardPage;
+
+public class RutaInterpreterContainerWizardPage extends
+        AbstractInterpreterContainerWizardPage {
+
+
+  @Override
+  public String getScriptNature() {
+    return RutaNature.NATURE_ID;
+  }
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterLibraryBlock.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterLibraryBlock.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterLibraryBlock.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterLibraryBlock.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.ide.debug.ui.interpreters;
+
+import org.apache.uima.ruta.ide.RutaIdePlugin;
+import org.eclipse.dltk.internal.debug.ui.interpreters.AbstractInterpreterLibraryBlock;
+import org.eclipse.dltk.internal.debug.ui.interpreters.AddScriptInterpreterDialog;
+import org.eclipse.dltk.internal.debug.ui.interpreters.LibraryLabelProvider;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+
+/**
+ * Control used to edit the libraries associated with a Interpreter install
+ */
+public class RutaInterpreterLibraryBlock extends AbstractInterpreterLibraryBlock {
+
+  public RutaInterpreterLibraryBlock(AddScriptInterpreterDialog d) {
+    super(d);
+  }
+
+  @Override
+  protected IBaseLabelProvider getLabelProvider() {
+    return new LibraryLabelProvider();
+  }
+
+  @Override
+  protected IDialogSettings getDialogSettions() {
+    return RutaIdePlugin.getDefault().getDialogSettings();
+  }
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterPreferencePage.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterPreferencePage.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterPreferencePage.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterPreferencePage.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ruta.ide.debug.ui.interpreters;
+
+import org.eclipse.dltk.internal.debug.ui.interpreters.InterpretersBlock;
+import org.eclipse.dltk.internal.debug.ui.interpreters.ScriptInterpreterPreferencePage;
+
+public class RutaInterpreterPreferencePage extends ScriptInterpreterPreferencePage {
+
+  @Override
+  public InterpretersBlock createInterpretersBlock() {
+    return new RutaInterpretersBlock();
+  }
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterTab.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterTab.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterTab.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpreterTab.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ruta.ide.debug.ui.interpreters;
+
+import org.eclipse.dltk.debug.ui.launchConfigurations.IMainLaunchConfigurationTab;
+import org.eclipse.dltk.debug.ui.launchConfigurations.InterpreterTab;
+import org.eclipse.dltk.internal.debug.ui.interpreters.AbstractInterpreterComboBlock;
+import org.eclipse.dltk.internal.debug.ui.interpreters.IInterpreterComboBlockContext;
+
+public class RutaInterpreterTab extends InterpreterTab {
+
+   public RutaInterpreterTab(IMainLaunchConfigurationTab mainTab) {
+    super(mainTab);
+  }
+
+  @Override
+  protected AbstractInterpreterComboBlock createInterpreterBlock(
+      IInterpreterComboBlockContext context) {
+    return new RutaInterpreterComboBlock(context);
+  }
+
+  @Override
+  protected void refreshInterpreters() {
+//    ((RutaInterpreterComboBlock) fInterpreterBlock)
+//        .initialize(getScriptProject());
+    super.refreshInterpreters();
+  }
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpretersBlock.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpretersBlock.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpretersBlock.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/interpreters/RutaInterpretersBlock.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ruta.ide.debug.ui.interpreters;
+
+import org.apache.uima.ruta.ide.core.RutaNature;
+import org.eclipse.dltk.internal.debug.ui.interpreters.AddScriptInterpreterDialog;
+import org.eclipse.dltk.internal.debug.ui.interpreters.InterpretersBlock;
+import org.eclipse.dltk.launching.IInterpreterInstall;
+import org.eclipse.dltk.launching.ScriptRuntime;
+
+public class RutaInterpretersBlock extends InterpretersBlock {
+  @Override
+  protected AddScriptInterpreterDialog createInterpreterDialog(IInterpreterInstall standin) {
+    AddRutaInterpreterDialog dialog = new AddRutaInterpreterDialog(this, getShell(),
+            ScriptRuntime.getInterpreterInstallTypes(getCurrentNature()), standin);
+    return dialog;
+  }
+
+  @Override
+  protected String getCurrentNature() {
+    return RutaNature.NATURE_ID;
+  }
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaArgumentsTab.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaArgumentsTab.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaArgumentsTab.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaArgumentsTab.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ruta.ide.debug.ui.launchConfiguration;
+
+import org.eclipse.dltk.debug.ui.launchConfigurations.ScriptArgumentsTab;
+import org.eclipse.dltk.internal.debug.ui.launcher.InterpreterArgumentsBlock;
+
+public class RutaArgumentsTab extends ScriptArgumentsTab {
+
+  @Override
+  protected InterpreterArgumentsBlock createInterpreterArgsBlock() {
+    return null;
+  }
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaCommonTab.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaCommonTab.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaCommonTab.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaCommonTab.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,1050 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.ide.debug.ui.launchConfiguration;
+
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.uima.ruta.ide.RutaIdePlugin;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.variables.VariablesPlugin;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
+import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
+import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager;
+import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsMessages;
+import org.eclipse.debug.internal.ui.launchConfigurations.LaunchGroupExtension;
+import org.eclipse.debug.internal.ui.launchConfigurations.LaunchHistory;
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
+import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.debug.ui.ILaunchGroup;
+import org.eclipse.debug.ui.StringVariableSelectionDialog;
+import org.eclipse.dltk.core.environment.EnvironmentManager;
+import org.eclipse.dltk.core.environment.IExecutionEnvironment;
+import org.eclipse.dltk.core.environment.IFileHandle;
+import org.eclipse.dltk.internal.ui.util.SWTUtil;
+import org.eclipse.dltk.launching.ScriptLaunchConfigurationConstants;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+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.Control;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.WorkbenchEncoding;
+import org.eclipse.ui.dialogs.ContainerSelectionDialog;
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+import org.eclipse.ui.ide.IDEEncoding;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.views.navigator.ResourceSorter;
+
+/**
+ * Launch configuration tab used to specify the location a launch configuration is stored in,
+ * whether it should appear in the favorites list, and perspective switching behavior for an
+ * associated launch.
+ * <p>
+ * Clients may instantiate this class. This class is not intended to be subclassed.
+ * </p>
+ * 
+ * 
+ */
+public class RutaCommonTab extends AbstractLaunchConfigurationTab {
+
+  /**
+   * Provides a persistable dialog for selecting the shared project location
+   */
+  class SharedLocationSelectionDialog extends ContainerSelectionDialog {
+    private final String SETTINGS_ID = IDebugUIConstants.PLUGIN_ID
+            + ".SHARED_LAUNCH_CONFIGURATON_DIALOG"; //$NON-NLS-1$
+
+    public SharedLocationSelectionDialog(Shell parentShell, IContainer initialRoot,
+            boolean allowNewContainerName, String message) {
+      super(parentShell, initialRoot, allowNewContainerName, message);
+    }
+
+    @Override
+    protected IDialogSettings getDialogBoundsSettings() {
+      IDialogSettings settings = DebugUIPlugin.getDefault().getDialogSettings();
+      IDialogSettings section = settings.getSection(SETTINGS_ID);
+      if (section == null) {
+        section = settings.addNewSection(SETTINGS_ID);
+      }
+      return section;
+    }
+  }
+
+  private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+  // Local/shared UI widgets
+  private Button fLocalRadioButton;
+
+  private Button fSharedRadioButton;
+
+  private Text fSharedLocationText;
+
+  private Button fSharedLocationButton;
+
+  private Button fLaunchInBackgroundButton;
+
+  private Button fDefaultEncodingButton;
+
+  private Button fAltEncodingButton;
+
+  private Combo fEncodingCombo;
+
+  private Button fConsoleOutput;
+
+  private Button fFileOutput;
+
+  private Button fFileBrowse;
+
+  private Text fFileText;
+
+  private Button fVariables;
+
+  private Button fAppend;
+
+  private Button fWorkspaceBrowse;
+
+  private Button fUseDltkRadio;
+
+  private Button fNotUseDltkRatio;
+
+  /**
+   * Check box list for specifying favorites
+   */
+  private CheckboxTableViewer fFavoritesTable;
+
+  /**
+   * Modify listener that simply updates the owning launch configuration dialog.
+   */
+  private ModifyListener fBasicModifyListener = new ModifyListener() {
+    public void modifyText(ModifyEvent evt) {
+      updateLaunchConfigurationDialog();
+    }
+  };
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see
+   * org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
+   */
+  public void createControl(Composite parent) {
+    Composite comp = new Composite(parent, SWT.NONE);
+    setControl(comp);
+    PlatformUI.getWorkbench().getHelpSystem()
+            .setHelp(getControl(), IDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_COMMON_TAB);
+    comp.setLayout(new GridLayout(2, true));
+    comp.setFont(parent.getFont());
+
+    createSharedConfigComponent(comp);
+    createFavoritesComponent(comp);
+    createEncodingComponent(comp);
+    createOutputCaptureComponent(comp);
+    createLaunchInBackgroundComponent(comp);
+  }
+
+  /**
+   * Creates the favorites control
+   * 
+   * @param parent
+   *          the parent composite to add this one to
+   * 
+   */
+  private void createFavoritesComponent(Composite parent) {
+    Group favComp = SWTUtil.createGroup(parent,
+            LaunchConfigurationsMessages.CommonTab_Display_in_favorites_menu__10, 1, 1,
+            GridData.FILL_BOTH);
+    fFavoritesTable = CheckboxTableViewer.newCheckList(favComp, SWT.CHECK | SWT.BORDER | SWT.MULTI
+            | SWT.FULL_SELECTION);
+    Control table = fFavoritesTable.getControl();
+    GridData gd = new GridData(GridData.FILL_BOTH);
+    table.setLayoutData(gd);
+    table.setFont(parent.getFont());
+    fFavoritesTable.setContentProvider(new FavoritesContentProvider());
+    fFavoritesTable.setLabelProvider(new FavoritesLabelProvider());
+    fFavoritesTable.addCheckStateListener(new ICheckStateListener() {
+      public void checkStateChanged(CheckStateChangedEvent event) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+  }
+
+  /**
+   * Creates the shared config component
+   * 
+   * @param parent
+   *          the parent composite to add this component to
+   * 
+   */
+  private void createSharedConfigComponent(Composite parent) {
+    Group group = SWTUtil.createGroup(parent, LaunchConfigurationsMessages.CommonTab_0, 3, 2,
+            GridData.FILL_HORIZONTAL);
+    fLocalRadioButton = createRadioButton(group, LaunchConfigurationsMessages.CommonTab_L_ocal_3);
+    GridData gd = new GridData();
+    gd.horizontalSpan = 3;
+    fLocalRadioButton.setLayoutData(gd);
+    fSharedRadioButton = createRadioButton(group, LaunchConfigurationsMessages.CommonTab_S_hared_4);
+    fSharedRadioButton.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent evt) {
+        handleSharedRadioButtonSelected();
+      }
+    });
+    fSharedLocationText = SWTUtil.createSingleText(group, 1);
+    fSharedLocationText.addModifyListener(fBasicModifyListener);
+    fSharedLocationButton = createPushButton(group,
+            LaunchConfigurationsMessages.CommonTab__Browse_6, null);
+    fSharedLocationButton.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent evt) {
+        handleSharedLocationButtonSelected();
+      }
+    });
+
+    fLocalRadioButton.setSelection(true);
+    setSharedEnabled(false);
+  }
+
+  /**
+   * Creates the component set for the capture output composite
+   * 
+   * @param data
+   *          .parent the parent to add this component to
+   */
+
+  private void test() {
+
+  }
+
+  private void createOutputCaptureComponent(Composite parent) {
+    Group group = SWTUtil.createGroup(parent, "Input and Output", 1, 2, GridData.FILL_HORIZONTAL);
+
+    fUseDltkRadio = createRadioButton(group, "Use DLTK Input and Output");
+    fUseDltkRadio.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+
+    fNotUseDltkRatio = createRadioButton(group, "Use Standard Input and Output");
+    fNotUseDltkRatio.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+
+    Group standardGroup = SWTUtil.createGroup(group, "", 5, 2, GridData.FILL_HORIZONTAL);
+
+    fConsoleOutput = createCheckButton(standardGroup, LaunchConfigurationsMessages.CommonTab_5);
+    GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false);
+    gd.horizontalSpan = 5;
+    fConsoleOutput.setLayoutData(gd);
+    fConsoleOutput.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+
+    fFileOutput = createCheckButton(standardGroup, LaunchConfigurationsMessages.CommonTab_6);
+    fFileOutput.setLayoutData(new GridData(SWT.BEGINNING, SWT.NORMAL, false, false));
+    fFileOutput.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        enableOuputCaptureWidgets(fFileOutput.getSelection());
+        updateLaunchConfigurationDialog();
+      }
+    });
+    fFileText = SWTUtil.createSingleText(standardGroup, 4);
+    fFileText.addModifyListener(fBasicModifyListener);
+
+    SWTUtil.createLabel(standardGroup, EMPTY_STRING, 2);
+
+    fWorkspaceBrowse = createPushButton(standardGroup, LaunchConfigurationsMessages.CommonTab_12,
+            null);
+    fWorkspaceBrowse.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(),
+                new WorkbenchLabelProvider(), new WorkbenchContentProvider());
+        dialog.setTitle(LaunchConfigurationsMessages.CommonTab_13);
+        dialog.setMessage(LaunchConfigurationsMessages.CommonTab_14);
+        dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
+        dialog.setSorter(new ResourceSorter(ResourceSorter.NAME));
+        if (dialog.open() == IDialogConstants.OK_ID) {
+          IResource resource = (IResource) dialog.getFirstResult();
+          String arg = resource.getFullPath().toString();
+          String fileLoc = VariablesPlugin.getDefault().getStringVariableManager()
+                  .generateVariableExpression("workspace_loc", arg); //$NON-NLS-1$
+          fFileText.setText(fileLoc);
+        }
+      }
+    });
+    fFileBrowse = createPushButton(standardGroup, LaunchConfigurationsMessages.CommonTab_7, null);
+    fFileBrowse.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        String filePath = fFileText.getText();
+        FileDialog dialog = new FileDialog(getShell(), SWT.SAVE);
+        filePath = dialog.open();
+        if (filePath != null) {
+          fFileText.setText(filePath);
+        }
+      }
+    });
+    fVariables = createPushButton(standardGroup, LaunchConfigurationsMessages.CommonTab_9, null);
+    fVariables.addSelectionListener(new SelectionListener() {
+      public void widgetSelected(SelectionEvent e) {
+        StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
+        dialog.open();
+        String variable = dialog.getVariableExpression();
+        if (variable != null) {
+          fFileText.insert(variable);
+        }
+      }
+
+      public void widgetDefaultSelected(SelectionEvent e) {
+      }
+    });
+    fAppend = createCheckButton(standardGroup, LaunchConfigurationsMessages.CommonTab_11);
+    gd = new GridData(SWT.LEFT, SWT.TOP, true, false);
+    gd.horizontalSpan = 4;
+    fAppend.setLayoutData(gd);
+    fAppend.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+  }
+
+  /**
+   * Enables or disables the output capture widgets based on the the specified enablement
+   * 
+   * @param enable
+   *          if the output capture widgets should be enabled or not
+   * 
+   */
+  private void enableOuputCaptureWidgets(boolean enable) {
+    fFileText.setEnabled(enable);
+    fFileBrowse.setEnabled(enable);
+    fWorkspaceBrowse.setEnabled(enable);
+    fVariables.setEnabled(enable);
+    fAppend.setEnabled(enable);
+  }
+
+  /**
+   * Creates the encoding component
+   * 
+   * @param parent
+   *          the parent to add this composite to
+   */
+  private void createEncodingComponent(Composite parent) {
+    List allEncodings = IDEEncoding.getIDEEncodings();
+    String defaultEncoding = WorkbenchEncoding.getWorkbenchDefaultEncoding();
+    Group group = SWTUtil.createGroup(parent, LaunchConfigurationsMessages.CommonTab_1, 2, 1,
+            GridData.FILL_BOTH);
+
+    fDefaultEncodingButton = createRadioButton(group, MessageFormat.format(
+            LaunchConfigurationsMessages.CommonTab_2, new String[] { defaultEncoding }));
+    GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false);
+    gd.horizontalSpan = 2;
+    fDefaultEncodingButton.setLayoutData(gd);
+
+    fAltEncodingButton = createRadioButton(group, LaunchConfigurationsMessages.CommonTab_3);
+    fAltEncodingButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+    fEncodingCombo = new Combo(group, SWT.READ_ONLY);
+    fEncodingCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    fEncodingCombo.setFont(parent.getFont());
+    String[] encodingArray = (String[]) allEncodings.toArray(new String[0]);
+    fEncodingCombo.setItems(encodingArray);
+    if (encodingArray.length > 0) {
+      fEncodingCombo.select(0);
+    }
+    SelectionListener listener = new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        updateLaunchConfigurationDialog();
+        fEncodingCombo.setEnabled(fAltEncodingButton.getSelection() == true);
+      }
+    };
+    fAltEncodingButton.addSelectionListener(listener);
+    fDefaultEncodingButton.addSelectionListener(listener);
+    fEncodingCombo.addSelectionListener(listener);
+  }
+
+  /**
+   * Creates the controls needed to edit the launch in background attribute of an external tool
+   * 
+   * @param parent
+   *          the composite to create the controls in
+   */
+  protected void createLaunchInBackgroundComponent(Composite parent) {
+    fLaunchInBackgroundButton = createCheckButton(parent, LaunchConfigurationsMessages.CommonTab_10);
+    GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+    data.horizontalSpan = 2;
+    fLaunchInBackgroundButton.setLayoutData(data);
+    fLaunchInBackgroundButton.setFont(parent.getFont());
+    fLaunchInBackgroundButton.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void widgetSelected(SelectionEvent e) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+  }
+
+  /**
+   * handles the shared radio button being selected
+   */
+  private void handleSharedRadioButtonSelected() {
+    setSharedEnabled(isShared());
+    updateLaunchConfigurationDialog();
+  }
+
+  /**
+   * Sets the widgets for specifying that a launch configuration is to be shared to the enable value
+   * 
+   * @param enable
+   *          the enabled value for
+   */
+  private void setSharedEnabled(boolean enable) {
+    fSharedLocationText.setEnabled(enable);
+    fSharedLocationButton.setEnabled(enable);
+  }
+
+  private String getDefaultSharedConfigLocation(ILaunchConfiguration config) {
+    String path = EMPTY_STRING;
+    try {
+      IResource[] res = config.getMappedResources();
+      if (res != null) {
+        IProject proj;
+        for (int i = 0; i < res.length; i++) {
+          proj = res[i].getProject();
+          if (proj.isAccessible()) {
+            return proj.getFullPath().toOSString();
+          }
+        }
+      }
+    } catch (CoreException e) {
+      DebugUIPlugin.log(e);
+    }
+    return path;
+  }
+
+  /**
+   * if the shared radio button is selected, indicating that the launch configuration is to be
+   * shared
+   * 
+   * @return true if the radio button is selected, false otherwise
+   */
+  private boolean isShared() {
+    return fSharedRadioButton.getSelection();
+  }
+
+  /**
+   * Handles the shared location button being selected
+   */
+  private void handleSharedLocationButtonSelected() {
+    String currentContainerString = fSharedLocationText.getText();
+    IContainer currentContainer = getContainer(currentContainerString);
+    SharedLocationSelectionDialog dialog = new SharedLocationSelectionDialog(
+            getShell(),
+            currentContainer,
+            false,
+            LaunchConfigurationsMessages.CommonTab_Select_a_location_for_the_launch_configuration_13);
+    dialog.showClosedProjects(false);
+    dialog.open();
+    Object[] results = dialog.getResult();
+    if ((results != null) && (results.length > 0) && (results[0] instanceof IPath)) {
+      IPath path = (IPath) results[0];
+      String containerName = path.toOSString();
+      fSharedLocationText.setText(containerName);
+    }
+  }
+
+  /**
+   * gets the container form the specified path
+   * 
+   * @param path
+   *          the path to get the container from
+   * @return the container for the specified path or null if one cannot be determined
+   */
+  private IContainer getContainer(String path) {
+    Path containerPath = new Path(path);
+    return (IContainer) getWorkspaceRoot().findMember(containerPath);
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @seeorg.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.
+   * ILaunchConfiguration)
+   */
+  public void initializeFrom(ILaunchConfiguration configuration) {
+    boolean isShared = !configuration.isLocal();
+    fSharedRadioButton.setSelection(isShared);
+    fLocalRadioButton.setSelection(!isShared);
+    setSharedEnabled(isShared);
+    fSharedLocationText.setText(getDefaultSharedConfigLocation(configuration));
+    if (isShared) {
+      String containerName = EMPTY_STRING;
+      IFile file = configuration.getFile();
+      if (file != null) {
+        IContainer parent = file.getParent();
+        if (parent != null) {
+          containerName = parent.getFullPath().toOSString();
+        }
+      }
+      fSharedLocationText.setText(containerName);
+    }
+    updateFavoritesFromConfig(configuration);
+    updateLaunchInBackground(configuration);
+    updateEncoding(configuration);
+    updateConsoleOutput(configuration);
+  }
+
+  /**
+   * Updates the console output form the local configuration
+   * 
+   * @param configuration
+   *          the local configuration
+   */
+  private void updateConsoleOutput(ILaunchConfiguration configuration) {
+    boolean outputToConsole = true;
+    String outputFile = null;
+    boolean append = false;
+
+    boolean dltkOutput = false;
+
+    try {
+      dltkOutput = configuration.getAttribute(
+              ScriptLaunchConfigurationConstants.ATTR_USE_INTERACTIVE_CONSOLE, false);
+
+      outputToConsole = configuration.getAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, true);
+      outputFile = configuration
+              .getAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_FILE, (String) null);
+      append = configuration.getAttribute(IDebugUIConstants.ATTR_APPEND_TO_FILE, false);
+    } catch (CoreException e) {
+    }
+
+    fUseDltkRadio.setSelection(dltkOutput);
+    fNotUseDltkRatio.setSelection(!dltkOutput);
+
+    fConsoleOutput.setSelection(outputToConsole);
+    fAppend.setSelection(append);
+    boolean haveOutputFile = outputFile != null;
+    if (haveOutputFile) {
+      fFileText.setText(outputFile);
+    }
+    fFileOutput.setSelection(haveOutputFile);
+    enableOuputCaptureWidgets(haveOutputFile);
+  }
+
+  /**
+   * Updates the launch on background check button
+   * 
+   * @param configuration
+   *          the local launch configuration
+   */
+  protected void updateLaunchInBackground(ILaunchConfiguration configuration) {
+    fLaunchInBackgroundButton.setSelection(isLaunchInBackground(configuration));
+  }
+
+  /**
+   * Updates the encoding
+   * 
+   * @param configuration
+   *          the local configuration
+   */
+  private void updateEncoding(ILaunchConfiguration configuration) {
+    String encoding = null;
+    try {
+      encoding = configuration.getAttribute(IDebugUIConstants.ATTR_CONSOLE_ENCODING, (String) null);
+    } catch (CoreException e) {
+    }
+
+    if (encoding != null) {
+      fAltEncodingButton.setSelection(true);
+      fDefaultEncodingButton.setSelection(false);
+      fEncodingCombo.setText(encoding);
+      fEncodingCombo.setEnabled(true);
+    } else {
+      fDefaultEncodingButton.setSelection(true);
+      fAltEncodingButton.setSelection(false);
+      fEncodingCombo.setEnabled(false);
+    }
+  }
+
+  /**
+   * Returns whether the given configuration should be launched in the background.
+   * 
+   * @param configuration
+   *          the configuration
+   * @return whether the configuration is configured to launch in the background
+   */
+  public static boolean isLaunchInBackground(ILaunchConfiguration configuration) {
+    boolean launchInBackground = true;
+    try {
+      launchInBackground = configuration.getAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND,
+              true);
+    } catch (CoreException ce) {
+      DebugUIPlugin.log(ce);
+    }
+    return launchInBackground;
+  }
+
+  /**
+   * Updates the favorites selections from the local configuration
+   * 
+   * @param config
+   *          the local configuration
+   */
+  private void updateFavoritesFromConfig(ILaunchConfiguration config) {
+    fFavoritesTable.setInput(config);
+    fFavoritesTable.setCheckedElements(new Object[] {});
+    try {
+      List groups = config.getAttribute(IDebugUIConstants.ATTR_FAVORITE_GROUPS, new ArrayList());
+      if (groups.isEmpty()) {
+        // check old attributes for backwards compatible
+        if (config.getAttribute(IDebugUIConstants.ATTR_DEBUG_FAVORITE, false)) {
+          groups.add(IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP);
+        }
+        if (config.getAttribute(IDebugUIConstants.ATTR_RUN_FAVORITE, false)) {
+          groups.add(IDebugUIConstants.ID_RUN_LAUNCH_GROUP);
+        }
+      }
+      if (!groups.isEmpty()) {
+        List list = new ArrayList();
+        Iterator iterator = groups.iterator();
+        while (iterator.hasNext()) {
+          String id = (String) iterator.next();
+          LaunchGroupExtension extension = getLaunchConfigurationManager().getLaunchGroup(id);
+          list.add(extension);
+        }
+        fFavoritesTable.setCheckedElements(list.toArray());
+      }
+    } catch (CoreException e) {
+      DebugUIPlugin.log(e);
+    }
+  }
+
+  /**
+   * Updates the configuration form the local shared config working copy
+   * 
+   * @param config
+   *          the local shared config working copy
+   */
+  private void updateConfigFromLocalShared(ILaunchConfigurationWorkingCopy config) {
+    if (isShared()) {
+      String containerPathString = fSharedLocationText.getText();
+      IContainer container = getContainer(containerPathString);
+      config.setContainer(container);
+    } else {
+      config.setContainer(null);
+    }
+  }
+
+  /**
+   * Convenience accessor
+   */
+  protected LaunchConfigurationManager getLaunchConfigurationManager() {
+    return DebugUIPlugin.getDefault().getLaunchConfigurationManager();
+  }
+
+  /**
+   * Update the favorite settings.
+   * 
+   * NOTE: set to <code>null</code> instead of <code>false</code> for backwards compatibility when
+   * comparing if content is equal, since 'false' is default and will be missing for older
+   * configurations.
+   */
+  private void updateConfigFromFavorites(ILaunchConfigurationWorkingCopy config) {
+    try {
+      Object[] checked = fFavoritesTable.getCheckedElements();
+      boolean debug = config.getAttribute(IDebugUIConstants.ATTR_DEBUG_FAVORITE, false);
+      boolean run = config.getAttribute(IDebugUIConstants.ATTR_RUN_FAVORITE, false);
+      if (debug || run) {
+        // old attributes
+        List groups = new ArrayList();
+        int num = 0;
+        if (debug) {
+          groups.add(getLaunchConfigurationManager().getLaunchGroup(
+                  IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP));
+          num++;
+        }
+        if (run) {
+          num++;
+          groups.add(getLaunchConfigurationManager().getLaunchGroup(
+                  IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP));
+        }
+        // see if there are any changes
+        if (num == checked.length) {
+          boolean different = false;
+          for (int i = 0; i < checked.length; i++) {
+            if (!groups.contains(checked[i])) {
+              different = true;
+              break;
+            }
+          }
+          if (!different) {
+            return;
+          }
+        }
+      }
+      config.setAttribute(IDebugUIConstants.ATTR_DEBUG_FAVORITE, (String) null);
+      config.setAttribute(IDebugUIConstants.ATTR_RUN_FAVORITE, (String) null);
+      List groups = null;
+      for (int i = 0; i < checked.length; i++) {
+        LaunchGroupExtension group = (LaunchGroupExtension) checked[i];
+        if (groups == null) {
+          groups = new ArrayList();
+        }
+        groups.add(group.getIdentifier());
+      }
+      config.setAttribute(IDebugUIConstants.ATTR_FAVORITE_GROUPS, groups);
+    } catch (CoreException e) {
+      DebugUIPlugin.log(e);
+    }
+  }
+
+  /**
+   * Convenience method for getting the workspace root.
+   */
+  private IWorkspaceRoot getWorkspaceRoot() {
+    return ResourcesPlugin.getWorkspace().getRoot();
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see
+   * org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration
+   * )
+   */
+  @Override
+  public boolean isValid(ILaunchConfiguration config) {
+    setMessage(null);
+    setErrorMessage(null);
+
+    return validateLocalShared() && validateRedirectFile() && validateEncoding();
+  }
+
+  /**
+   * validates the encoding selection
+   * 
+   * @return true if the validate encoding is allowable, false otherwise
+   */
+  private boolean validateEncoding() {
+    if (fAltEncodingButton.getSelection()) {
+      if (fEncodingCombo.getSelectionIndex() == -1) {
+        // TODO constant was removed in Eclipse 3.7, find a substitute
+        // setErrorMessage(LaunchConfigurationsMessages.CommonTab_No_Encoding_Selected);
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Validates if the redirect file is valid
+   * 
+   * @return true if the filename is not zero, false otherwise
+   */
+  private boolean validateRedirectFile() {
+    if (fFileOutput.getSelection()) {
+      int len = fFileText.getText().trim().length();
+      if (len == 0) {
+        setErrorMessage(LaunchConfigurationsMessages.CommonTab_8);
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * validates the local shared config file location
+   * 
+   * @return true if the local shared file exists, false otherwise
+   */
+  private boolean validateLocalShared() {
+    if (isShared()) {
+      String path = fSharedLocationText.getText().trim();
+      IContainer container = getContainer(path);
+      if (container == null || container.equals(ResourcesPlugin.getWorkspace().getRoot())) {
+        setErrorMessage(LaunchConfigurationsMessages.CommonTab_Invalid_shared_configuration_location_14);
+        return false;
+      } else if (!container.getProject().isOpen()) {
+        setErrorMessage(LaunchConfigurationsMessages.CommonTab_Cannot_save_launch_configuration_in_a_closed_project__1);
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @seeorg.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.
+   * ILaunchConfigurationWorkingCopy)
+   */
+  public void setDefaults(ILaunchConfigurationWorkingCopy config) {
+    config.setContainer(null);
+    config.setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, true);
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @seeorg.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.
+   * ILaunchConfigurationWorkingCopy)
+   */
+  public void performApply(ILaunchConfigurationWorkingCopy configuration) {
+    updateConfigFromLocalShared(configuration);
+    updateConfigFromFavorites(configuration);
+    setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, configuration,
+            fLaunchInBackgroundButton.getSelection(), true);
+    String encoding = null;
+    if (fAltEncodingButton.getSelection()) {
+      encoding = fEncodingCombo.getText();
+    }
+    configuration.setAttribute(IDebugUIConstants.ATTR_CONSOLE_ENCODING, encoding);
+
+    boolean captureOutput = false;
+
+    if (fConsoleOutput.getSelection()) {
+      captureOutput = true;
+      configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, (String) null);
+    } else {
+      configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, false);
+    }
+
+    if (fFileOutput.getSelection()) {
+      captureOutput = true;
+      String file = fFileText.getText();
+      configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_FILE, file);
+      if (fAppend.getSelection()) {
+        configuration.setAttribute(IDebugUIConstants.ATTR_APPEND_TO_FILE, true);
+      } else {
+        configuration.setAttribute(IDebugUIConstants.ATTR_APPEND_TO_FILE, (String) null);
+      }
+    } else {
+      configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_FILE, (String) null);
+    }
+
+    boolean useDltk = false;
+    if (fUseDltkRadio.getSelection()) {
+      configuration.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, (String) null);
+
+      configuration.setAttribute(ScriptLaunchConfigurationConstants.ATTR_DLTK_CONSOLE_ID,
+              Long.toString(System.currentTimeMillis()));
+      IFileHandle proxyFile;
+      try {
+        IExecutionEnvironment exeEnv = (IExecutionEnvironment) EnvironmentManager
+                .getLocalEnvironment().getAdapter(IExecutionEnvironment.class);
+        proxyFile = RutaIdePlugin.getDefault().getConsoleProxy(exeEnv);
+        configuration.setAttribute("environmentId", proxyFile.getEnvironment().getId());
+        configuration.setAttribute("proxy_path", proxyFile.toOSString());
+      } catch (IOException e) {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+
+      captureOutput = false;
+      useDltk = true;
+    }
+
+    configuration.setAttribute(ScriptLaunchConfigurationConstants.ATTR_USE_INTERACTIVE_CONSOLE,
+            useDltk);
+
+    // Last option
+    if (captureOutput) {
+      configuration.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, (String) null);
+    } else {
+      configuration.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, false);
+    }
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
+   */
+  public String getName() {
+    return LaunchConfigurationsMessages.CommonTab__Common_15;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.eclipse.debug.ui.ILaunchConfigurationTab#canSave()
+   */
+  @Override
+  public boolean canSave() {
+    return validateLocalShared();
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage()
+   */
+  @Override
+  public Image getImage() {
+    return DebugUITools.getImage(IInternalDebugUIConstants.IMG_OBJS_COMMON_TAB);
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @seeorg.eclipse.debug.ui.ILaunchConfigurationTab#activated(org.eclipse.debug.core.
+   * ILaunchConfigurationWorkingCopy)
+   */
+  @Override
+  public void activated(ILaunchConfigurationWorkingCopy workingCopy) {
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @seeorg.eclipse.debug.ui.ILaunchConfigurationTab#deactivated(org.eclipse.debug.core.
+   * ILaunchConfigurationWorkingCopy)
+   */
+  @Override
+  public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {
+  }
+
+  /**
+   * Content provider for the favorites table
+   */
+  class FavoritesContentProvider implements IStructuredContentProvider {
+
+    public Object[] getElements(Object inputElement) {
+      ILaunchGroup[] groups = DebugUITools.getLaunchGroups();
+      List possibleGroups = new ArrayList();
+      ILaunchConfiguration configuration = (ILaunchConfiguration) inputElement;
+      for (int i = 0; i < groups.length; i++) {
+        ILaunchGroup extension = groups[i];
+        LaunchHistory history = getLaunchConfigurationManager().getLaunchHistory(
+                extension.getIdentifier());
+        if (history != null && history.accepts(configuration)) {
+          possibleGroups.add(extension);
+        }
+      }
+      return possibleGroups.toArray();
+    }
+
+    public void dispose() {
+    }
+
+    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+    }
+
+  }
+
+  /**
+   * Provides the labels for the favorites table
+   * 
+   */
+  class FavoritesLabelProvider implements ITableLabelProvider {
+
+    private Map fImages = new HashMap();
+
+    public Image getColumnImage(Object element, int columnIndex) {
+      Image image = (Image) fImages.get(element);
+      if (image == null) {
+        ImageDescriptor descriptor = ((LaunchGroupExtension) element).getImageDescriptor();
+        if (descriptor != null) {
+          image = descriptor.createImage();
+          fImages.put(element, image);
+        }
+      }
+      return image;
+    }
+
+    public String getColumnText(Object element, int columnIndex) {
+      String label = ((LaunchGroupExtension) element).getLabel();
+      return DebugUIPlugin.removeAccelerators(label);
+    }
+
+    public void addListener(ILabelProviderListener listener) {
+    }
+
+    public void dispose() {
+      Iterator images = fImages.values().iterator();
+      while (images.hasNext()) {
+        Image image = (Image) images.next();
+        image.dispose();
+      }
+    }
+
+    public boolean isLabelProperty(Object element, String property) {
+      return false;
+    }
+
+    public void removeListener(ILabelProviderListener listener) {
+    }
+  }
+
+}

Added: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaMainLaunchConfigurationTab.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaMainLaunchConfigurationTab.java?rev=1477113&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaMainLaunchConfigurationTab.java (added)
+++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/debug/ui/launchConfiguration/RutaMainLaunchConfigurationTab.java Mon Apr 29 14:50:56 2013
@@ -0,0 +1,284 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.ide.debug.ui.launchConfiguration;
+
+import org.apache.uima.cas.CAS;
+import org.apache.uima.ruta.ide.RutaIdePlugin;
+import org.apache.uima.ruta.ide.core.RutaNature;
+import org.apache.uima.ruta.ide.core.builder.RutaProjectUtils;
+import org.apache.uima.ruta.ide.launching.RutaLaunchConstants;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.dltk.core.IScriptProject;
+import org.eclipse.dltk.core.PreferencesLookupDelegate;
+import org.eclipse.dltk.debug.core.DLTKDebugPreferenceConstants;
+import org.eclipse.dltk.debug.ui.launchConfigurations.MainLaunchConfigurationTab;
+import org.eclipse.dltk.launching.AbstractScriptLaunchConfigurationDelegate;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.ContainerSelectionDialog;
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+public class RutaMainLaunchConfigurationTab extends MainLaunchConfigurationTab {
+
+  private Text inputText;
+
+  private Button recursivelyButton;
+
+  private Text outputFolderText;
+
+  private Text viewText;
+
+  public RutaMainLaunchConfigurationTab(String mode) {
+    super(mode);
+  }
+
+  /*
+   * @seeorg.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab#
+   * breakOnFirstLinePrefEnabled(org.eclipse.dltk.core.PreferencesLookupDelegate)
+   */
+  @Override
+  protected boolean breakOnFirstLinePrefEnabled(PreferencesLookupDelegate delegate) {
+    return delegate.getBoolean(RutaIdePlugin.PLUGIN_ID,
+            DLTKDebugPreferenceConstants.PREF_DBGP_BREAK_ON_FIRST_LINE);
+  }
+
+  /*
+   * @see
+   * org.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab#dbpgLoggingPrefEnabled
+   * (org.eclipse.dltk.core.PreferencesLookupDelegate)
+   */
+  @Override
+  protected boolean dbpgLoggingPrefEnabled(PreferencesLookupDelegate delegate) {
+    return delegate.getBoolean(RutaIdePlugin.PLUGIN_ID,
+            DLTKDebugPreferenceConstants.PREF_DBGP_ENABLE_LOGGING);
+  }
+
+  @Override
+  public String getNatureID() {
+    return RutaNature.NATURE_ID;
+  }
+
+  @Override
+  protected void doCreateControl(Composite composite) {
+    super.doCreateControl(composite);
+    // Input Resource Group
+    Group inputResourceGroup = new Group(composite, SWT.None);
+    inputResourceGroup.setText("Input Folder:");
+
+    GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
+            .applyTo(inputResourceGroup);
+
+    GridLayout inputResourceGroupLayout = new GridLayout(4, false);
+    inputResourceGroup.setLayout(inputResourceGroupLayout);
+
+    inputText = new Text(inputResourceGroup, SWT.BORDER);
+    GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(3,1).applyTo(inputText);
+    inputText.addModifyListener(new ModifyListener() {
+
+      public void modifyText(ModifyEvent event) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+    Button browseInputResource = new Button(inputResourceGroup, SWT.NONE);
+    browseInputResource.setText("Browse ...");
+    browseInputResource.addSelectionListener(new SelectionAdapter() {
+      public void widgetSelected(SelectionEvent e) {
+        ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(),
+                new WorkbenchLabelProvider(), new WorkbenchContentProvider());
+        dialog.setTitle("Select input folder");
+        dialog.setMessage("Select input folder");
+
+        dialog.setInput(getProject().getProject());
+        dialog.setInitialSelection(getWorkspaceRoot().findMember(inputText.getText()));
+        if (dialog.open() == IDialogConstants.OK_ID) {
+          IResource resource = (IResource) dialog.getFirstResult();
+          if (resource != null) {
+            String fileLoc = resource.getFullPath().toString();
+            inputText.setText(fileLoc);
+          }
+        }
+      }
+    });
+
+    recursivelyButton = new Button(inputResourceGroup, SWT.CHECK);
+    recursivelyButton.setText("Recursively");
+    GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
+            .applyTo(recursivelyButton);
+    recursivelyButton.addSelectionListener(new SelectionListener() {
+
+      public void widgetSelected(SelectionEvent event) {
+        updateLaunchConfigurationDialog();
+      }
+
+      public void widgetDefaultSelected(SelectionEvent event) {
+      }
+    });
+
+    
+    
+    Label viewLabel = new Label(inputResourceGroup, SWT.NONE);
+    viewLabel.setText("View Name:");
+    viewText = new Text(inputResourceGroup, SWT.BORDER);
+    GridDataFactory.swtDefaults().hint(250, SWT.DEFAULT).align(SWT.LEFT, SWT.CENTER)
+            .grab(true, false).applyTo(viewText);
+    viewText.addModifyListener(new ModifyListener() {
+      public void modifyText(ModifyEvent event) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+
+    Group outputFolderGroup = new Group(composite, SWT.None);
+    outputFolderGroup.setText("Output Folder:");
+    GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
+            .applyTo(outputFolderGroup);
+    GridLayout outputFolderGroupLayout = new GridLayout(2, false);
+    outputFolderGroup.setLayout(outputFolderGroupLayout);
+    outputFolderText = new Text(outputFolderGroup, SWT.BORDER);
+    GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
+            .applyTo(outputFolderText);
+    outputFolderText.addModifyListener(new ModifyListener() {
+
+      public void modifyText(ModifyEvent event) {
+        updateLaunchConfigurationDialog();
+      }
+    });
+
+    Button browseOutputFolderButton = new Button(outputFolderGroup, SWT.NONE);
+    browseOutputFolderButton.setText("Browse ...");
+    browseOutputFolderButton.addSelectionListener(new SelectionAdapter() {
+      public void widgetSelected(SelectionEvent e) {
+        String currentContainerString = outputFolderText.getText();
+        IContainer currentContainer = getContainer(currentContainerString);
+        ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(),
+                currentContainer, false, "Select output folder");
+        dialog.showClosedProjects(false);
+        dialog.open();
+        Object[] results = dialog.getResult();
+        if ((results != null) && (results.length > 0) && (results[0] instanceof IPath)) {
+          IPath path = (IPath) results[0];
+          String containerName = path.toOSString();
+          outputFolderText.setText(containerName);
+        }
+      }
+    });
+
+  }
+
+  private IContainer getContainer(String path) {
+    Path containerPath = new Path(path);
+    IResource resource = getWorkspaceRoot().findMember(containerPath);
+    if (resource instanceof IContainer)
+      return (IContainer) resource;
+
+    return null;
+  }
+
+  @Override
+  public void doInitializeForm(ILaunchConfiguration config) {
+    super.doInitializeForm(config);
+    
+    
+    IScriptProject proj = null;
+    try {
+      proj = AbstractScriptLaunchConfigurationDelegate.getScriptProject(config);
+    } catch (CoreException e) {
+      RutaIdePlugin.error(e);
+    }
+    String defaultInputLocation = RutaProjectUtils.getDefaultInputLocation();
+    String defaultOutputLocation = RutaProjectUtils.getDefaultOutputLocation();
+    IResource inputFolder = proj.getProject().findMember(defaultInputLocation);
+    IResource outputFolder = proj.getProject().findMember(defaultOutputLocation);
+    
+    
+    try {
+      recursivelyButton.setSelection(config.getAttribute(RutaLaunchConstants.RECURSIVE, false));
+    } catch (CoreException e) {
+      recursivelyButton.setSelection(false);
+    }
+    
+    try {
+      viewText.setText(config.getAttribute(RutaLaunchConstants.VIEW, CAS.NAME_DEFAULT_SOFA));
+    } catch (CoreException e) {
+      viewText.setText(CAS.NAME_DEFAULT_SOFA);
+    }
+    
+    try {
+      inputText.setText(config.getAttribute(RutaLaunchConstants.INPUT_FOLDER, inputFolder.getFullPath().toPortableString()));
+    } catch (CoreException e) {
+      inputText.setText(inputFolder.getFullPath().toPortableString());
+    }
+    
+    try {
+      outputFolderText.setText(config.getAttribute(RutaLaunchConstants.OUTPUT_FOLDER, outputFolder.getFullPath().toPortableString()));
+    } catch (CoreException e) {
+      outputFolderText.setText(outputFolder.getFullPath().toPortableString());
+    }
+    
+  }
+
+  @Override
+  public void doPerformApply(ILaunchConfigurationWorkingCopy config) {
+    super.doPerformApply(config);
+    
+    config.setAttribute(RutaLaunchConstants.RECURSIVE, recursivelyButton.getSelection());
+    config.setAttribute(RutaLaunchConstants.VIEW, viewText.getText());
+    config.setAttribute(RutaLaunchConstants.INPUT_FOLDER, inputText.getText());
+    config.setAttribute(RutaLaunchConstants.OUTPUT_FOLDER, outputFolderText.getText());
+    
+  }
+
+  @Override
+  public void setDefaults(ILaunchConfigurationWorkingCopy config) {
+    super.setDefaults(config);
+    IScriptProject proj = null;
+    try {
+      proj = AbstractScriptLaunchConfigurationDelegate.getScriptProject(config);
+    } catch (CoreException e) {
+      RutaIdePlugin.error(e);
+    }
+    String defaultInputLocation = RutaProjectUtils.getDefaultInputLocation();
+    String defaultOutputLocation = RutaProjectUtils.getDefaultOutputLocation();
+    IResource inputFolder = proj.getProject().findMember(defaultInputLocation);
+    IResource outputFolder = proj.getProject().findMember(defaultOutputLocation);
+    config.setAttribute(RutaLaunchConstants.RECURSIVE, false);
+    config.setAttribute(RutaLaunchConstants.INPUT_FOLDER, inputFolder.getFullPath().toPortableString());
+    config.setAttribute(RutaLaunchConstants.OUTPUT_FOLDER, outputFolder.getFullPath().toPortableString());
+  }
+}