code: @Override
      public Set<KamNode> getAdjacentNodes(KamNode kamNode,
              EdgeDirectionType edgeDirection, EdgeFilter edgeFilter,
              NodeFilter nodeFilter) {
  
          Set<KamNode> adjacentNodes = new LinkedHashSet<KamNode>();
  
          KamNode node = null;
          if (EdgeDirectionType.FORWARD == edgeDirection
                  || EdgeDirectionType.BOTH == edgeDirection) {
              final Set<KamEdge> sources = nodeSourceMap.get(kamNode);
              if (hasItems(sources)) {
                  for (KamEdge kamEdge : sources) {
  
                      // Check for an edge filter
                      if (null != edgeFilter) {
                          if (!edgeFilter.accept(kamEdge)) {
                              continue;
                          }
                      }
  
                      node = kamEdge.getTargetNode();
  
                      // Check for a node filter
                      if (null != nodeFilter) {
                          if (!nodeFilter.accept(node)) {
                              continue;
                          }
                      }
                      adjacentNodes.add(node);
                  }
              }
          }
          if (EdgeDirectionType.REVERSE == edgeDirection
                  || EdgeDirectionType.BOTH == edgeDirection) {
              final Set<KamEdge> targets = nodeTargetMap.get(kamNode);
              if (hasItems(targets)) {
                  for (KamEdge kamEdge : targets) {
  
                      // Check for an edge filter
                      if (null != edgeFilter) {
                          if (!edgeFilter.accept(kamEdge)) {
                              continue;
                          }
                      }
  
                      node = kamEdge.getSourceNode();
  
                      // Check for a node filter
                      if (null != nodeFilter) {
                          if (!nodeFilter.accept(node)) {
                              continue;
                          }
                      }
                      adjacentNodes.add(node);
                  }
              }
          }
          return adjacentNodes;
      }
docs: {@inheritDoc}