/* ====================================================================
*
* The ObjectStyle Group Software License, Version 1.0
*
* Copyright (c) 2002 - 2006 The ObjectStyle Group
* and individual authors of the software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* ObjectStyle Group (http://objectstyle.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "ObjectStyle Group" and "Cayenne"
* must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact andrus@objectstyle.org.
*
* 5. Products derived from this software may not be called "ObjectStyle"
* nor may "ObjectStyle" appear in their names without prior written
* permission of the ObjectStyle Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the ObjectStyle Group. For more
* information on the ObjectStyle Group, please see
* <http://objectstyle.org/>.
*
*/
package org.objectstyle.wolips.launching.ui;
import java.util.StringTokenizer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.ILaunchConfigurationTab;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
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.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.objectstyle.wolips.launching.LaunchingMessages;
import org.objectstyle.wolips.launching.LaunchingPlugin;
import org.objectstyle.wolips.launching.delegates.WOJavaLocalApplicationLaunchConfigurationDelegate;
import org.objectstyle.wolips.preferences.Preferences;
import org.objectstyle.wolips.preferences.PreferencesMessages;
/**
* @author uli
*/
public class LogTab extends AbstractWOArgumentsTab {
private Table debugGroupsTable;
private Button addButton;
private Button removeButton;
private Button renameButton;
protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
/**
* @see ILaunchConfigurationTab#createControl(Composite)
*/
public void createControl(Composite parentComposite) {
Composite parent = new Composite(parentComposite, SWT.NULL);
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.numColumns = 2;
parent.setLayout(layout);
GridData data = new GridData();
data.verticalAlignment = GridData.FILL;
data.horizontalAlignment = GridData.FILL;
parent.setLayoutData(data);
// set F1 help
// WorkbenchHelp.setHelp(parent,
// IHelpContextIds.IGNORE_PREFERENCE_PAGE);
Label l1 = new Label(parent, SWT.NULL);
l1.setText(PreferencesMessages.getString("LaunchPreferencesPage.label")); //$NON-NLS-1$
data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
data.horizontalSpan = 3;
l1.setLayoutData(data);
this.debugGroupsTable = new Table(parent, SWT.CHECK | SWT.BORDER);
GridData gd2 = new GridData(GridData.FILL_HORIZONTAL);
// gd.widthHint = convertWidthInCharsToPixels(30);
gd2.widthHint = 150;
gd2.heightHint = 250;
this.debugGroupsTable.setLayoutData(gd2);
this.debugGroupsTable.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
handleSelection();
updateLaunchConfigurationDialog();
}
});
Composite buttons = new Composite(parent, SWT.NULL);
buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
buttons.setLayout(layout);
this.addButton = new Button(buttons, SWT.PUSH);
this.addButton.setText(PreferencesMessages.getString("LaunchPreferencesPage.add")); //$NON-NLS-1$
data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.heightHint = 20;
data.heightHint = Math.max(data.heightHint, this.addButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y);
// convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
int widthHint = 100;
// convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
data.widthHint = Math.max(widthHint, this.addButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
this.addButton.setLayoutData(data);
this.addButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
addLaunchGroup();
}
});
this.removeButton = new Button(buttons, SWT.PUSH);
this.removeButton.setText(PreferencesMessages.getString("LaunchPreferencesPage.remove")); //$NON-NLS-1$
data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.heightHint = 20;
data.heightHint = Math.max(data.heightHint, this.removeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y);
// Dialog.convertVerticalDLUsToPixels(new FontMetrics(),
// IDialogConstants.BUTTON_HEIGHT);
widthHint = 100;
// Dialog.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
data.widthHint = Math.max(widthHint, this.removeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
this.removeButton.setLayoutData(data);
this.removeButton.setEnabled(false);
this.removeButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
removeLaunchGroup();
}
});
this.renameButton = new Button(buttons, SWT.PUSH);
this.renameButton.setText(PreferencesMessages.getString("LaunchPreferencesPage.change")); //$NON-NLS-1$
data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.heightHint = 20;
data.heightHint = Math.max(data.heightHint, this.renameButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y);
// Dialog.convertVerticalDLUsToPixels(new FontMetrics(),
// IDialogConstants.BUTTON_HEIGHT);
widthHint = 100;
// Dialog.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
data.widthHint = Math.max(widthHint, this.renameButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
this.renameButton.setLayoutData(data);
this.renameButton.setEnabled(false);
this.renameButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
renameLaunchGroup();
}
});
Dialog.applyDialogFont(parent);
this.setControl(parent);
}
protected void removeLaunchGroup() {
int[] selection = this.debugGroupsTable.getSelectionIndices();
this.debugGroupsTable.remove(selection);
if (selection == null) {
return;
}
setDirty(true);
this.updateLaunchConfigurationDialog();
}
protected void renameLaunchGroup() {
int[] selection = this.debugGroupsTable.getSelectionIndices();
if (selection.length != 1)
return;
int index = selection[0];
TableItem item = this.debugGroupsTable.getItem(index);
String oldValue = item.getText();
InputDialog launchGroupDialog = new InputDialog(getShell(), oldValue + " " + PreferencesMessages.getString("LaunchPreferencesPage.enterArgumentShort"), Preferences.getString("IgnorePreferencePage.enterPatternLong"), oldValue, null); //$NON-NLS-1$ //$NON-NLS-2$
launchGroupDialog.open();
if (launchGroupDialog.getReturnCode() != Window.OK)
return;
String newValue = launchGroupDialog.getValue();
if (this.itemExist(newValue)) {
return;
}
item.setText(newValue);
setDirty(true);
this.updateLaunchConfigurationDialog();
}
protected void addLaunchGroup() {
InputDialog parameterDialog = new InputDialog(getShell(), PreferencesMessages.getString("LaunchPreferencesPage.enterParameterShort"), Preferences.getString("IgnorePreferencePage.enterPatternLong"), null, null); //$NON-NLS-1$ //$NON-NLS-2$
parameterDialog.open();
if (parameterDialog.getReturnCode() != Window.OK)
return;
String parameter = parameterDialog.getValue();
if (parameter.equals(""))
return;
// Check if the item already exists
if (this.itemExist(parameter)) {
return;
}
TableItem item = new TableItem(this.debugGroupsTable, SWT.NONE);
item.setText(parameter);
item.setChecked(true);
setDirty(true);
this.updateLaunchConfigurationDialog();
}
private boolean itemExist(String item) {
TableItem[] items = this.debugGroupsTable.getItems();
for (int i = 0; i < items.length; i++) {
if (items[i].getText().equals(item)) {
MessageDialog.openWarning(getShell(), PreferencesMessages.getString("LaunchPreferencesPage.parameterExistsShort"), Preferences.getString("IgnorePreferencePage.patternExistsLong")); //$NON-NLS-1$ //$NON-NLS-2$
return true;
}
}
return false;
}
private void fillDebugGroupsTable(String aString) {
String debugGroups = LaunchingMessages.getString(WOJavaLocalApplicationLaunchConfigurationDelegate.ATTR_WOLIPS_LAUNCH_DEBUG_GROUPS);
StringTokenizer stringTokenizer = new StringTokenizer(debugGroups, ",");
this.debugGroupsTable.removeAll();
while (stringTokenizer.hasMoreTokens()) {
TableItem item = new TableItem(this.debugGroupsTable, SWT.NONE);
String token = stringTokenizer.nextToken();
item.setText(token);
item.setChecked(aString != null && aString.indexOf(token) >= 0);
}
}
/**
* @see ILaunchConfigurationTab#dispose()
*/
public void dispose() {
super.dispose();
}
/**
* @see ILaunchConfigurationTab#isValid(ILaunchConfiguration)
*/
public boolean isValid(ILaunchConfiguration config) {
return true;
}
/**
* Defaults are empty.
*
* @see ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy)
*/
public void setDefaults(ILaunchConfigurationWorkingCopy config) {
config.setAttribute(WOJavaLocalApplicationLaunchConfigurationDelegate.ATTR_WOLIPS_LAUNCH_DEBUG_GROUPS, "");
}
/**
* @see ILaunchConfigurationTab#initializeFrom(ILaunchConfiguration)
*/
public void initializeFrom(ILaunchConfiguration configuration) {
try {
this.fillDebugGroupsTable(configuration.getAttribute(WOJavaLocalApplicationLaunchConfigurationDelegate.ATTR_WOLIPS_LAUNCH_DEBUG_GROUPS, ""));
} catch (CoreException e) {
setErrorMessage(LaunchingMessages.getString("WOArgumentsTab.Exception_occurred_reading_configuration___15") + e.getStatus().getMessage()); //$NON-NLS-1$
LaunchingPlugin.getDefault().log(e);
}
}
/**
* @see ILaunchConfigurationTab#performApply(ILaunchConfigurationWorkingCopy)
*/
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
String aString = "";
TableItem[] debugGrouspItems = this.debugGroupsTable.getItems();
for (int i = 0; i < debugGrouspItems.length; i++) {
if (debugGrouspItems[i].getChecked()) {
if (aString.length() > 0)
aString = aString + ",";
aString = aString + debugGrouspItems[i].getText();
}
}
configuration.setAttribute(WOJavaLocalApplicationLaunchConfigurationDelegate.ATTR_WOLIPS_LAUNCH_DEBUG_GROUPS, aString);
}
/**
* @see ILaunchConfigurationTab#getName()
*/
public String getName() {
return LaunchingMessages.getString("LoggingTab.Name"); //$NON-NLS-1$
}
/**
* @see ILaunchConfigurationTab#getImage()
*/
public Image getImage() {
return LaunchingPlugin.getImageDescriptor("icons/launching/logging-tab.gif").createImage();
}
protected void updateLaunchConfigurationDialog() {
super.updateLaunchConfigurationDialog();
this.getControl().update();
}
protected void handleSelection() {
if (this.debugGroupsTable.getSelectionCount() > 0) {
this.removeButton.setEnabled(true);
this.renameButton.setEnabled(true);
} else {
this.removeButton.setEnabled(false);
this.renameButton.setEnabled(false);
}
}
}