Package org.eclipse.php.internal.debug.core.launching

Source Code of org.eclipse.php.internal.debug.core.launching.PHPLaunch

/*******************************************************************************
* Copyright (c) 2009 IBM Corporation and others.
* 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:
*     IBM Corporation - initial API and implementation
*     Zend Technologies
*******************************************************************************/
/**
*
*/
package org.eclipse.php.internal.debug.core.launching;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.Launch;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.core.model.ISourceLocator;

/**
* A PHP Launch. This launch is more flexible in terms of terminating launches.
*
* @author shalom
*/
public class PHPLaunch extends Launch {

  private boolean pretendsRunning;

  /**
   * Constructs a launch with the specified attributes.
   *
   * @param launchConfiguration
   *            the configuration that was launched
   * @param mode
   *            the mode of this launch - run or debug (constants defined by
   *            <code>ILaunchManager</code>)
   * @param locator
   *            the source locator to use for this debug session, or
   *            <code>null</code> if not supported
   */
  public PHPLaunch(ILaunchConfiguration launchConfiguration, String mode,
      ISourceLocator locator) {
    super(launchConfiguration, mode, locator);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.Launch#canTerminate()
   */
  public boolean canTerminate() {
    return !isTerminated();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.debug.core.Launch#isTerminated()
   */
  public boolean isTerminated() {
    if (pretendsRunning) {
      return false;
    }

    if (getProcesses0().isEmpty() && getDebugTargets0().isEmpty()) {
      return true;
    }

    Iterator processes = getProcesses0().iterator();
    while (processes.hasNext()) {
      IProcess process = (IProcess) processes.next();
      if (!process.isTerminated()) {
        return false;
      }
    }

    Iterator targets = getDebugTargets0().iterator();
    while (targets.hasNext()) {
      IDebugTarget target = (IDebugTarget) targets.next();
      if (!(target.isTerminated() || target.isDisconnected())) {
        return false;
      }
    }

    return true;
  }

  public Object[] getChildren() {
    // screen any dead targets in case we have at least one live target.
    List targets = getDebugTargets0();
    List toRemove = new ArrayList(targets.size());
    if (targets.size() > 1) {
      IDebugTarget[] targetsArr = new IDebugTarget[targets.size()];
      targets.toArray(targetsArr);
      for (int i = 0; i < targetsArr.length; i++) {
        if (targetsArr[i].isTerminated()) {
          toRemove.add(targetsArr[i]);
        }
      }
      if (toRemove.size() < targets.size()) {
        // we have some connected and some terminated.
        // remove the terminated.
        targets.removeAll(toRemove);
      }
    }
    return super.getChildren();
  }

  public void pretendRunning(boolean running) {
    this.pretendsRunning = running;
  }

}
TOP

Related Classes of org.eclipse.php.internal.debug.core.launching.PHPLaunch

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.