protected ArrayList<Path> collectRelativeFilesInSrc1NotPresentInSrc2(final Path src1, final Path src2) throws IOException {
		
	final ArrayList<Path> src1ToSrc2Files = new ArrayList<Path>();
		
        Files.walkFileTree(src1, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
                throws IOException
            {
            	if(dir.getFileName().toString().startsWith("."))
            		return FileVisitResult.SKIP_SUBTREE;
            	
                return FileVisitResult.CONTINUE;
            }
            @Override
            public FileVisitResult visitFile(Path file,
                    BasicFileAttributes attrs)
                      throws IOException{

            	if(file.getFileName().toString().startsWith("."))
                    return FileVisitResult.CONTINUE;

				Path subPath = src1.relativize(file);
				Path newPath = src2.resolve(subPath);
            	
				if(Files.notExists(newPath)){
					src1ToSrc2Files.add(subPath);
				}
            	
                return FileVisitResult.CONTINUE;
            	
            }
        });
        return src1ToSrc2Files;
	}