Package com.eclipserunner.model.impl

Source Code of com.eclipserunner.model.impl.CategoryNode

package com.eclipserunner.model.impl;

import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import com.eclipserunner.model.IActionEnablement;
import com.eclipserunner.model.ICategoryNode;
import com.eclipserunner.model.ICategoryNodeChangeListener;
import com.eclipserunner.model.ILaunchNode;
import com.eclipserunner.model.ILaunchNodeChangeListener;
import com.eclipserunner.ui.dnd.RunnerViewDropListener;

/**
* Container of launch configurations presented in RunnerView tree.
*
* @author vachacz
*/
public class CategoryNode implements ICategoryNode, ILaunchNodeChangeListener, IActionEnablement {

  private static final int PRIME_MULTIPLYER = 11;
  private static final int PRIME_BASE       = 17;

  class LaunchNodeComparator implements Comparator<ILaunchNode> {
    public int compare(ILaunchNode o1, ILaunchNode o2) {
      return o1.getLaunchConfiguration().getName().compareTo(o2.getLaunchConfiguration().getName());
    }
  }

  private String name;
  private Set<ILaunchNode> launchNodes = new TreeSet<ILaunchNode>(new LaunchNodeComparator());
  private Set<ICategoryNodeChangeListener> categoryNodeChangeListeners = new HashSet<ICategoryNodeChangeListener>();

  private boolean removable  = true;
  private boolean renameable = true;

  public CategoryNode(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
    fireCategoryNodeChangedEvent();
  }

  public final Set<ILaunchNode> getLaunchNodes() {
    return launchNodes;
  }

  public void add(ILaunchNode launchNode) {
    launchNode.setCategoryNode(this);
    launchNode.addLaunchNodeChangeListener(this);

    launchNodes.add(launchNode);
    fireCategoryNodeChangedEvent();
  }

  public void remove(ILaunchNode launchNode) {
    if (launchNodes.contains(launchNode)) {
      launchNodes.remove(launchNode);

      // TODO BARY investigate why this causes NullPointerException on RunnerModelTreeWithTypesAdapter line 80
      //launchNode.setCategoryNode(null);
      launchNode.removeLaunchNodeChangeListener(this);
    }
    fireCategoryNodeChangedEvent();
  }

  public void setBookmarked(boolean state) {
    for (ILaunchNode launchNode : launchNodes) {
      launchNode.setBookmarked(state);
    }
    fireCategoryNodeChangedEvent();
  }

  public void addCategoryNodeChangeListener(ICategoryNodeChangeListener categoryNodeChangeListener) {
    categoryNodeChangeListeners.add(categoryNodeChangeListener);
  }

  public void removeCategoryNodeChangeListener(ICategoryNodeChangeListener categoryNodeChangeListener) {
    categoryNodeChangeListeners.remove(categoryNodeChangeListener);
  }

  private void fireCategoryNodeChangedEvent() {
    for (ICategoryNodeChangeListener categoryNodeChangeListener : categoryNodeChangeListeners) {
      categoryNodeChangeListener.categoryNodeChanged();
    }
  }

  public void launchNodeChanged() {
    fireCategoryNodeChangedEvent();
  }

  public boolean isRemovable() {
    return removable;
  }

  public boolean isRenamable() {
    return renameable;
  }

  public void setRemovable(boolean removable) {
    this.removable = removable;
  }

  public void setRenameable(boolean renameable) {
    this.renameable = renameable;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj instanceof ICategoryNode) {
      ICategoryNode categoryNode = (ICategoryNode) obj;
      return getName().equals(categoryNode.getName());
    }
    return super.equals(obj);
  }

  @Override
  public int hashCode () {
    int code = PRIME_BASE;
    code = PRIME_MULTIPLYER * code + getName().hashCode();
    return code;
  }

  public boolean isBookmarked() {
    throw new UnsupportedOperationException("Category cannot be bookmarked.");
  }

  public boolean supportsDrop(int currentLocation) {
    return currentLocation == RunnerViewDropListener.LOCATION_ON;
  }

  public boolean drop(List<ILaunchNode> launchNodesToMove) {
    for (ILaunchNode launchNode : launchNodesToMove) {
      ICategoryNode sourceCategoryNode = launchNode.getCategoryNode();
      sourceCategoryNode.remove(launchNode);
      this.add(launchNode);
    }
    return true;
  }

}
TOP

Related Classes of com.eclipserunner.model.impl.CategoryNode

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.