package org.jboss.as.patching.cli;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.jboss.as.cli.CommandContext;
import org.jboss.as.cli.Util;
import org.jboss.as.cli.impl.ArgumentWithValue;
import org.jboss.as.cli.impl.DefaultCompleter.CandidatesProvider;
import org.jboss.as.controller.client.ModelControllerClient;
import org.jboss.dmr.ModelNode;
class CandidatesProviders {
private static Collection<String> getChildrenNames(ModelControllerClient client, ModelNode address, String childType) {
if(client == null) {
return Collections.emptyList();
}
final ModelNode request = new ModelNode();
request.get(Util.ADDRESS).set(address);
request.get(Util.OPERATION).set(Util.READ_CHILDREN_NAMES);
request.get(Util.CHILD_TYPE).set(childType);
final ModelNode response;
try {
response = client.execute(request);
} catch (IOException e) {
return Collections.emptyList();
}
final ModelNode result = response.get(Util.RESULT);
if(!result.isDefined()) {
return Collections.emptyList();
}
final List<ModelNode> list = result.asList();
final List<String> names = new ArrayList<String>(list.size());
for(ModelNode node : list) {
names.add(node.asString());
}
return names;
}
static final CandidatesProvider HOSTS = new CandidatesProvider() {
@Override
public Collection<String> getAllCandidates(CommandContext ctx) {
final ModelControllerClient client = ctx.getModelControllerClient();
final ModelNode address = new ModelNode().setEmptyList();
return getChildrenNames(client, address, Util.HOST);
}
};
static final CandidatesProvider newServerCandidatesProvider(final ArgumentWithValue host) {
return new CandidatesProvider() {
@Override
public Collection<String> getAllCandidates(CommandContext ctx) {
final ModelControllerClient client = ctx.getModelControllerClient();
final ModelNode address = new ModelNode().set(Util.HOST, host.getValue(ctx.getParsedCommandLine()));
return getChildrenNames(client, address, Util.SERVER);
}
};
}
}