/** * 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.plugin; import org.apache.activemq.command.ActiveMQDestination; import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; import org.apache.activemq.schema.core.DtoQueue; import org.apache.activemq.schema.core.DtoTopic; import java.util.Arrays; import java.util.List; public class DestinationsProcessor extends DefaultConfigurationProcessor { public DestinationsProcessor(RuntimeConfigurationBroker plugin, Class configurationClass) { super(plugin, configurationClass); } @Override public void processChanges(List current, List modified) { for (Object destinations : modified) { for (Object dto : getContents(destinations)) { try { ActiveMQDestination destination = createDestination(dto); if (!containsDestination(destination)) { plugin.addDestination(plugin.getBrokerService().getAdminConnectionContext(), destination, true); plugin.info("Added destination " + destination); } } catch (Exception e) { plugin.info("Failed to add a new destination for DTO: " + dto, e); } } } } protected boolean containsDestination(ActiveMQDestination destination) throws Exception { return Arrays.asList(plugin.getBrokerService().getRegionBroker().getDestinations()).contains(destination); } @Override public void addNew(Object o) { try { ActiveMQDestination destination = createDestination(o); plugin.addDestination(plugin.getBrokerService().getAdminConnectionContext(), destination, true); plugin.info("Added destination " + destination); } catch (Exception e) { plugin.info("Failed to add a new destination for DTO: " + o, e); } } private ActiveMQDestination createDestination(Object dto) throws Exception { if (dto instanceof DtoQueue) { return new ActiveMQQueue(((DtoQueue) dto).getPhysicalName()); } else if (dto instanceof DtoTopic) { return new ActiveMQTopic(((DtoTopic) dto).getPhysicalName()); } else { throw new Exception("Unknown destination type for DTO " + dto); } } }