/**
* Copyright 2016 Yahoo Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.yahoo.pulsar.admin.cli;
import java.util.List;
import java.util.Set;
import com.beust.jcommander.ParameterException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.google.common.collect.Sets;
import com.yahoo.pulsar.common.naming.DestinationDomain;
import com.yahoo.pulsar.common.naming.DestinationName;
import com.yahoo.pulsar.common.naming.NamespaceName;
import com.yahoo.pulsar.common.policies.data.AuthAction;
import com.yahoo.pulsar.common.util.ObjectMapperFactory;
abstract class CliCommand {
String[] validatePropertyCluster(List<String> params) {
return splitParameter(params, 2);
}
String validateNamespace(List<String> params) {
String namespace = checkArgument(params);
return new NamespaceName(namespace).toString();
}
String validateDestination(List<String> params) {
String destination = checkArgument(params);
return DestinationName.get(destination).toString();
}
String validatePersistentTopic(List<String> params) {
String destination = checkArgument(params);
DestinationName ds = DestinationName.get(destination);
if (ds.getDomain() != DestinationDomain.persistent) {
throw new ParameterException("Need to provide a persistent topic name");
}
return ds.toString();
}
void validateLatencySampleRate(int sampleRate) {
if (sampleRate < 0) {
throw new ParameterException(
"Latency sample rate should be positive and non-zero (found " + sampleRate + ")");
}
}
String checkArgument(List<String> arguments) {
if (arguments.size() != 1) {
throw new ParameterException("Need to provide just 1 parameter");
}
return arguments.get(0);
}
private String[] splitParameter(List<String> params, int n) {
if (params.size() != 1) {
throw new ParameterException("Need to provide just 1 parameter");
}
String[] parts = params.get(0).split("/");
if (parts.length != n) {
throw new ParameterException("Paramter format is incorrect");
}
return parts;
}
String getOneArgument(List<String> params) {
if (params.size() != 1) {
throw new ParameterException("Need to provide just 1 parameter");
}
return params.get(0);
}
/**
*
* @param params
* List of positional arguments
* @param pos
* Positional arguments start with index as 1
* @param maxArguments
* Validate against max arguments
* @return
*/
String getOneArgument(List<String> params, int pos, int maxArguments) {
if (params.size() != maxArguments) {
throw new ParameterException(String.format("Need to provide %s parameters", maxArguments));
}
return params.get(pos);
}
Set<AuthAction> getAuthActions(List<String> actions) {
Set<AuthAction> res = Sets.newTreeSet();
for (String action : actions) {
res.add(AuthAction.valueOf(action));
}
return res;
}
<T> void print(List<T> items) {
for (T item : items) {
System.out.println(item);
}
}
<T> void print(T item) {
try {
System.out.println(writer.writeValueAsString(item));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static ObjectMapper mapper = ObjectMapperFactory.create();
private static ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
abstract void run() throws Exception;
}