package org.bundlemaker.core.spi.analysis;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.bundlemaker.core.analysis.IBundleMakerArtifact;
import org.bundlemaker.core.analysis.IDependency;
/**
* <p>
* Default implementation of {@link IReferencedArtifact}.
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public class ReferencedArtifactTrait implements IReferencedArtifact {
/** the map with all core dependencies */
private Map<IBundleMakerArtifact, IDependency> _coreDependenciesFromMap;
/** indicates whether this instance has been initialized or not */
private boolean _isInitialized = false;
/**
* {@inheritDoc}
*/
@Override
public final Collection<IDependency> getDependenciesFrom() {
// initialize
_initialize();
//
if (_coreDependenciesFromMap == null) {
return Collections.emptyList();
}
//
return _coreDependenciesFromMap.values();
}
/**
* {@inheritDoc}
*/
@Override
public final boolean hasDependencyFrom(IBundleMakerArtifact artifact) {
// initialize
_initialize();
//
return _coreDependenciesFromMap != null && _coreDependenciesFromMap.containsKey(artifact);
}
/**
* {@inheritDoc}
*/
@Override
public final IDependency getDependencyFrom(IBundleMakerArtifact artifact) {
// initialize
_initialize();
//
if (_coreDependenciesFromMap == null) {
return null;
}
//
return _coreDependenciesFromMap.get(artifact);
}
/**
* {@inheritDoc}
*/
@Override
public final Collection<IDependency> getDependenciesFrom(
Collection<? extends IBundleMakerArtifact> artifacts) {
// initialize
_initialize();
//
if (_coreDependenciesFromMap == null) {
return Collections.emptyList();
}
//
List<IDependency> result = new LinkedList<IDependency>();
//
for (IBundleMakerArtifact artifact : artifacts) {
IDependency dependency = getDependencyFrom(artifact);
if (dependency != null) {
result.add(dependency);
}
}
//
return result;
}
/**
* {@inheritDoc}
*/
@Override
public final Collection<IDependency> getDependenciesFrom(IBundleMakerArtifact... artifacts) {
// initialize // initialize
_initialize();
return getDependenciesFrom(Arrays.asList(artifacts));
}
/**
* {@inheritDoc}
*/
@Override
public final Map<IBundleMakerArtifact, IDependency> coreDependenciesFromMap() {
//
if (_coreDependenciesFromMap == null) {
return _coreDependenciesFromMap = new HashMap<IBundleMakerArtifact, IDependency>();
}
//
return _coreDependenciesFromMap;
}
/**
* <p>
* Returns {@code true} if this instance already has been initialized.
* </p>
*
* @return {@code true} if this instance already has been initialized.
*/
public final boolean isInitialized() {
return _isInitialized;
}
/**
* <p>
* </p>
*
* @param isInitialized
*/
public final void setInitialized(boolean isInitialized) {
_isInitialized = isInitialized;
}
/**
* <p>
* Initializes this instance. Override to add dependencies.
* </p>
*/
protected void initialize() {
// do nothing...
}
/**
* <p>
* </p>
*/
private final void _initialize() {
//
if (_isInitialized) {
return;
}
//
initialize();
// set initialized
_isInitialized = true;
}
}