package org.bundlemaker.core.ui.view.dependencytree;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.bundlemaker.core.analysis.AnalysisModelQueries;
import org.bundlemaker.core.analysis.IBundleMakerArtifact;
import org.bundlemaker.core.analysis.IDependency;
import org.bundlemaker.core.common.collections.GenericCache;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public class Helper {
/** - */
@SuppressWarnings("serial")
private GenericCache<IBundleMakerArtifact, List<IDependency>> _targetArtifactMap = new GenericCache<IBundleMakerArtifact, List<IDependency>>() {
@Override
protected List<IDependency> create(
IBundleMakerArtifact key) {
return new LinkedList<IDependency>();
}
};
/** - */
@SuppressWarnings("serial")
private GenericCache<IBundleMakerArtifact, List<IDependency>> _sourceArtifactMap = new GenericCache<IBundleMakerArtifact, List<IDependency>>() {
@Override
protected List<IDependency> create(
IBundleMakerArtifact key) {
return new LinkedList<IDependency>();
}
};
/** - */
private List<IDependency> _unfilteredDependencies = new LinkedList<IDependency>();
/** - */
private List<IDependency> _filteredDependencies = new LinkedList<IDependency>();
/**
* <p>
* </p>
*
* @param dependencies
*/
public void setDependencies(List<IDependency> dependencies) {
//
Assert.isNotNull(dependencies);
//
_unfilteredDependencies = AnalysisModelQueries.getCoreDependencies(dependencies);
//
_sourceArtifactMap.clear();
_targetArtifactMap.clear();
//
for (IDependency dependency : _unfilteredDependencies) {
_sourceArtifactMap.getOrCreate(dependency.getFrom()).add(dependency);
_targetArtifactMap.getOrCreate(dependency.getTo()).add(dependency);
}
}
/**
* <p>
* </p>
*
* @param toArtifacts
*/
public Set<IBundleMakerArtifact> setSelectedToArtifacts(List<IBundleMakerArtifact> toArtifacts) {
//
Assert.isNotNull(toArtifacts);
//
Set<IBundleMakerArtifact> filteredArtifacts = new HashSet<IBundleMakerArtifact>();
_filteredDependencies.clear();
for (IBundleMakerArtifact bundleMakerArtifact : toArtifacts) {
// we have to find all children
for (IBundleMakerArtifact artifact : AnalysisModelQueries.getSelfAndAllChildren(bundleMakerArtifact)) {
if (_targetArtifactMap.containsKey(artifact)) {
List<IDependency> dependencies = _targetArtifactMap.get(artifact);
_filteredDependencies.addAll(dependencies);
for (IDependency dep : dependencies) {
filteredArtifacts.add(dep.getFrom());
}
}
}
}
//
return filteredArtifacts;
}
/**
* <p>
* </p>
*
* @param fromArtifacts
* @return
*/
public Set<IBundleMakerArtifact> setSelectedFromArtifacts(List<IBundleMakerArtifact> fromArtifacts) {
//
Assert.isNotNull(fromArtifacts);
// create empty lists of visible artifacts / selected detail dependencies
Set<IBundleMakerArtifact> visibleArtifacts = new HashSet<IBundleMakerArtifact>();
_filteredDependencies.clear();
// iterate over all the selected artifacts
for (IBundleMakerArtifact bundleMakerArtifact : fromArtifacts) {
// we have to find all children
for (IBundleMakerArtifact artifact : AnalysisModelQueries.getSelfAndAllChildren(bundleMakerArtifact)) {
if (_sourceArtifactMap.containsKey(artifact)) {
List<IDependency> dependencies = _sourceArtifactMap.get(artifact);
_filteredDependencies.addAll(dependencies);
for (IDependency dep : dependencies) {
visibleArtifacts.add(dep.getTo());
}
}
}
}
//
return visibleArtifacts;
}
/**
* <p>
* </p>
*
* @return
*/
public Collection<IBundleMakerArtifact> getUnfilteredSourceArtifacts() {
return _sourceArtifactMap.keySet();
}
/**
* <p>
* </p>
*
* @return
*/
public Collection<IBundleMakerArtifact> getUnfilteredTargetArtifacts() {
return _targetArtifactMap.keySet();
}
/**
* <p>
* </p>
*
* @return
*/
public List<IDependency> getUnfilteredDependencies() {
return _unfilteredDependencies;
}
/**
* <p>
* </p>
*
* @return
*/
public List<IDependency> getFilteredDependencies() {
return _filteredDependencies;
}
/**
* <p>
* </p>
*
* @return
*/
public GenericCache<IBundleMakerArtifact, List<IDependency>> getTargetArtifactMap() {
return _targetArtifactMap;
}
/**
* <p>
* </p>
*
* @return
*/
public GenericCache<IBundleMakerArtifact, List<IDependency>> getSourceArtifactMap() {
return _sourceArtifactMap;
}
/**
* <p>
* Helper method.
* </p>
*
* @param objects
* @return
*/
public static List<IBundleMakerArtifact> toArtifactList(List<?> objects) {
//
Assert.isNotNull(objects);
//
List<IBundleMakerArtifact> result = new LinkedList<IBundleMakerArtifact>();
//
for (Object object : objects) {
if (object instanceof IBundleMakerArtifact) {
result.add((IBundleMakerArtifact) object);
}
}
//
return result;
}
public static List<IBundleMakerArtifact> toArtifactList(ISelection selection) {
if (!(selection instanceof IStructuredSelection)) {
return Collections.emptyList();
}
//
//
List<IBundleMakerArtifact> result = new LinkedList<IBundleMakerArtifact>();
//
Iterator<?> it = ((IStructuredSelection)selection).iterator();
while (it.hasNext()) {
Object object = it.next();
if (object instanceof IBundleMakerArtifact) {
result.add((IBundleMakerArtifact) object);
}
}
//
return result;
}
}