/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* 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 jug.client.command.api;
import jug.client.util.ClientNameHolder;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.jaxrs.client.WebClient;
import org.codehaus.jettison.util.StringIndenter;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
public abstract class AbstractCommand {
protected String command;
protected String url;
protected WebClient client;
public void execute(final String cmd) {
final Response response = invoke(cmd);
if (response == null) {
return;
}
System.out.println("Status: " + response.getStatus());
try {
String json = slurp((InputStream) response.getEntity());
System.out.println(format(json));
} catch (IOException e) {
System.err.println("can't get output: " + e.getMessage());
}
}
protected String format(final String json) throws IOException {
final StringIndenter formatter = new StringIndenter(json);
final Writer outWriter = new StringWriter();
IOUtils.copy(new StringReader(formatter.result()), outWriter, 2048);
outWriter.close();
return outWriter.toString();
}
protected abstract Response invoke(final String cmd);
public void setCommand(String command) {
this.command = command;
}
public void setUrl(String url) {
this.url = url;
client = WebClient.create(url).accept(MediaType.APPLICATION_JSON);
if (ClientNameHolder.getCurrent() != null) {
client.query("client", ClientNameHolder.getCurrent());
}
}
public static String slurp(final InputStream from) throws IOException {
ByteArrayOutputStream to = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = from.read(buffer)) != -1) {
to.write(buffer, 0, length);
}
to.flush();
return new String(to.toByteArray());
}
}