Java tutorial
/******************************************************************************* * 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(); } }