Package org.springframework.ide.eclipse.roo.ui.internal.properties

Source Code of org.springframework.ide.eclipse.roo.ui.internal.properties.RooInstallDialog

/*******************************************************************************
*  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");
      }
    }
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.roo.ui.internal.properties.RooInstallDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.