/* * 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.core.server.impl; import java.util.HashSet; import java.util.Set; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.RoutingType; public class AddressInfo { private long id; private final SimpleString name; private boolean autoCreated = false; private Set<RoutingType> routingTypes; public AddressInfo(SimpleString name) { this.name = name; routingTypes = new HashSet<>(); } /** * Creates an AddressInfo object with a Set of routing types * @param name * @param routingTypes */ public AddressInfo(SimpleString name, Set<RoutingType> routingTypes) { this.name = name; this.routingTypes = routingTypes; } /** * Creates an AddressInfo object with a single RoutingType associated with it. * @param name * @param routingType */ public AddressInfo(SimpleString name, RoutingType routingType) { this.name = name; this.routingTypes = new HashSet<>(); routingTypes.add(routingType); } public boolean isAutoCreated() { return autoCreated; } public AddressInfo setAutoCreated(boolean autoCreated) { this.autoCreated = autoCreated; return this; } public SimpleString getName() { return name; } public void setId(long id) { this.id = id; } public long getId() { return id; } public Set<RoutingType> getRoutingTypes() { return routingTypes; } public AddressInfo setRoutingTypes(Set<RoutingType> routingTypes) { this.routingTypes = routingTypes; return this; } public AddressInfo addRoutingType(RoutingType routingType) { if (routingTypes == null) { routingTypes = new HashSet<>(); } routingTypes.add(routingType); return this; } public RoutingType getRoutingType() { /* We want to use a Set to guarantee only a single entry for ANYCAST, MULTICAST can be added to routing types. There are cases where we also want to get any routing type (when a queue doesn't specifyc it's routing type for example. For this reason we return the first element in the Set. */ // TODO There must be a better way of doing this. This creates an iterator on each lookup. for (RoutingType routingType : routingTypes) { return routingType; } return null; } @Override public String toString() { StringBuffer buff = new StringBuffer(); buff.append("Address [name=" + name); buff.append(", id=" + id); buff.append(", routingTypes={"); for (RoutingType routingType : routingTypes) { buff.append(routingType.toString() + ","); } // delete hanging comma if (buff.charAt(buff.length() - 1) == ',') { buff.deleteCharAt(buff.length() - 1); } buff.append("}"); buff.append(", autoCreated=" + autoCreated); buff.append("]"); return buff.toString(); } }