package LinGUIne.wizards; import java.util.HashMap; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import LinGUIne.extensions.CSVExporter; import LinGUIne.extensions.IFileExporter; import LinGUIne.extensions.XMLExporter; /** * Page for the user to select which exporter they are going to use. * * @author Kyle Mullins */ public class ExportFileWizardExporterPage extends WizardPage { private Label lblExporters; private List lstExporters; private ExportFileData wizardData; public ExportFileWizardExporterPage(ExportFileData data){ super("Export Result Wizard"); setTitle("Export Result Wizard"); setMessage("Select the type of File to which you wish to export."); wizardData = data; } @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout(1, false)); Group grpExporter = new Group(container, SWT.NONE); grpExporter.setLayout(new GridLayout(1, false)); grpExporter.setLayoutData(new GridData(GridData.FILL_BOTH)); grpExporter.setText("Export type"); lblExporters = new Label(grpExporter, SWT.NONE); lblExporters.setText("Select the type of file you want to export to:"); lstExporters = new List(grpExporter, SWT.BORDER | SWT.V_SCROLL); lstExporters.setLayoutData(new GridData(GridData.FILL_BOTH)); IConfigurationElement[] configElements = Platform.getExtensionRegistry(). getConfigurationElementsFor("LinGUIne.LinGUIne.extensions.IFileExporter"); final HashMap<String, IConfigurationElement> exporterConfigs = new HashMap<String, IConfigurationElement>(); final HashMap<String, IFileExporter> builtInExporters = new HashMap< String, IFileExporter>(); //Add built-in exporters to the list IFileExporter csv = new CSVExporter(); builtInExporters.put(csv.getFileType(), csv); lstExporters.add(csv.getFileType()); IFileExporter xml = new XMLExporter(); builtInExporters.put(xml.getFileType(), xml); lstExporters.add(xml.getFileType()); for(IConfigurationElement configElement: configElements){ String fileType = configElement.getAttribute("file_type"); lstExporters.add(fileType); exporterConfigs.put(fileType, configElement); } lstExporters.addSelectionListener(new SelectionListener(){ /** * Set which IFileExporter is currently selected. */ @Override public void widgetSelected(SelectionEvent e) { if(lstExporters.getSelectionCount() != 0){ String selectedFileType = lstExporters.getSelection()[0]; IFileExporter exporter = null; if(builtInExporters.containsKey(selectedFileType)){ exporter = builtInExporters.get(selectedFileType); } else if(exporterConfigs.containsKey(selectedFileType)){ IConfigurationElement exporterConfig = exporterConfigs.get(selectedFileType); try { exporter = (IFileExporter)exporterConfig. createExecutableExtension("class"); } catch (CoreException e1) { e1.printStackTrace(); } } wizardData.setExporter(exporter); checkIfPageComplete(); } else{ wizardData.setExporter(null); } } @Override public void widgetDefaultSelected(SelectionEvent e) {} }); setPageComplete(false); setControl(container); } /** * Sets the page complete if an exporter has been chosen. */ private void checkIfPageComplete(){ setPageComplete(wizardData.getChosenExporter() != null); } }