package org.bundlemaker.core.ui.view.dependencytree;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.bundlemaker.core.analysis.IBundleMakerArtifact;
import org.bundlemaker.core.analysis.IDependency;
import org.bundlemaker.core.ui.artifact.tree.ArtifactTreeLabelProvider;
import org.eclipse.core.runtime.Assert;
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public class DependencyTreeArtifactLabelProvider extends ArtifactTreeLabelProvider {
/** - */
private Helper _helper;
/** - */
boolean _showReferenceCount;
/** - */
boolean _toArtifacts;
/**
* <p>
* Creates a new instance of type {@link DependencyTreeArtifactLabelProvider}.
* </p>
*
* @param helper
*/
public DependencyTreeArtifactLabelProvider(Helper helper) {
//
Assert.isNotNull(helper);
//
_helper = helper;
}
/**
* <p>
* </p>
*
* @param showReferenceCount wether to show references count or not. Calculating references might be expensive.
* @param toArtifacts
*/
public void setShowReferenceCount(boolean showReferenceCount, boolean toArtifacts) {
//
_showReferenceCount = showReferenceCount;
_toArtifacts = toArtifacts;
}
/**
* {@inheritDoc}
*/
@Override
public String getText(Object obj) {
//
if (_toArtifacts) {
return getRightSideLabel((IBundleMakerArtifact) obj);
}
//
else {
return getLeftSideLabel((IBundleMakerArtifact) obj);
}
}
/**
* <p>
* </p>
*
* @param artifact
* @return
*/
private String getLeftSideLabel(IBundleMakerArtifact artifact) {
//
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(super.getText(artifact));
if (_showReferenceCount) {
// Warning: might be expensive to count....
int dependencyCount = 0;
Set<IBundleMakerArtifact> targetArtifacts = new HashSet<IBundleMakerArtifact>();
//
Collection<IDependency> dependencies = artifact.getDependenciesTo(_helper.getUnfilteredTargetArtifacts());
if (dependencies != null) {
for (IDependency dependency : dependencies) {
for (IDependency coreDependency : dependency.getCoreDependencies()) {
//
Collection<IBundleMakerArtifact> unfilteredSourceDependencies = _helper.getUnfilteredSourceArtifacts();
IBundleMakerArtifact fromArtifact = coreDependency.getFrom();
//
if (unfilteredSourceDependencies.contains(fromArtifact)) {
targetArtifacts.add(coreDependency.getTo());
dependencyCount = dependencyCount + coreDependency.getWeight();
}
}
}
}
stringBuilder.append(" (");
stringBuilder.append(dependencyCount);
stringBuilder.append("/");
// stringBuilder.append(dependencyCount == 1 ? " Reference to " : " References to ");
stringBuilder.append(targetArtifacts.size());
// stringBuilder.append(targetArtifacts.size() == 1 ? " Artifact)" : " Artifacts)");
stringBuilder.append(")");
}
//
return stringBuilder.toString();
}
/**
* <p>
* </p>
*
* @param artifact
* @return
*/
private String getRightSideLabel(IBundleMakerArtifact artifact) {
//
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(super.getText(artifact));
if (_showReferenceCount) {
int dependencyCount = 0;
Set<IBundleMakerArtifact> targetArtifacts = new HashSet<IBundleMakerArtifact>();
Collection<IDependency> dependencies = artifact.getDependenciesFrom(_helper.getUnfilteredSourceArtifacts());
if (dependencies != null) {
for (IDependency dependency : dependencies) {
for (IDependency coreDependency : dependency.getCoreDependencies()) {
//
Collection<IBundleMakerArtifact> unfilteredTargetDependencies = _helper.getUnfilteredTargetArtifacts();
IBundleMakerArtifact toArtifact = coreDependency.getTo();
//
if (unfilteredTargetDependencies.contains(toArtifact)) {
targetArtifacts.add(coreDependency.getFrom());
dependencyCount = dependencyCount + coreDependency.getWeight();
}
}
}
}
stringBuilder.append(" (");
stringBuilder.append(dependencyCount);
stringBuilder.append("/");
// stringBuilder.append(dependencyCount == 1 ? " Reference to " : " References to ");
stringBuilder.append(targetArtifacts.size());
// stringBuilder.append(targetArtifacts.size() == 1 ? " Artifact)" : " Artifacts)");
stringBuilder.append(")");
}
//
return stringBuilder.toString();
}
}