package org.easyb.ui.preferences; import org.apache.commons.lang.StringUtils; import org.easyb.launch.preference.LaunchPreferenceManager; import org.easyb.ui.EasybUIActivator; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.preference.PreferencePage; 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.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.Control; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * Sets alternate jars to use for launching behaviours. * All jars have to be set other wise the default ones bundled * with plugin will be used. * @author whiteda * */ public class LaunchPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private static final String FILE_LOOK_UP_TXT = "..."; private static final String JAR_EXTENSION = "*.jar"; private Label lblEasybJar; private Text txtEasybJar; private Button btnEasybJar; private Label lblCliJar; private Text txtCliJar; private Button btnCliJar; private Label lblGroovyJar; private Text txtGroovyJar; private Button btnGroovyJar; private Label lblDescription; private Label lblDefaultJars; private FileDialog fDlg; private String easybPath=""; private String cliPath = ""; private String groovyPath = ""; private String origEasybPath =""; private String origCliPath = ""; private String origGroovyPath = ""; private ModifyListener txtModifyListener = new ModifyListener(){ @Override public void modifyText(ModifyEvent e) { if(isJarsSet()|| isJarsEmpty()){ setValid(true); }else{ setValid(false); } } }; private SelectionListener btnEasybSelect = new SelectionAdapter(){ @Override public void widgetSelected(SelectionEvent e) { fDlg.setText("Choose easyb jar"); fDlg.setFilterPath(txtEasybJar.getText()); easybPath = fDlg.open(); txtEasybJar.setText(easybPath); } }; private SelectionAdapter btnCliSelect = new SelectionAdapter(){ @Override public void widgetSelected(SelectionEvent e) { fDlg.setFilterPath(txtCliJar.getText()); fDlg.setText("Choose commons-cli jar"); cliPath = fDlg.open(); txtCliJar.setText(cliPath); } }; private SelectionAdapter btnGroovySelect = new SelectionAdapter(){ @Override public void widgetSelected(SelectionEvent e) { fDlg.setText("Choose groovy jar"); fDlg.setFilterPath(txtGroovyJar.getText()); groovyPath = fDlg.open(); txtGroovyJar.setText(groovyPath); } }; @Override public void init(IWorkbench workbench) { } @Override protected Control createContents(Composite parent) { //Set up file dialog fDlg = new FileDialog(getShell(),SWT.OPEN); fDlg.setFilterExtensions(new String[]{JAR_EXTENSION}); //Set controls lblDescription = new Label(parent,SWT.NONE); lblDescription.setText("Specify alternative jars to the default ones bundled with the plugin:"); lblDefaultJars = new Label(parent,SWT.NONE); lblDefaultJars.setText(getDefaultJars()); Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); group.setText("Set jar locations"); GridLayout layout = new GridLayout(); layout.numColumns = 3; layout.marginBottom = 0; layout.marginTop = 0; layout.marginLeft = 0; layout.marginRight = 0; group.setLayout(layout); lblEasybJar = new Label(group,SWT.NONE); lblEasybJar.setText("Easyb jar:"); txtEasybJar = new Text(group,SWT.SINGLE | SWT.BORDER); txtEasybJar.addModifyListener(txtModifyListener); txtEasybJar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); btnEasybJar = new Button(group,SWT.PUSH); btnEasybJar.setText(FILE_LOOK_UP_TXT); btnEasybJar.addSelectionListener(btnEasybSelect); lblCliJar = new Label(group,SWT.NONE); lblCliJar.setText("Commons cli jar:"); txtCliJar = new Text(group,SWT.SINGLE | SWT.BORDER); txtCliJar.addModifyListener(txtModifyListener); txtCliJar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); btnCliJar = new Button(group,SWT.PUSH); btnCliJar.setText(FILE_LOOK_UP_TXT); btnCliJar.addSelectionListener(btnCliSelect); lblGroovyJar = new Label(group,SWT.NONE); lblGroovyJar.setText("Groovy jar:"); txtGroovyJar = new Text(group,SWT.SINGLE | SWT.BORDER); txtGroovyJar.addModifyListener(txtModifyListener); txtGroovyJar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); btnGroovyJar = new Button(group,SWT.PUSH); btnGroovyJar.setText(FILE_LOOK_UP_TXT); btnGroovyJar.addSelectionListener(btnGroovySelect); intialiseFromPreferences(); return group; } @Override protected void performDefaults(){ txtEasybJar.setText(""); txtCliJar.setText(""); txtGroovyJar.setText(""); LaunchPreferenceManager.setDefaults(); super.performDefaults(); } @Override public boolean performCancel() { LaunchPreferenceManager.setEasybJarLocation(origEasybPath); LaunchPreferenceManager.setCommoncCLIJarLocation(origCliPath); LaunchPreferenceManager.setGroovyJarLocation(origGroovyPath); return super.performCancel(); } @Override public boolean performOk() { //Either all set or all empty if(isJarsSet()||isJarsEmpty()){ if(!StringUtils.isBlank(txtEasybJar.getText())){ LaunchPreferenceManager.setEasybJarLocation(txtEasybJar.getText()); } if(!StringUtils.isBlank(txtCliJar.getText())){ LaunchPreferenceManager.setCommoncCLIJarLocation(txtCliJar.getText()); } if(!StringUtils.isBlank(txtGroovyJar.getText())){ LaunchPreferenceManager.setGroovyJarLocation(txtGroovyJar.getText()); } return true; } return super.performOk(); } private boolean isJarsSet(){ if(!StringUtils.isBlank(txtEasybJar.getText()) && !StringUtils.isBlank(txtCliJar.getText()) && !StringUtils.isBlank(txtGroovyJar.getText())){ return true; } return false; } private boolean isJarsEmpty(){ if(StringUtils.isBlank(txtEasybJar.getText()) && StringUtils.isBlank(txtCliJar.getText()) && StringUtils.isBlank(txtGroovyJar.getText())){ return true; } return false; } private void intialiseFromPreferences(){ origEasybPath = LaunchPreferenceManager.getEasybJarLocation(); txtEasybJar.setText(origEasybPath); origCliPath = LaunchPreferenceManager.getCommoncCLIJar(); txtCliJar.setText(origCliPath); origGroovyPath = LaunchPreferenceManager.getGroovyJarLocation(); txtGroovyJar.setText(origGroovyPath); } private String getDefaultJars(){ try{ return LaunchPreferenceManager.getFormattedDefaultJarNames(); }catch(CoreException cex){ String error = "Unable to display default jars"; EasybUIActivator.Log(error, cex); this.setErrorMessage(error); return "<"+error+">"; } } }