Adding missing files of previous commit
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/f888f854 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/f888f854 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/f888f854 Branch: refs/heads/master Commit: f888f854c44198bcf3e2d110367ef60d69ca8fd4 Parents: 5eee96d Author: Imesh Gunaratne <[email protected]> Authored: Tue Apr 29 00:45:30 2014 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Tue Apr 29 00:45:30 2014 +0530 ---------------------------------------------------------------------- .../messaging/domain/tenant/Subscription.java | 65 +++++++++++++ .../tenant/SubscriptionDomainsAddedEvent.java | 60 ++++++++++++ .../tenant/SubscriptionDomainsRemovedEvent.java | 60 ++++++++++++ .../SubscriptionDomainsAddedEventListener.java | 28 ++++++ ...SubscriptionDomainsRemovedEventListener.java | 28 ++++++ ...ubscriptionDomainsAddedMessageProcessor.java | 96 ++++++++++++++++++++ ...scriptionDomainsRemovedMessageProcessor.java | 96 ++++++++++++++++++++ .../messaging/test/TenantDomainTest.java | 45 +++++++++ 8 files changed, 478 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f888f854/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/tenant/Subscription.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/tenant/Subscription.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/tenant/Subscription.java new file mode 100644 index 0000000..36fca2b --- /dev/null +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/tenant/Subscription.java @@ -0,0 +1,65 @@ +/* + * 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.stratos.messaging.domain.tenant; + +import java.util.*; + +/** + * Tenant's service subscription. + */ +public class Subscription { + private final String serviceName; + private final Set<String> clusterIds; + private final Set<String> domains; + + public Subscription(String serviceName, Set<String> clusterIds, Set<String> domains) { + this.serviceName = serviceName; + this.clusterIds = clusterIds; + this.domains = (domains != null) ? domains : new HashSet<String>(); + } + + public String getServiceName() { + return serviceName; + } + + public Set<String> getClusterIds() { + return Collections.unmodifiableSet(clusterIds); + } + + public void addDomain(String domain) { + domains.add(domain); + } + + public void addDomains(Set<String> domains) { + domains.addAll(domains); + } + + public void removeDomain(String domain) { + domains.remove(domain); + } + + public void removeDomains(Set<String> domains) { + domains.removeAll(domains); + } + + public Set<String> getDomains() { + return Collections.unmodifiableSet(domains); + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f888f854/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsAddedEvent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsAddedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsAddedEvent.java new file mode 100644 index 0000000..312571a --- /dev/null +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsAddedEvent.java @@ -0,0 +1,60 @@ +/* + * 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.stratos.messaging.event.tenant; + +import org.apache.stratos.messaging.event.Event; + +import java.io.Serializable; +import java.util.*; + +/** + * This event is fired when domains are added to a tenant subscription. + */ +public class SubscriptionDomainsAddedEvent extends Event implements Serializable { + private static final long serialVersionUID = 3457484382856403382L; + + private final int tenantId; + private final String serviceName; + private final Set<String> clusterIds; + private final Set<String> domains; + + public SubscriptionDomainsAddedEvent(int tenantId, String serviceName, Set<String> clusterIds, Set<String> domains) { + this.tenantId = tenantId; + this.serviceName = serviceName; + this.clusterIds = clusterIds; + this.domains = (domains != null) ? domains : new HashSet<String>(); + } + + public int getTenantId() { + return tenantId; + } + + public String getServiceName() { + return serviceName; + } + + public Set<String> getClusterIds() { + return Collections.unmodifiableSet(clusterIds); + } + + public Set<String> getDomains() { + return Collections.unmodifiableSet(domains); + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f888f854/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsRemovedEvent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsRemovedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsRemovedEvent.java new file mode 100644 index 0000000..3cc5664 --- /dev/null +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsRemovedEvent.java @@ -0,0 +1,60 @@ +/* + * 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.stratos.messaging.event.tenant; + +import org.apache.stratos.messaging.event.Event; + +import java.io.Serializable; +import java.util.*; + +/** + * This event is fired when domains are removed from a tenant subscription. + */ +public class SubscriptionDomainsRemovedEvent extends Event implements Serializable { + private static final long serialVersionUID = -8837521344795740210L; + + private final int tenantId; + private final String serviceName; + private final Set<String> clusterIds; + private Set<String> domains; + + public SubscriptionDomainsRemovedEvent(int tenantId, String serviceName, Set<String> clusterIds, Set<String> domains) { + this.tenantId = tenantId; + this.serviceName = serviceName; + this.clusterIds = clusterIds; + this.domains = (domains != null) ? domains : new HashSet<String>(); + } + + public int getTenantId() { + return tenantId; + } + + public String getServiceName() { + return serviceName; + } + + public Set<String> getClusterIds() { + return Collections.unmodifiableSet(clusterIds); + } + + public Set<String> getDomains() { + return Collections.unmodifiableSet(domains); + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f888f854/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsAddedEventListener.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsAddedEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsAddedEventListener.java new file mode 100644 index 0000000..3f169b7 --- /dev/null +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsAddedEventListener.java @@ -0,0 +1,28 @@ +/* + * 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.stratos.messaging.listener.tenant; + +import org.apache.stratos.messaging.listener.EventListener; + +/** + * Tenant subscription domains added event listener. + */ +public abstract class SubscriptionDomainsAddedEventListener extends EventListener { +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f888f854/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsRemovedEventListener.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsRemovedEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsRemovedEventListener.java new file mode 100644 index 0000000..5c81ad6 --- /dev/null +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsRemovedEventListener.java @@ -0,0 +1,28 @@ +/* + * 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.stratos.messaging.listener.tenant; + +import org.apache.stratos.messaging.listener.EventListener; + +/** + * Tenant subscription domains removed event listener. + */ +public abstract class SubscriptionDomainsRemovedEventListener extends EventListener { +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f888f854/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainsAddedMessageProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainsAddedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainsAddedMessageProcessor.java new file mode 100644 index 0000000..aeea6bf --- /dev/null +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainsAddedMessageProcessor.java @@ -0,0 +1,96 @@ +/* + * 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.stratos.messaging.message.processor.tenant; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.stratos.messaging.domain.tenant.Subscription; +import org.apache.stratos.messaging.domain.tenant.Tenant; +import org.apache.stratos.messaging.event.tenant.SubscriptionDomainsAddedEvent; +import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent; +import org.apache.stratos.messaging.message.processor.MessageProcessor; +import org.apache.stratos.messaging.message.receiver.tenant.TenantManager; +import org.apache.stratos.messaging.util.Util; + +/** + * Tenant subscribed message processor for adding domains to tenant subscriptions. + */ +public class SubscriptionDomainsAddedMessageProcessor extends MessageProcessor { + + private static final Log log = LogFactory.getLog(SubscriptionDomainsAddedMessageProcessor.class); + + private MessageProcessor nextProcessor; + + @Override + public void setNext(MessageProcessor nextProcessor) { + this.nextProcessor = nextProcessor; + } + + @Override + public boolean process(String type, String message, Object object) { + if (SubscriptionDomainsAddedEvent.class.getName().equals(type)) { + // Return if tenant manager has not initialized + if(!TenantManager.getInstance().isInitialized()) { + return false; + } + + // Parse complete message and build event + SubscriptionDomainsAddedEvent event = (SubscriptionDomainsAddedEvent) Util.jsonToObject(message, TenantSubscribedEvent.class); + + try { + TenantManager.acquireWriteLock(); + Tenant tenant = TenantManager.getInstance().getTenant(event.getTenantId()); + if(tenant == null) { + if(log.isWarnEnabled()) { + log.warn(String.format("Tenant not found: [tenant-id] %d", event.getTenantId())); + } + return false; + } + Subscription subscription = tenant.getSubscription(event.getServiceName()); + if(subscription == null) { + if(log.isWarnEnabled()) { + log.warn(String.format("Subscription not found: [tenant-id] %d", event.getTenantId())); + } + return false; + } + subscription.addDomains(event.getDomains()); + if(log.isInfoEnabled()) { + log.info(String.format("Domains added to tenant subscription: [tenant-id] %d [tenant-domain] %s [service] %s [domains] %s", + tenant.getTenantId(), tenant.getTenantDomain(), event.getServiceName(), event.getDomains())); + } + + // Notify event listeners + notifyEventListeners(event); + return true; + } + finally { + TenantManager.releaseWriteLock(); + } + } + else { + if(nextProcessor != null) { + return nextProcessor.process(type, message, object); + } + else { + throw new RuntimeException(String.format("Failed to process tenant message using available message processors: [type] %s [body] %s", type, message)); + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f888f854/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainsRemovedMessageProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainsRemovedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainsRemovedMessageProcessor.java new file mode 100644 index 0000000..fc08357 --- /dev/null +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainsRemovedMessageProcessor.java @@ -0,0 +1,96 @@ +/* + * 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.stratos.messaging.message.processor.tenant; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.stratos.messaging.domain.tenant.Subscription; +import org.apache.stratos.messaging.domain.tenant.Tenant; +import org.apache.stratos.messaging.event.tenant.SubscriptionDomainsAddedEvent; +import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent; +import org.apache.stratos.messaging.message.processor.MessageProcessor; +import org.apache.stratos.messaging.message.receiver.tenant.TenantManager; +import org.apache.stratos.messaging.util.Util; + +/** + * Tenant subscribed message processor for removing domains from tenant subscriptions. + */ +public class SubscriptionDomainsRemovedMessageProcessor extends MessageProcessor { + + private static final Log log = LogFactory.getLog(SubscriptionDomainsRemovedMessageProcessor.class); + + private MessageProcessor nextProcessor; + + @Override + public void setNext(MessageProcessor nextProcessor) { + this.nextProcessor = nextProcessor; + } + + @Override + public boolean process(String type, String message, Object object) { + if (SubscriptionDomainsAddedEvent.class.getName().equals(type)) { + // Return if tenant manager has not initialized + if(!TenantManager.getInstance().isInitialized()) { + return false; + } + + // Parse complete message and build event + SubscriptionDomainsAddedEvent event = (SubscriptionDomainsAddedEvent) Util.jsonToObject(message, TenantSubscribedEvent.class); + + try { + TenantManager.acquireWriteLock(); + Tenant tenant = TenantManager.getInstance().getTenant(event.getTenantId()); + if(tenant == null) { + if(log.isWarnEnabled()) { + log.warn(String.format("Tenant not found: [tenant-id] %d", event.getTenantId())); + } + return false; + } + Subscription subscription = tenant.getSubscription(event.getServiceName()); + if(subscription == null) { + if(log.isWarnEnabled()) { + log.warn(String.format("Subscription not found: [tenant-id] %d", event.getTenantId())); + } + return false; + } + subscription.removeDomains(event.getDomains()); + if(log.isInfoEnabled()) { + log.info(String.format("Domains removed from tenant subscription: [tenant-id] %d [tenant-domain] %s [service] %s [domains] %s", + tenant.getTenantId(), tenant.getTenantDomain(), event.getServiceName(), event.getDomains())); + } + + // Notify event listeners + notifyEventListeners(event); + return true; + } + finally { + TenantManager.releaseWriteLock(); + } + } + else { + if(nextProcessor != null) { + return nextProcessor.process(type, message, object); + } + else { + throw new RuntimeException(String.format("Failed to process tenant message using available message processors: [type] %s [body] %s", type, message)); + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f888f854/components/org.apache.stratos.messaging/src/test/java/org/apache/stratos/messaging/test/TenantDomainTest.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/test/java/org/apache/stratos/messaging/test/TenantDomainTest.java b/components/org.apache.stratos.messaging/src/test/java/org/apache/stratos/messaging/test/TenantDomainTest.java new file mode 100644 index 0000000..adb11e1 --- /dev/null +++ b/components/org.apache.stratos.messaging/src/test/java/org/apache/stratos/messaging/test/TenantDomainTest.java @@ -0,0 +1,45 @@ +/* + * 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.stratos.messaging.test; + +import junit.framework.Assert; +import org.apache.stratos.messaging.domain.tenant.Subscription; +import org.apache.stratos.messaging.domain.tenant.Tenant; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.util.HashSet; + +/** + * Tenant domain model test. + */ +@RunWith(JUnit4.class) +public class TenantDomainTest { + @Test + public void testSubscriptionModel() { + Tenant tenant = new Tenant(1, "domain.org"); + Subscription subscription = new Subscription("subscription1", new HashSet<String>(), new HashSet<String>()); + tenant.addSubscription(subscription); + Assert.assertTrue("Subscription not added", tenant.isSubscribed("subscription1")); + tenant.removeSubscription("subscription1"); + Assert.assertTrue("Subscription not removed", !tenant.isSubscribed("subscription1")); + } +}
