/* * Copyright 2015 The Apache Software Foundation. * * Licensed 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.wso2.carbon.registry.event.core.internal.subscription.registry; import org.apache.axiom.om.OMElement; import org.apache.axis2.databinding.utils.ConverterUtil; import org.wso2.carbon.registry.event.core.exception.EventBrokerConfigurationException; import org.wso2.carbon.registry.event.core.exception.EventBrokerException; import org.wso2.carbon.registry.event.core.internal.util.JavaUtil; import org.wso2.carbon.registry.event.core.subscription.SubscriptionManager; import org.wso2.carbon.registry.event.core.subscription.SubscriptionManagerFactory; import org.wso2.carbon.registry.event.core.subscription.Subscription; import org.wso2.carbon.registry.event.core.util.EventBrokerConstants; import javax.xml.namespace.QName; import java.util.Iterator; /** * factory class for registry based subscription manager */ public class RegistrySubscriptionManagerFactory implements SubscriptionManagerFactory { public static final String EB_ELE_TOPIC_STORAGE_PATH = "topicStoragePath"; public static final String EB_ELE_INDEX_STORAGE_PATH = "indexStoragePath"; public static final String EB_ELE_SUBSCRIPTION = "subscription"; public static final String EB_ATTR_ID = "id"; public static final String EB_ELE_TOPIC = "topic"; public static final String EB_ELE_EVENT_SINK_URL = "eventSinkURL"; public static final String EB_ELE_EXPIRES = "expires"; public static final String EB_ELE_OWNER = "owner"; public SubscriptionManager getSubscriptionManager(OMElement config) throws EventBrokerConfigurationException { String topicStoragePath = JavaUtil.getValue(config, EB_ELE_TOPIC_STORAGE_PATH); String indexStoragePath = JavaUtil.getValue(config, EB_ELE_INDEX_STORAGE_PATH); RegistrySubscriptionManager registrySubscriptionManager = new RegistrySubscriptionManager(topicStoragePath, indexStoragePath); // add the static subscriptions Iterator subscriptionsIter = config.getChildrenWithName(new QName(EventBrokerConstants.EB_CONF_NAMESPACE, EB_ELE_SUBSCRIPTION)); OMElement subscriptionElement = null; Subscription subscription = null; String id = null; for (;subscriptionsIter.hasNext();) { subscriptionElement = (OMElement) subscriptionsIter.next(); subscription = new Subscription(); subscription.setId(subscriptionElement.getAttributeValue(new QName(null, EB_ATTR_ID))); // add this subscription only if it does not exists. try { if (registrySubscriptionManager.getSubscription(subscription.getId()) == null){ subscription.setTopicName(JavaUtil.getValue(subscriptionElement, EB_ELE_TOPIC)); subscription.setOwner(JavaUtil.getValue(subscriptionElement, EB_ELE_OWNER)); subscription.setEventSinkURL( JavaUtil.getValue(subscriptionElement, EB_ELE_EVENT_SINK_URL)); subscription.setExpires( ConverterUtil.convertToDateTime( JavaUtil.getValue(subscriptionElement, EB_ELE_EXPIRES))); if (subscription.getEventSinkURL().startsWith("sqs://")) { subscription.setEventDispatcherName(EventBrokerConstants.EVENT_SINK_DISPATCHER_NAME); } else { subscription.setEventDispatcherName(EventBrokerConstants.WS_EVENT_DISPATCHER_NAME); } registrySubscriptionManager.addSubscription(subscription); } } catch (EventBrokerException e) { throw new EventBrokerConfigurationException( "Can not access the registry to read subscrptions ", e); } } return registrySubscriptionManager; } }