/**
 * 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.activemq.maven;

import org.apache.activemq.tool.JMSMemtest;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;

/**
 * Goal which does a memory usage test to check for any memory leak
 *
 * @goal memtest
 * @phase process-sources
 */
public class MemtestMojo extends AbstractMojo {

    /**
     * @parameter property="${url}
     */
    private String url;

    /**
     * @parameter property="${topic}" default-value="true"
     * @required
     */
    private String topic;

    /**
     * @parameter property="${connectionCheckpointSize}" default-value="-1"
     * @required
     */
    private String connectionCheckpointSize;

    /**
     * @parameter property="${durable}" default-value="false"
     * @required
     */
    private String durable;

    /**
     * @parameter property="${producerCount}" default-value="1"
     * @required
     */
    private String producerCount;

    /**
     * @parameter property="${prefetchSize}" default-value="-1"
     * @required
     */
    private String prefetchSize;

    /**
     * @parameter property="${consumerCount}" default-value="1"
     * @required
     */
    private String consumerCount;

    /**
     * @parameter property="${messageCount}" default-value="100000"
     * @required
     */
    private String messageCount;

    /**
     * @parameter property="${messageSize}" default-value="10240"
     * @required
     */
    private String messageSize;

    /**
     * @parameter property="${checkpointInterval}" default-value="2"
     * @required
     */
    private String checkpointInterval;

    /**
     * @parameter property="${destinationName}" default-value="FOO.BAR"
     * @required
     */
    private String destinationName;

    /**
     * @parameter property="${reportName}"
     *            default-value="activemq-memory-usage-report"
     * @required
     */
    private String reportName;

    /**
     * @parameter property="${reportDirectory}"
     *            default-value="${project.build.directory}/test-memtest"
     * @required
     */
    private String reportDirectory;

    @Override
    public void execute() throws MojoExecutionException {

        JMSMemtest.main(createArgument());
    }

    public String[] createArgument() {
        String[] options = {
            "url=" + url, "topic=" + topic, "durable=" + durable, "connectionCheckpointSize=" + connectionCheckpointSize, "producerCount=" + producerCount, "consumerCount=" + consumerCount,
            "messageCount=" + messageCount, "messageSize=" + messageSize, "checkpointInterval=" + checkpointInterval, "destinationName=" + destinationName, "reportName=" + reportName,
            "prefetchSize=" + prefetchSize, "reportDirectory=" + reportDirectory,
        };
        return options;
    }
}
