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.Button; 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.model.Project; import LinGUIne.model.ProjectManager; import LinGUIne.extensions.IFileImporter; import LinGUIne.extensions.PlaintextImporter; /** * A WizardPage for the ImportFileWizard which prompts the user select an * IFileImporter they would like to use and a Project they would like to import * Files into. * * @author Kyle Mullins */ public class ImportFileWizardSetupPage extends WizardPage { private Label lblImporters; private List lstImporters; private Label lblProjects; private List lstProjects; private Button radExistingProject; private Button radNewProject; private ImportFileData wizardData; private ProjectManager projectMan; /** * Creates a new instance of the page with the given ImportFileData and the * given instance of ProjectManager. */ public ImportFileWizardSetupPage(ImportFileData data, ProjectManager projects){ super("Import File Wizard"); setTitle("Import File Wizard"); setMessage("Select an Importer."); wizardData = data; projectMan = projects; } /** * Assembles the UI components for the page and registers * SelectionListeners. */ @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; container.setLayout(layout); Group grpImporter = new Group(container, SWT.NONE); grpImporter.setLayout(new GridLayout(1, false)); grpImporter.setLayoutData(new GridData(GridData.FILL_BOTH)); grpImporter.setText("Import source"); lblImporters = new Label(grpImporter, SWT.NONE); lblImporters.setText("Select the type of file you want to import:"); lstImporters = new List(grpImporter, SWT.BORDER | SWT.V_SCROLL); lstImporters.setLayoutData(new GridData(GridData.FILL_BOTH)); IConfigurationElement[] configElements = Platform.getExtensionRegistry(). getConfigurationElementsFor("LinGUIne.LinGUIne.extensions.IFileImporter"); final HashMap<String, IConfigurationElement> importerConfigs = new HashMap<String, IConfigurationElement>(); final HashMap<String, IFileImporter> builtInImporters = new HashMap<String, IFileImporter>(); IFileImporter plaintext = new PlaintextImporter(); builtInImporters.put(plaintext.getFileType(), plaintext); lstImporters.add(plaintext.getFileType()); for(IConfigurationElement configElement: configElements){ String fileType = configElement.getAttribute("file_type"); lstImporters.add(fileType); importerConfigs.put(fileType, configElement); } lstImporters.addSelectionListener(new SelectionListener(){ /** * Set which IFileImporter is currently selected. */ @Override public void widgetSelected(SelectionEvent e) { if(lstImporters.getSelectionCount() != 0){ String selectedFileType = lstImporters.getSelection()[0]; IFileImporter importer = null; wizardData.setInternetSource(false); if(builtInImporters.containsKey(selectedFileType)){ importer = builtInImporters.get(selectedFileType); } else if(importerConfigs.containsKey(selectedFileType)){ IConfigurationElement importerConfig = importerConfigs.get(selectedFileType); try { importer = (IFileImporter)importerConfig. createExecutableExtension("class"); } catch (CoreException e1) { e1.printStackTrace(); } } wizardData.setImporter(importer); checkIfPageComplete(); } } @Override public void widgetDefaultSelected(SelectionEvent e) {} }); Group grpProject = new Group(container, SWT.NONE); grpProject.setLayoutData(new GridData(GridData.FILL_BOTH)); grpProject.setLayout(new GridLayout(1, false)); grpProject.setText("Project"); lblProjects = new Label(grpProject, SWT.NONE); lblProjects.setText("Select a Project:"); lstProjects = new List(grpProject, SWT.BORDER | SWT.V_SCROLL); lstProjects.setLayoutData(new GridData(GridData.FILL_BOTH)); for(Project project: projectMan.getProjects()){ lstProjects.add(project.getName()); } lstProjects.addSelectionListener(new SelectionListener(){ /** * Set which Project is selected. */ @Override public void widgetSelected(SelectionEvent e) { if(lstProjects.getSelectionCount() != 0){ Project selected = projectMan.getProject(lstProjects.getSelection()[0]); wizardData.setProject(selected); checkIfPageComplete(); } } @Override public void widgetDefaultSelected(SelectionEvent e) {} }); Composite radioContainer = new Composite(grpProject, SWT.NONE); radioContainer.setLayout(new GridLayout(2, true)); radioContainer.setLayoutData(new GridData(GridData.FILL_BOTH)); radExistingProject = new Button(radioContainer, SWT.RADIO); radExistingProject.setText("Use existing Project."); radExistingProject.setSelection(true); radExistingProject.addSelectionListener(new SelectionListener(){ /** * Re-enable the Project list. */ @Override public void widgetSelected(SelectionEvent e) { lstProjects.setEnabled(true); wizardData.setCreateNewProject(false); checkIfPageComplete(); } @Override public void widgetDefaultSelected(SelectionEvent e) {} }); radNewProject = new Button(radioContainer, SWT.RADIO); radNewProject.setText("Create new Project."); radNewProject.addSelectionListener(new SelectionListener(){ /** * Disable the Project list and set that a new Project should be * created. */ @Override public void widgetSelected(SelectionEvent e) { lstProjects.setEnabled(false); wizardData.setCreateNewProject(true); wizardData.setProject(null); checkIfPageComplete(); } @Override public void widgetDefaultSelected(SelectionEvent e) {} }); setControl(container); setPageComplete(false); } /** * Sets whether or not the page is complete. */ private void checkIfPageComplete(){ if(wizardData.isReadyForFiles()){ setPageComplete(true); } else{ setPageComplete(false); } } }