// Copyright (c) 2009-2010 by the projectusus.org contributors
// This software is released under the terms and conditions
// of the Eclipse Public License (EPL) 1.0.
// See http://www.eclipse.org/legal/epl-v10.html for details.
package org.projectusus.adapter;
import static java.util.Collections.unmodifiableList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.CoreException;
public class DeltaCodeProportionComputationTarget implements ICodeProportionComputationTarget {
private final Map<IProject, List<IFile>> changes;
private final Map<IProject, List<IFile>> deletions;
private final List<IProject> removedProjects;
public DeltaCodeProportionComputationTarget( List<IResourceDelta> deltas ) throws CoreException {
ChangedResourcesCollector changeCollector = new ChangedResourcesCollector();
for( IResourceDelta delta : deltas ) {
delta.accept( changeCollector );
}
removedProjects = changeCollector.getRemovedProjects();
changes = changeCollector.getChanges();
deletions = changeCollector.getDeletions();
}
public DeltaCodeProportionComputationTarget( IResourceDelta delta ) throws CoreException {
this( createList( delta ) );
}
private static <T> List<T> createList( T element ) {
List<T> list = new ArrayList<T>();
list.add( element );
return list;
}
public Collection<IFile> getFiles( IProject project ) throws CoreException {
return getFilesFrom( project, changes );
}
public Collection<IProject> getProjects() {
Set<IProject> result = new HashSet<IProject>();
result.addAll( changes.keySet() );
result.addAll( deletions.keySet() );
return result;
}
public Collection<IFile> getRemovedFiles( IProject project ) throws CoreException {
return getFilesFrom( project, deletions );
}
public Collection<IProject> getRemovedProjects() {
return unmodifiableList( removedProjects );
}
// internal
// /////////
private Collection<IFile> getFilesFrom( IProject project, Map<IProject, List<IFile>> collector ) {
List<IFile> result = new ArrayList<IFile>();
if( collector.containsKey( project ) ) {
result.addAll( collector.get( project ) );
}
return result;
}
public boolean isNotEmpty() {
return !isEmpty();
}
private boolean isEmpty() {
return changes.isEmpty() && deletions.isEmpty() && removedProjects.isEmpty();
}
}