public Source findParent(String prefix, Source source) {
    while (source != null && !hasPrefix(prefix, source)) {
      source = source.getParent();
    }

    return source;
  }
  public Source findRoot(String prefix, Source source) {
    Source parent = findParent(prefix, source);
    int parents = new StringTokenizer(prefix, ".").countTokens();
    for (int i = 0; i < parents; i++) {
      parent = parent.getParent();
    }

    return parent;
  }
  public boolean hasPrefix(String prefix, Source source) {
    List packages = CollectionUtil.toList(new StringTokenizer(prefix, "."));
    Collections.reverse(packages);

    for (int i = 0; i < packages.size(); i++) {
      String aPackage = (String) packages.get(i);
      if (!aPackage.equals(source.getName())) {
        return false;
      }
      source = source.getParent();
    }
    return true;
  }