// 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.Arrays.asList;
import static java.util.Collections.emptyList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.projectusus.core.project.FindUsusProjects;
class ProjectCodeProportionComputationTarget implements ICodeProportionComputationTarget {
private final Iterable<IProject> projects;
public ProjectCodeProportionComputationTarget( IProject... projects ) {
this( asList( projects ) );
}
public ProjectCodeProportionComputationTarget( Iterable<IProject> projects ) {
this.projects = projects;
}
public Collection<IProject> getProjects() {
return findUsusProjects().compute();
}
public Collection<IProject> getRemovedProjects() {
return findUsusProjects().computeOpposite();
}
private FindUsusProjects findUsusProjects() {
return new FindUsusProjects( projects );
}
public Collection<IFile> getFiles( IProject project ) throws CoreException {
return collectFiles( project );
}
public Collection<IFile> getRemovedFiles( IProject project ) throws CoreException {
return emptyList();
}
// internal
// /////////
private Collection<IFile> collectFiles( IProject project ) throws CoreException {
Map<String, IFile> files = new HashMap<String, IFile>();
List<IResource> resources = collectResources( project );
for( IResource resource : resources ) {
if( resource instanceof IFile ) {
addFile( (IFile)resource, files );
}
}
return files.values();
}
private List<IResource> collectResources( final IContainer container ) throws CoreException {
List<IResource> resources = new ArrayList<IResource>();
IResource[] children = container.members();
for( IResource child : children ) {
resources.add( child );
if( child instanceof IContainer ) {
resources.addAll( collectResources( (IContainer)child ) );
}
}
return resources;
}
private void addFile( IFile file, Map<String, IFile> files ) {
files.put( file.getLocation().toString(), file );
}
public boolean isNotEmpty() {
return true; // simplifying assumption...
}
}