package org.bundlemaker.core.ui.editor.dsm;
import java.util.Collection;
import java.util.Observable;
import org.bundlemaker.core.analysis.IBundleMakerArtifact;
import org.bundlemaker.core.analysis.IDependency;
import org.bundlemaker.core.ui.editor.dsm.cycle.CycleDetector;
import org.bundlemaker.core.ui.editor.dsm.widget.IDsmContentProvider;
import org.eclipse.core.runtime.Assert;
public class DefaultBundleMakerArtifactDsmContentProvider extends Observable implements IDsmContentProvider {
/** - */
private CycleDetector _cycleDetector;
/** - */
private IDependency[][] _dependencies;
/**
* <p>
* Creates a new instance of type {@link DefaultBundleMakerArtifactDsmContentProvider}.
* </p>
*
* @param unorderedArtifacts
*/
public DefaultBundleMakerArtifactDsmContentProvider(Collection<? extends IBundleMakerArtifact> unorderedArtifacts) {
this();
initialize(unorderedArtifacts);
}
/**
* <p>
* Creates a new instance of type {@link DefaultBundleMakerArtifactDsmContentProvider}.
* </p>
*/
public DefaultBundleMakerArtifactDsmContentProvider() {
_dependencies = new IDependency[0][0];
}
/**
* {@inheritDoc}
*/
public int getItemCount() {
return _cycleDetector.getOrderedArtifacts().length;
}
/**
* {@inheritDoc}
*/
@Override
public Object[][] getDependencies() {
return _dependencies;
}
/**
* {@inheritDoc}
*/
@Override
public Object[] getNodes() {
return _cycleDetector.getOrderedArtifacts();
}
/**
* {@inheritDoc}
*/
@Override
public IDependency getDependency(int x, int y) {
//
if (x == -1 || y == -1) {
return null;
}
// return null if dependency does not exist
if (x >= _dependencies.length || y >= _dependencies[x].length) {
return null;
}
// return dependency
return _dependencies[x][y];
}
/**
* {@inheritDoc}
*/
@Override
public boolean isInCycle(int i) {
return _cycleDetector.isInCycle(i);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isInCycle(int i, int j) {
return _cycleDetector.isInCycle(i, j);
}
/**
* {@inheritDoc}
*/
@Override
public int[][] getCycles() {
return _cycleDetector.getCycles();
}
/**
* <p>
* </p>
*
* @param unorderedArtifacts
*/
private void initialize(Collection<? extends IBundleMakerArtifact> unorderedArtifacts) {
// IArtifact[] headers, IDependency[][] dependencies
Assert.isNotNull(unorderedArtifacts);
_cycleDetector = new CycleDetector(unorderedArtifacts);
_dependencies = new IDependency[_cycleDetector.getOrderedArtifacts().length][_cycleDetector.getOrderedArtifacts().length];
for (int i = 0; i < _cycleDetector.getOrderedArtifacts().length; i++) {
for (int j = 0; j < _cycleDetector.getOrderedArtifacts().length; j++) {
IDependency dependency = _cycleDetector.getOrderedArtifacts()[i].getDependencyTo(_cycleDetector
.getOrderedArtifacts()[j]);
_dependencies[j][i] = dependency != null && dependency.getWeight() != 0 ? dependency : null;
}
}
}
}