@Override
  public void notifyStack(IProcedure model, StackNotification data) {
    // We want to keep all models updated
    String instanceId = model.getProcId();
    // There may be stack notifications coming before having a model
    // actually created
    if (!m_procId.equals(instanceId)) {
      return;
    }

    CallstackNode currentNode = m_input.getCurrentNode();
    CallstackNode newNode = m_input.notifyStack(model, data);

    switch (data.getStackType()) {
      case CALL:
        m_viewer.add(currentNode, newNode);
        m_viewer.expandToLevel(newNode, TreeViewer.ALL_LEVELS);
        break;
      case RETURN:
        m_viewer.collapseToLevel(currentNode, TreeViewer.ALL_LEVELS);
        m_viewer.update(new Object[] {currentNode, newNode}, null);
        break;
      case LINE:
        m_viewer.refresh(newNode, true);
        break;
    }
  }