final ModelControllerClient client = ctx.getModelControllerClient();
ParsedCommandLine args = ctx.getParsedCommandLine();
boolean l = this.l.isPresent(args);
if (!args.hasProperties() || l) {
throw new OperationFormatException("Command is missing arguments for non-interactive mode: '" + args.getOriginalLine() + "'.");
}
final String path = this.path.getValue(args);
final File f;
if(path != null) {
f = new File(path);
if(!f.exists()) {
throw new OperationFormatException("Path " + f.getAbsolutePath() + " doesn't exist.");
}
if(f.isDirectory()) {
throw new OperationFormatException(f.getAbsolutePath() + " is a directory.");
}
} else {
f = null;
}
String name = this.name.getValue(args);
if(name == null) {
if(f == null) {
throw new OperationFormatException("Either path or --name is required.");
}
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) {
throw new OperationFormatException(this.force.getFullName() + " requires a filesystem path of the deployment to be added to the deployment repository.");
}
if(disabled || serverGroups != null || allServerGroups) {
throw new OperationFormatException(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() + '.');
}
if(Util.isDeploymentInRepository(name, client)) {
return buildDeploymentReplace(f, name, runtimeName);
} else {
// add deployment to the repository (enabled in standalone, disabled in domain (i.e. not associated with any sg))
return buildDeploymentAdd(f, name, runtimeName);
}
}
if(disabled) {
if(f == null) {
throw new OperationFormatException(this.disabled.getFullName() +
" requires a filesystem path of the deployment to be added to the deployment repository.");
}
if(serverGroups != null || allServerGroups) {
throw new OperationFormatException(this.serverGroups.getFullName() + " and " + this.allServerGroups.getFullName() +
" can't be used in combination with " + this.disabled.getFullName() + '.');
}
if(Util.isDeploymentInRepository(name, client)) {
throw new OperationFormatException("'" + name + "' already exists in the deployment repository (use " +
this.force.getFullName() + " to replace the existing content in the repository).");
}
// add deployment to the repository disabled
return buildDeploymentAdd(f, name, runtimeName);
}
// 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
final ModelNode deployRequest;
if(ctx.isDomainMode()) {
final List<String> sgList;
if(allServerGroups) {
if(serverGroups != null) {
throw new OperationFormatException(this.serverGroups.getFullName() + " can't appear in the same command with " + this.allServerGroups.getFullName());
}
sgList = Util.getServerGroups(client);
if(sgList.isEmpty()) {
throw new OperationFormatException("No server group is available.");
}
} 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.");
throw new OperationFormatException(buf.toString());
} else {
sgList = Arrays.asList(serverGroups.split(","));
if(sgList.isEmpty()) {
throw new OperationFormatException("Couldn't locate server group name in '" + this.serverGroups.getFullName() + "=" + serverGroups + "'.");
}
}
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) {
throw new OperationFormatException(this.serverGroups.getFullName() + " and " + this.allServerGroups.getFullName() +
" can't appear in standalone mode.");
}
deployRequest = new ModelNode();
deployRequest.get(Util.OPERATION).set(Util.DEPLOY);
deployRequest.get(Util.ADDRESS, Util.DEPLOYMENT).set(name);
}
final ModelNode addRequest;
if(f != null) {
if(Util.isDeploymentInRepository(name, client)) {
throw new OperationFormatException("'" + name + "' already exists in the deployment repository (use " +
this.force.getFullName() + " to replace the existing content in the repository).");
}
addRequest = this.buildDeploymentAdd(f, name, runtimeName);
} else if(!Util.isDeploymentInRepository(name, client)) {
throw new OperationFormatException("'" + name + "' is not found among the registered deployments.");
} else {
addRequest = null;
}
if(addRequest != null) {