in vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/actions/Sync.java [236:298]
private void install(VltContext ctx, Session s) throws RepositoryException, VltException {
// get sync jar
URLClassLoader cl = (URLClassLoader) VaultSyncServiceImpl.class.getClassLoader();
URL resource = null;
for (URL url: cl.getURLs()) {
if (url.getPath().matches(".*/vault-sync-.*\\.jar")) {
resource = url;
break;
}
}
if (resource == null) {
throw new VltException("Unable to find vault-sync.jar library.");
}
String jarName = Text.getName(resource.getPath());
ctx.getStdout().println("Preparing to install " + jarName + "...");
Node root = s.getRootNode();
for (String name: INSTALL_ROOT) {
root = JcrUtils.getOrAddFolder(root, name);
}
// check if already a bundle is installed
for (Node child: JcrUtils.getChildNodes(root)) {
if (child.getName().startsWith("vault-sync-")) {
if (force) {
ctx.getStdout().println("Detected existing bundle: " + child.getName() + ". Updating");
break;
} else {
ctx.getStdout().println("Detected existing bundle: " + child.getName() + ". Aborting installation. Specify --force to update.");
return;
}
}
}
InputStream in = null;
try {
in = resource.openStream();
if (root.hasNode(jarName)) {
root.getNode(jarName).remove();
}
JcrUtils.putFile(root, jarName, "application/octet-stream", in, Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC), Locale.ROOT));
} catch (IOException e) {
throw new VltException("Error while installing bundle", e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
// ignore
}
}
}
ctx.getStdout().println("Updated bundle: " + jarName);
// update config
root = JcrUtils.getOrAddFolder(root.getParent(), "config");
if (!root.hasNode(CFG_NODE_NAME)) {
root.addNode(CFG_NODE_NAME, "sling:OsgiConfig");
Config cfg = new Config(s);
cfg.enabled = true;
cfg.save(ctx);
ctx.getStdout().println("Created new config at " + CFG_NODE_PATH);
}
s.save();
}