/** * 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.artemis.cli.commands.queue; import io.airlift.airline.Option; import org.apache.activemq.artemis.cli.commands.AbstractAction; public class QueueAbstract extends AbstractAction { @Option(name = "--name", description = "queue name") private String name; @Option(name = "--filter", description = "queue's filter string (default null)") private String filter = null; @Option(name = "--address", description = "address of the queue (default queue's name)") private String address; @Option(name = "--durable", description = "whether the queue is durable or not (default input)") private Boolean durable; @Option(name = "--no-durable", description = "whether the queue is durable or not (default input)") private Boolean noDurable; @Option(name = "--purge-on-no-consumers", description = "whether to delete the contents of this queue when its last consumer disconnects (default input)") private Boolean purgeOnNoConsumers; @Option(name = "--preserve-on-no-consumers", description = "whether to preserve the contents of this queue when its last consumer disconnects (default input)") private Boolean preserveOnNoConsumers; @Option(name = "--max-consumers", description = "Maximum number of consumers allowed on this queue at any one time (default no limit)") private Integer maxConsumers; @Option(name = "--auto-create-address", description = "Auto create the address (if it doesn't exist) with default values (default input)") private Boolean autoCreateAddress; @Option(name = "--anycast", description = "It will determine this queue as anycast (default input)") private Boolean anycast; @Option(name = "--multicast", description = "It will determine this queue as multicast (default input)") private Boolean multicast; public void setFilter(String filter) { this.filter = filter; } public String getFilter() { return filter; } public String getAddress(boolean requireInput) { // just to force asking the queue name first String queueName = getName(); if (requireInput && (address == null || "".equals(address.trim()))) { address = input("--address", "Enter the address name. <Enter for " + queueName + ">", null, true); } if (address == null || "".equals(address.trim())) { // if still null, it will use the queueName address = queueName; } return address; } public boolean isDurable() { if (durable == null) { if (noDurable != null) { durable = !noDurable.booleanValue(); } } if (durable == null) { durable = inputBoolean("--durable", "Is this a durable queue", false); } return durable; } public QueueAbstract setDurable(boolean durable) { this.durable = durable; return this; } public boolean getPreserveOnNoConsumers() { return preserveOnNoConsumers; } public QueueAbstract setPreserveOnNoConsumers(boolean preserveOnNoConsumers) { this.preserveOnNoConsumers = preserveOnNoConsumers; return this; } public Integer getMaxConsumers(Integer defaultValue) { if (maxConsumers == null) { return defaultValue; } return maxConsumers; } public boolean isAutoCreateAddress() { if (autoCreateAddress == null) { autoCreateAddress = inputBoolean("--auto-create-address", "should auto create the address if it doesn't exist", false); } return autoCreateAddress; } public QueueAbstract setAutoCreateAddress(boolean autoCreateAddress) { this.autoCreateAddress = autoCreateAddress; return this; } public boolean isAnycast() { if (anycast == null) { if (multicast != null) { // if multicast is not null, it should be the opposite anycast = !multicast.booleanValue(); } if (anycast == null) { // if it is still null anycast = inputBoolean("--anycast", "is this an anycast queue", false); } } return anycast; } public QueueAbstract setAnycast(boolean anycast) { this.anycast = anycast; return this; } public boolean isMulticast() { if (multicast == null) { if (anycast != null) { // if anycast is not null, it should be the opposite multicast = !anycast.booleanValue(); } if (multicast == null) { // if it is still null multicast = inputBoolean("--multicast", "is this a multicast queue", false); } } return multicast; } public QueueAbstract setMulticast(boolean multicast) { this.multicast = multicast; return this; } public Boolean isPurgeOnNoConsumers() { return isPurgeOnNoConsumers(false); } public Boolean isPurgeOnNoConsumers(boolean useInput) { Boolean value = null; if (purgeOnNoConsumers != null) { value = purgeOnNoConsumers.booleanValue(); } else if (preserveOnNoConsumers != null) { value = !preserveOnNoConsumers.booleanValue(); } if (value == null && useInput) { value = inputBoolean("--purge-on-no-consumers", "Purge the contents of the queue once there are no consumers", false); } if (value == null) { // return null if still null return null; } purgeOnNoConsumers = value.booleanValue(); preserveOnNoConsumers = !value.booleanValue(); return value; } public void setMaxConsumers(int maxConsumers) { this.maxConsumers = maxConsumers; } public void setPurgeOnNoConsumers(boolean purgeOnNoConsumers) { this.purgeOnNoConsumers = purgeOnNoConsumers; } public void setAddress(String address) { this.address = address; } public void setName(String name) { this.name = name; } public String getName() { if (name == null) { name = input("--name", "Please provide the destination name:", ""); } return name; } public String getRoutingType() { if (isAnycast() && isMulticast()) { throw new IllegalArgumentException("--multicast and --anycast are exclusive options for a Queue"); } if (isMulticast()) { return "MULTICAST"; } else if (anycast) { return "ANYCAST"; } else { return null; } } }