/******************************************************************************* * Copyright (c) 2012 VMware, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VMware, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.roo.ui.internal.properties; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.TitleAreaDialog; 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.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.springframework.ide.eclipse.roo.core.internal.model.DefaultRooInstall; import org.springframework.ide.eclipse.roo.core.model.IRooInstall; import org.springframework.ide.eclipse.roo.ui.RooUiActivator; import org.springframework.util.StringUtils; /** * @author Christian Dupuis */ public class RooInstallDialog extends TitleAreaDialog { private Text homeText; private Text nameText; private Text versionText; private String home; private String name; private final IRooInstall install; private final InstalledRooInstallBlock prefPage; public RooInstallDialog(Shell parentShell, IRooInstall install, InstalledRooInstallBlock parent) { super(parentShell); this.prefPage = parent; this.install = install; this.name = install.getName(); this.home = install.getHome(); } public IRooInstall getResult() { return new DefaultRooInstall(home, name, install.isDefault()); } private void clearError() { getButton(OK).setEnabled(true); setErrorMessage(null); } private void setError(String message) { getButton(OK).setEnabled(false); setErrorMessage(message); } /* * (non-Javadoc) * * @see * org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse * .swt.widgets.Composite) */ @Override protected Control createDialogArea(Composite parent) { Composite parentComposite = (Composite) super.createDialogArea(parent); Composite composite = new Composite(parentComposite, SWT.NULL); GridLayout layout = new GridLayout(); layout.marginHeight = 10; layout.marginWidth = 10; layout.numColumns = 2; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label name = new Label(composite, SWT.WRAP); name.setText("Name:"); // name.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); nameText = new Text(composite, SWT.BORDER); nameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (install.getName() != null) { nameText.setText(install.getName()); } nameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { RooInstallDialog.this.name = nameText.getText(); validate(true); } }); Label version = new Label(composite, SWT.WRAP); version.setText("Version:"); // version.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); versionText = new Text(composite, SWT.BORDER); versionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); versionText.setEnabled(false); if (install.getVersion() != null) { versionText.setText(install.getVersion()); } Label directory = new Label(composite, SWT.WRAP); directory.setText("Roo home:"); // directory.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); homeText = new Text(composite, SWT.BORDER); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 250; homeText.setLayoutData(data); homeText.setEnabled(false); if (install.getHome() != null) { homeText.setText(install.getHome()); } homeText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validate(true); } }); new Label(composite, SWT.WRAP); Button browseButton = new Button(composite, SWT.PUSH); browseButton.setText("Browse..."); browseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); browseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { DirectoryDialog dialog = new DirectoryDialog(getShell()); dialog.setMessage("Select Roo installation directory"); dialog.setText("Roo installation directory"); String result = dialog.open(); if (StringUtils.hasText(result)) { homeText.setText(result); home = result; validate(true); if (!StringUtils.hasText(nameText.getText()) && StringUtils.hasText(versionText.getText())) { nameText.setText(prefPage.generateName("Roo " + versionText.getText(), install)); } } } }); setTitle("Configure Roo Installation"); setTitleImage(RooUiActivator.getImageDescriptor("icons/full/wizban/roo_wizban.png").createImage()); Dialog.applyDialogFont(composite); return composite; } protected void validate(boolean validateHome) { clearError(); if (homeText.getText() == null || homeText.getText().equals("")) { setError("Select a Roo home directory"); return; } else if (validateHome) { IRooInstall install = new DefaultRooInstall(homeText.getText(), nameText.getText(), false); IStatus status = install.validate(); if (!status.isOK()) { setError(status.getMessage()); } versionText.setText(install.getVersion()); } if (nameText.getText() == null || nameText.getText().equals("")) { setError("A unique name is required"); } else { if (prefPage.isDuplicateName(nameText.getText(), install)) { setError("Name is not unique"); } } } }