package edu.isistan.sadeditor.wizards; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.StringTokenizer; import org.eclipse.jface.wizard.WizardPage; 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.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; import edu.isistan.sadeditor.editor.Messages; /** * The "New" wizard page allows setting the container for the new file as well * as the file name. The page will only accept file name without the extension * OR with the extension that matches the expected one (mpe). */ public class SadWizardSettingsPage extends WizardPage { public static final String ID = "edu.isistan.sadeditor.wizards.SadWizardSettingsPage"; private Text urlPath; private Text archivePathField; private Text directoryTemplateField; private Button browseArchivesButton; private Button browseTemplateDirectoriesButton; private static final String[] FILE_IMPORT_MASK = {"*.pdf"}; private static final String[] FILE_IMPORT_TEMPLATE_MASK = {"*.xml"}; private static String previouslyBrowsedArchive = ""; protected Button sadFromArchiveRadio; protected Button sadFromURLRadio; /** * Create the wizard. */ public SadWizardSettingsPage(String pageId) { super(pageId); } /** * Create contents of the wizard. * @param parent */ public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); { GridLayout layout = new GridLayout(); layout.numColumns = 3; layout.verticalSpacing = 12; composite.setLayout(layout); GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.grabExcessVerticalSpace = true; data.horizontalAlignment = GridData.FILL; composite.setLayoutData(data); } // sad url radio button sadFromURLRadio = new Button(composite, SWT.RADIO); sadFromURLRadio.setText(Messages.SadWizard_Settings_URL_Field); urlPath = new Text(composite, SWT.BORDER); urlPath.setText(Messages.Sad_UrlField); urlPath.addModifyListener(validator); GridData directoryPathData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); urlPath.setLayoutData(directoryPathData); // button ghost Button ghostButton = new Button(composite, SWT.PUSH); ghostButton.setText(""); ghostButton.setVisible(false); setButtonLayoutData(ghostButton); sadFromArchiveRadio = new Button(composite, SWT.RADIO); sadFromArchiveRadio.setText(Messages.SadWizard_Settings_Document_Field); // pdf Sad location entry field archivePathField = new Text(composite, SWT.BORDER); GridData archivePathData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); archivePathField.setLayoutData(archivePathData); archivePathField.setEditable(false); // browse button browseArchivesButton = new Button(composite, SWT.PUSH); browseArchivesButton.setText(Messages.SadWizard_Settings_Browse); setButtonLayoutData(browseArchivesButton); sadFromURLRadio.setSelection(true); archivePathField.setEnabled(false); browseArchivesButton.setEnabled(false); Label title = new Label(composite, SWT.NONE); title.setText(Messages.SadWizard_Settings_Template_Field + ": "); // template location entry field directoryTemplateField = new Text(composite, SWT.BORDER); GridData directoryTemplatePathData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); directoryTemplateField.setLayoutData(directoryTemplatePathData); directoryTemplateField.setEditable(false); // browse button browseTemplateDirectoriesButton = new Button(composite, SWT.PUSH); browseTemplateDirectoriesButton .setText(Messages.SadWizard_Settings_Browse); setButtonLayoutData(browseTemplateDirectoriesButton); browseArchivesButton.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse * .swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { handleLocationArchiveButtonPressed(archivePathField, FILE_IMPORT_MASK); } }); sadFromArchiveRadio.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse * .swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { archiveRadioSelected(); } }); browseTemplateDirectoriesButton.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetS * elected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { handleLocationArchiveButtonPressed(directoryTemplateField, FILE_IMPORT_TEMPLATE_MASK); } }); sadFromURLRadio.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse * .swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { urlRadioSelected(); } }); setPageComplete(validatePage()); setControl(composite); } private void urlRadioSelected() { if (sadFromURLRadio.getSelection()) { sadFromURLRadio.setSelection(true); urlPath.setEnabled(true); archivePathField.setEnabled(false); browseArchivesButton.setEnabled(false); urlPath.setFocus(); sadFromArchiveRadio.setSelection(false); } setPageComplete(validatePage()); } private void archiveRadioSelected() { if (sadFromArchiveRadio.getSelection()) { sadFromArchiveRadio.setSelection(true); urlPath.setEnabled(false); archivePathField.setEnabled(true); browseArchivesButton.setEnabled(true); archivePathField.setFocus(); sadFromURLRadio.setSelection(false); } setPageComplete(validatePage()); } /** * The browse button has been selected. Select the location. */ protected void handleLocationArchiveButtonPressed(Text field, String[] mask) { FileDialog dialog = new FileDialog(field.getShell(), SWT.SHEET); dialog.setFilterExtensions(mask); dialog .setText(Messages.SadWizard_Settings_Import); String fileName = field.getText().trim(); if (fileName.length() == 0) { fileName = previouslyBrowsedArchive; } if (fileName.length() == 0) { dialog.setFilterPath(IDEWorkbenchPlugin.getPluginWorkspace() .getRoot().getLocation().toOSString()); } else { File path = new File(fileName).getParentFile(); if (path != null && path.exists()) { dialog.setFilterPath(path.toString()); } } String selectedArchive = dialog.open(); if (selectedArchive != null) { previouslyBrowsedArchive = selectedArchive; field.setText(previouslyBrowsedArchive); } setPageComplete(validatePage()); } protected ModifyListener validator = new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(validatePage()); } }; protected boolean validatePage() { boolean fields = true; if(this.sadFromArchiveRadio.getSelection()){ if(getArchivePathField().getText().isEmpty()){ fields = false; } } if(this.sadFromURLRadio.getSelection()){ if(getUrlPath().getText().length() <= Messages.Sad_UrlField.length()){ fields = false; } } if(getDirectoryTemplateField().getText().isEmpty()){ if(this.sadFromURLRadio.getSelection()){ fields = false; } } return fields; } public Text getUrlPath() { return urlPath; } public void setUrlPath(Text urlPath) { this.urlPath = urlPath; } public Text getArchivePathField() { return archivePathField; } public void setArchivePathField(Text archivePathField) { this.archivePathField = archivePathField; } public Text getDirectoryTemplateField() { return directoryTemplateField; } public void setDirectoryTemplateField(Text directoryTemplateField) { this.directoryTemplateField = directoryTemplateField; } public String getUrl() { String ret=getUrlPath().getText(); if(sadFromArchiveRadio.getSelection()){ ret=getArchivePathField().getText(); } return ret; } public boolean isWikiSelection() { return sadFromURLRadio.getSelection(); } }