Package org.wiztools.restclient.cli

Source Code of org.wiztools.restclient.cli.CliMain

package org.wiztools.restclient.cli;

import com.sampullara.cli.Args;
import com.sampullara.cli.Argument;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.wiztools.commons.FileUtil;
import org.wiztools.restclient.*;
import org.wiztools.restclient.bean.Request;
import org.wiztools.restclient.bean.RequestExecuter;
import org.wiztools.restclient.bean.Response;
import org.wiztools.restclient.bean.TestResult;
import org.wiztools.restclient.util.XMLUtil;

/**
*
* @author subwiz
*/
public class CliMain {

    private static int runCount;
    private static int failureCount;
    private static int errorCount;

    private static class CliCommand{
        @Argument(value = "output",
                alias = "o",
                description = "This is the output file",
                required = true)
        private File outDir;
       
        @Argument(value = "save-response-body",
                alias = "b",
                description = "Save response body instead of full response",
                required = false)
        private boolean saveResponseBody = false;
    }

    private static class CliView implements View{
        final File outDir;
        final File reqFile;
        final boolean saveResponseBody;

        CliView(final File outDir, final File reqFile, final boolean saveResponseBody){
            this.outDir = outDir;
            this.reqFile = reqFile;
            this.saveResponseBody = saveResponseBody;
        }

        @Override
        public void doStart(Request request) {
            System.out.println("Starting: " + reqFile.getAbsolutePath());
        }

        @Override
        public void doResponse(Response response) {
            String reqFileName = reqFile.getName();
            final String outFilePrefix = reqFileName.endsWith(".rcq")
                    ? reqFileName.replaceAll(".rcq", ""): reqFileName;
           
            try{
                // Generate the response file:
                // Add response extension:
                final String ext = this.saveResponseBody? ".body": ".rcs";
                final File resFile = new NonExistFileGenerator(outDir, outFilePrefix, ext).getFile();
               
                // Test:
                TestResult testResult = response.getTestResult();
                if(testResult != null){
                    failureCount += testResult.getFailureCount();
                    errorCount += testResult.getErrorCount();
                    runCount += testResult.getRunCount();
                }
                if(this.saveResponseBody) {
                    FileUtil.writeBytes(resFile, response.getResponseBody());
                }
                else {
                    XMLUtil.writeResponseXML(response, resFile);
                }
            }
            catch(IOException ex){
                ex.printStackTrace(System.err);
            }
            catch(XMLException ex){
                ex.printStackTrace(System.err);
            }
        }

        @Override
        public void doCancelled() {
            // Cannot cancell in cli mode
        }

        @Override
        public void doEnd() {
            System.out.println("End: " + reqFile.getAbsolutePath());
        }

        @Override
        public void doError(String error) {
            System.err.println("Error:");
            System.err.println(error);
        }

    }

    public static void main(String[] arg){
        CliCommand command = new CliCommand();
        List<String> params = null;
        try{
            params = Args.parse(command, arg);
        }
        catch(IllegalArgumentException ex){
            System.err.println(ex.getMessage());
            Args.usage(command);
            System.exit(1);
        }
        if(params.isEmpty()){
            System.err.println("No request(s) given as parameter.");
            System.exit(1);
        }
        File outDir = command.outDir;
        List<String> errors = new ArrayList<String>();
        if(!outDir.isDirectory()){
            errors.add("Out directory is not a directory: " + outDir.getAbsolutePath());
        }
        else if(!outDir.canWrite()){
            errors.add("Cannot write in out dir: " + outDir.getAbsolutePath());
        }
        else{
            for(String param: params){
                File f = new File(param);
                if(f.canRead()){
                    try{
                        Request request = XMLUtil.getRequestFromXMLFile(f);
                        View view = new CliView(outDir, f, command.saveResponseBody);
                        // Execute:
                        RequestExecuter executer = ServiceLocator.getInstance(RequestExecuter.class);
                        executer.execute(request, view);
                    }
                    catch(IOException ex){
                        ex.printStackTrace(System.err);
                    }
                    catch(XMLException ex){
                        ex.printStackTrace(System.err);
                    }
                }
                else{
                    System.err.println("No read access: " + f.getAbsolutePath());
                }
            }
            // Print summary of tests:
            if(runCount > 0){
                System.out.println();
                System.out.println("Total tests executed: " + runCount);
                System.out.println("Total failures:       " + failureCount);
                System.out.println("Total errors:         " + errorCount);
            }
        }
        if(errors.size() > 0){
            System.err.println("There were errors: ");
            for(String error: errors){
                System.err.println("--> " + error);
            }
            System.exit(2);
        }
    }
}
TOP

Related Classes of org.wiztools.restclient.cli.CliMain

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.