com.mountainminds.eclemma.internal.ui.wizards.SessionExportPage1.java Source code

Java tutorial

Introduction

Here is the source code for com.mountainminds.eclemma.internal.ui.wizards.SessionExportPage1.java

Source

/*******************************************************************************
 * Copyright (c) 2006, 2014 Mountainminds GmbH & Co. KG and Contributors
 * 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:
 *    Marc R. Hoffmann - initial API and implementation
 *    
 ******************************************************************************/
package com.mountainminds.eclemma.internal.ui.wizards;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.osgi.util.NLS;
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.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.DirectoryDialog;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.model.WorkbenchLabelProvider;

import com.mountainminds.eclemma.core.CoverageTools;
import com.mountainminds.eclemma.core.ICoverageSession;
import com.mountainminds.eclemma.core.ISessionExporter.ExportFormat;
import com.mountainminds.eclemma.internal.ui.ContextHelp;
import com.mountainminds.eclemma.internal.ui.UIMessages;

/**
 * This wizard page allows selecting a coverage session, the output format and
 * destination.
 */
public class SessionExportPage1 extends WizardPage {

    private static final String ID = "SessionExportPage1"; //$NON-NLS-1$

    private static final String STORE_PREFIX = ID + "."; //$NON-NLS-1$
    private static final String STORE_FORMAT = STORE_PREFIX + "format"; //$NON-NLS-1$
    private static final String STORE_DESTINATIONS = STORE_PREFIX + "destinations"; //$NON-NLS-1$

    private TableViewer sessionstable;
    private ComboViewer formatcombo;
    private Combo destinationcombo;

    public SessionExportPage1() {
        super(ID);
        setTitle(UIMessages.ExportReportPage1_title);
        setDescription(UIMessages.ExportReportPage1_description);
    }

    public void createControl(Composite parent) {
        initializeDialogUnits(parent);
        parent = new Composite(parent, SWT.NONE);
        parent.setLayout(new GridLayout());
        new Label(parent, SWT.NONE).setText(UIMessages.ExportReportPage1Sessions_label);
        sessionstable = new TableViewer(parent, SWT.BORDER);
        sessionstable.setLabelProvider(new WorkbenchLabelProvider());
        sessionstable.setContentProvider(new ArrayContentProvider());
        sessionstable.setInput(CoverageTools.getSessionManager().getSessions());
        ICoverageSession active = CoverageTools.getSessionManager().getActiveSession();
        if (active != null) {
            sessionstable.setSelection(new StructuredSelection(active));
        }
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.heightHint = convertHeightInCharsToPixels(8);
        sessionstable.getControl().setLayoutData(gd);
        Group group = new Group(parent, SWT.NONE);
        group.setText(UIMessages.ExportReportPage1DestinationGroup_label);
        group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        createExportOptionsGroup(group);
        setControl(parent);
        ContextHelp.setHelp(parent, ContextHelp.SESSION_EXPORT);
        restoreWidgetValues();
    }

    private void createExportOptionsGroup(Composite parent) {
        parent.setLayout(new GridLayout(3, false));
        new Label(parent, SWT.NONE).setText(UIMessages.ExportReportPage1Format_label);
        formatcombo = new ComboViewer(parent, SWT.READ_ONLY);
        formatcombo.setContentProvider(new ArrayContentProvider());
        formatcombo.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                return ((ExportFormat) element).getLabel();
            }
        });
        formatcombo.setInput(ExportFormat.values());
        formatcombo.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                IPath path = Path.fromOSString(destinationcombo.getText());
                path = path.removeFileExtension();
                final ExportFormat format = getExportFormat();
                if (!format.isFolderOutput()) {
                    path = path.addFileExtension(format.getFileExtension());
                }
                destinationcombo.setText(path.toOSString());
            }
        });
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = 2;
        formatcombo.getControl().setLayoutData(gd);
        new Label(parent, SWT.NONE).setText(UIMessages.ExportReportPage1Destination_label);
        destinationcombo = new Combo(parent, SWT.BORDER);
        destinationcombo.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                update();
            }
        });
        gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.widthHint = convertHorizontalDLUsToPixels(120);
        destinationcombo.setLayoutData(gd);
        Button browsebutton = new Button(parent, SWT.NONE);
        browsebutton.setText(UIMessages.BrowseAction_label);
        setButtonLayoutData(browsebutton);
        browsebutton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                if (getExportFormat().isFolderOutput()) {
                    openFolderDialog();
                } else {
                    openFileDialog();
                }
            }
        });
        update();
    }

    private void openFileDialog() {
        FileDialog fd = new FileDialog(getShell(), SWT.SAVE);
        fd.setText(UIMessages.ExportReportPage1BrowseDialog_title);
        fd.setFileName(destinationcombo.getText());
        String ext = getExportFormat().getFileExtension();
        fd.setFilterExtensions(new String[] { "*." + ext, "*.*" }); //$NON-NLS-1$ //$NON-NLS-2$
        String file = fd.open();
        if (file != null) {
            destinationcombo.setText(file);
        }
    }

    private void openFolderDialog() {
        final DirectoryDialog fd = new DirectoryDialog(getShell(), SWT.NONE);
        fd.setText(UIMessages.ExportReportPage1BrowseDialog_title);
        fd.setFilterPath(destinationcombo.getText());
        final String folder = fd.open();
        if (folder != null) {
            destinationcombo.setText(folder);
        }
    }

    private void update() {
        // make sure we have a session to export
        if (getSelectedSession() == null) {
            setErrorMessage(UIMessages.ExportReportPage1NoSession_message);
            setPageComplete(false);
            return;
        }
        // a destination file must be spezified
        if (getDestination().length() == 0) {
            setMessage(UIMessages.ExportReportPage1MissingDestination_message);
            setPageComplete(false);
            return;
        }
        final ExportFormat format = getExportFormat();
        if (!format.isFolderOutput()) {
            // the extension should correspond to the report type
            String exta = Path.fromOSString(getDestination()).getFileExtension();
            String exte = format.getFileExtension();
            if (!exte.equalsIgnoreCase(exta)) {
                setMessage(NLS.bind(UIMessages.ExportReportPage1WrongExtension_message, exte), WARNING);
                setPageComplete(true);
                return;
            }
        }
        setErrorMessage(null);
        setMessage(null);
        setPageComplete(true);
    }

    private void restoreWidgetValues() {
        IDialogSettings settings = getDialogSettings();
        formatcombo.setSelection(new StructuredSelection(readFormat(settings)));
        WidgetHistory.restoreCombo(settings, STORE_DESTINATIONS, destinationcombo);
    }

    private ExportFormat readFormat(IDialogSettings settings) {
        final String format = settings.get(STORE_FORMAT);
        if (format != null) {
            try {
                return ExportFormat.valueOf(format);
            } catch (IllegalArgumentException e) {
                // we fall-back to default
            }
        }
        return ExportFormat.HTML;
    }

    public void saveWidgetValues() {
        IDialogSettings settings = getDialogSettings();
        settings.put(STORE_FORMAT, getExportFormat().name());
        WidgetHistory.saveCombo(settings, STORE_DESTINATIONS, destinationcombo);
    }

    public ICoverageSession getSelectedSession() {
        IStructuredSelection sel = (IStructuredSelection) sessionstable.getSelection();
        return (ICoverageSession) sel.getFirstElement();
    }

    public ExportFormat getExportFormat() {
        final IStructuredSelection selection = (IStructuredSelection) formatcombo.getSelection();
        return (ExportFormat) selection.getFirstElement();
    }

    public String getDestination() {
        return destinationcombo.getText().trim();
    }

}