protected Node fromRepository(
      CmrRepository repository, ArtifactContext context, boolean addLeaf) {
    log.debug(" Trying repository " + repository.getDisplayString());
    Node node = repository.findParent(context);
    if (node != null) {
      if (addLeaf) {
        Node parent = node;
        context.toNode(parent);
        NodeUtils.keepRepository(parent, repository);
        try {
          String[] names = repository.getArtifactNames(context);
          for (String name : names) {
            node = parent.getChild(name);
            if (node != null) {
              break;
            }
          }
        } finally {
          ArtifactContext.removeNode(parent);
        }
      }

      if (node != null) {
        NodeUtils.keepRepository(node, repository);
        log.debug("  -> Found at " + NodeUtils.getFullPath(node));
      }
    }
    return node;
  }
 // Check if the source file and destination node point to the same file
 @Override
 public boolean isSameFile(ArtifactContext context, File srcFile) throws RepositoryException {
   boolean same = false;
   if (!cache.getRoot().isRemote()) {
     Node dstParent = getOrCreateParent(context);
     Node newChild = dstParent.getChild(srcFile.getName());
     if (newChild != null) {
       try {
         File existing = newChild.getContent(File.class);
         same = FileUtil.sameFile(srcFile, existing);
       } catch (IOException e) {
         throw new RepositoryException(e);
       }
     }
   }
   return same;
 }
 public ArtifactResult getArtifactResult(ArtifactContext context) throws RepositoryException {
   context = applyOverrides(context);
   final Node node = getLeafNode(context);
   if (node != null) {
     String foundSuffix = ArtifactContext.getSuffixFromNode(node);
     // First handle all the artifact we didn't find
     ArtifactResult result = handleNotFound(context, foundSuffix);
     if (result != null) {
       // Seems we were able to find this artifact anyway, so lets return it
       return result;
     } else {
       // Now return the artifact we found
       context.setSuffixes(foundSuffix); // Make sure we'll have only one suffix
       if (ArtifactContext.isDirectoryName(node.getLabel())) {
         return getFolder(context, node);
       } else {
         return getArtifactResult(context, node);
       }
     }
   } else {
     return handleNotFound(context, null);
   }
 }