}
@Override
protected void doHandle(CommandContext ctx) throws CommandFormatException {
final ModelControllerClient client = ctx.getModelControllerClient();
ParsedCommandLine args = ctx.getParsedCommandLine();
boolean l = this.l.isPresent(args);
if (!args.hasProperties() || l) {
printList(ctx, Util.getDeployments(client), l);
return;
}
final String path = this.path.getValue(args);
final File f;
if(path != null) {
f = new File(path);
if(!f.exists()) {
ctx.printLine("Path " + f.getAbsolutePath() + " doesn't exist.");
return;
}
if(f.isDirectory()) {
ctx.printLine(f.getAbsolutePath() + " is a directory.");
return;
}
} else {
f = null;
}
String name = this.name.getValue(args);
if(name == null) {
if(f == null) {
ctx.printLine("Either path or --name is requied.");
return;
}
name = f.getName();
}
final String runtimeName = rtName.getValue(args);
final boolean force = this.force.isPresent(args);
final boolean disabled = this.disabled.isPresent(args);
final String serverGroups = this.serverGroups.getValue(args);
final boolean allServerGroups = this.allServerGroups.isPresent(args);
if(force) {
if(f == null) {
ctx.printLine(this.force.getFullName() + " requires a filesystem path of the deployment to be added to the deployment repository.");
return;
}
if(disabled || serverGroups != null || allServerGroups) {
ctx.printLine(this.force.getFullName() +
" only replaces the content in the deployment repository and can't be used in combination with any of " +
this.disabled.getFullName() + ", " + this.serverGroups.getFullName() + " or " + this.allServerGroups.getFullName() + '.');
return;
}
if(Util.isDeploymentInRepository(name, client)) {
replaceDeployment(ctx, f, name, runtimeName);
} else {
// add deployment to the repository (enabled in standalone, disabled in domain (i.e. not associated with any sg))
addDeployment(ctx, f, name, runtimeName);
}
return;
}
if(disabled) {
if(f == null) {
ctx.printLine(this.disabled.getFullName() + " requires a filesystem path of the deployment to be added to the deployment repository.");
return;
}
if(serverGroups != null || allServerGroups) {
ctx.printLine(this.serverGroups.getFullName() + " and " + this.allServerGroups.getFullName() +
" can't be used in combination with " + this.disabled.getFullName() + '.');
return;
}
if(Util.isDeploymentInRepository(name, client)) {
ctx.printLine("'" + name + "' already exists in the deployment repository (use " +
this.force.getFullName() + " to replace the existing content in the repository).");
return;
}
// add deployment to the repository disabled
addDeployment(ctx, f, name, runtimeName);
return;
}
// actually, the deployment is added before it is deployed
// but this code here is to validate arguments and not to add deployment if something is wrong
ModelNode deployRequest = null;
if(ctx.isDomainMode()) {
final List<String> sgList;
if(allServerGroups) {
if(serverGroups != null) {
ctx.printLine(this.serverGroups.getFullName() + " can't appear in the same command with " + this.allServerGroups.getFullName());
return;
}
sgList = Util.getServerGroups(client);
if(sgList.isEmpty()) {
ctx.printLine("No server group is available.");
return;
}
} else if(serverGroups == null) {
final StringBuilder buf = new StringBuilder();
buf.append("One of ");
if(f != null) {
buf.append(this.disabled.getFullName()).append(", ");
}
buf.append(this.allServerGroups.getFullName() + " or " + this.serverGroups.getFullName() + " is missing.");
ctx.printLine(buf.toString());
return;
} else {
sgList = Arrays.asList(serverGroups.split(","));
if(sgList.isEmpty()) {
ctx.printLine("Couldn't locate server group name in '" + this.serverGroups.getFullName() + "=" + serverGroups + "'.");
return;
}
}
deployRequest = new ModelNode();
deployRequest.get(Util.OPERATION).set(Util.COMPOSITE);
deployRequest.get(Util.ADDRESS).setEmptyList();
ModelNode steps = deployRequest.get(Util.STEPS);
for (String serverGroup : sgList) {
steps.add(Util.configureDeploymentOperation(Util.ADD, name, serverGroup));
}
for (String serverGroup : sgList) {
steps.add(Util.configureDeploymentOperation(Util.DEPLOY, name, serverGroup));
}
} else {
if(serverGroups != null || allServerGroups) {
ctx.printLine(this.serverGroups.getFullName() + " and " + this.allServerGroups.getFullName() +
" can't appear in standalone mode.");
return;
}
deployRequest = new ModelNode();
deployRequest.get(Util.OPERATION).set(Util.DEPLOY);
deployRequest.get(Util.ADDRESS, Util.DEPLOYMENT).set(name);
}
if(f != null) {
if(Util.isDeploymentInRepository(name, client)) {
ctx.printLine("'" + name + "' already exists in the deployment repository (use " +
this.force.getFullName() + " to replace the existing content in the repository).");
return;
}
addDeployment(ctx, f, name, runtimeName);
} else if(!Util.isDeploymentInRepository(name, client)) {
ctx.printLine("'" + name + "' is not found among the registered deployments.");
return;
}
if(deployRequest != null) {
try {
final ModelNode result = client.execute(deployRequest);
if (!Util.isSuccess(result)) {
ctx.printLine(Util.getFailureDescription(result));
return;
}
} catch (Exception e) {