@Override
 public NODE getParent(NODE node) {
   if (strategy == null) return null;
   SEARCH_NODE wrapper = strategy.getNode(node);
   if (wrapper == null) return null;
   return wrapper.parent.node;
 }
  @Override
  public void init(
      IGraph<NODE, LINK> graph,
      ISearchGoal<NODE, LINK, SEARCH_NODE> goal,
      ISearchStrategy<NODE, LINK, SEARCH_NODE> strategy,
      IGraphView<NODE, LINK, SEARCH_NODE> view,
      Object config) {

    this.graph = graph;
    this.goal = goal;
    this.strategy = strategy;
    this.view = view;
    this.startNode = goal.getStart();

    this.strategy.setContext(this);
    this.goal.setContext(this);

    closed = strategy.createCloseList();
    opened = strategy.createOpenList();

    opened.add((SEARCH_NODE) strategy.makeInitialNode(startNode));

    state = PathFinderState.RUNNING;
  }
 @Override
 public SEARCH_NODE getSearchNode(NODE node) {
   return strategy.getNode(node);
 }