Package org.springframework.ide.eclipse.boot.ui.preferences

Source Code of org.springframework.ide.eclipse.boot.ui.preferences.BootInstallDialog

/*******************************************************************************
*  Copyright (c) 2012,2013 GoPivotal, 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:
*      GoPivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.boot.ui.preferences;

import java.io.File;

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.layout.RowLayout;
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.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.springframework.ide.eclipse.boot.core.BootActivator;
import org.springframework.ide.eclipse.boot.core.cli.IBootInstallFactory;
import org.springframework.ide.eclipse.boot.core.cli.install.IBootInstall;
import org.springsource.ide.eclipse.commons.frameworks.core.ExceptionUtil;


/**
* @author Christian Dupuis
* @author Kris De Volder
*/
public class BootInstallDialog extends TitleAreaDialog {

  private Text urlText;

  private Text nameText;

  private Text versionText;

  private String url;

  private String name;

  private final IBootInstall install;

  private final InstalledBootInstallBlock prefPage;

  private IBootInstallFactory installFactory;

  public BootInstallDialog(Shell parentShell, IBootInstall install, InstalledBootInstallBlock parent, IBootInstallFactory installFactory) {
    super(parentShell);
    this.prefPage = parent;
    this.install = install;
    this.name = install.getName();
    this.url = install.getUrl();
    this.installFactory = installFactory;
  }

  public IBootInstall getResult() {
    try {
      return installFactory.newInstall(url, name);
    } catch (Exception e) {
      BootActivator.log(e);
    }
    return null;
  }
   

  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;
    layout.makeColumnsEqualWidth = false;
    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) {
        BootInstallDialog.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("Location:");
    // directory.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    urlText = new Text(composite, SWT.BORDER);
    GridData data = new GridData(GridData.FILL_HORIZONTAL);
    data.widthHint = 250;
    urlText.setLayoutData(data);
    urlText.setEnabled(false);
    if (install.getUrl() != null) {
      urlText.setText(install.getUrl());
    }
    urlText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        validate(true);
      }
    });

    new Label(composite, SWT.WRAP);

    Composite buttonRow = new Composite(composite, SWT.NONE);
    buttonRow.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
    buttonRow.setLayout(new RowLayout());
   
    Button browseButton = new Button(buttonRow, SWT.PUSH);
    browseButton.setText("Folder...");
    browseButton.setToolTipText("Browse for a local Spring Boot Installation (unzipped into a folder)");
//    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 Spring Boot installation directory");
        dialog.setText("Boot installation directory");
        String filePath = dialog.open();
        handleBrowseButtonResult(filePath);
      }
    });
    //GridDataFactory.fillDefaults().align(SWT.END, SWT.END).applyTo(browseButton);
   
    browseButton = new Button(buttonRow, SWT.PUSH);
    browseButton.setText("Zip...");
    browseButton.setToolTipText("Browse for a local zip file containing a Spring Boot Installation");
//    browseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
    browseButton.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
        dialog.setFilterExtensions(new String[] {"*.zip"});
        //dialog.setMessage("Select Spring Boot installation directory");
        dialog.setText("Boot Zip File");
        String filePath = dialog.open();
        handleBrowseButtonResult(filePath);
      }
    });
    //GridDataFactory.fillDefaults().align(SWT.END, SWT.END).applyTo(browseButton);
   
    setTitle("Configure Boot Installation");
    //TODO: wizard banner image
    //setTitleImage(RooUiActivator.getImageDescriptor("icons/full/wizban/roo_wizban.png").createImage());

    Dialog.applyDialogFont(composite);
    return composite;
  }

  /**
   * Called after user clicks one of the two browse buttons to select a file or folder.
   */
  public void handleBrowseButtonResult(String filePath) {
    if (hasText(filePath)) {
      url = new File(filePath).toURI().toString();
     
      IBootInstall newInstall = installFactory.newInstall(url, null); //name=null means let domain object choose its default name
      newInstall.clearCache();
     
      urlText.setText(url); //Note: triggers validation by way of listener attached to the urlText
     
      //Don't duplicate default name generation logic here. It belongs in the 'domain' objects implementing IBootInstall
      nameText.setText(prefPage.generateName(newInstall.getName(), install));
     
      // don't trigger validation again already triggered in urlText listener.
      //validate(true);
    }
  }
 
 
  private boolean hasText(String result) {
    return result!=null && !"".equals(result.trim());
  }
 
  protected void validate(boolean validateHome) {
    clearError();
    try {
      if (urlText.getText() == null || urlText.getText().equals("")) {
        setError("Select a Boot home directory or zip file");
        return;
      }
      else if (validateHome) {
        IBootInstall install = installFactory.newInstall(urlText.getText(), nameText.getText());
        IStatus status = install.validate();
        if (!status.isOK()) {
          setError(status.getMessage());
        }
        versionText.setText(install.getVersion());
 
      }
      if (nameText.getText() == null || nameText.getText().trim().equals("")) {
        setError("A name is required");
      }
      else {
        if (prefPage.isDuplicateName(nameText.getText(), install)) {
          setError("Name is not unique");
        }
      }
    } catch (Exception e) {
      BootActivator.log(e);
      setError(ExceptionUtil.getMessage(e));
    }
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.boot.ui.preferences.BootInstallDialog

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.