Package org.fusesource.ide.server.karaf.ui.runtime

Source Code of org.fusesource.ide.server.karaf.ui.runtime.AbstractKarafRuntimeComposite

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
*     Red Hat, Inc. - initial API and implementation
******************************************************************************/

package org.fusesource.ide.server.karaf.ui.runtime;

import java.io.File;
import java.util.List;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
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.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
import org.eclipse.wst.server.core.TaskModel;
import org.eclipse.wst.server.core.internal.IInstallableRuntime;
import org.eclipse.wst.server.core.internal.ServerPlugin;
import org.eclipse.wst.server.ui.internal.ImageResource;
import org.eclipse.wst.server.ui.internal.wizard.TaskWizard;
import org.eclipse.wst.server.ui.internal.wizard.fragment.LicenseWizardFragment;
import org.eclipse.wst.server.ui.wizard.IWizardHandle;
import org.eclipse.wst.server.ui.wizard.WizardFragment;
import org.fusesource.ide.server.karaf.core.Activator;
import org.fusesource.ide.server.karaf.core.util.KarafUtils;
import org.fusesource.ide.server.karaf.ui.Messages;

@SuppressWarnings("restriction")
public abstract class AbstractKarafRuntimeComposite extends Composite implements
    Listener {

  public static final String SEPARATOR = File.separator;

  protected final Composite parent;
  protected final IWizardHandle wizardHandle;
  protected Text txtKarafDir;
  protected final KarafWizardDataModel model;
  protected boolean valid = false;
  protected IInstallableRuntime ir;
  protected Job installRuntimeJob;
  protected IJobChangeListener jobListener;
  protected Button btnBrowseButton;
  protected Button btnDownloadAndInstallButton;
  protected Label installLabel;
  protected IRuntimeWorkingCopy runtimeWC;

  public AbstractKarafRuntimeComposite(Composite parent,
      IWizardHandle wizardHandle, KarafWizardDataModel model) {
    super(parent, SWT.NONE);
    this.parent = parent;
    this.wizardHandle = wizardHandle;
    this.model = model;
    wizardHandle
        .setTitle(Messages.AbstractKarafRuntimeComposite_wizard_tite);
    wizardHandle
        .setDescription(Messages.AbstractKarafRuntimeComposite_wizard_desc);
    wizardHandle.setImageDescriptor(ImageResource
        .getImageDescriptor(ImageResource.IMG_WIZBAN_NEW_RUNTIME));
  }

  public void handleEvent(Event event) {
    boolean valid = false;
    if (event.type == SWT.FocusIn) {
      handleFocusEvent(event);
    } else {
      if (event.widget == txtKarafDir) {
        valid = validate();
        if (valid) {
          String installDir = txtKarafDir.getText();
          model.setKarafInstallDir(installDir);
        }
      }
    }

    wizardHandle.update();
  }

  protected void cancel() {
    if (this.installRuntimeJob != null)
      this.installRuntimeJob.cancel();
  }

  public void handleFocusEvent(Event event) {
    if (event.widget == txtKarafDir) {
      wizardHandle.setMessage(
          Messages.AbstractKarafRuntimeComposite_txt_info_msg,
          IMessageProvider.NONE);
    }

  }

  protected abstract boolean doClassPathEntiresExist(
      final String karafInstallDir);

  protected abstract String getKarafPropFileLocation(String karafInstallDir);

  public boolean validate() {
    valid = false;
    String dirLocation = txtKarafDir.getText().trim();
    if (dirLocation != null && !"".equals(dirLocation)) {
      File file = new File(dirLocation);
      if (!file.exists()) {
        wizardHandle.setMessage(
            Messages.AbstractKarafRuntimeComposite_no_dir,
            IMessageProvider.ERROR);
      } else if (!file.isDirectory()) {
        wizardHandle.setMessage(
            Messages.AbstractKarafRuntimeComposite_not_a_dir,
            IMessageProvider.ERROR);
      } else {
        File binKaraf = new File(dirLocation + SEPARATOR
            + Messages.AbstractKarafRuntimeComposite_bin_karaf);
        File binKarafBat = new File(dirLocation + SEPARATOR
            + Messages.AbstractKarafRuntimeComposite_bin_karaf_bat);
        File confFile = new File(getKarafPropFileLocation(dirLocation));
        if ((binKaraf.exists() || binKarafBat.exists())
            && confFile.exists()
            && doClassPathEntiresExist(dirLocation)) {
          valid = true;
          wizardHandle.setMessage("", IMessageProvider.NONE); //$NON-NLS-1$
        } else {
          wizardHandle.setMessage(
              Messages.AbstractKarafRuntimeComposite_invalid_dir,
              IMessageProvider.ERROR); //$NON-NLS-1$
        }
      }
    } else {
      wizardHandle.setMessage(
          Messages.AbstractKarafRuntimeComposite_wizard_help_msg,
          IMessageProvider.NONE); //$NON-NLS-1$
    }
    return valid;
  }

  void createContents() {
    setLayout(new GridLayout(3, false));
    Label lblKarafInstallDir = new Label(this, SWT.NONE);
    lblKarafInstallDir
        .setText(Messages.AbstractKarafRuntimeComposite_install_dir_label);
    txtKarafDir = new Text(this, SWT.BORDER);
    txtKarafDir.addListener(SWT.Modify, this);
    txtKarafDir.setText(model.getKarafInstallDir());
    GridData txtKarafDirGridData = new GridData();
    txtKarafDirGridData.grabExcessHorizontalSpace = true;
    txtKarafDirGridData.horizontalAlignment = SWT.FILL;
    txtKarafDir.setLayoutData(txtKarafDirGridData);

    btnBrowseButton = new Button(this, SWT.PUSH);
    btnBrowseButton
        .setText(Messages.AbstractKarafRuntimeComposite_browse_text);
    btnBrowseButton.addMouseListener(new MouseListener() {

      public void mouseDoubleClick(MouseEvent e) {
      }

      public void mouseDown(MouseEvent e) {

      }

      public void mouseUp(MouseEvent e) {
        DirectoryDialog dd = new DirectoryDialog(Display.getDefault()
            .getActiveShell(), SWT.OPEN);
        dd.setFilterPath(txtKarafDir.getText());
        String dir = dd.open();
        if (dir != null) {
          txtKarafDir.setText(dd.getFilterPath());
        }
      }

    });

    installLabel = new Label(this, SWT.NONE);
    installLabel
        .setText(Messages.AbstractKarafRuntimeComposite_runtimeinstall_label);
    GridData installLabelGridData = new GridData();
    installLabelGridData.grabExcessHorizontalSpace = true;
    installLabelGridData.horizontalAlignment = SWT.FILL;
    installLabelGridData.horizontalSpan = 2;
    installLabel.setLayoutData(installLabelGridData);

    btnDownloadAndInstallButton = new Button(this, SWT.PUSH);
    btnDownloadAndInstallButton
        .setText(Messages.AbstractKarafRuntimeComposite_downloadAndInstall_text);
    btnDownloadAndInstallButton
        .setToolTipText(Messages.AbstractKarafRuntimeComposite_downloadAndInstall_description);
    btnDownloadAndInstallButton.addMouseListener(new MouseListener() {

      public void mouseDoubleClick(MouseEvent e) {
      }

      public void mouseDown(MouseEvent e) {

      }

      public void mouseUp(MouseEvent e) {
        ir = ServerPlugin.findInstallableRuntime(runtimeWC
            .getRuntimeType().getId());
        btnDownloadAndInstallButton.setEnabled(ir != null);

        if (ir == null)
          return;

        String license = null;
        try {
          license = ir.getLicense(new NullProgressMonitor());
        } catch (CoreException ex) {
          Activator.getLogger().error(ex);
        }
        TaskModel taskModel = new TaskModel();
        taskModel.putObject(LicenseWizardFragment.LICENSE, license);
        TaskWizard wizard2 = new TaskWizard(
            Messages.AbstractKarafRuntimeComposite_jboss_fuse_rt_label,
            new WizardFragment() {
              protected void createChildFragments(
                  List<WizardFragment> list) {
                list.add(new LicenseWizardFragment());
                list.add(new RTITargetFolderWizardFragment());
              }
            }, taskModel);

        WizardDialog dialog2 = new WizardDialog(getShell(), wizard2);
        if (dialog2.open() == Window.CANCEL)
          return;

        final String selectedDirectory = (String) taskModel
            .getObject(RTITargetFolderWizardFragment.FUSE_RT_LOC);

        if (selectedDirectory != null) {
          // ir.install(new Path(selectedDirectory));
          final IPath installPath = new Path(selectedDirectory);
          installRuntimeJob = new Job("Installing server runtime "
              + ir.getName() + "...") {

            public boolean belongsTo(Object family) {
              return ServerPlugin.PLUGIN_ID.equals(family);
            }

            protected IStatus run(IProgressMonitor monitor) {
              try {
                Display.getDefault().asyncExec(new Runnable() {
                  public void run() {
                    installLabel.setText(getName());
                    btnBrowseButton.setEnabled(false);
                    btnDownloadAndInstallButton
                        .setEnabled(false);
                    txtKarafDir.setEnabled(false);
                    parent.update();
                  }
                });
                ir.install(installPath, monitor);
              } catch (CoreException ce) {
                return ce.getStatus();
              }

              return Status.OK_STATUS;
            }
          };
          jobListener = new JobChangeAdapter() {
            public void done(IJobChangeEvent event) {
              Display.getDefault().asyncExec(new Runnable() {
                public void run() {
                  if (!AbstractKarafRuntimeComposite.this
                      .isDisposed()) {
                    installLabel.setText("Installation of "
                        + ir.getName() + " completed.");
                    btnBrowseButton.setEnabled(true);
                    btnDownloadAndInstallButton
                        .setEnabled(true);
                    txtKarafDir.setEnabled(true);
                    txtKarafDir.setText(selectedDirectory);
                    parent.update();
                  }
                }
              });
              installRuntimeJob.removeJobChangeListener(this);
              installRuntimeJob = null;
              Display.getDefault().asyncExec(new Runnable() {
                public void run() {
                  if (!isDisposed()) {
                    validate();
                  }
                }
              });
            }
          };
          installRuntimeJob.addJobChangeListener(jobListener);
          installRuntimeJob.schedule();
        }
      }

    });
    wizardHandle.update();
  }

  protected void setRuntime(IRuntimeWorkingCopy newRuntime) {
    if (newRuntime == null) {
      runtimeWC = null;
    } else {
      runtimeWC = newRuntime;
    }

    if (runtimeWC == null) {
      ir = null;
      btnDownloadAndInstallButton.setEnabled(false);
      installLabel.setText("");
    } else {
      ir = ServerPlugin.findInstallableRuntime(runtimeWC.getRuntimeType()
          .getId());
      if (ir != null) {
        btnDownloadAndInstallButton.setEnabled(true);
        // installLabel.setText(ir.getName());
      }
    }
    init();
    validate();
  }

  protected void init() {
    if (runtimeWC.getLocation() != null)
      txtKarafDir.setText(runtimeWC.getLocation().toOSString());
    else
      txtKarafDir.setText("");
  }

  void performFinish() {
  }

  protected boolean isValid() {
    return valid;
  }
}
TOP

Related Classes of org.fusesource.ide.server.karaf.ui.runtime.AbstractKarafRuntimeComposite

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.