File tempFile = result.getFile();
if (tempFile == null) {
log.error("Null filehandle was returned for " + configID);
throw new IllegalArgumentException("Null filehandle was returned for " + configID);
}
PluginType pluginData = metadata.get(configID);
// Only bother with the hash if we got it from a source other than the download file itself
HashType hash = pluginData == null ? null : pluginData.getPluginArtifact().get(0).getHash();
if (hash != null) {
String actual = ConfigurationStoreUtil.getActualChecksum(tempFile, hash.getType());
if (!actual.equals(hash.getValue())) {
log.error(
"File download incorrect (expected " + hash.getType() + " hash " + hash.getValue() + " but got " + actual + ")");
throw new IOException(
"File download incorrect (expected " + hash.getType() + " hash " + hash.getValue() + " but got " + actual + ")");
}
}
// See if the download file has plugin metadata and use it in preference to what is in the catalog.
try {
PluginType realPluginData = GeronimoSourceRepository.extractPluginMetadata(tempFile);
if (realPluginData != null) {
pluginData = realPluginData;
}
} catch (Exception e) {
log.error("Unable to read plugin metadata: " + e.getMessage());
throw (IOException) new IOException(
"Unable to read plugin metadata: " + e.getMessage()).initCause(e);
}
if (pluginData != null) { // it's a plugin, not a plain JAR
validatePlugin(pluginData);
instance = pluginData.getPluginArtifact().get(0);
}
monitor.getResults().setCurrentMessage("Copying " + result.getArtifact() + " to the repository");
result.install(writeableRepo, monitor);
if (pluginData != null) {
installConfigXMLData(result.getArtifact(), instance, servers, loadOverride);
} else {
log.debug("No config XML data to install.");
}
if (dependency) {
monitor.getResults().addDependencyInstalled(configID);
configID = result.getArtifact();
} else {
configID = result.getArtifact();
monitor.getResults().addInstalledConfigID(configID);
}
pluginWasInstalled = true;
if (pluginData != null)
log.info("Installed plugin with moduleId=" + pluginData.getPluginArtifact().get(0).getModuleId() + " and name=" + pluginData.getName());
else
log.info("Installed artifact=" + configID);
} catch (InvalidGBeanException e) {
log.error("Invalid gbean configuration ", e);
throw new IllegalStateException(
"Invalid GBean configuration: " + e.getMessage(), e);
} finally {
//todo probably not needede
result.close();
}
} else {
if (dependency) {
monitor.getResults().addDependencyPresent(configID);
} else {
monitor.getResults().addInstalledConfigID(configID);
}
}
// Download and install the dependencies
try {
if (!configID.isResolved()) {
// See if something's running
for (int i = matches.length - 1; i >= 0; i--) {
Artifact match = matches[i];
if (configStore.containsConfiguration(match) && configManager.isRunning(match)) {
log.debug("Found required configuration=" + match + " and it is running.");
return; // its dependencies must be OK
} else {
log.debug("Either required configuration=" + match + " is not installed or it is not running.");
}
}
// Go with something that's installed
configID = matches[matches.length - 1];
}
ConfigurationData data = null;
if (configStore.containsConfiguration(configID)) {
if (configManager.isRunning(configID)) {
return; // its dependencies must be OK
}
log.debug("Loading configuration=" + configID);
data = configStore.loadConfiguration(configID);
}
// Download the dependencies
parentStack.push(configID);
if (instance == null) {
//no plugin metadata, guess with something else
Dependency[] dependencies = data == null ? getDependencies(writeableRepo, configID) : getDependencies(data);
for (Dependency dep : dependencies) {
Artifact artifact = dep.getArtifact();
log.debug("Attempting to download dependency=" + artifact + " for configuration=" + configID);
downloadArtifact(artifact, metadata, repos, username, password, monitor, soFar, parentStack, true, servers, loadOverride);
}
} else {
//rely on plugin metadata if present.
List<DependencyType> deps = instance.getDependency();
for (DependencyType dep : deps) {
Artifact artifact = toArtifact(dep);
log.debug("Attempting to download dependency=" + artifact + " for configuration=" + configID);
downloadArtifact(artifact, metadata, repos, username, password, monitor, soFar, parentStack, true, servers, loadOverride & dep.isStart());
}
}
parentStack.pop();
} catch (NoSuchConfigException e) {
log.error("Installed configuration into repository but ConfigStore does not see it: " + e.getMessage());
throw new IllegalStateException(
"Installed configuration into repository but ConfigStore does not see it: " + e.getMessage(), e);
} catch (InvalidConfigException e) {
log.error("Installed configuration into repository but ConfigStore cannot load it: " + e.getMessage());
throw new IllegalStateException(
"Installed configuration into repository but ConfigStore cannot load it: " + e.getMessage(), e);
}
// Copy any files out of the artifact
PluginType currentPlugin = getPluginMetadata(configID);
if (pluginWasInstalled && currentPlugin != null) {
extractPluginFiles(configID, currentPlugin, monitor);
}
}