/**
   * Gathers all LINKS we can travel through from 'searchNode'.
   *
   * @param graph
   * @param searchNode
   * @return
   */
  protected Collection<LINK> getLinks(SEARCH_NODE searchNode) {
    NODE node = (NODE) searchNode.node;
    Collection<LINK> origLinks = (Collection<LINK>) node.getLinks();

    if (view == null) {
      return origLinks;
    }

    NODE from = (NODE) searchNode.node;

    Collection<LINK> extraLinks = view.getExtraLinks(searchNode, origLinks);

    List<LINK> result =
        new ArrayList<LINK>(origLinks.size() + (extraLinks == null ? 0 : extraLinks.size()));

    if (origLinks != null) {
      for (LINK link : origLinks) {
        if (view == null || !view.isLinkOpened(from, link)) continue;
        // LINK IS OPENED
        result.add(link);
      }
    }

    if (extraLinks != null) {
      for (LINK link : extraLinks) {
        if (view == null || !view.isLinkOpened(from, link)) continue;
        // LINK IS OPENED
        result.add(link);
      }
    }

    return result;
  }