Package com.eclipserunner.model.adapters

Source Code of com.eclipserunner.model.adapters.RunnerModelTreeWithTypesAdapter

package com.eclipserunner.model.adapters;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.IViewSite;

import com.eclipserunner.model.ICategoryNode;
import com.eclipserunner.model.ILaunchNode;
import com.eclipserunner.model.ILaunchTypeNode;
import com.eclipserunner.model.IRunnerModel;
import com.eclipserunner.model.impl.LaunchTypeNode;

/**
* Development code ... before refactoring.
*
* @author vachacz
*/
public class RunnerModelTreeWithTypesAdapter implements ITreeContentProvider {

  private IRunnerModel runnerModel;

  public RunnerModelTreeWithTypesAdapter(IRunnerModel runnerModel) {
    this.runnerModel = runnerModel;
  }

  public Object[] getChildren(Object object) {
    if (object instanceof ICategoryNode) {
      return getChildrenByCategoryNode((ICategoryNode) object);
    }
    else if (object instanceof ILaunchTypeNode) {
      return getChildrenByLaunchTypeNode((ILaunchTypeNode) object);
    }
    return null;
  }

  public Object getParent(Object object) {
    if (object instanceof ILaunchNode) {
      return getParentByLaunchNode((ILaunchNode) object);
    }
    else if (object instanceof ILaunchTypeNode) {
      return ((ILaunchTypeNode) object).getCategoryNode();
    }
    return null;
  }

  public boolean hasChildren(Object parent) {
    if (parent instanceof ICategoryNode) {
      ICategoryNode categoryNode = (ICategoryNode) parent;
      return !categoryNode.getLaunchNodes().isEmpty();
    }
    else if (parent instanceof LaunchTypeNode) {
      return true;
    }
    return false;
  }

  // TODO LWA make it better
  public Object[] getElements(Object parent) {
    if (parent instanceof IViewSite) {
      Collection<ICategoryNode> categoryNodes = runnerModel.getCategoryNodes();
      return categoryNodes.toArray();
    }
    return getChildren(parent);
  }

  // TODO LWA make it better and easier
  private Object getParentByLaunchNode(ILaunchNode launchNode) {
    ILaunchConfigurationType type;
    try {
      type = launchNode.getLaunchConfiguration().getType();
    } catch (CoreException e) {
      return null;
    }
    Object[] children = getChildren(launchNode.getCategoryNode());
    for (Object child : children) {
      if (((LaunchTypeNode) child).getLaunchConfigurationType() == type) {
        return child;
      }
    }
    return null;
  }

  private Object[] getChildrenByLaunchTypeNode(ILaunchTypeNode launchTypeNode) {
    ICategoryNode categoryNode = launchTypeNode.getCategoryNode();

    List<ILaunchNode> launchNodes = new ArrayList<ILaunchNode>();
    for (ILaunchNode launchNode : categoryNode.getLaunchNodes()) {
      try {
        if (launchTypeNode.getLaunchConfigurationType().equals(launchNode.getLaunchConfiguration().getType())) {
          launchNodes.add(launchNode);
        }
      } catch (CoreException e) {
      }
    }
    return launchNodes.toArray();
  }

  private Object[] getChildrenByCategoryNode(ICategoryNode categoryNode) {
    List<LaunchTypeNode> launchTypeNodes = new ArrayList<LaunchTypeNode>();
    for (ILaunchNode launchNode : categoryNode.getLaunchNodes()) {
      try {
        ILaunchConfigurationType type = launchNode.getLaunchConfiguration().getType();
        if (!isTypeOnTheList(type, launchTypeNodes)) {
          LaunchTypeNode launchNodeType = new LaunchTypeNode();
          launchNodeType.setCategoryNode(categoryNode);
          launchNodeType.setLaunchConfigurationType(type);

          launchTypeNodes.add(launchNodeType);
        }
      } catch (CoreException e) {
      }
    }
    return launchTypeNodes.toArray();
  }

  private boolean isTypeOnTheList(ILaunchConfigurationType type,  List<LaunchTypeNode> launchTypeNodes) {
    for (LaunchTypeNode launchTypeNode : launchTypeNodes) {
      if (launchTypeNode.getLaunchConfigurationType().equals(type)) {
        return true;
      }
    }
    return false;
  }

  public void dispose() {
  }

  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
  }

}
TOP

Related Classes of com.eclipserunner.model.adapters.RunnerModelTreeWithTypesAdapter

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.