package org.xmlsh.aws; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.xml.stream.XMLStreamException; import net.sf.saxon.s9api.SaxonApiException; import org.xmlsh.aws.util.AWSGlacierCommand; import org.xmlsh.core.CoreException; import org.xmlsh.core.Options; import org.xmlsh.core.OutputPort; import org.xmlsh.core.UnexpectedException; import org.xmlsh.core.XValue; import org.xmlsh.util.Util; import com.amazonaws.services.glacier.model.DescribeJobRequest; import com.amazonaws.services.glacier.model.DescribeJobResult; import com.amazonaws.services.glacier.model.GetJobOutputRequest; import com.amazonaws.services.glacier.model.GetJobOutputResult; public class glacierGetJobOutput extends AWSGlacierCommand { /** * @param args * @throws IOException */ @Override public int run(List<XValue> args) throws Exception { Options opts = getOptions(); parseOptions(opts, args); args = opts.getRemainingArgs(); if( args.size() != 1 ) usage(); setSerializeOpts(this.getSerializeOpts(opts)); String vault = args.get(0).toString(); String job = args.get(1).toString(); try { getGlacierClient(opts); } catch (UnexpectedException e) { usage( e.getLocalizedMessage() ); return 1; } int ret = -1; ret = getOutput(vault,job); return ret; } private int getOutput(String vault,String job) throws IOException, XMLStreamException, SaxonApiException, CoreException, InterruptedException { OutputPort stdout = getStdout(); DescribeJobRequest describeJobRequest = new DescribeJobRequest(vault, job ); String status = null; DescribeJobResult describeResult= null; do { traceCall("describeJob"); describeResult = mAmazon.describeJob(describeJobRequest); status = describeResult.getStatusCode(); mShell.printOut(status); if( ! status.equals("InProgress")) break ; Thread.sleep(10*1000); } while( true ); if( status.equals("Succeeded")){ GetJobOutputRequest getJobOutputRequest= new GetJobOutputRequest(vault, job , null); GetJobOutputResult jobOutputResult = mAmazon.getJobOutput(getJobOutputRequest); InputStream jobOutput = jobOutputResult.getBody(); Util.copyStream(jobOutput, stdout.asOutputStream(getSerializeOpts())); jobOutput.close(); } stdout.release(); return 0; } @Override public void usage() { super.usage(); } }