package rhogenwizard.wizards.rhoconnect; import java.io.File; import org.eclipse.jface.dialogs.IDialogPage; 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.Composite; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Text; import rhogenwizard.BuildInfoHolder; /** * 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 AppWizardPage extends WizardPage { private Text m_appFolderText = null; private Text m_appNameText = null; private String m_selectAppDir = null; private Button m_defaultPathButton = null; private Button m_browseButton = null; private Button m_exitsCreateButton = null; /** * Constructor for SampleNewWizardPage. * * @param pageName */ public AppWizardPage() { super("wizardPage"); setTitle("Rhoconnect application generator wizard"); setDescription("Desc wizar"); } public void createAppSettingBarControls(Composite composite) { GridLayout layout = new GridLayout(3, false); layout.verticalSpacing = 9; composite.setLayout(layout); GridData textAligment = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL); GridData checkBoxAligment = new GridData(); checkBoxAligment.horizontalAlignment = GridData.FILL; checkBoxAligment.horizontalSpan = 3; // 1 row Label label = new Label(composite, SWT.NULL); label.setText("&Project name:"); m_appNameText = new Text(composite, SWT.BORDER | SWT.SINGLE); m_appNameText.setLayoutData(textAligment); m_appNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { dialogChanged(); } }); label = new Label(composite, SWT.NULL); // 2 row m_defaultPathButton = new Button(composite, SWT.CHECK); m_defaultPathButton.setText("Create application in default workspace"); m_defaultPathButton.setSelection(true); m_defaultPathButton.setLayoutData(checkBoxAligment); m_defaultPathButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setControlsForDefaultPath(); dialogChanged(); } }); // 3 row m_exitsCreateButton = new Button(composite, SWT.CHECK); m_exitsCreateButton.setText("Create application from existing sources."); m_exitsCreateButton.setSelection(false); m_exitsCreateButton.setLayoutData(checkBoxAligment); m_exitsCreateButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setControlsForExistingSource(); dialogChanged(); } }); // 4 row label = new Label(composite, SWT.NULL); label.setText("&Application folder:"); m_appFolderText = new Text(composite, SWT.BORDER | SWT.SINGLE); m_appFolderText.setLayoutData(textAligment); m_appFolderText.setEditable(false); m_appFolderText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { dialogChanged(); } }); m_browseButton = new Button(composite, SWT.PUSH); m_browseButton.setText("Browse..."); m_browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { handleBrowse(); } }); } protected void setControlsForExistingSource() { boolean enableDefPath = m_exitsCreateButton.getSelection(); m_defaultPathButton.setSelection(!enableDefPath); m_defaultPathButton.setEnabled(!enableDefPath); m_browseButton.setEnabled(enableDefPath); m_appFolderText.setEnabled(enableDefPath); } /** * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NULL); createAppSettingBarControls(container); initialize(); dialogChanged(); setControl(container); } /** * Tests if the current workbench selection is a suitable container to use. */ private void initialize() { setDescription(""); m_appNameText.setText("RhoconnectApplication1"); setControlsForDefaultPath(); } /** * Uses the standard container selection dialog to choose the new value for * the container field. */ private void handleBrowse() { DirectoryDialog appDirDialog = new DirectoryDialog(getShell()); m_selectAppDir = appDirDialog.open(); File placeFolder = new File(m_selectAppDir); if (!placeFolder.isDirectory()) { MessageBox msg = new MessageBox(getShell(), ERROR); msg.setMessage("Invalid directory"); msg.setText("Selected item is not directory."); msg.open(); return; } m_appNameText.setText(placeFolder.getName()); m_appFolderText.setText(m_selectAppDir); } private void setControlsForDefaultPath() { boolean enableDefPath = m_defaultPathButton.getSelection(); m_browseButton.setEnabled(!enableDefPath); m_appFolderText.setEnabled(!enableDefPath); } /** * Ensures that both text fields are set. */ private void dialogChanged() { String appFolder = m_appFolderText.getText(); boolean isDefultPath = m_defaultPathButton.getSelection(); File appFolderFile = new File(appFolder); if (!isDefultPath && (!appFolderFile.isDirectory() || (m_appFolderText.getText().length() == 0))) { updateStatus("Application folder must be specified."); return; } if (m_appNameText.getText().length() == 0) { updateStatus("Project name must be specified."); return; } updateStatus("Press finish for creation of project."); updateStatus(null); } private void updateStatus(String message) { setErrorMessage(message); setPageComplete(message == null); } BuildInfoHolder getBuildInformation() { BuildInfoHolder newInfo = new BuildInfoHolder(); newInfo.appDir = m_appFolderText.getText(); newInfo.appName = m_appNameText.getText(); newInfo.existCreate = m_exitsCreateButton.getSelection(); newInfo.isInDefaultWs = m_defaultPathButton.getSelection(); return newInfo; } }