}
public void addContributionFromDomain(String contributionURI, URL contributionURL, ClassLoader contributionClassLoader ) throws NodeException {
if (nodeStarted){
throw new NodeException("Can't add contribution " + contributionURI + " when the node is running. Call stop() on the node first");
}
if (contributionURI == null){
throw new NodeException("Contribution URI cannot be null");
}
if (contributionURL == null){
throw new NodeException("Contribution URL cannot be null");
}
if (contributions.containsKey(contributionURI)) {
throw new NodeException("Contribution " + contributionURI + " has already been added");
}
try {
//FIXME What to do when a contribution uses a separate class loader ? (e.g contributionClassLoader != null)
// Add the contribution to the node
ContributionService contributionService = nodeRuntime.getContributionService();
Contribution contribution = contributionService.contribute(contributionURI,
contributionURL,
false);
// remember the contribution
contributions.put(contributionURI, contribution);
// remember all the composites that have been found
for (Artifact artifact : contribution.getArtifacts()) {
if (artifact.getModel() instanceof Composite) {
Composite composite = (Composite)artifact.getModel();
composites.put(composite.getName(), composite);
compositeFiles.put(composite.getURI(), composite);
}
}
} catch (Exception ex) {
throw new NodeException(ex);
}
}