org.apache.qpid.amqp_1_0.client.Util.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.qpid.amqp_1_0.client.Util.java

Source

/*
 *
 * 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
 *
 *   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 org.apache.qpid.amqp_1_0.client;

import org.apache.qpid.amqp_1_0.transport.Container;
import org.apache.commons.cli.*;

import java.util.logging.*;

public abstract class Util {

    private static final Logger FRAME_LOGGER = Logger.getLogger("FRM");
    private static final Logger RAW_LOGGER = Logger.getLogger("RAW");
    private String _host;
    private String _username;
    private String _password;
    private int _port;
    private int _count;
    private boolean _useStdIn;
    private boolean _useTran;
    private String[] _args;
    private AcknowledgeMode _mode;
    private boolean _block;
    private int _frameSize;
    private int _messageSize;
    private String _responseQueue;
    private int _batchSize;
    private double _rollbackRatio;
    private String _linkName;
    private String _containerName;
    private boolean _durableLink;
    private boolean _useMultipleConnections;
    private int _windowSize = 100;
    private String _subject;
    private String _filter;
    private String _remoteHost;
    private boolean _useSSL;

    protected Util(String[] args) {
        CommandLineParser cmdLineParse = new PosixParser();

        Options options = new Options();
        options.addOption("h", "help", false, "show this help message and exit");
        options.addOption(OptionBuilder.withLongOpt("host").withDescription("host to connect to (default 0.0.0.0)")
                .hasArg(true).withArgName("HOST").create('H'));
        options.addOption(
                OptionBuilder.withLongOpt("username").withDescription("username to use for authentication")
                        .hasArg(true).withArgName("USERNAME").create('u'));
        options.addOption(
                OptionBuilder.withLongOpt("password").withDescription("password to use for authentication")
                        .hasArg(true).withArgName("PASSWORD").create('w'));
        options.addOption(OptionBuilder.withLongOpt("port").withDescription("port to connect to (default 5672)")
                .hasArg(true).withArgName("PORT").create('p'));
        options.addOption(OptionBuilder.withLongOpt("frame-size").withDescription("specify the maximum frame size")
                .hasArg(true).withArgName("FRAME_SIZE").create('f'));
        options.addOption(OptionBuilder.withLongOpt("container-name").withDescription("Container name").hasArg(true)
                .withArgName("CONTAINER_NAME").create('C'));

        options.addOption(OptionBuilder.withLongOpt("ssl").withDescription("Use SSL").create('S'));

        options.addOption(
                OptionBuilder.withLongOpt("remote-hostname").withDescription("hostname to supply in the open frame")
                        .hasArg(true).withArgName("HOST").create('O'));

        if (hasBlockOption())
            options.addOption(
                    OptionBuilder.withLongOpt("block").withDescription("block until messages arrive").create('b'));

        if (hasCountOption())
            options.addOption(
                    OptionBuilder.withLongOpt("count").withDescription("number of messages to send (default 1)")
                            .hasArg(true).withArgName("COUNT").create('c'));
        if (hasModeOption())
            options.addOption(OptionBuilder.withLongOpt("acknowledge-mode")
                    .withDescription("acknowledgement mode: AMO|ALO|EO (At Least Once, At Most Once, Exactly Once")
                    .hasArg(true).withArgName("MODE").create('k'));

        if (hasSubjectOption())
            options.addOption(OptionBuilder.withLongOpt("subject").withDescription("subject message property")
                    .hasArg(true).withArgName("SUBJECT").create('s'));

        if (hasSingleLinkPerConnectionMode())
            options.addOption(OptionBuilder.withLongOpt("single-link-per-connection")
                    .withDescription("acknowledgement mode: AMO|ALO|EO (At Least Once, At Most Once, Exactly Once")
                    .hasArg(false).create('Z'));

        if (hasFilterOption())
            options.addOption(OptionBuilder.withLongOpt("filter")
                    .withDescription("filter, e.g. exact-subject=hello; matching-subject=%.a.#").hasArg(true)
                    .withArgName("<TYPE>=<VALUE>").create('F'));

        if (hasTxnOption()) {
            options.addOption("x", "txn", false, "use transactions");
            options.addOption(
                    OptionBuilder.withLongOpt("batch-size").withDescription("transaction batch size (default: 1)")
                            .hasArg(true).withArgName("BATCH-SIZE").create('B'));
            options.addOption(OptionBuilder.withLongOpt("rollback-ratio")
                    .withDescription("rollback ratio - must be between 0 and 1 (default: 0)").hasArg(true)
                    .withArgName("RATIO").create('R'));
        }

        if (hasLinkDurableOption()) {
            options.addOption("d", "durable-link", false, "use a durable link");
        }

        if (hasStdInOption())
            options.addOption("i", "stdin", false, "read messages from stdin (one message per line)");

        options.addOption(
                OptionBuilder.withLongOpt("trace").withDescription("trace logging specified categories: RAW, FRM")
                        .hasArg(true).withArgName("TRACE").create('t'));
        if (hasSizeOption())
            options.addOption(
                    OptionBuilder.withLongOpt("message-size").withDescription("size to pad outgoing messages to")
                            .hasArg(true).withArgName("SIZE").create('z'));

        if (hasResponseQueueOption())
            options.addOption(
                    OptionBuilder.withLongOpt("response-queue").withDescription("response queue to reply to")
                            .hasArg(true).withArgName("RESPONSE_QUEUE").create('r'));

        if (hasLinkNameOption()) {
            options.addOption(OptionBuilder.withLongOpt("link").withDescription("link name").hasArg(true)
                    .withArgName("LINK").create('l'));
        }

        if (hasWindowSizeOption()) {
            options.addOption(OptionBuilder.withLongOpt("window-size").withDescription("credit window size")
                    .hasArg(true).withArgName("WINDOW-SIZE").create('W'));
        }

        CommandLine cmdLine = null;
        try {
            cmdLine = cmdLineParse.parse(options, args);

        } catch (ParseException e) {
            printUsage(options);
            System.exit(-1);
        }

        if (cmdLine.hasOption('h') || cmdLine.getArgList().isEmpty()) {
            printUsage(options);
            System.exit(0);
        }
        _host = cmdLine.getOptionValue('H', "0.0.0.0");
        _remoteHost = cmdLine.getOptionValue('O', null);
        String portStr = cmdLine.getOptionValue('p', "5672");
        String countStr = cmdLine.getOptionValue('c', "1");

        _useSSL = cmdLine.hasOption('S');

        if (hasWindowSizeOption()) {
            String windowSizeStr = cmdLine.getOptionValue('W', "100");
            _windowSize = Integer.parseInt(windowSizeStr);
        }

        if (hasSubjectOption()) {
            _subject = cmdLine.getOptionValue('s');
        }

        if (cmdLine.hasOption('u')) {
            _username = cmdLine.getOptionValue('u');
        }

        if (cmdLine.hasOption('w')) {
            _password = cmdLine.getOptionValue('w');
        }

        if (cmdLine.hasOption('F')) {
            _filter = cmdLine.getOptionValue('F');
        }

        _port = Integer.parseInt(portStr);

        _containerName = cmdLine.getOptionValue('C');

        if (hasBlockOption())
            _block = cmdLine.hasOption('b');

        if (hasLinkNameOption())
            _linkName = cmdLine.getOptionValue('l');

        if (hasLinkDurableOption())
            _durableLink = cmdLine.hasOption('d');

        if (hasCountOption())
            _count = Integer.parseInt(countStr);

        if (hasStdInOption())
            _useStdIn = cmdLine.hasOption('i');

        if (hasSingleLinkPerConnectionMode())
            _useMultipleConnections = cmdLine.hasOption('Z');

        if (hasTxnOption()) {
            _useTran = cmdLine.hasOption('x');
            _batchSize = Integer.parseInt(cmdLine.getOptionValue('B', "1"));
            _rollbackRatio = Double.parseDouble(cmdLine.getOptionValue('R', "0"));
        }

        if (hasModeOption()) {
            _mode = AcknowledgeMode.ALO;

            if (cmdLine.hasOption('k')) {
                _mode = AcknowledgeMode.valueOf(cmdLine.getOptionValue('k'));
            }
        }

        if (hasResponseQueueOption()) {
            _responseQueue = cmdLine.getOptionValue('r');
        }

        _frameSize = Integer.parseInt(cmdLine.getOptionValue('f', "65536"));

        if (hasSizeOption()) {
            _messageSize = Integer.parseInt(cmdLine.getOptionValue('z', "-1"));
        }

        String categoriesList = cmdLine.getOptionValue('t');
        String[] categories = categoriesList == null ? new String[0] : categoriesList.split("[, ]");
        for (String cat : categories) {
            if (cat.equalsIgnoreCase("FRM")) {
                FRAME_LOGGER.setLevel(Level.FINE);
                Formatter formatter = new Formatter() {
                    @Override
                    public String format(final LogRecord record) {
                        return "[" + record.getMillis() + " FRM]\t" + record.getMessage() + "\n";
                    }
                };
                for (Handler handler : FRAME_LOGGER.getHandlers()) {
                    FRAME_LOGGER.removeHandler(handler);
                }
                Handler handler = new ConsoleHandler();
                handler.setLevel(Level.FINE);
                handler.setFormatter(formatter);
                FRAME_LOGGER.addHandler(handler);
            } else if (cat.equalsIgnoreCase("RAW")) {
                RAW_LOGGER.setLevel(Level.FINE);
                Formatter formatter = new Formatter() {
                    @Override
                    public String format(final LogRecord record) {
                        return "[" + record.getMillis() + " RAW]\t" + record.getMessage() + "\n";
                    }
                };
                for (Handler handler : RAW_LOGGER.getHandlers()) {
                    RAW_LOGGER.removeHandler(handler);
                }
                Handler handler = new ConsoleHandler();
                handler.setLevel(Level.FINE);
                handler.setFormatter(formatter);
                RAW_LOGGER.addHandler(handler);
            }
        }

        _args = cmdLine.getArgs();

    }

    protected boolean hasFilterOption() {
        return false;
    }

    protected boolean hasSubjectOption() {
        return false;
    }

    protected boolean hasWindowSizeOption() {
        return false;
    }

    protected boolean hasSingleLinkPerConnectionMode() {
        return false;
    }

    protected abstract boolean hasLinkDurableOption();

    protected abstract boolean hasLinkNameOption();

    protected abstract boolean hasResponseQueueOption();

    protected abstract boolean hasSizeOption();

    protected abstract boolean hasBlockOption();

    protected abstract boolean hasStdInOption();

    protected abstract boolean hasTxnOption();

    protected abstract boolean hasModeOption();

    protected abstract boolean hasCountOption();

    public String getHost() {
        return _host;
    }

    public String getUsername() {
        return _username;
    }

    public String getPassword() {
        return _password;
    }

    public int getPort() {
        return _port;
    }

    public int getCount() {
        return _count;
    }

    public boolean useStdIn() {
        return _useStdIn;
    }

    public boolean useTran() {
        return _useTran;
    }

    public AcknowledgeMode getMode() {
        return _mode;
    }

    public boolean isBlock() {
        return _block;
    }

    public String[] getArgs() {
        return _args;
    }

    public int getMessageSize() {
        return _messageSize;
    }

    public String getResponseQueue() {
        return _responseQueue;
    }

    public int getBatchSize() {
        return _batchSize;
    }

    public double getRollbackRatio() {
        return _rollbackRatio;
    }

    public String getLinkName() {
        return _linkName;
    }

    public boolean isDurableLink() {
        return _durableLink;
    }

    public boolean isUseMultipleConnections() {
        return _useMultipleConnections;
    }

    public void setUseMultipleConnections(boolean useMultipleConnections) {
        _useMultipleConnections = useMultipleConnections;
    }

    public String getSubject() {
        return _subject;
    }

    public void setSubject(String subject) {
        _subject = subject;
    }

    protected abstract void printUsage(final Options options);

    protected abstract void run();

    public Connection newConnection() throws Connection.ConnectionException {
        Container container = getContainerName() == null ? new Container() : new Container(getContainerName());
        return getUsername() == null
                ? new Connection(getHost(), getPort(), null, null, _frameSize, container,
                        _remoteHost == null ? getHost() : _remoteHost, _useSSL)
                : new Connection(getHost(), getPort(), getUsername(), getPassword(), _frameSize, container,
                        _remoteHost == null ? getHost() : _remoteHost, _useSSL);
    }

    public String getContainerName() {
        return _containerName;
    }

    public int getWindowSize() {
        return _windowSize;
    }

    public void setWindowSize(int windowSize) {
        _windowSize = windowSize;
    }

    public String getFilter() {
        return _filter;
    }
}