/*******************************************************************************
* Copyright (c) 2010, 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Patrick Tasse - Initial API and implementation
*******************************************************************************/
package fr.inria.linuxtools.internal.tmf.ui.dialogs;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
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.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import fr.inria.linuxtools.internal.tmf.ui.Activator;
import fr.inria.linuxtools.internal.tmf.ui.Messages;
import fr.inria.linuxtools.internal.tmf.ui.parsers.wizards.CustomTxtParserWizard;
import fr.inria.linuxtools.internal.tmf.ui.parsers.wizards.CustomXmlParserWizard;
import fr.inria.linuxtools.tmf.core.parsers.custom.CustomTraceDefinition;
import fr.inria.linuxtools.tmf.core.parsers.custom.CustomTxtTraceDefinition;
import fr.inria.linuxtools.tmf.core.parsers.custom.CustomXmlTraceDefinition;
/**
* Dialog for custom text parsers.
*
* @author Patrick Tassé
*/
public class ManageCustomParsersDialog extends Dialog {
private static final Image image = Activator.getDefault().getImageFromPath("/icons/etool16/customparser_wizard.gif"); //$NON-NLS-1$
Button txtButton;
Button xmlButton;
List parserList;
Button newButton;
Button editButton;
Button deleteButton;
Button importButton;
Button exportButton;
/**
* Constructor
*
* @param parent
* Parent shell of this dialog
*/
public ManageCustomParsersDialog(Shell parent) {
super(parent);
setShellStyle(SWT.RESIZE | SWT.MAX | getShellStyle());
}
@Override
protected Control createDialogArea(Composite parent) {
getShell().setText(Messages.ManageCustomParsersDialog_DialogHeader);
getShell().setImage(image);
Composite composite = (Composite) super.createDialogArea(parent);
composite.setLayout(new GridLayout(2, false));
Composite listContainer = new Composite(composite, SWT.NONE);
listContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
GridLayout lcgl = new GridLayout();
lcgl.marginHeight = 0;
lcgl.marginWidth = 0;
listContainer.setLayout(lcgl);
Composite radioContainer = new Composite(listContainer, SWT.NONE);
GridLayout rcgl = new GridLayout(2, true);
rcgl.marginHeight = 0;
rcgl.marginWidth = 0;
radioContainer.setLayout(rcgl);
txtButton = new Button(radioContainer, SWT.RADIO);
txtButton.setText(Messages.ManageCustomParsersDialog_TextButtonLabel);
txtButton.setSelection(true);
txtButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
@Override
public void widgetSelected(SelectionEvent e) {
fillParserList();
}
});
xmlButton = new Button(radioContainer, SWT.RADIO);
xmlButton.setText("XML"); //$NON-NLS-1$
xmlButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
@Override
public void widgetSelected(SelectionEvent e) {
fillParserList();
}
});
parserList = new List(listContainer, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
parserList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
parserList.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
@Override
public void widgetSelected(SelectionEvent e) {
if (parserList.getSelectionCount() == 0) {
editButton.setEnabled(false);
deleteButton.setEnabled(false);
exportButton.setEnabled(false);
} else {
editButton.setEnabled(true);
deleteButton.setEnabled(true);
exportButton.setEnabled(true);
}
}
});
Composite buttonContainer = new Composite(composite, SWT.NULL);
buttonContainer.setLayout(new GridLayout());
buttonContainer.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, false, false));
newButton = new Button(buttonContainer, SWT.PUSH);
newButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
newButton.setText(Messages.ManageCustomParsersDialog_NewButtonLabel);
newButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
@Override
public void widgetSelected(SelectionEvent e) {
WizardDialog dialog = null;
if (txtButton.getSelection()) {
dialog = new WizardDialog(getShell(), new CustomTxtParserWizard());
} else if (xmlButton.getSelection()) {
dialog = new WizardDialog(getShell(), new CustomXmlParserWizard());
}
if (dialog != null) {
dialog.open();
if (dialog.getReturnCode() == Window.OK) {
fillParserList();
}
}
}
});
editButton = new Button(buttonContainer, SWT.PUSH);
editButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
editButton.setText(Messages.ManageCustomParsersDialog_EditButtonLabel);
editButton.setEnabled(false);
editButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
@Override
public void widgetSelected(SelectionEvent e) {
WizardDialog dialog = null;
if (txtButton.getSelection()) {
dialog = new WizardDialog(getShell(),
new CustomTxtParserWizard(CustomTxtTraceDefinition.load(parserList.getSelection()[0])));
} else if (xmlButton.getSelection()) {
dialog = new WizardDialog(getShell(),
new CustomXmlParserWizard(CustomXmlTraceDefinition.load(parserList.getSelection()[0])));
}
if (dialog != null) {
dialog.open();
if (dialog.getReturnCode() == Window.OK) {
fillParserList();
}
}
}
});
deleteButton = new Button(buttonContainer, SWT.PUSH);
deleteButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
deleteButton.setText(Messages.ManageCustomParsersDialog_DeleteButtonLabel);
deleteButton.setEnabled(false);
deleteButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
@Override
public void widgetSelected(SelectionEvent e) {
boolean confirm = MessageDialog.openQuestion(
getShell(),
Messages.ManageCustomParsersDialog_DeleteParserDialogHeader,
Messages.ManageCustomParsersDialog_DeleteConfirmation + parserList.getSelection()[0] + "?"); //$NON-NLS-1$
if (confirm) {
if (txtButton.getSelection()) {
CustomTxtTraceDefinition.delete(parserList.getSelection()[0]);
} else if (xmlButton.getSelection()) {
CustomXmlTraceDefinition.delete(parserList.getSelection()[0]);
}
fillParserList();
}
}
});
new Label(buttonContainer, SWT.NONE); // filler
importButton = new Button(buttonContainer, SWT.PUSH);
importButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
importButton.setText(Messages.ManageCustomParsersDialog_ImportButtonLabel);
importButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
@Override
public void widgetSelected(SelectionEvent e) {
FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(), SWT.OPEN);
dialog.setText(Messages.ManageCustomParsersDialog_ImportParserSelection);
dialog.setFilterExtensions(new String[] { "*.xml", "*" }); //$NON-NLS-1$ //$NON-NLS-2$
String path = dialog.open();
if (path != null) {
CustomTraceDefinition[] defs = null;
if (txtButton.getSelection()) {
defs = CustomTxtTraceDefinition.loadAll(path);
} else if (xmlButton.getSelection()) {
defs = CustomXmlTraceDefinition.loadAll(path);
}
if (defs != null && defs.length > 0) {
for (CustomTraceDefinition def : defs) {
def.save();
}
fillParserList();
}
}
}
});
exportButton = new Button(buttonContainer, SWT.PUSH);
exportButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
exportButton.setText(Messages.ManageCustomParsersDialog_ExportButtonLabel);
exportButton.setEnabled(false);
exportButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
@Override
public void widgetSelected(SelectionEvent e) {
FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(), SWT.SAVE);
dialog.setText(Messages.ManageCustomParsersDialog_ExportParserSelection + parserList.getSelection()[0]);
dialog.setFilterExtensions(new String[] { "*.xml", "*" }); //$NON-NLS-1$ //$NON-NLS-2$
String path = dialog.open();
if (path != null) {
CustomTraceDefinition def = null;
if (txtButton.getSelection()) {
def = CustomTxtTraceDefinition.load(parserList.getSelection()[0]);
} else if (xmlButton.getSelection()) {
def = CustomXmlTraceDefinition.load(parserList.getSelection()[0]);
}
if (def != null) {
def.save(path);
}
}
}
});
fillParserList();
getShell().setMinimumSize(300, 275);
return composite;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.CLOSE_LABEL, false);
}
private void fillParserList() {
parserList.removeAll();
if (txtButton.getSelection()) {
for (CustomTxtTraceDefinition def : CustomTxtTraceDefinition.loadAll()) {
parserList.add(def.definitionName);
}
} else if (xmlButton.getSelection()) {
for (CustomXmlTraceDefinition def : CustomXmlTraceDefinition.loadAll()) {
parserList.add(def.definitionName);
}
}
editButton.setEnabled(false);
deleteButton.setEnabled(false);
exportButton.setEnabled(false);
}
}