package com.mobilesorcery.sdk.ui.internal.properties; import org.eclipse.swt.SWT; 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.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import com.mobilesorcery.sdk.core.MoSyncBuilder; import com.mobilesorcery.sdk.core.ParameterResolver; import com.mobilesorcery.sdk.core.build.CommandLineBuildStep; import com.mobilesorcery.sdk.core.build.CommandLineBuildStep.Factory; import com.mobilesorcery.sdk.ui.BuildStepEditor; import com.mobilesorcery.sdk.ui.ParameterResolverContentProvider; import com.mobilesorcery.sdk.ui.UIUtils; import com.mobilesorcery.sdk.ui.UpdateListener; import com.mobilesorcery.sdk.ui.UpdateListener.IUpdatableControl; public final class CommandLineBuildStepEditor extends BuildStepEditor implements IUpdatableControl { private Button runOnce; private Button runPerFile; private Text filePattern; private Text script; private Text name; private Button failOnError; private CommandLineBuildStep.Factory getFactory() { return (Factory) factory; } @Override public void configureShell(Shell shell) { super.configureShell(shell); shell.setText("Edit Command Line Build Step"); } @Override public Control createDialogArea(Composite parent) { Composite main = (Composite) super.createDialogArea(parent); main.setLayoutData(new GridData(GridData.FILL)); main.setLayout(new GridLayout(2, false)); Label nameLabel = new Label(main, SWT.NONE); nameLabel.setText("Build Step &Name:"); name = new Text(main, SWT.BORDER | SWT.SINGLE); name.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 1, 1)); runOnce = new Button(main, SWT.RADIO); runOnce.setText("Run script &once"); runOnce.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1)); runOnce.setSelection(!getFactory().shouldRunPerFile()); runPerFile = new Button(main, SWT.RADIO); runPerFile.setText("Run script for each file that matches:"); filePattern = new Text(main, SWT.BORDER | SWT.SINGLE); filePattern.setLayoutData(new GridData(UIUtils.getDefaultFieldSize(), SWT.DEFAULT)); script = new Text(main, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); GridData scriptData = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1); scriptData.heightHint = UIUtils.getDefaultListHeight(); script.setLayoutData(scriptData); UpdateListener listener = new UpdateListener(this); runPerFile.addListener(SWT.Selection, listener); runOnce.addListener(SWT.Selection, listener); name.setText(factory.getName() == null ? "" : factory.getName()); runPerFile.setSelection(getFactory().shouldRunPerFile()); filePattern.setText(getFactory().getFilePattern() == null ? "" : getFactory().getFilePattern()); script.setText(getFactory().getRawScript() == null ? "" : getFactory().getRawScript()); failOnError = new Button(main, SWT.CHECK); failOnError.setText("&Fail on build error"); failOnError.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1)); failOnError.setSelection(getFactory().shouldFailOnError()); ParameterResolver resolver = CommandLineBuildStep.createParameterResolver( MoSyncBuilder.createParameterResolver(project, null)); ParameterResolverContentProvider.createProposalProvider(script, resolver); return main; } @Override public void updateUI() { filePattern.setEnabled(runPerFile.getSelection()); } @Override public void okPressed() { getFactory().setFilePattern(filePattern.getText()); getFactory().setRunPerFile(runPerFile.getSelection()); getFactory().setRawScript(script.getText()); getFactory().setName(name.getText()); getFactory().setFailOnError(failOnError.getSelection()); super.okPressed(); } }