List<IComparison<IVirtualArtifact>> comparisons = new ArrayList<IComparison<IVirtualArtifact>>();
boolean equal = true;
List<String> compared = new ArrayList<String>();
for (IVirtualArtifact artifact : directory1) {
IComparison comparison = null;
if (artifact instanceof IVirtualDirectory) {
IVirtualDirectory artifact2 = directory2.getDirectory(artifact.getName());
if (artifact2 == null) {
comparison = new IComparison(artifact, artifact2,
directory2.getFile(artifact.getName()) == null ? Result.SECOND_MISSING : Result.DIFFERENT
);
} else {
comparison = this.compareInternal( (IVirtualDirectory) artifact, artifact2, complete );
}
} else {
IVirtualFile file = directory2.getFile(artifact.getName());
if (file == null) {
comparison = new IComparison(artifact, null, directory2.getDirectory(artifact.getName()) == null ? Result.SECOND_MISSING : Result.DIFFERENT);
} else {
comparison = ((IVirtualFile) artifact).compare(file, complete).getComparison();
}
}
if (equal && comparison.getResult() != Result.EQUAL) equal = false;
comparisons.add(comparison);
compared.add(artifact.getName());
}
if (complete) {
for (IVirtualArtifact artifact : directory2) {
if (compared.contains(artifact.getName())) continue;
if (this.getArtifact(artifact.getName()) == null) {
comparisons.add(new IComparison(null, artifact, Result.FIRST_MISSING));
equal = false;
}
}
}