You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2013/12/07 19:18:17 UTC

[1/6] git commit: subscription model changes

Updated Branches:
  refs/heads/master aa550b6be -> 91970c3ac


subscription model changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/74d89849
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/74d89849
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/74d89849

Branch: refs/heads/master
Commit: 74d89849b13b3270d9a27a22ff7cf54a8a526474
Parents: 6984375
Author: Isuru <is...@wso2.com>
Authored: Fri Dec 6 15:00:12 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Fri Dec 6 15:00:12 2013 +0530

----------------------------------------------------------------------
 .../AbstractCartridgeSubscription.java          | 441 +++++++++++++++++++
 .../ApplicationCartridgeSubscription.java       |  51 +++
 .../DataCartridgeSubscription1.java             |  50 +++
 .../FrameworkCartridgeSubscription.java         |  78 ++++
 .../SingleTenantCartridgeSubscription.java      |   2 +-
 .../SubscriptionMultiTenantBehaviour.java       | 117 +++++
 .../SubscriptionSingleTenantBehaviour.java      | 118 +++++
 .../tenancy/SubscriptionTenancyBehaviour.java   |  44 ++
 8 files changed, 900 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/74d89849/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
new file mode 100644
index 0000000..3b7a2c7
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
@@ -0,0 +1,441 @@
+/*
+ * 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.adc.mgt.subscription;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.custom.domain.RegistryManager;
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.adc.mgt.dao.Cluster;
+import org.apache.stratos.adc.mgt.dns.DNSManager;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.internal.DataHolder;
+import org.apache.stratos.adc.mgt.payload.Payload;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.service.RepositoryInfoBean;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionMultiTenantBehaviour;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionSingleTenantBehaviour;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
+import org.apache.stratos.adc.mgt.utils.*;
+import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+public abstract class AbstractCartridgeSubscription {
+
+    private static Log log = LogFactory.getLog(AbstractCartridgeSubscription.class);
+    private int subscriptionId;
+    private String type;
+    private String alias;
+    private Policy autoscalingPolicy;
+    private Subscriber subscriber;
+    private Repository repository;
+    private CartridgeInfo cartridgeInfo;
+    private Payload payload;
+    private Cluster cluster;
+    private String subscriptionStatus;
+    private String mappedDomain;
+    private List<String> connectedSubscriptionAliases;
+    private String subscriptionKey;
+    protected SubscriptionTenancyBehaviour subscriptionTenancyBehaviour;
+
+    /**
+     * Constructor
+     *
+     * @param cartridgeInfo CartridgeInfo subscription
+     */
+    public AbstractCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+
+        this.setCartridgeInfo(cartridgeInfo);
+        this.setType(cartridgeInfo.getType());
+        this.setCluster(new Cluster());
+        getCluster().setClusterDomain("");
+        getCluster().setClusterSubDomain(CartridgeConstants.DEFAULT_SUBDOMAIN);
+        getCluster().setMgtClusterDomain("");
+        getCluster().setMgtClusterSubDomain(CartridgeConstants.DEFAULT_MGT_SUBDOMAIN);
+        getCluster().setHostName(cartridgeInfo.getHostName());
+        this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
+        this.connectedSubscriptionAliases = new ArrayList<String>();
+        if(getCartridgeInfo().getMultiTenant()) {
+            subscriptionTenancyBehaviour = new SubscriptionMultiTenantBehaviour(this);
+        }
+        else {
+            subscriptionTenancyBehaviour = new SubscriptionSingleTenantBehaviour(this);
+        }
+    }
+
+    /**
+     * Subscribes to this cartridge subscription
+     *
+     * @param subscriber Subscriber subscription
+     * @param alias Alias of the cartridge subscription
+     * @param autoscalingPolicy Auto scaling policy
+     * @param repository Relevenat Repository subscription
+     *
+     * @throws org.apache.stratos.adc.mgt.exception.ADCException
+     * @throws org.apache.stratos.adc.mgt.exception.PolicyException
+     * @throws org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException
+     * @throws org.apache.stratos.adc.mgt.exception.InvalidCartridgeAliasException
+     * @throws org.apache.stratos.adc.mgt.exception.DuplicateCartridgeAliasException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryRequiredException
+     * @throws org.apache.stratos.adc.mgt.exception.AlreadySubscribedException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryCredentialsRequiredException
+     * @throws org.apache.stratos.adc.mgt.exception.InvalidRepositoryException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryTransportException
+     */
+    public void createSubscription (Subscriber subscriber, String alias, Policy autoscalingPolicy,
+                                    Repository repository)
+            throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
+            DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
+            RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
+
+        setSubscriber(subscriber);
+        setAlias(alias);
+        setAutoscalingPolicy(autoscalingPolicy);
+        setRepository(repository);
+    }
+
+    /**
+     * Unsubscribe from this cartridge subscription
+     *
+     * @throws ADCException
+     * @throws NotSubscribedException
+     */
+    public abstract void removeSubscription() throws ADCException, NotSubscribedException;
+
+    /**
+     * Registers the subscription
+     *
+     * @param properties Any additional properties needed
+     *
+     * @return CartridgeSubscriptionInfo subscription populated with relevant data
+     * @throws ADCException
+     * @throws UnregisteredCartridgeException
+     */
+    public abstract CartridgeSubscriptionInfo registerSubscription(Properties properties)
+            throws ADCException, UnregisteredCartridgeException;
+
+    /**
+     * Connect cartridges
+     *
+     * @param connectingCartridgeAlias Alias of connecting cartridge
+     */
+    public void connect (String connectingCartridgeAlias) {
+        connectedSubscriptionAliases.add(connectingCartridgeAlias);
+    }
+
+    /**
+     * Disconnect from the cartridge subscription given by disconnectingCartridgeAlias
+     *
+     * @param disconnectingCartridgeAlias Alias of the cartridge subscription to disconnect
+     */
+    public void disconnect (String disconnectingCartridgeAlias) {
+        connectedSubscriptionAliases.remove(disconnectingCartridgeAlias);
+    }
+
+    /**
+     * Creates the relevant payload parameters for this cartridge subscription
+     *
+     * @return PayloadArg subscription
+     * @throws ADCException in an errpr
+     */
+    public PayloadArg createPayloadParameters() throws ADCException {
+
+        PayloadArg payloadArg = new PayloadArg();
+        payloadArg.setCartridgeInfo(getCartridgeInfo());
+        payloadArg.setPolicy(getAutoscalingPolicy());
+        payloadArg.setMultitenant(getCartridgeInfo().getMultiTenant());
+        payloadArg.setTenantId(getSubscriber().getTenantId());
+        payloadArg.setTenantDomain(getSubscriber().getTenantDomain());
+        payloadArg.setCartridgeAlias(getAlias());
+        payloadArg.setServiceName(getCartridgeInfo().getType());
+        payloadArg.setSubscriptionKey(subscriptionKey);
+        return payloadArg;
+    }
+
+    /**
+     * Manages the repository for the cartridge subscription
+     *
+     * @param repoURL Repository URL
+     * @param repoUserName Repository Username
+     * @param repoUserPassword Repository password
+     * @param privateRepo public/private repository
+     * @param cartridgeAlias Alias of the cartridge subscription
+     * @param cartridgeInfo CartridgeInfo subscription
+     * @param tenantDomain Domain of the tenant
+     *
+     * @return Repository populated with relevant information or null of not repository is relevant to this cartridge
+     * subscription
+     * @throws ADCException
+     * @throws RepositoryRequiredException
+     * @throws RepositoryCredentialsRequiredException
+     * @throws RepositoryTransportException
+     * @throws InvalidRepositoryException
+     */
+    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+                                        String tenantDomain)
+
+            throws ADCException, RepositoryRequiredException, RepositoryCredentialsRequiredException,
+            RepositoryTransportException, InvalidRepositoryException {
+
+        if (!new Boolean(System.getProperty(CartridgeConstants.FEATURE_INTERNAL_REPO_ENABLED))) {
+            if (log.isDebugEnabled()) {
+                log.debug("Internal repo feature is not enabled.");
+            }
+        }
+
+        Repository repository = new Repository();
+        if (repoURL != null && repoURL.trim().length() > 0) {
+            log.info("External REPO URL is provided as [" + repoURL +
+                    "]. Therefore not creating a new repo.");
+            //repository.setRepoName(repoURL.substring(0, repoURL.length()-4)); // remove .git part
+            repository.setUrl(repoURL);
+            repository.setUserName(repoUserName);
+            repository.setPassword(repoUserPassword);
+            repository.setPrivateRepository(privateRepo);
+
+        } else {
+
+            log.info("External git repo url not provided for tenant "
+                    + tenantDomain + ", creating an git internal repository");
+
+            // for internal repos  internal git server username and password is used.
+            repository.setUserName(System.getProperty(CartridgeConstants.INTERNAL_GIT_USERNAME));
+            repository.setPassword(System.getProperty(CartridgeConstants.INTERNAL_GIT_PASSWORD));
+            try {
+                new RepositoryCreator(new RepositoryInfoBean(repoURL, cartridgeAlias, tenantDomain,
+                        repository.getUserName(), repository.getPassword(), cartridgeInfo.getDeploymentDirs(),
+                        cartridgeInfo)).createInternalRepository();
+
+            } catch (Exception e) {
+                throw new ADCException(e.getMessage(), e);
+            }
+            String repoName = tenantDomain + "/" + cartridgeAlias;
+            repository.setUrl("https://" + System.getProperty(CartridgeConstants.GIT_HOST_NAME) + ":8443/git/" +
+                    repoName);
+        }
+
+        // Validate Remote Repository.
+        ApplicationManagementUtil.validateRepository(repoURL, repoUserName, repoUserPassword, privateRepo,
+                new Boolean(System.getProperty(CartridgeConstants.FEATURE_EXTERNAL_REPO_VAIDATION_ENABLED)));
+
+        return repository;
+    }
+
+    /**
+     * Cleans up the subscription information after unsubscribing
+     *
+     * @throws ADCException
+     */
+    protected void cleanupSubscription () throws ADCException {
+
+        try {
+            new RepositoryFactory().destroyRepository(alias, subscriber.getTenantDomain(),
+                    subscriber.getAdminUserName());
+            log.info("Repo is destroyed successfully.. ");
+
+        } catch (Exception e) {
+            String errorMsg = "Error in destroying repository for tenant " + subscriber.getTenantDomain() +
+                    "cartridge type " + type;
+            log.error(errorMsg);
+        }
+
+        try {
+            PersistenceManager.updateSubscriptionState(subscriptionId, "UNSUBSCRIBED");
+
+        } catch (Exception e) {
+            String errorMsg = "Error in unscubscribing from cartridge, alias " + alias + ", tenant " +
+                    subscriber.getTenantDomain();
+            throw new ADCException(errorMsg, e);
+        }
+
+        //TODO: FIXME: do we need this?
+        new DNSManager().removeSubDomain(getCluster().getHostName());
+
+        try {
+            new RegistryManager().removeDomainMappingFromRegistry(getCluster().getHostName());
+
+        } catch (Exception e) {
+            String errorMsg = "Error in removing domain mapping, alias " + alias + ", tenant " +
+                    subscriber.getTenantDomain();
+            log.error(errorMsg, e);
+        }
+
+        TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
+        String[] ips = topologyMgtService.getActiveIPs(type, getCluster().getClusterDomain(), getCluster().getClusterSubDomain());
+        try {
+            PersistenceManager.updateInstanceState("INACTIVE", ips, getCluster().getClusterDomain(), getCluster().getClusterSubDomain(), type);
+
+        } catch (Exception e) {
+            String errorMsg = "Error in updating state to INACTIVE";
+            log.error(errorMsg, e);
+        }
+
+        this.setSubscriptionStatus(CartridgeConstants.UNSUBSCRIBED);
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public Subscriber getSubscriber() {
+        return subscriber;
+    }
+
+    public Repository getRepository() {
+        return repository;
+    }
+
+    public List<String> getConnectedSubscriptionAliases() {
+        return connectedSubscriptionAliases;
+    }
+
+    public CartridgeInfo getCartridgeInfo() {
+        return cartridgeInfo;
+    }
+
+    public String getHostName() {
+        return getCluster().getHostName();
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    public String getClusterDomain() {
+        return getCluster().getClusterDomain();
+    }
+
+    public void setClusterDomain(String clusterDomain) {
+        getCluster().setClusterDomain(clusterDomain);
+    }
+
+    public String getClusterSubDomain() {
+        return getCluster().getClusterSubDomain();
+    }
+
+    public void setClusterSubDomain(String clusterSubDomain) {
+        getCluster().setClusterSubDomain(clusterSubDomain);
+    }
+
+    public String getMgtClusterDomain() {
+        return getCluster().getMgtClusterDomain();
+    }
+
+    public void setMgtClusterDomain(String mgtClusterDomain) {
+        getCluster().setMgtClusterDomain(mgtClusterDomain);
+    }
+
+    public String getMgtClusterSubDomain() {
+        return getCluster().getMgtClusterSubDomain();
+    }
+
+    public void setMgtClusterSubDomain(String mgtClusterSubDomain) {
+        getCluster().setMgtClusterSubDomain(mgtClusterSubDomain);
+    }
+
+    public void setHostName(String hostName) {
+        getCluster().setHostName(hostName);
+    }
+
+    public Policy getAutoscalingPolicy() {
+        return autoscalingPolicy;
+    }
+
+    public void setAutoscalingPolicy(Policy autoscalingPolicy) {
+        this.autoscalingPolicy = autoscalingPolicy;
+    }
+
+    public void setSubscriber(Subscriber subscriber) {
+        this.subscriber = subscriber;
+    }
+
+    public void setRepository(Repository repository) {
+        this.repository = repository;
+    }
+
+    public void setCartridgeInfo(CartridgeInfo cartridgeInfo) {
+        this.cartridgeInfo = cartridgeInfo;
+    }
+
+    public Payload getPayload() {
+        return payload;
+    }
+
+    public void setPayload(Payload payload) {
+        this.payload = payload;
+    }
+
+    public int getSubscriptionId() {
+        return subscriptionId;
+    }
+
+    public void setSubscriptionId(int subscriptionId) {
+        this.subscriptionId = subscriptionId;
+    }
+
+    public String getMappedDomain() {
+        return mappedDomain;
+    }
+
+    public void setMappedDomain(String mappedDomain) {
+        this.mappedDomain = mappedDomain;
+    }
+
+    public String getSubscriptionStatus() {
+        return subscriptionStatus;
+    }
+
+    public void setSubscriptionStatus(String subscriptionStatus) {
+        this.subscriptionStatus = subscriptionStatus;
+    }
+
+    public String getSubscriptionKey() {
+        return subscriptionKey;
+    }
+
+    public void setSubscriptionKey(String subscriptionKey) {
+        this.subscriptionKey = subscriptionKey;
+    }
+
+    public Cluster getCluster() {
+        return cluster;
+    }
+
+    public void setCluster(Cluster cluster) {
+        this.cluster = cluster;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/74d89849/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
new file mode 100644
index 0000000..aa49ac7
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
@@ -0,0 +1,51 @@
+/*
+ * 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.adc.mgt.subscription;
+
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
+import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+
+import java.util.Properties;
+
+public class ApplicationCartridgeSubscription extends AbstractCartridgeSubscription {
+
+
+    /**
+     * Constructor
+     *
+     * @param cartridgeInfo CartridgeInfo subscription
+     */
+    public ApplicationCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+        super(cartridgeInfo);
+    }
+
+    @Override
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public void removeSubscription() throws ADCException, NotSubscribedException {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/74d89849/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
new file mode 100644
index 0000000..74f299a
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
@@ -0,0 +1,50 @@
+/*
+ * 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.adc.mgt.subscription;
+
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
+import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+
+import java.util.Properties;
+
+public class DataCartridgeSubscription1 extends AbstractCartridgeSubscription {
+
+    /**
+     * Constructor
+     *
+     * @param cartridgeInfo CartridgeInfo subscription
+     */
+    public DataCartridgeSubscription1(CartridgeInfo cartridgeInfo) {
+        super(cartridgeInfo);
+    }
+
+    @Override
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public void removeSubscription() throws ADCException, NotSubscribedException {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/74d89849/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
new file mode 100644
index 0000000..6552fa9
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
@@ -0,0 +1,78 @@
+/*
+ * 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.adc.mgt.subscription;
+
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+
+import java.util.Properties;
+
+public class FrameworkCartridgeSubscription extends AbstractCartridgeSubscription {
+
+    /**
+     * Constructor
+     *
+     * @param cartridgeInfo CartridgeInfo subscription
+     */
+    public FrameworkCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+        super(cartridgeInfo);
+    }
+
+    @Override
+    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy,
+                                   Repository repository) throws
+            InvalidCartridgeAliasException, DuplicateCartridgeAliasException, ADCException,
+            RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
+            AlreadySubscribedException, RepositoryRequiredException, InvalidRepositoryException, PolicyException {
+
+        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
+        subscriptionTenancyBehaviour.createSubscription();
+    }
+
+    @Override
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
+
+        subscriptionTenancyBehaviour.registerSubscription();
+
+        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING", getSubscriptionKey());
+    }
+
+    @Override
+    public void removeSubscription() throws ADCException, NotSubscribedException {
+
+        subscriptionTenancyBehaviour.removeSubscription();
+        super.cleanupSubscription();
+    }
+
+    public PayloadArg createPayloadParameters () throws ADCException {
+
+        PayloadArg payloadArg = super.createPayloadParameters();
+        return subscriptionTenancyBehaviour.createPayloadParameters(payloadArg);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/74d89849/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
index 830deea..77caeac 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
@@ -108,7 +108,7 @@ public class SingleTenantCartridgeSubscription extends CartridgeSubscription {
         log.info("Unregistered service cluster, domain " + getCluster().getClusterDomain() + ", sub domain " +
                 getCluster().getClusterSubDomain());
 
-        cleanupSubscription();
+        super.cleanupSubscription();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/74d89849/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
new file mode 100644
index 0000000..c441036
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
@@ -0,0 +1,117 @@
+/*
+ * 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.adc.mgt.subscription.tenancy;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException;
+import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
+import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.internal.DataHolder;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.subscription.AbstractCartridgeSubscription;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.adc.mgt.utils.PersistenceManager;
+import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
+
+public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehaviour {
+
+    private static Log log = LogFactory.getLog(SubscriptionMultiTenantBehaviour.class);
+
+    public SubscriptionMultiTenantBehaviour(AbstractCartridgeSubscription cartridgeSubscription) {
+        super(cartridgeSubscription);
+    }
+
+    public void createSubscription() throws ADCException, AlreadySubscribedException {
+
+        boolean allowMultipleSubscription = Boolean.
+                valueOf(System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
+
+        if (!allowMultipleSubscription) {
+            // If the cartridge is multi-tenant. We should not let users createSubscription twice.
+            boolean subscribed;
+            try {
+                subscribed = PersistenceManager.isAlreadySubscribed(cartridgeSubscription.getType(),
+                        cartridgeSubscription.getSubscriber().getTenantId());
+            } catch (Exception e) {
+                String msg = "Error checking whether the cartridge type " + cartridgeSubscription.getType()
+                        + " is already subscribed";
+                log.error(msg, e);
+                throw new ADCException(msg, e);
+            }
+
+            if (subscribed) {
+                String msg = "Already subscribed to " + cartridgeSubscription.getType()
+                        + ". This multi-tenant cartridge will not be available to createSubscription";
+                if (log.isDebugEnabled()) {
+                    log.debug(msg);
+                }
+                throw new AlreadySubscribedException(msg, cartridgeSubscription.getType());
+            }
+        }
+
+        TopologyManagementService topologyService = DataHolder.getTopologyMgtService();
+        DomainContext[] domainContexts = topologyService.getDomainsAndSubdomains(cartridgeSubscription.getType(),
+                cartridgeSubscription.getSubscriber().getTenantId());
+        log.info("Retrieved " + domainContexts.length + " domain and corresponding subdomain pairs");
+
+        if (domainContexts.length > 0) {
+            if(domainContexts.length > 2) {
+                if(log.isDebugEnabled())
+                    log.debug("Too many domain sub domain pairs");
+            }
+
+            for (DomainContext domainContext : domainContexts) {
+                if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
+                    cartridgeSubscription.getCluster().setMgtClusterDomain(domainContext.getDomain());
+                    cartridgeSubscription.getCluster().setMgtClusterSubDomain(domainContext.getSubDomain());
+                } else {
+                    cartridgeSubscription.getCluster().setClusterDomain(domainContext.getDomain());
+                    cartridgeSubscription.getCluster().setClusterSubDomain(domainContext.getSubDomain());
+                }
+            }
+        } else {
+            String msg = "Domain contexts not found for " + cartridgeSubscription.getType() + " and tenant id " +
+                    cartridgeSubscription.getSubscriber().getTenantId();
+            log.warn(msg);
+            throw new ADCException(msg);
+        }
+    }
+
+    public void registerSubscription() throws ADCException, UnregisteredCartridgeException {
+
+        //nothing to do
+    }
+
+    public void removeSubscription() throws ADCException, NotSubscribedException {
+
+        log.info("Cartridge with alias " + cartridgeSubscription.getAlias() + ", and type " + cartridgeSubscription.getType() +
+                " is a multi-tenant cartridge and therefore will not terminate all instances and " +
+                "unregister services");
+    }
+
+    public PayloadArg createPayloadParameters(PayloadArg payloadArg) throws ADCException {
+
+        //payload not used
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/74d89849/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
new file mode 100644
index 0000000..263c1d6
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
@@ -0,0 +1,118 @@
+/*
+ * 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.adc.mgt.subscription.tenancy;
+
+import org.apache.axis2.AxisFault;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException;
+import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
+import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.subscription.AbstractCartridgeSubscription;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+
+public class SubscriptionSingleTenantBehaviour extends SubscriptionTenancyBehaviour {
+
+    private static Log log = LogFactory.getLog(SubscriptionSingleTenantBehaviour.class);
+
+    public SubscriptionSingleTenantBehaviour(AbstractCartridgeSubscription cartridgeSubscription) {
+        super(cartridgeSubscription);
+    }
+
+    public void createSubscription() throws ADCException, AlreadySubscribedException {
+
+        //set the cluster and hostname
+        cartridgeSubscription.getCluster().setClusterDomain(cartridgeSubscription.getAlias() + "." +
+                cartridgeSubscription.getCluster().getHostName() + "." + cartridgeSubscription.getType() + ".domain");
+        cartridgeSubscription.getCluster().setHostName(cartridgeSubscription.getAlias() + "." +
+                cartridgeSubscription.getCluster().getHostName());
+    }
+
+    public void registerSubscription() throws ADCException, UnregisteredCartridgeException {
+
+        ApplicationManagementUtil.registerService(cartridgeSubscription.getType(),
+                cartridgeSubscription.getCluster().getClusterDomain(),
+                cartridgeSubscription.getCluster().getClusterSubDomain(),
+                cartridgeSubscription.getPayload().createPayload(),
+                cartridgeSubscription.getPayload().getPayloadArg().getTenantRange(),
+                cartridgeSubscription.getCluster().getHostName(),
+                null);
+
+        cartridgeSubscription.getPayload().delete();
+    }
+
+    public void removeSubscription() throws ADCException, NotSubscribedException {
+
+        try {
+            CloudControllerServiceClient.getServiceClient().terminateAllInstances(cartridgeSubscription.getCluster().getClusterDomain());
+
+        } catch (AxisFault e) {
+            String errorMsg = "Error in terminating cartridge subscription, alias " + cartridgeSubscription.getAlias();
+            log.error(errorMsg);
+            throw new ADCException(errorMsg, e);
+
+        } catch (Exception e) {
+            String errorMsg = "Error in terminating cartridge subscription, alias " + cartridgeSubscription.getAlias();
+            log.error(errorMsg);
+            throw new ADCException(errorMsg, e);
+        }
+
+        log.info("Terminated all instances of " + cartridgeSubscription.getCluster().getClusterDomain() + " " +
+                cartridgeSubscription.getCluster().getClusterSubDomain());
+
+        try {
+            CloudControllerServiceClient.getServiceClient().unregisterService(cartridgeSubscription.getCluster().getClusterDomain());
+
+        } catch (Exception e) {
+            String errorMsg = "Error in unregistering service cluster with domain " + cartridgeSubscription.getCluster().getClusterDomain() +
+                    ", sub domain " + cartridgeSubscription.getCluster().getClusterSubDomain();
+            log.error(errorMsg);
+            throw new ADCException(errorMsg, e);
+        }
+
+        log.info("Unregistered service cluster, domain " + cartridgeSubscription.getCluster().getClusterDomain() + ", sub domain " +
+                cartridgeSubscription.getCluster().getClusterSubDomain());
+    }
+
+    public PayloadArg createPayloadParameters(PayloadArg payloadArg) throws ADCException {
+
+
+        if(cartridgeSubscription.getRepository() != null) {
+            payloadArg.setRepoURL(cartridgeSubscription.getRepository().getUrl());
+        }
+        payloadArg.setHostName(cartridgeSubscription.getCluster().getHostName());
+        payloadArg.setServiceDomain(cartridgeSubscription.getCluster().getClusterDomain());
+        payloadArg.setServiceSubDomain(cartridgeSubscription.getCluster().getMgtClusterSubDomain());
+        payloadArg.setMgtServiceDomain(cartridgeSubscription.getCluster().getMgtClusterDomain());
+        payloadArg.setMgtServiceSubDomain(cartridgeSubscription.getCluster().getMgtClusterSubDomain());
+        if(cartridgeSubscription.getCartridgeInfo().getProvider().equals(CartridgeConstants.PROVIDER_NAME_WSO2)) {
+            payloadArg.setTenantRange(Integer.toString(cartridgeSubscription.getSubscriber().getTenantId()));
+        }
+        else {
+            payloadArg.setTenantRange("*");
+        }
+
+        return payloadArg;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/74d89849/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
new file mode 100644
index 0000000..eb073ce
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
@@ -0,0 +1,44 @@
+/*
+ * 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.adc.mgt.subscription.tenancy;
+
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException;
+import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
+import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.subscription.AbstractCartridgeSubscription;
+
+public abstract class SubscriptionTenancyBehaviour {
+
+    protected AbstractCartridgeSubscription cartridgeSubscription;
+
+    public SubscriptionTenancyBehaviour(AbstractCartridgeSubscription cartridgeSubscription) {
+        this.cartridgeSubscription = cartridgeSubscription;
+    }
+
+    public abstract void createSubscription() throws ADCException, AlreadySubscribedException;
+
+    public abstract void registerSubscription() throws ADCException, UnregisteredCartridgeException;
+
+    public abstract void removeSubscription() throws ADCException, NotSubscribedException;
+
+    public abstract PayloadArg createPayloadParameters(PayloadArg payloadArg) throws ADCException;
+}


[3/6] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-stratos into subscription

Posted by is...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-stratos into subscription


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/f7c8c0bc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/f7c8c0bc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/f7c8c0bc

Branch: refs/heads/master
Commit: f7c8c0bcaba59f11cacafe3f9085e72f859ae8a5
Parents: 0fbd464 c6829cd
Author: Isuru <is...@wso2.com>
Authored: Sat Dec 7 09:12:19 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Sat Dec 7 09:12:19 2013 +0530

----------------------------------------------------------------------
 .../adc/mgt/client/AutoscalerServiceClient.java | 101 +++++-
 .../mgt/internal/TopologyMgtDSComponent.java    |   4 +-
 .../org.apache.stratos.autoscaler/pom.xml       |  10 +-
 .../stratos/autoscaler/ClusterContext.java      |   6 +-
 .../stratos/autoscaler/PartitionContext.java    |  20 +-
 .../autoscaler/api/AutoScalerServiceImpl.java   |  71 ++++-
 .../deployment/policy/DeploymentPolicy.java     |  25 +-
 .../interfaces/AutoScalerServiceInterface.java  |  12 +
 .../internal/AutoscalerActivator.java           |  66 ----
 .../internal/AutoscalerServerComponent.java     |  31 +-
 .../health/HealthEventMessageDelegator.java     |  15 +-
 .../autoscaler/partition/PartitionManager.java  |   5 +-
 .../autoscaler/registry/RegistryManager.java    |  81 +++++
 .../topology/AutoscalerTopologyReceiver.java    | 308 +++++++++++++++++++
 .../processors/AutoscalerTopologyReceiver.java  | 304 ------------------
 .../topology/processors/TopologyReceiver.java   |  79 -----
 .../autoscaler/util/AutoScalerConstants.java    |   6 +
 .../stratos/autoscaler/util/AutoscalerUtil.java |   6 +-
 .../stratos/autoscaler/util/Serializer.java     |  33 ++
 .../autoscaler/util/ServiceReferenceHolder.java |  28 ++
 .../common/topology/TopologyReceiver.java       |  80 -----
 .../extension/api/LoadBalancerExtension.java    |  10 +-
 .../balancer/LoadBalancerTopologyReceiver.java  |   2 +-
 .../event/topology/CompleteTopologyEvent.java   |   4 +-
 .../tenant/CompleteTenantMessageProcessor.java  |  78 +++++
 .../tenant/TenantCreatedMessageProcessor.java   |   9 +-
 .../tenant/TenantMessageProcessorChain.java     |  74 +++++
 .../tenant/TenantRemovedMessageProcessor.java   |   9 +-
 .../tenant/TenantUpdatedMessageProcessor.java   |   9 +-
 .../tenant/TenantEventMessageDelegator.java     |  97 ++++++
 .../tenant/TenantEventMessageListener.java      |  55 ++++
 .../tenant/TenantEventMessageQueue.java         |  44 +++
 .../message/receiver/tenant/TenantManager.java  |   9 +
 .../message/receiver/tenant/TenantReceiver.java |  78 +++++
 .../topology/TopologyEventMessageDelegator.java |   6 +-
 .../topology/TopologyEventMessageListener.java  |  53 ++++
 .../topology/TopologyEventMessageQueue.java     |  45 +++
 .../topology/TopologyEventMessageReceiver.java  |  53 ----
 .../receiver/topology/TopologyEventQueue.java   |  45 ---
 .../receiver/topology/TopologyReceiver.java     |  78 +++++
 .../stratos/messaging/util/Constants.java       |   1 +
 .../bean/util/converter/PojoConverter.java      | 122 ++++++--
 .../rest/endpoint/services/ServiceUtils.java    | 121 +++++++-
 .../rest/endpoint/services/StratosAdmin.java    |  73 ++++-
 products/autoscaler/modules/p2-profile/pom.xml  |  29 +-
 service-stubs/pom.xml                           |   1 +
 46 files changed, 1696 insertions(+), 700 deletions(-)
----------------------------------------------------------------------



[6/6] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-stratos into subscription

Posted by is...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-stratos into subscription


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/91970c3a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/91970c3a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/91970c3a

Branch: refs/heads/master
Commit: 91970c3ac34632e332bbed6b6daad193563623a7
Parents: 702d5ca aa550b6
Author: Isuru <is...@wso2.com>
Authored: Sat Dec 7 23:47:11 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Sat Dec 7 23:47:11 2013 +0530

----------------------------------------------------------------------
 components/org.apache.stratos.adc.mgt/pom.xml   |  17 +-
 .../internal/ADCManagementServerComponent.java  |  61 +++++-
 .../mgt/internal/ServiceReferenceHolder.java    |  51 +++++
 .../adc/mgt/publisher/TenantEventPublisher.java | 114 +++++++++++
 .../TenantSynchronizerTaskScheduler.java        |  76 +++++++
 .../mgt/publisher/TenantSynzhronizerTask.java   |  74 +++++++
 .../service/ApplicationManagementService.java   | 118 +++++++----
 .../autoscaler/api/AutoScalerServiceImpl.java   |   7 +-
 .../exception/AutoScalerException.java          |  37 ++++
 .../autoscaler/partition/PartitionManager.java  |  47 +++--
 .../partition/deployers/PartitionDeployer.java  |  14 +-
 .../autoscaler/registry/RegistryManager.java    |  21 +-
 .../autoscaler/util/AutoScalerConstants.java    |   2 +-
 .../controller/topology/TopologyBuilder.java    |   2 +-
 .../topology/TopologyEventSender.java           |   5 +-
 .../common/listeners/TenantMgtListener.java     |   2 +
 .../keystore/mgt/KeystoreTenantMgtListener.java |   4 +
 .../conf/LoadBalancerConfiguration.java         | 202 ++++++++++++-------
 .../conf/configurator/SynapseConfigurator.java  |   4 +-
 .../balancer/conf/domain/TenantIdentifier.java  |   8 +
 .../load/balancer/conf/util/Constants.java      |   9 +-
 .../internal/LoadBalancerServiceComponent.java  |  19 +-
 .../test/LoadBalancerConfigurationTest.java     |  12 +-
 .../sample/configuration/loadbalancer1.conf     |  17 +-
 .../sample/configuration/loadbalancer2.conf     |  17 +-
 .../sample/configuration/loadbalancer3.conf     |  17 +-
 .../stratos/messaging/domain/tenant/Tenant.java |  17 ++
 .../messaging/domain/topology/Cluster.java      |  23 +++
 .../messaging/domain/topology/Service.java      |  30 +--
 .../messaging/domain/topology/ServiceType.java  |  27 +++
 .../event/tenant/CompleteTenantEvent.java       |  42 ++++
 .../event/tenant/TenantSubscribedEvent.java     |  45 +++++
 .../event/tenant/TenantUnSubscribedEvent.java   |  45 +++++
 .../event/topology/ClusterRemovedEvent.java     |  12 +-
 .../event/topology/ServiceCreatedEvent.java     |  13 +-
 .../tenant/CompleteTenantEventListener.java     |  28 +++
 .../tenant/TenantSubscribedEventListener.java   |  28 +++
 .../tenant/TenantUnSubscribedEventListener.java |  28 +++
 .../tenant/CompleteTenantMessageProcessor.java  |  14 +-
 .../tenant/TenantCreatedMessageProcessor.java   |   7 +-
 .../tenant/TenantMessageProcessorChain.java     |   7 +
 .../tenant/TenantRemovedMessageProcessor.java   |   7 +-
 .../TenantSubscribedMessageProcessor.java       |  88 ++++++++
 .../TenantUnSubscribedMessageProcessor.java     |  88 ++++++++
 .../tenant/TenantUpdatedMessageProcessor.java   |   7 +-
 .../ClusterRemovedMessageProcessor.java         |   9 +-
 .../ServiceCreatedMessageProcessor.java         |   2 +-
 .../message/receiver/tenant/TenantManager.java  |   7 +
 .../sender/listener/EmailSenderListener.java    |  10 +-
 .../mgt/services/TenantMgtAdminService.java     |   9 +
 .../stratos/tenant/mgt/util/TenantMgtUtil.java  |   9 +-
 .../theme/mgt/util/ThemeLoadingListener.java    |  20 +-
 .../src/main/conf/loadbalancer.conf             |  15 +-
 .../config/lb/repository/conf/loadbalancer.conf |   6 +-
 54 files changed, 1330 insertions(+), 270 deletions(-)
----------------------------------------------------------------------



[4/6] subscription model changes

Posted by is...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
index 77caeac..f837fbd 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
@@ -1,136 +1,136 @@
-/*
- * 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.adc.mgt.subscription;
-
-import org.apache.axis2.AxisFault;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
-import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
-import org.apache.stratos.adc.mgt.dto.Policy;
-import org.apache.stratos.adc.mgt.exception.*;
-import org.apache.stratos.adc.mgt.payload.PayloadArg;
-import org.apache.stratos.adc.mgt.repository.Repository;
-import org.apache.stratos.adc.mgt.subscriber.Subscriber;
-import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
-import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
-import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
-
-import java.util.Properties;
-
-public class SingleTenantCartridgeSubscription extends CartridgeSubscription {
-
-    private static Log log = LogFactory.getLog(SingleTenantCartridgeSubscription.class);
-
-
-    public SingleTenantCartridgeSubscription(CartridgeInfo cartridgeInfo) {
-        super(cartridgeInfo);
-    }
-
-    @Override
-    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy,
-                                   Repository repository) throws
-            InvalidCartridgeAliasException, DuplicateCartridgeAliasException, ADCException,
-            RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
-            AlreadySubscribedException, RepositoryRequiredException, InvalidRepositoryException, PolicyException {
-
-        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
-        getCluster().setClusterDomain(alias + "." + getCluster().getHostName() + "." + getType() + ".domain");
-        getCluster().setHostName(alias + "." + getCluster().getHostName());
-    }
-
-    @Override
-    public CartridgeSubscriptionInfo registerSubscription(Properties payloadProperties)
-            throws ADCException, UnregisteredCartridgeException {
-
-        ApplicationManagementUtil.registerService(getType(),
-                getCluster().getClusterDomain(),
-                getCluster().getClusterSubDomain(),
-                getPayload().createPayload(),
-                getPayload().getPayloadArg().getTenantRange(),
-                getCluster().getHostName(),
-                null);
-
-        getPayload().delete();
-
-        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
-                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
-                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
-                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING",getSubscriptionKey());
-    }
-
-    @Override
-    public void removeSubscription() throws ADCException, NotSubscribedException {
-
-        try {
-            CloudControllerServiceClient.getServiceClient().terminateAllInstances(getCluster().getClusterDomain());
-
-        } catch (AxisFault e) {
-            String errorMsg = "Error in terminating cartridge subscription, alias " + getAlias();
-            log.error(errorMsg);
-            throw new ADCException(errorMsg, e);
-
-        } catch (Exception e) {
-            String errorMsg = "Error in terminating cartridge subscription, alias " + getAlias();
-            log.error(errorMsg);
-            throw new ADCException(errorMsg, e);
-        }
-
-        log.info("Terminated all instances of " + getCluster().getClusterDomain() + " " + getCluster().getClusterSubDomain());
-
-        try {
-            CloudControllerServiceClient.getServiceClient().unregisterService(getCluster().getClusterDomain());
-
-        } catch (Exception e) {
-            String errorMsg = "Error in unregistering service cluster with domain " + getCluster().getClusterDomain() +
-                    ", sub domain " + getCluster().getClusterSubDomain();
-            log.error(errorMsg);
-            throw new ADCException(errorMsg, e);
-        }
-
-        log.info("Unregistered service cluster, domain " + getCluster().getClusterDomain() + ", sub domain " +
-                getCluster().getClusterSubDomain());
-
-        super.cleanupSubscription();
-    }
-
-    @Override
-    public PayloadArg createPayloadParameters()
-            throws ADCException {
-
-        PayloadArg payloadArg = super.createPayloadParameters();
-        if(getRepository() != null) {
-            payloadArg.setRepoURL(getRepository().getUrl());
-        }
-        payloadArg.setHostName(getCluster().getHostName());
-        payloadArg.setServiceDomain(getCluster().getClusterDomain());
-        payloadArg.setServiceSubDomain(getCluster().getMgtClusterSubDomain());
-        payloadArg.setMgtServiceDomain(getCluster().getMgtClusterDomain());
-        payloadArg.setMgtServiceSubDomain(getCluster().getMgtClusterSubDomain());
-        if(getCartridgeInfo().getProvider().equals(CartridgeConstants.PROVIDER_NAME_WSO2)) {
-            payloadArg.setTenantRange(Integer.toString(getSubscriber().getTenantId()));
-        }
-        else {
-            payloadArg.setTenantRange("*");
-        }
-
-        return payloadArg;
-    }
-}
+///*
+// * 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.adc.mgt.subscription;
+//
+//import org.apache.axis2.AxisFault;
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+//import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
+//import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+//import org.apache.stratos.adc.mgt.dto.Policy;
+//import org.apache.stratos.adc.mgt.exception.*;
+//import org.apache.stratos.adc.mgt.payload.PayloadArg;
+//import org.apache.stratos.adc.mgt.repository.Repository;
+//import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+//import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+//import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//
+//import java.util.Properties;
+//
+//public class SingleTenantCartridgeSubscription extends CartridgeSubscription {
+//
+//    private static Log log = LogFactory.getLog(SingleTenantCartridgeSubscription.class);
+//
+//
+//    public SingleTenantCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+//        super(cartridgeInfo);
+//    }
+//
+//    @Override
+//    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy,
+//                                   Repository repository) throws
+//            InvalidCartridgeAliasException, DuplicateCartridgeAliasException, ADCException,
+//            RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
+//            AlreadySubscribedException, RepositoryRequiredException, InvalidRepositoryException, PolicyException {
+//
+//        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
+//        getCluster().setClusterDomain(alias + "." + getCluster().getHostName() + "." + getType() + ".domain");
+//        getCluster().setHostName(alias + "." + getCluster().getHostName());
+//    }
+//
+//    @Override
+//    public CartridgeSubscriptionInfo registerSubscription(Properties payloadProperties)
+//            throws ADCException, UnregisteredCartridgeException {
+//
+//        ApplicationManagementUtil.registerService(getType(),
+//                getCluster().getClusterDomain(),
+//                getCluster().getClusterSubDomain(),
+//                getPayload().createPayload(),
+//                getPayload().getPayloadArg().getTenantRange(),
+//                getCluster().getHostName(),
+//                null);
+//
+//        getPayload().delete();
+//
+//        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+//                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+//                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+//                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING",getSubscriptionKey());
+//    }
+//
+//    @Override
+//    public void removeSubscription() throws ADCException, NotSubscribedException {
+//
+//        try {
+//            CloudControllerServiceClient.getServiceClient().terminateAllInstances(getCluster().getClusterDomain());
+//
+//        } catch (AxisFault e) {
+//            String errorMsg = "Error in terminating cartridge subscription, alias " + getAlias();
+//            log.error(errorMsg);
+//            throw new ADCException(errorMsg, e);
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in terminating cartridge subscription, alias " + getAlias();
+//            log.error(errorMsg);
+//            throw new ADCException(errorMsg, e);
+//        }
+//
+//        log.info("Terminated all instances of " + getCluster().getClusterDomain() + " " + getCluster().getClusterSubDomain());
+//
+//        try {
+//            CloudControllerServiceClient.getServiceClient().unregisterService(getCluster().getClusterDomain());
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in unregistering service cluster with domain " + getCluster().getClusterDomain() +
+//                    ", sub domain " + getCluster().getClusterSubDomain();
+//            log.error(errorMsg);
+//            throw new ADCException(errorMsg, e);
+//        }
+//
+//        log.info("Unregistered service cluster, domain " + getCluster().getClusterDomain() + ", sub domain " +
+//                getCluster().getClusterSubDomain());
+//
+//        super.cleanupSubscription();
+//    }
+//
+//    @Override
+//    public PayloadArg createPayloadParameters()
+//            throws ADCException {
+//
+//        PayloadArg payloadArg = super.createPayloadParameters();
+//        if(getRepository() != null) {
+//            payloadArg.setRepoURL(getRepository().getUrl());
+//        }
+//        payloadArg.setHostName(getCluster().getHostName());
+//        payloadArg.setServiceDomain(getCluster().getClusterDomain());
+//        payloadArg.setServiceSubDomain(getCluster().getMgtClusterSubDomain());
+//        payloadArg.setMgtServiceDomain(getCluster().getMgtClusterDomain());
+//        payloadArg.setMgtServiceSubDomain(getCluster().getMgtClusterSubDomain());
+//        if(getCartridgeInfo().getProvider().equals(CartridgeConstants.PROVIDER_NAME_WSO2)) {
+//            payloadArg.setTenantRange(Integer.toString(getSubscriber().getTenantId()));
+//        }
+//        else {
+//            payloadArg.setTenantRange("*");
+//        }
+//
+//        return payloadArg;
+//    }
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java
index a3883d4..395d8bd 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/factory/CartridgeSubscriptionFactory.java
@@ -20,10 +20,7 @@
 package org.apache.stratos.adc.mgt.subscription.factory;
 
 import org.apache.stratos.adc.mgt.exception.ADCException;
-import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
-import org.apache.stratos.adc.mgt.subscription.DataCartridgeSubscription;
-import org.apache.stratos.adc.mgt.subscription.MultiTenantCartridgeSubscription;
-import org.apache.stratos.adc.mgt.subscription.SingleTenantCartridgeSubscription;
+import org.apache.stratos.adc.mgt.subscription.*;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
@@ -36,7 +33,7 @@ public class CartridgeSubscriptionFactory {
      * @return CartridgeSubscription subscription
      * @throws ADCException if no matching criteria is there to create a CartridgeSubscription object
      */
-    public static CartridgeSubscription getCartridgeSubscriptionInstance(CartridgeInfo cartridgeInfo)
+    /*public static CartridgeSubscription getCartridgeSubscriptionInstance(CartridgeInfo cartridgeInfo)
             throws ADCException {
 
         CartridgeSubscription cartridgeSubscription = null;
@@ -60,5 +57,31 @@ public class CartridgeSubscriptionFactory {
         }
 
         return cartridgeSubscription;
+    }*/
+
+    public static CartridgeSubscription getCartridgeSubscriptionInstance(CartridgeInfo cartridgeInfo)
+            throws ADCException {
+
+        //TODO: fix the logic properly
+        CartridgeSubscription cartridgeSubscription = null;
+        if(cartridgeInfo.getMultiTenant()) {
+            cartridgeSubscription = new FrameworkCartridgeSubscription(cartridgeInfo);
+
+        } else {
+            if(cartridgeInfo.getProvider().equals(CartridgeConstants.DATA_CARTRIDGE_PROVIDER)) {
+                cartridgeSubscription = new DataCartridgeSubscription(cartridgeInfo);
+            }
+            else {
+                //cartridgeSubscription = new SingleTenantCartridgeSubscription(cartridgeInfo);
+                cartridgeSubscription = new FrameworkCartridgeSubscription(cartridgeInfo);
+            }
+        }
+
+        if(cartridgeSubscription == null) {
+            throw new ADCException("Unable to create a CartridgeSubscription subscription for "
+                    + cartridgeInfo);
+        }
+
+        return cartridgeSubscription;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
index fbf63d2..7d7122c 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
@@ -27,7 +27,7 @@ import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
 import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
 import org.apache.stratos.adc.mgt.internal.DataHolder;
 import org.apache.stratos.adc.mgt.payload.PayloadArg;
-import org.apache.stratos.adc.mgt.subscription.AbstractCartridgeSubscription;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 import org.apache.stratos.adc.mgt.utils.PersistenceManager;
 import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
@@ -39,7 +39,7 @@ public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehavio
 
     private static Log log = LogFactory.getLog(SubscriptionMultiTenantBehaviour.class);
 
-    public SubscriptionMultiTenantBehaviour(AbstractCartridgeSubscription cartridgeSubscription) {
+    public SubscriptionMultiTenantBehaviour(CartridgeSubscription cartridgeSubscription) {
         super(cartridgeSubscription);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
index 02807e3..4f185c1 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
@@ -28,7 +28,7 @@ import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException;
 import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
 import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
 import org.apache.stratos.adc.mgt.payload.PayloadArg;
-import org.apache.stratos.adc.mgt.subscription.AbstractCartridgeSubscription;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 
@@ -38,7 +38,7 @@ public class SubscriptionSingleTenantBehaviour extends SubscriptionTenancyBehavi
 
     private static Log log = LogFactory.getLog(SubscriptionSingleTenantBehaviour.class);
 
-    public SubscriptionSingleTenantBehaviour(AbstractCartridgeSubscription cartridgeSubscription) {
+    public SubscriptionSingleTenantBehaviour(CartridgeSubscription cartridgeSubscription) {
         super(cartridgeSubscription);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
index d0e1b7b..633a05d 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
@@ -24,18 +24,26 @@ import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException;
 import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
 import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
 import org.apache.stratos.adc.mgt.payload.PayloadArg;
-import org.apache.stratos.adc.mgt.subscription.AbstractCartridgeSubscription;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 
 import java.util.Properties;
 
 public abstract class SubscriptionTenancyBehaviour {
 
-    protected AbstractCartridgeSubscription cartridgeSubscription;
+    protected CartridgeSubscription cartridgeSubscription;
 
-    public SubscriptionTenancyBehaviour(AbstractCartridgeSubscription cartridgeSubscription) {
+    public SubscriptionTenancyBehaviour(CartridgeSubscription cartridgeSubscription) {
         this.cartridgeSubscription = cartridgeSubscription;
     }
 
+    public void setCartridgeSubscription (CartridgeSubscription cartridgeSubscription) {
+        this.cartridgeSubscription = cartridgeSubscription;
+    }
+
+    public CartridgeSubscription getCartridgeSubscription () {
+        return cartridgeSubscription;
+    }
+
     public abstract void createSubscription() throws ADCException, AlreadySubscribedException;
 
     public abstract void registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/test/java/org/apache/stratos/adc/mgt/test/CartridgeSubscriptionTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/test/java/org/apache/stratos/adc/mgt/test/CartridgeSubscriptionTest.java b/components/org.apache.stratos.adc.mgt/src/test/java/org/apache/stratos/adc/mgt/test/CartridgeSubscriptionTest.java
index 9471635..d0929d5 100644
--- a/components/org.apache.stratos.adc.mgt/src/test/java/org/apache/stratos/adc/mgt/test/CartridgeSubscriptionTest.java
+++ b/components/org.apache.stratos.adc.mgt/src/test/java/org/apache/stratos/adc/mgt/test/CartridgeSubscriptionTest.java
@@ -20,7 +20,6 @@
 package org.apache.stratos.adc.mgt.test;
 
 import junit.framework.TestCase;
-
 import org.apache.stratos.adc.mgt.exception.ADCException;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 import org.apache.stratos.adc.mgt.subscription.factory.CartridgeSubscriptionFactory;


[2/6] git commit: subscription models changes

Posted by is...@apache.org.
subscription models changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/0fbd464c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/0fbd464c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/0fbd464c

Branch: refs/heads/master
Commit: 0fbd464c61aea255b1dca4505f9579301154d274
Parents: 74d8984
Author: Isuru <is...@wso2.com>
Authored: Fri Dec 6 16:41:10 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Fri Dec 6 16:41:10 2013 +0530

----------------------------------------------------------------------
 .../ApplicationCartridgeSubscription.java       | 45 ++++++++--
 .../DataCartridgeSubscription1.java             | 94 ++++++++++++++++++--
 .../FrameworkCartridgeSubscription.java         |  2 +-
 .../SubscriptionMultiTenantBehaviour.java       |  4 +-
 .../SubscriptionSingleTenantBehaviour.java      |  6 +-
 .../tenancy/SubscriptionTenancyBehaviour.java   |  4 +-
 6 files changed, 139 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0fbd464c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
index aa49ac7..4a6c0e5 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
@@ -20,9 +20,12 @@
 package org.apache.stratos.adc.mgt.subscription;
 
 import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
-import org.apache.stratos.adc.mgt.exception.ADCException;
-import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
-import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
@@ -39,13 +42,45 @@ public class ApplicationCartridgeSubscription extends AbstractCartridgeSubscript
         super(cartridgeInfo);
     }
 
+    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy,
+                                   Repository repository) throws
+            InvalidCartridgeAliasException, DuplicateCartridgeAliasException, ADCException,
+            RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
+            AlreadySubscribedException, RepositoryRequiredException, InvalidRepositoryException, PolicyException {
+
+        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
+        subscriptionTenancyBehaviour.createSubscription();
+    }
+
     @Override
     public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+
+        subscriptionTenancyBehaviour.registerSubscription(null);
+
+        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING", getSubscriptionKey());
+    }
+
+    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+                                        String tenantDomain) {
+
+        //no repository for application cartridge instances
+        return null;
     }
 
     @Override
     public void removeSubscription() throws ADCException, NotSubscribedException {
-        //To change body of implemented methods use File | Settings | File Templates.
+
+        subscriptionTenancyBehaviour.removeSubscription();
+        super.cleanupSubscription();
+    }
+
+    public PayloadArg createPayloadParameters () throws ADCException {
+
+        PayloadArg payloadArg = super.createPayloadParameters();
+        return subscriptionTenancyBehaviour.createPayloadParameters(payloadArg);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0fbd464c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
index 74f299a..6f5401f 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
@@ -20,31 +20,113 @@
 package org.apache.stratos.adc.mgt.subscription;
 
 import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
-import org.apache.stratos.adc.mgt.exception.ADCException;
-import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
-import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.dao.DataCartridge;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
 
 public class DataCartridgeSubscription1 extends AbstractCartridgeSubscription {
 
+    private String host;
+    private String username;
+    private String password;
+
     /**
      * Constructor
      *
      * @param cartridgeInfo CartridgeInfo subscription
      */
     public DataCartridgeSubscription1(CartridgeInfo cartridgeInfo) {
+
         super(cartridgeInfo);
+        this.setHost("localhost");
+        this.setUsername(CartridgeConstants.MYSQL_DEFAULT_USER);
+        this.setPassword(ApplicationManagementUtil.generatePassword());
     }
 
     @Override
-    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
+
+            throws InvalidCartridgeAliasException,
+            DuplicateCartridgeAliasException, ADCException, RepositoryCredentialsRequiredException,
+            RepositoryTransportException, UnregisteredCartridgeException, AlreadySubscribedException,
+            RepositoryRequiredException, InvalidRepositoryException, PolicyException {
+
+        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
+        subscriptionTenancyBehaviour.createSubscription();
+    }
+
+    public PayloadArg createPayloadParameters() throws ADCException {
+
+        PayloadArg payloadArg = super.createPayloadParameters();
+        payloadArg.setDataCartridgeHost(this.getHost());
+        payloadArg.setDataCartridgeAdminUser(getUsername());
+        payloadArg.setDataCartridgeAdminPassword(getPassword());
+
+        return subscriptionTenancyBehaviour.createPayloadParameters(payloadArg);
+    }
+
+    @Override
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException,
+            UnregisteredCartridgeException {
+
+        subscriptionTenancyBehaviour.registerSubscription(ApplicationManagementUtil.
+                setRegisterServiceProperties(getAutoscalingPolicy(), getSubscriber().getTenantId(), getAlias()));
+
+        DataCartridge dataCartridge = new DataCartridge();
+        dataCartridge.setUserName(getUsername());
+        dataCartridge.setPassword(getPassword());
+        dataCartridge.setDataCartridgeType(getType());
+
+        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), dataCartridge, "PENDING",getSubscriptionKey());
+    }
+
+    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+                                        String tenantDomain) {
+
+        //no repository for data cartridge instances
+        return null;
     }
 
     @Override
     public void removeSubscription() throws ADCException, NotSubscribedException {
-        //To change body of implemented methods use File | Settings | File Templates.
+
+        subscriptionTenancyBehaviour.removeSubscription();
+        super.cleanupSubscription();
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0fbd464c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
index 6552fa9..668ff55 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
@@ -55,7 +55,7 @@ public class FrameworkCartridgeSubscription extends AbstractCartridgeSubscriptio
     @Override
     public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
 
-        subscriptionTenancyBehaviour.registerSubscription();
+        subscriptionTenancyBehaviour.registerSubscription(null);
 
         return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
                 getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0fbd464c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
index c441036..fbf63d2 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
@@ -33,6 +33,8 @@ import org.apache.stratos.adc.mgt.utils.PersistenceManager;
 import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
 import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
 
+import java.util.Properties;
+
 public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehaviour {
 
     private static Log log = LogFactory.getLog(SubscriptionMultiTenantBehaviour.class);
@@ -97,7 +99,7 @@ public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehavio
         }
     }
 
-    public void registerSubscription() throws ADCException, UnregisteredCartridgeException {
+    public void registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
 
         //nothing to do
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0fbd464c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
index 263c1d6..02807e3 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
@@ -32,6 +32,8 @@ import org.apache.stratos.adc.mgt.subscription.AbstractCartridgeSubscription;
 import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 
+import java.util.Properties;
+
 public class SubscriptionSingleTenantBehaviour extends SubscriptionTenancyBehaviour {
 
     private static Log log = LogFactory.getLog(SubscriptionSingleTenantBehaviour.class);
@@ -49,7 +51,7 @@ public class SubscriptionSingleTenantBehaviour extends SubscriptionTenancyBehavi
                 cartridgeSubscription.getCluster().getHostName());
     }
 
-    public void registerSubscription() throws ADCException, UnregisteredCartridgeException {
+    public void registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
 
         ApplicationManagementUtil.registerService(cartridgeSubscription.getType(),
                 cartridgeSubscription.getCluster().getClusterDomain(),
@@ -57,7 +59,7 @@ public class SubscriptionSingleTenantBehaviour extends SubscriptionTenancyBehavi
                 cartridgeSubscription.getPayload().createPayload(),
                 cartridgeSubscription.getPayload().getPayloadArg().getTenantRange(),
                 cartridgeSubscription.getCluster().getHostName(),
-                null);
+                properties);
 
         cartridgeSubscription.getPayload().delete();
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0fbd464c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
index eb073ce..d0e1b7b 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionTenancyBehaviour.java
@@ -26,6 +26,8 @@ import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
 import org.apache.stratos.adc.mgt.payload.PayloadArg;
 import org.apache.stratos.adc.mgt.subscription.AbstractCartridgeSubscription;
 
+import java.util.Properties;
+
 public abstract class SubscriptionTenancyBehaviour {
 
     protected AbstractCartridgeSubscription cartridgeSubscription;
@@ -36,7 +38,7 @@ public abstract class SubscriptionTenancyBehaviour {
 
     public abstract void createSubscription() throws ADCException, AlreadySubscribedException;
 
-    public abstract void registerSubscription() throws ADCException, UnregisteredCartridgeException;
+    public abstract void registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException;
 
     public abstract void removeSubscription() throws ADCException, NotSubscribedException;
 


[5/6] git commit: subscription model changes

Posted by is...@apache.org.
subscription model changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/702d5ca1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/702d5ca1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/702d5ca1

Branch: refs/heads/master
Commit: 702d5ca1e62a5b8b96724cb28599071f817b07c2
Parents: f7c8c0b
Author: Isuru <is...@wso2.com>
Authored: Sat Dec 7 23:46:58 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Sat Dec 7 23:46:58 2013 +0530

----------------------------------------------------------------------
 .../DatabaseBasedPersistenceManager.java        |  19 +-
 .../AbstractCartridgeSubscription.java          | 441 -------------------
 .../ApplicationCartridgeSubscription.java       |   2 +-
 .../mgt/subscription/CartridgeSubscription.java |  46 +-
 .../subscription/CartridgeSubscription_old.java | 431 ++++++++++++++++++
 .../subscription/DataCartridgeSubscription.java |  49 ++-
 .../DataCartridgeSubscription1.java             | 132 ------
 .../DataCartridgeSubscription_old.java          | 127 ++++++
 .../FrameworkCartridgeSubscription.java         |   2 +-
 .../subscription/LBCartridgeSubscription.java   |  51 +++
 .../MultiTenantCartridgeSubscription.java       | 268 +++++------
 .../SingleTenantCartridgeSubscription.java      | 272 ++++++------
 .../factory/CartridgeSubscriptionFactory.java   |  33 +-
 .../SubscriptionMultiTenantBehaviour.java       |   4 +-
 .../SubscriptionSingleTenantBehaviour.java      |   4 +-
 .../tenancy/SubscriptionTenancyBehaviour.java   |  14 +-
 .../adc/mgt/test/CartridgeSubscriptionTest.java |   1 -
 17 files changed, 989 insertions(+), 907 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
index 3059df2..b672332 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
@@ -31,7 +31,7 @@ import org.apache.stratos.adc.mgt.repository.Repository;
 import org.apache.stratos.adc.mgt.subscriber.Subscriber;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 import org.apache.stratos.adc.mgt.subscription.DataCartridgeSubscription;
-import org.apache.stratos.adc.mgt.subscription.SingleTenantCartridgeSubscription;
+//import org.apache.stratos.adc.mgt.subscription.SingleTenantCartridgeSubscription;
 import org.apache.stratos.adc.mgt.subscription.factory.CartridgeSubscriptionFactory;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 import org.apache.stratos.adc.mgt.utils.PolicyHolder;
@@ -523,14 +523,15 @@ public class DatabaseBasedPersistenceManager extends PersistenceManager {
         cartridgeSubscription.setCluster(cluster);
 
         //data cartridge specific information
-        if (resultSet.getInt("DATA_CARTRIDGE_ID") != -1 && cartridgeSubscription instanceof
-                SingleTenantCartridgeSubscription) {
-            DataCartridgeSubscription dataCartridgeSubscription = (DataCartridgeSubscription)cartridgeSubscription;
-            dataCartridgeSubscription.setHost(resultSet.getString("HOST"));
-            dataCartridgeSubscription.setUsername(resultSet.getString("ADMIN_USERNAME"));
-            dataCartridgeSubscription.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.
-                    getString("ADMIN_PASSWORD")));
-        }
+        //TODO: temporarily removed
+//        if (resultSet.getInt("DATA_CARTRIDGE_ID") != -1 && cartridgeSubscription instanceof
+//                SingleTenantCartridgeSubscription) {
+//            DataCartridgeSubscription dataCartridgeSubscription = (DataCartridgeSubscription)cartridgeSubscription;
+//            dataCartridgeSubscription.setHost(resultSet.getString("HOST"));
+//            dataCartridgeSubscription.setUsername(resultSet.getString("ADMIN_USERNAME"));
+//            dataCartridgeSubscription.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.
+//                    getString("ADMIN_PASSWORD")));
+//        }
 
         //Subscriber related data
         CarbonContext carbonContext = CarbonContext.getThreadLocalCarbonContext();

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
deleted file mode 100644
index 3b7a2c7..0000000
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/AbstractCartridgeSubscription.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * 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.adc.mgt.subscription;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.adc.mgt.custom.domain.RegistryManager;
-import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
-import org.apache.stratos.adc.mgt.dao.Cluster;
-import org.apache.stratos.adc.mgt.dns.DNSManager;
-import org.apache.stratos.adc.mgt.dto.Policy;
-import org.apache.stratos.adc.mgt.exception.*;
-import org.apache.stratos.adc.mgt.internal.DataHolder;
-import org.apache.stratos.adc.mgt.payload.Payload;
-import org.apache.stratos.adc.mgt.payload.PayloadArg;
-import org.apache.stratos.adc.mgt.repository.Repository;
-import org.apache.stratos.adc.mgt.service.RepositoryInfoBean;
-import org.apache.stratos.adc.mgt.subscriber.Subscriber;
-import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionMultiTenantBehaviour;
-import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionSingleTenantBehaviour;
-import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
-import org.apache.stratos.adc.mgt.utils.*;
-import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
-import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-public abstract class AbstractCartridgeSubscription {
-
-    private static Log log = LogFactory.getLog(AbstractCartridgeSubscription.class);
-    private int subscriptionId;
-    private String type;
-    private String alias;
-    private Policy autoscalingPolicy;
-    private Subscriber subscriber;
-    private Repository repository;
-    private CartridgeInfo cartridgeInfo;
-    private Payload payload;
-    private Cluster cluster;
-    private String subscriptionStatus;
-    private String mappedDomain;
-    private List<String> connectedSubscriptionAliases;
-    private String subscriptionKey;
-    protected SubscriptionTenancyBehaviour subscriptionTenancyBehaviour;
-
-    /**
-     * Constructor
-     *
-     * @param cartridgeInfo CartridgeInfo subscription
-     */
-    public AbstractCartridgeSubscription(CartridgeInfo cartridgeInfo) {
-
-        this.setCartridgeInfo(cartridgeInfo);
-        this.setType(cartridgeInfo.getType());
-        this.setCluster(new Cluster());
-        getCluster().setClusterDomain("");
-        getCluster().setClusterSubDomain(CartridgeConstants.DEFAULT_SUBDOMAIN);
-        getCluster().setMgtClusterDomain("");
-        getCluster().setMgtClusterSubDomain(CartridgeConstants.DEFAULT_MGT_SUBDOMAIN);
-        getCluster().setHostName(cartridgeInfo.getHostName());
-        this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
-        this.connectedSubscriptionAliases = new ArrayList<String>();
-        if(getCartridgeInfo().getMultiTenant()) {
-            subscriptionTenancyBehaviour = new SubscriptionMultiTenantBehaviour(this);
-        }
-        else {
-            subscriptionTenancyBehaviour = new SubscriptionSingleTenantBehaviour(this);
-        }
-    }
-
-    /**
-     * Subscribes to this cartridge subscription
-     *
-     * @param subscriber Subscriber subscription
-     * @param alias Alias of the cartridge subscription
-     * @param autoscalingPolicy Auto scaling policy
-     * @param repository Relevenat Repository subscription
-     *
-     * @throws org.apache.stratos.adc.mgt.exception.ADCException
-     * @throws org.apache.stratos.adc.mgt.exception.PolicyException
-     * @throws org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException
-     * @throws org.apache.stratos.adc.mgt.exception.InvalidCartridgeAliasException
-     * @throws org.apache.stratos.adc.mgt.exception.DuplicateCartridgeAliasException
-     * @throws org.apache.stratos.adc.mgt.exception.RepositoryRequiredException
-     * @throws org.apache.stratos.adc.mgt.exception.AlreadySubscribedException
-     * @throws org.apache.stratos.adc.mgt.exception.RepositoryCredentialsRequiredException
-     * @throws org.apache.stratos.adc.mgt.exception.InvalidRepositoryException
-     * @throws org.apache.stratos.adc.mgt.exception.RepositoryTransportException
-     */
-    public void createSubscription (Subscriber subscriber, String alias, Policy autoscalingPolicy,
-                                    Repository repository)
-            throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
-            DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
-            RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
-
-        setSubscriber(subscriber);
-        setAlias(alias);
-        setAutoscalingPolicy(autoscalingPolicy);
-        setRepository(repository);
-    }
-
-    /**
-     * Unsubscribe from this cartridge subscription
-     *
-     * @throws ADCException
-     * @throws NotSubscribedException
-     */
-    public abstract void removeSubscription() throws ADCException, NotSubscribedException;
-
-    /**
-     * Registers the subscription
-     *
-     * @param properties Any additional properties needed
-     *
-     * @return CartridgeSubscriptionInfo subscription populated with relevant data
-     * @throws ADCException
-     * @throws UnregisteredCartridgeException
-     */
-    public abstract CartridgeSubscriptionInfo registerSubscription(Properties properties)
-            throws ADCException, UnregisteredCartridgeException;
-
-    /**
-     * Connect cartridges
-     *
-     * @param connectingCartridgeAlias Alias of connecting cartridge
-     */
-    public void connect (String connectingCartridgeAlias) {
-        connectedSubscriptionAliases.add(connectingCartridgeAlias);
-    }
-
-    /**
-     * Disconnect from the cartridge subscription given by disconnectingCartridgeAlias
-     *
-     * @param disconnectingCartridgeAlias Alias of the cartridge subscription to disconnect
-     */
-    public void disconnect (String disconnectingCartridgeAlias) {
-        connectedSubscriptionAliases.remove(disconnectingCartridgeAlias);
-    }
-
-    /**
-     * Creates the relevant payload parameters for this cartridge subscription
-     *
-     * @return PayloadArg subscription
-     * @throws ADCException in an errpr
-     */
-    public PayloadArg createPayloadParameters() throws ADCException {
-
-        PayloadArg payloadArg = new PayloadArg();
-        payloadArg.setCartridgeInfo(getCartridgeInfo());
-        payloadArg.setPolicy(getAutoscalingPolicy());
-        payloadArg.setMultitenant(getCartridgeInfo().getMultiTenant());
-        payloadArg.setTenantId(getSubscriber().getTenantId());
-        payloadArg.setTenantDomain(getSubscriber().getTenantDomain());
-        payloadArg.setCartridgeAlias(getAlias());
-        payloadArg.setServiceName(getCartridgeInfo().getType());
-        payloadArg.setSubscriptionKey(subscriptionKey);
-        return payloadArg;
-    }
-
-    /**
-     * Manages the repository for the cartridge subscription
-     *
-     * @param repoURL Repository URL
-     * @param repoUserName Repository Username
-     * @param repoUserPassword Repository password
-     * @param privateRepo public/private repository
-     * @param cartridgeAlias Alias of the cartridge subscription
-     * @param cartridgeInfo CartridgeInfo subscription
-     * @param tenantDomain Domain of the tenant
-     *
-     * @return Repository populated with relevant information or null of not repository is relevant to this cartridge
-     * subscription
-     * @throws ADCException
-     * @throws RepositoryRequiredException
-     * @throws RepositoryCredentialsRequiredException
-     * @throws RepositoryTransportException
-     * @throws InvalidRepositoryException
-     */
-    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
-                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
-                                        String tenantDomain)
-
-            throws ADCException, RepositoryRequiredException, RepositoryCredentialsRequiredException,
-            RepositoryTransportException, InvalidRepositoryException {
-
-        if (!new Boolean(System.getProperty(CartridgeConstants.FEATURE_INTERNAL_REPO_ENABLED))) {
-            if (log.isDebugEnabled()) {
-                log.debug("Internal repo feature is not enabled.");
-            }
-        }
-
-        Repository repository = new Repository();
-        if (repoURL != null && repoURL.trim().length() > 0) {
-            log.info("External REPO URL is provided as [" + repoURL +
-                    "]. Therefore not creating a new repo.");
-            //repository.setRepoName(repoURL.substring(0, repoURL.length()-4)); // remove .git part
-            repository.setUrl(repoURL);
-            repository.setUserName(repoUserName);
-            repository.setPassword(repoUserPassword);
-            repository.setPrivateRepository(privateRepo);
-
-        } else {
-
-            log.info("External git repo url not provided for tenant "
-                    + tenantDomain + ", creating an git internal repository");
-
-            // for internal repos  internal git server username and password is used.
-            repository.setUserName(System.getProperty(CartridgeConstants.INTERNAL_GIT_USERNAME));
-            repository.setPassword(System.getProperty(CartridgeConstants.INTERNAL_GIT_PASSWORD));
-            try {
-                new RepositoryCreator(new RepositoryInfoBean(repoURL, cartridgeAlias, tenantDomain,
-                        repository.getUserName(), repository.getPassword(), cartridgeInfo.getDeploymentDirs(),
-                        cartridgeInfo)).createInternalRepository();
-
-            } catch (Exception e) {
-                throw new ADCException(e.getMessage(), e);
-            }
-            String repoName = tenantDomain + "/" + cartridgeAlias;
-            repository.setUrl("https://" + System.getProperty(CartridgeConstants.GIT_HOST_NAME) + ":8443/git/" +
-                    repoName);
-        }
-
-        // Validate Remote Repository.
-        ApplicationManagementUtil.validateRepository(repoURL, repoUserName, repoUserPassword, privateRepo,
-                new Boolean(System.getProperty(CartridgeConstants.FEATURE_EXTERNAL_REPO_VAIDATION_ENABLED)));
-
-        return repository;
-    }
-
-    /**
-     * Cleans up the subscription information after unsubscribing
-     *
-     * @throws ADCException
-     */
-    protected void cleanupSubscription () throws ADCException {
-
-        try {
-            new RepositoryFactory().destroyRepository(alias, subscriber.getTenantDomain(),
-                    subscriber.getAdminUserName());
-            log.info("Repo is destroyed successfully.. ");
-
-        } catch (Exception e) {
-            String errorMsg = "Error in destroying repository for tenant " + subscriber.getTenantDomain() +
-                    "cartridge type " + type;
-            log.error(errorMsg);
-        }
-
-        try {
-            PersistenceManager.updateSubscriptionState(subscriptionId, "UNSUBSCRIBED");
-
-        } catch (Exception e) {
-            String errorMsg = "Error in unscubscribing from cartridge, alias " + alias + ", tenant " +
-                    subscriber.getTenantDomain();
-            throw new ADCException(errorMsg, e);
-        }
-
-        //TODO: FIXME: do we need this?
-        new DNSManager().removeSubDomain(getCluster().getHostName());
-
-        try {
-            new RegistryManager().removeDomainMappingFromRegistry(getCluster().getHostName());
-
-        } catch (Exception e) {
-            String errorMsg = "Error in removing domain mapping, alias " + alias + ", tenant " +
-                    subscriber.getTenantDomain();
-            log.error(errorMsg, e);
-        }
-
-        TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
-        String[] ips = topologyMgtService.getActiveIPs(type, getCluster().getClusterDomain(), getCluster().getClusterSubDomain());
-        try {
-            PersistenceManager.updateInstanceState("INACTIVE", ips, getCluster().getClusterDomain(), getCluster().getClusterSubDomain(), type);
-
-        } catch (Exception e) {
-            String errorMsg = "Error in updating state to INACTIVE";
-            log.error(errorMsg, e);
-        }
-
-        this.setSubscriptionStatus(CartridgeConstants.UNSUBSCRIBED);
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public String getAlias() {
-        return alias;
-    }
-
-    public Subscriber getSubscriber() {
-        return subscriber;
-    }
-
-    public Repository getRepository() {
-        return repository;
-    }
-
-    public List<String> getConnectedSubscriptionAliases() {
-        return connectedSubscriptionAliases;
-    }
-
-    public CartridgeInfo getCartridgeInfo() {
-        return cartridgeInfo;
-    }
-
-    public String getHostName() {
-        return getCluster().getHostName();
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public void setAlias(String alias) {
-        this.alias = alias;
-    }
-
-    public String getClusterDomain() {
-        return getCluster().getClusterDomain();
-    }
-
-    public void setClusterDomain(String clusterDomain) {
-        getCluster().setClusterDomain(clusterDomain);
-    }
-
-    public String getClusterSubDomain() {
-        return getCluster().getClusterSubDomain();
-    }
-
-    public void setClusterSubDomain(String clusterSubDomain) {
-        getCluster().setClusterSubDomain(clusterSubDomain);
-    }
-
-    public String getMgtClusterDomain() {
-        return getCluster().getMgtClusterDomain();
-    }
-
-    public void setMgtClusterDomain(String mgtClusterDomain) {
-        getCluster().setMgtClusterDomain(mgtClusterDomain);
-    }
-
-    public String getMgtClusterSubDomain() {
-        return getCluster().getMgtClusterSubDomain();
-    }
-
-    public void setMgtClusterSubDomain(String mgtClusterSubDomain) {
-        getCluster().setMgtClusterSubDomain(mgtClusterSubDomain);
-    }
-
-    public void setHostName(String hostName) {
-        getCluster().setHostName(hostName);
-    }
-
-    public Policy getAutoscalingPolicy() {
-        return autoscalingPolicy;
-    }
-
-    public void setAutoscalingPolicy(Policy autoscalingPolicy) {
-        this.autoscalingPolicy = autoscalingPolicy;
-    }
-
-    public void setSubscriber(Subscriber subscriber) {
-        this.subscriber = subscriber;
-    }
-
-    public void setRepository(Repository repository) {
-        this.repository = repository;
-    }
-
-    public void setCartridgeInfo(CartridgeInfo cartridgeInfo) {
-        this.cartridgeInfo = cartridgeInfo;
-    }
-
-    public Payload getPayload() {
-        return payload;
-    }
-
-    public void setPayload(Payload payload) {
-        this.payload = payload;
-    }
-
-    public int getSubscriptionId() {
-        return subscriptionId;
-    }
-
-    public void setSubscriptionId(int subscriptionId) {
-        this.subscriptionId = subscriptionId;
-    }
-
-    public String getMappedDomain() {
-        return mappedDomain;
-    }
-
-    public void setMappedDomain(String mappedDomain) {
-        this.mappedDomain = mappedDomain;
-    }
-
-    public String getSubscriptionStatus() {
-        return subscriptionStatus;
-    }
-
-    public void setSubscriptionStatus(String subscriptionStatus) {
-        this.subscriptionStatus = subscriptionStatus;
-    }
-
-    public String getSubscriptionKey() {
-        return subscriptionKey;
-    }
-
-    public void setSubscriptionKey(String subscriptionKey) {
-        this.subscriptionKey = subscriptionKey;
-    }
-
-    public Cluster getCluster() {
-        return cluster;
-    }
-
-    public void setCluster(Cluster cluster) {
-        this.cluster = cluster;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
index 4a6c0e5..63fc6b1 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/ApplicationCartridgeSubscription.java
@@ -30,7 +30,7 @@ import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
 
-public class ApplicationCartridgeSubscription extends AbstractCartridgeSubscription {
+public class ApplicationCartridgeSubscription extends CartridgeSubscription {
 
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
index e1a48ce..76f0739 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
@@ -33,6 +33,9 @@ import org.apache.stratos.adc.mgt.payload.PayloadArg;
 import org.apache.stratos.adc.mgt.repository.Repository;
 import org.apache.stratos.adc.mgt.service.RepositoryInfoBean;
 import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionMultiTenantBehaviour;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionSingleTenantBehaviour;
+import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour;
 import org.apache.stratos.adc.mgt.utils.*;
 import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
@@ -57,6 +60,7 @@ public abstract class CartridgeSubscription {
     private String mappedDomain;
     private List<String> connectedSubscriptionAliases;
     private String subscriptionKey;
+    protected SubscriptionTenancyBehaviour subscriptionTenancyBehaviour;
 
     /**
      * Constructor
@@ -75,6 +79,12 @@ public abstract class CartridgeSubscription {
         getCluster().setHostName(cartridgeInfo.getHostName());
         this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
         this.connectedSubscriptionAliases = new ArrayList<String>();
+        if(getCartridgeInfo().getMultiTenant()) {
+            subscriptionTenancyBehaviour = new SubscriptionMultiTenantBehaviour(this);
+        }
+        else {
+            subscriptionTenancyBehaviour = new SubscriptionSingleTenantBehaviour(this);
+        }
     }
 
     /**
@@ -85,19 +95,19 @@ public abstract class CartridgeSubscription {
      * @param autoscalingPolicy Auto scaling policy
      * @param repository Relevenat Repository subscription
      *
-     * @throws ADCException
-     * @throws PolicyException
-     * @throws UnregisteredCartridgeException
-     * @throws InvalidCartridgeAliasException
-     * @throws DuplicateCartridgeAliasException
-     * @throws RepositoryRequiredException
-     * @throws AlreadySubscribedException
-     * @throws RepositoryCredentialsRequiredException
-     * @throws InvalidRepositoryException
-     * @throws RepositoryTransportException
+     * @throws org.apache.stratos.adc.mgt.exception.ADCException
+     * @throws org.apache.stratos.adc.mgt.exception.PolicyException
+     * @throws org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException
+     * @throws org.apache.stratos.adc.mgt.exception.InvalidCartridgeAliasException
+     * @throws org.apache.stratos.adc.mgt.exception.DuplicateCartridgeAliasException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryRequiredException
+     * @throws org.apache.stratos.adc.mgt.exception.AlreadySubscribedException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryCredentialsRequiredException
+     * @throws org.apache.stratos.adc.mgt.exception.InvalidRepositoryException
+     * @throws org.apache.stratos.adc.mgt.exception.RepositoryTransportException
      */
     public void createSubscription (Subscriber subscriber, String alias, Policy autoscalingPolicy,
-                                   Repository repository)
+                                    Repository repository)
             throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
             DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
             RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
@@ -412,14 +422,14 @@ public abstract class CartridgeSubscription {
         this.subscriptionStatus = subscriptionStatus;
     }
 
-	public String getSubscriptionKey() {
-		return subscriptionKey;
-	}
+    public String getSubscriptionKey() {
+        return subscriptionKey;
+    }
+
+    public void setSubscriptionKey(String subscriptionKey) {
+        this.subscriptionKey = subscriptionKey;
+    }
 
-	public void setSubscriptionKey(String subscriptionKey) {
-		this.subscriptionKey = subscriptionKey;
-	}
-	
     public Cluster getCluster() {
         return cluster;
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription_old.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription_old.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription_old.java
new file mode 100644
index 0000000..cab956d
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription_old.java
@@ -0,0 +1,431 @@
+///*
+// * 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.adc.mgt.subscription;
+//
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+//import org.apache.stratos.adc.mgt.custom.domain.RegistryManager;
+//import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+//import org.apache.stratos.adc.mgt.dao.Cluster;
+//import org.apache.stratos.adc.mgt.dns.DNSManager;
+//import org.apache.stratos.adc.mgt.dto.Policy;
+//import org.apache.stratos.adc.mgt.exception.*;
+//import org.apache.stratos.adc.mgt.internal.DataHolder;
+//import org.apache.stratos.adc.mgt.payload.Payload;
+//import org.apache.stratos.adc.mgt.payload.PayloadArg;
+//import org.apache.stratos.adc.mgt.repository.Repository;
+//import org.apache.stratos.adc.mgt.service.RepositoryInfoBean;
+//import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+//import org.apache.stratos.adc.mgt.utils.*;
+//import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.Properties;
+//
+//public abstract class CartridgeSubscription {
+//
+//    private static Log log = LogFactory.getLog(CartridgeSubscription.class);
+//    private int subscriptionId;
+//    private String type;
+//    private String alias;
+//    private Policy autoscalingPolicy;
+//    private Subscriber subscriber;
+//    private Repository repository;
+//    private CartridgeInfo cartridgeInfo;
+//    private Payload payload;
+//    private Cluster cluster;
+//    private String subscriptionStatus;
+//    private String mappedDomain;
+//    private List<String> connectedSubscriptionAliases;
+//    private String subscriptionKey;
+//
+//    /**
+//     * Constructor
+//     *
+//     * @param cartridgeInfo CartridgeInfo subscription
+//     */
+//    public CartridgeSubscription(CartridgeInfo cartridgeInfo) {
+//
+//        this.setCartridgeInfo(cartridgeInfo);
+//        this.setType(cartridgeInfo.getType());
+//        this.setCluster(new Cluster());
+//        getCluster().setClusterDomain("");
+//        getCluster().setClusterSubDomain(CartridgeConstants.DEFAULT_SUBDOMAIN);
+//        getCluster().setMgtClusterDomain("");
+//        getCluster().setMgtClusterSubDomain(CartridgeConstants.DEFAULT_MGT_SUBDOMAIN);
+//        getCluster().setHostName(cartridgeInfo.getHostName());
+//        this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
+//        this.connectedSubscriptionAliases = new ArrayList<String>();
+//    }
+//
+//    /**
+//     * Subscribes to this cartridge subscription
+//     *
+//     * @param subscriber Subscriber subscription
+//     * @param alias Alias of the cartridge subscription
+//     * @param autoscalingPolicy Auto scaling policy
+//     * @param repository Relevenat Repository subscription
+//     *
+//     * @throws ADCException
+//     * @throws PolicyException
+//     * @throws UnregisteredCartridgeException
+//     * @throws InvalidCartridgeAliasException
+//     * @throws DuplicateCartridgeAliasException
+//     * @throws RepositoryRequiredException
+//     * @throws AlreadySubscribedException
+//     * @throws RepositoryCredentialsRequiredException
+//     * @throws InvalidRepositoryException
+//     * @throws RepositoryTransportException
+//     */
+//    public void createSubscription (Subscriber subscriber, String alias, Policy autoscalingPolicy,
+//                                   Repository repository)
+//            throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
+//            DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
+//            RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
+//
+//        setSubscriber(subscriber);
+//        setAlias(alias);
+//        setAutoscalingPolicy(autoscalingPolicy);
+//        setRepository(repository);
+//    }
+//
+//    /**
+//     * Unsubscribe from this cartridge subscription
+//     *
+//     * @throws ADCException
+//     * @throws NotSubscribedException
+//     */
+//    public abstract void removeSubscription() throws ADCException, NotSubscribedException;
+//
+//    /**
+//     * Registers the subscription
+//     *
+//     * @param properties Any additional properties needed
+//     *
+//     * @return CartridgeSubscriptionInfo subscription populated with relevant data
+//     * @throws ADCException
+//     * @throws UnregisteredCartridgeException
+//     */
+//    public abstract CartridgeSubscriptionInfo registerSubscription(Properties properties)
+//            throws ADCException, UnregisteredCartridgeException;
+//
+//    /**
+//     * Connect cartridges
+//     *
+//     * @param connectingCartridgeAlias Alias of connecting cartridge
+//     */
+//    public void connect (String connectingCartridgeAlias) {
+//        connectedSubscriptionAliases.add(connectingCartridgeAlias);
+//    }
+//
+//    /**
+//     * Disconnect from the cartridge subscription given by disconnectingCartridgeAlias
+//     *
+//     * @param disconnectingCartridgeAlias Alias of the cartridge subscription to disconnect
+//     */
+//    public void disconnect (String disconnectingCartridgeAlias) {
+//        connectedSubscriptionAliases.remove(disconnectingCartridgeAlias);
+//    }
+//
+//    /**
+//     * Creates the relevant payload parameters for this cartridge subscription
+//     *
+//     * @return PayloadArg subscription
+//     * @throws ADCException in an errpr
+//     */
+//    public PayloadArg createPayloadParameters() throws ADCException {
+//
+//        PayloadArg payloadArg = new PayloadArg();
+//        payloadArg.setCartridgeInfo(getCartridgeInfo());
+//        payloadArg.setPolicy(getAutoscalingPolicy());
+//        payloadArg.setMultitenant(getCartridgeInfo().getMultiTenant());
+//        payloadArg.setTenantId(getSubscriber().getTenantId());
+//        payloadArg.setTenantDomain(getSubscriber().getTenantDomain());
+//        payloadArg.setCartridgeAlias(getAlias());
+//        payloadArg.setServiceName(getCartridgeInfo().getType());
+//        payloadArg.setSubscriptionKey(subscriptionKey);
+//        return payloadArg;
+//    }
+//
+//    /**
+//     * Manages the repository for the cartridge subscription
+//     *
+//     * @param repoURL Repository URL
+//     * @param repoUserName Repository Username
+//     * @param repoUserPassword Repository password
+//     * @param privateRepo public/private repository
+//     * @param cartridgeAlias Alias of the cartridge subscription
+//     * @param cartridgeInfo CartridgeInfo subscription
+//     * @param tenantDomain Domain of the tenant
+//     *
+//     * @return Repository populated with relevant information or null of not repository is relevant to this cartridge
+//     * subscription
+//     * @throws ADCException
+//     * @throws RepositoryRequiredException
+//     * @throws RepositoryCredentialsRequiredException
+//     * @throws RepositoryTransportException
+//     * @throws InvalidRepositoryException
+//     */
+//    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+//                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+//                                        String tenantDomain)
+//
+//            throws ADCException, RepositoryRequiredException, RepositoryCredentialsRequiredException,
+//            RepositoryTransportException, InvalidRepositoryException {
+//
+//        if (!new Boolean(System.getProperty(CartridgeConstants.FEATURE_INTERNAL_REPO_ENABLED))) {
+//            if (log.isDebugEnabled()) {
+//                log.debug("Internal repo feature is not enabled.");
+//            }
+//        }
+//
+//        Repository repository = new Repository();
+//        if (repoURL != null && repoURL.trim().length() > 0) {
+//            log.info("External REPO URL is provided as [" + repoURL +
+//                    "]. Therefore not creating a new repo.");
+//            //repository.setRepoName(repoURL.substring(0, repoURL.length()-4)); // remove .git part
+//            repository.setUrl(repoURL);
+//            repository.setUserName(repoUserName);
+//            repository.setPassword(repoUserPassword);
+//            repository.setPrivateRepository(privateRepo);
+//
+//        } else {
+//
+//            log.info("External git repo url not provided for tenant "
+//                    + tenantDomain + ", creating an git internal repository");
+//
+//            // for internal repos  internal git server username and password is used.
+//            repository.setUserName(System.getProperty(CartridgeConstants.INTERNAL_GIT_USERNAME));
+//            repository.setPassword(System.getProperty(CartridgeConstants.INTERNAL_GIT_PASSWORD));
+//            try {
+//                new RepositoryCreator(new RepositoryInfoBean(repoURL, cartridgeAlias, tenantDomain,
+//                        repository.getUserName(), repository.getPassword(), cartridgeInfo.getDeploymentDirs(),
+//                        cartridgeInfo)).createInternalRepository();
+//
+//            } catch (Exception e) {
+//                throw new ADCException(e.getMessage(), e);
+//            }
+//            String repoName = tenantDomain + "/" + cartridgeAlias;
+//            repository.setUrl("https://" + System.getProperty(CartridgeConstants.GIT_HOST_NAME) + ":8443/git/" +
+//                    repoName);
+//        }
+//
+//        // Validate Remote Repository.
+//        ApplicationManagementUtil.validateRepository(repoURL, repoUserName, repoUserPassword, privateRepo,
+//                new Boolean(System.getProperty(CartridgeConstants.FEATURE_EXTERNAL_REPO_VAIDATION_ENABLED)));
+//
+//        return repository;
+//    }
+//
+//    /**
+//     * Cleans up the subscription information after unsubscribing
+//     *
+//     * @throws ADCException
+//     */
+//    protected void cleanupSubscription () throws ADCException {
+//
+//        try {
+//            new RepositoryFactory().destroyRepository(alias, subscriber.getTenantDomain(),
+//                    subscriber.getAdminUserName());
+//            log.info("Repo is destroyed successfully.. ");
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in destroying repository for tenant " + subscriber.getTenantDomain() +
+//                    "cartridge type " + type;
+//            log.error(errorMsg);
+//        }
+//
+//        try {
+//            PersistenceManager.updateSubscriptionState(subscriptionId, "UNSUBSCRIBED");
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in unscubscribing from cartridge, alias " + alias + ", tenant " +
+//                    subscriber.getTenantDomain();
+//            throw new ADCException(errorMsg, e);
+//        }
+//
+//        //TODO: FIXME: do we need this?
+//        new DNSManager().removeSubDomain(getCluster().getHostName());
+//
+//        try {
+//            new RegistryManager().removeDomainMappingFromRegistry(getCluster().getHostName());
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in removing domain mapping, alias " + alias + ", tenant " +
+//                    subscriber.getTenantDomain();
+//            log.error(errorMsg, e);
+//        }
+//
+//        TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
+//        String[] ips = topologyMgtService.getActiveIPs(type, getCluster().getClusterDomain(), getCluster().getClusterSubDomain());
+//        try {
+//            PersistenceManager.updateInstanceState("INACTIVE", ips, getCluster().getClusterDomain(), getCluster().getClusterSubDomain(), type);
+//
+//        } catch (Exception e) {
+//            String errorMsg = "Error in updating state to INACTIVE";
+//            log.error(errorMsg, e);
+//        }
+//
+//        this.setSubscriptionStatus(CartridgeConstants.UNSUBSCRIBED);
+//    }
+//
+//    public String getType() {
+//        return type;
+//    }
+//
+//    public String getAlias() {
+//        return alias;
+//    }
+//
+//    public Subscriber getSubscriber() {
+//        return subscriber;
+//    }
+//
+//    public Repository getRepository() {
+//        return repository;
+//    }
+//
+//    public List<String> getConnectedSubscriptionAliases() {
+//        return connectedSubscriptionAliases;
+//    }
+//
+//    public CartridgeInfo getCartridgeInfo() {
+//        return cartridgeInfo;
+//    }
+//
+//    public String getHostName() {
+//        return getCluster().getHostName();
+//    }
+//
+//    public void setType(String type) {
+//        this.type = type;
+//    }
+//
+//    public void setAlias(String alias) {
+//        this.alias = alias;
+//    }
+//
+//    public String getClusterDomain() {
+//        return getCluster().getClusterDomain();
+//    }
+//
+//    public void setClusterDomain(String clusterDomain) {
+//        getCluster().setClusterDomain(clusterDomain);
+//    }
+//
+//    public String getClusterSubDomain() {
+//        return getCluster().getClusterSubDomain();
+//    }
+//
+//    public void setClusterSubDomain(String clusterSubDomain) {
+//        getCluster().setClusterSubDomain(clusterSubDomain);
+//    }
+//
+//    public String getMgtClusterDomain() {
+//        return getCluster().getMgtClusterDomain();
+//    }
+//
+//    public void setMgtClusterDomain(String mgtClusterDomain) {
+//        getCluster().setMgtClusterDomain(mgtClusterDomain);
+//    }
+//
+//    public String getMgtClusterSubDomain() {
+//        return getCluster().getMgtClusterSubDomain();
+//    }
+//
+//    public void setMgtClusterSubDomain(String mgtClusterSubDomain) {
+//        getCluster().setMgtClusterSubDomain(mgtClusterSubDomain);
+//    }
+//
+//    public void setHostName(String hostName) {
+//        getCluster().setHostName(hostName);
+//    }
+//
+//    public Policy getAutoscalingPolicy() {
+//        return autoscalingPolicy;
+//    }
+//
+//    public void setAutoscalingPolicy(Policy autoscalingPolicy) {
+//        this.autoscalingPolicy = autoscalingPolicy;
+//    }
+//
+//    public void setSubscriber(Subscriber subscriber) {
+//        this.subscriber = subscriber;
+//    }
+//
+//    public void setRepository(Repository repository) {
+//        this.repository = repository;
+//    }
+//
+//    public void setCartridgeInfo(CartridgeInfo cartridgeInfo) {
+//        this.cartridgeInfo = cartridgeInfo;
+//    }
+//
+//    public Payload getPayload() {
+//        return payload;
+//    }
+//
+//    public void setPayload(Payload payload) {
+//        this.payload = payload;
+//    }
+//
+//    public int getSubscriptionId() {
+//        return subscriptionId;
+//    }
+//
+//    public void setSubscriptionId(int subscriptionId) {
+//        this.subscriptionId = subscriptionId;
+//    }
+//
+//    public String getMappedDomain() {
+//        return mappedDomain;
+//    }
+//
+//    public void setMappedDomain(String mappedDomain) {
+//        this.mappedDomain = mappedDomain;
+//    }
+//
+//    public String getSubscriptionStatus() {
+//        return subscriptionStatus;
+//    }
+//
+//    public void setSubscriptionStatus(String subscriptionStatus) {
+//        this.subscriptionStatus = subscriptionStatus;
+//    }
+//
+//	public String getSubscriptionKey() {
+//		return subscriptionKey;
+//	}
+//
+//	public void setSubscriptionKey(String subscriptionKey) {
+//		this.subscriptionKey = subscriptionKey;
+//	}
+//
+//    public Cluster getCluster() {
+//        return cluster;
+//    }
+//
+//    public void setCluster(Cluster cluster) {
+//        this.cluster = cluster;
+//    }
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
index 786450c..979d467 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
@@ -32,12 +32,17 @@ import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
 
-public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription {
+public class DataCartridgeSubscription extends CartridgeSubscription {
 
     private String host;
     private String username;
     private String password;
 
+    /**
+     * Constructor
+     *
+     * @param cartridgeInfo CartridgeInfo subscription
+     */
     public DataCartridgeSubscription(CartridgeInfo cartridgeInfo) {
 
         super(cartridgeInfo);
@@ -55,14 +60,7 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
             RepositoryRequiredException, InvalidRepositoryException, PolicyException {
 
         super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
-    }
-
-    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
-                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
-                                        String tenantDomain) {
-
-        //no repository for data cartridge instances
-        return null;
+        subscriptionTenancyBehaviour.createSubscription();
     }
 
     public PayloadArg createPayloadParameters() throws ADCException {
@@ -72,22 +70,15 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
         payloadArg.setDataCartridgeAdminUser(getUsername());
         payloadArg.setDataCartridgeAdminPassword(getPassword());
 
-        return payloadArg;
+        return subscriptionTenancyBehaviour.createPayloadParameters(payloadArg);
     }
 
-    public CartridgeSubscriptionInfo registerSubscription(Properties payloadProperties)
-            throws ADCException, UnregisteredCartridgeException {
-
-        ApplicationManagementUtil.registerService(getType(),
-                getCluster().getClusterDomain(),
-                getCluster().getClusterSubDomain(),
-                getPayload().createPayload(),
-                getPayload().getPayloadArg().getTenantRange(),
-                getCluster().getHostName(),
-                ApplicationManagementUtil.setRegisterServiceProperties(getAutoscalingPolicy(),
-                        getSubscriber().getTenantId(), getAlias()));
+    @Override
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException,
+            UnregisteredCartridgeException {
 
-        getPayload().delete();
+        subscriptionTenancyBehaviour.registerSubscription(ApplicationManagementUtil.
+                setRegisterServiceProperties(getAutoscalingPolicy(), getSubscriber().getTenantId(), getAlias()));
 
         DataCartridge dataCartridge = new DataCartridge();
         dataCartridge.setUserName(getUsername());
@@ -98,7 +89,21 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
                 getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
                 getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
                 getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), dataCartridge, "PENDING",getSubscriptionKey());
+    }
+
+    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+                                        String tenantDomain) {
+
+        //no repository for data cartridge instances
+        return null;
+    }
+
+    @Override
+    public void removeSubscription() throws ADCException, NotSubscribedException {
 
+        subscriptionTenancyBehaviour.removeSubscription();
+        super.cleanupSubscription();
     }
 
     public String getHost() {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
deleted file mode 100644
index 6f5401f..0000000
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription1.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.adc.mgt.subscription;
-
-import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
-import org.apache.stratos.adc.mgt.dao.DataCartridge;
-import org.apache.stratos.adc.mgt.dto.Policy;
-import org.apache.stratos.adc.mgt.exception.*;
-import org.apache.stratos.adc.mgt.payload.PayloadArg;
-import org.apache.stratos.adc.mgt.repository.Repository;
-import org.apache.stratos.adc.mgt.subscriber.Subscriber;
-import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
-import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
-import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
-
-import java.util.Properties;
-
-public class DataCartridgeSubscription1 extends AbstractCartridgeSubscription {
-
-    private String host;
-    private String username;
-    private String password;
-
-    /**
-     * Constructor
-     *
-     * @param cartridgeInfo CartridgeInfo subscription
-     */
-    public DataCartridgeSubscription1(CartridgeInfo cartridgeInfo) {
-
-        super(cartridgeInfo);
-        this.setHost("localhost");
-        this.setUsername(CartridgeConstants.MYSQL_DEFAULT_USER);
-        this.setPassword(ApplicationManagementUtil.generatePassword());
-    }
-
-    @Override
-    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
-
-            throws InvalidCartridgeAliasException,
-            DuplicateCartridgeAliasException, ADCException, RepositoryCredentialsRequiredException,
-            RepositoryTransportException, UnregisteredCartridgeException, AlreadySubscribedException,
-            RepositoryRequiredException, InvalidRepositoryException, PolicyException {
-
-        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
-        subscriptionTenancyBehaviour.createSubscription();
-    }
-
-    public PayloadArg createPayloadParameters() throws ADCException {
-
-        PayloadArg payloadArg = super.createPayloadParameters();
-        payloadArg.setDataCartridgeHost(this.getHost());
-        payloadArg.setDataCartridgeAdminUser(getUsername());
-        payloadArg.setDataCartridgeAdminPassword(getPassword());
-
-        return subscriptionTenancyBehaviour.createPayloadParameters(payloadArg);
-    }
-
-    @Override
-    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException,
-            UnregisteredCartridgeException {
-
-        subscriptionTenancyBehaviour.registerSubscription(ApplicationManagementUtil.
-                setRegisterServiceProperties(getAutoscalingPolicy(), getSubscriber().getTenantId(), getAlias()));
-
-        DataCartridge dataCartridge = new DataCartridge();
-        dataCartridge.setUserName(getUsername());
-        dataCartridge.setPassword(getPassword());
-        dataCartridge.setDataCartridgeType(getType());
-
-        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
-                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
-                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
-                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), dataCartridge, "PENDING",getSubscriptionKey());
-    }
-
-    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
-                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
-                                        String tenantDomain) {
-
-        //no repository for data cartridge instances
-        return null;
-    }
-
-    @Override
-    public void removeSubscription() throws ADCException, NotSubscribedException {
-
-        subscriptionTenancyBehaviour.removeSubscription();
-        super.cleanupSubscription();
-    }
-
-    public String getHost() {
-        return host;
-    }
-
-    public void setHost(String host) {
-        this.host = host;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription_old.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription_old.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription_old.java
new file mode 100644
index 0000000..2faa986
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription_old.java
@@ -0,0 +1,127 @@
+///*
+// * 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.adc.mgt.subscription;
+//
+//import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+//import org.apache.stratos.adc.mgt.dao.DataCartridge;
+//import org.apache.stratos.adc.mgt.dto.Policy;
+//import org.apache.stratos.adc.mgt.exception.*;
+//import org.apache.stratos.adc.mgt.payload.PayloadArg;
+//import org.apache.stratos.adc.mgt.repository.Repository;
+//import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+//import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+//import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//
+//import java.util.Properties;
+//
+//public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription {
+//
+//    private String host;
+//    private String username;
+//    private String password;
+//
+//    public DataCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+//
+//        super(cartridgeInfo);
+//        this.setHost("localhost");
+//        this.setUsername(CartridgeConstants.MYSQL_DEFAULT_USER);
+//        this.setPassword(ApplicationManagementUtil.generatePassword());
+//    }
+//
+//    @Override
+//    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
+//
+//            throws InvalidCartridgeAliasException,
+//            DuplicateCartridgeAliasException, ADCException, RepositoryCredentialsRequiredException,
+//            RepositoryTransportException, UnregisteredCartridgeException, AlreadySubscribedException,
+//            RepositoryRequiredException, InvalidRepositoryException, PolicyException {
+//
+//        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
+//    }
+//
+//    public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+//                                        boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+//                                        String tenantDomain) {
+//
+//        //no repository for data cartridge instances
+//        return null;
+//    }
+//
+//    public PayloadArg createPayloadParameters() throws ADCException {
+//
+//        PayloadArg payloadArg = super.createPayloadParameters();
+//        payloadArg.setDataCartridgeHost(this.getHost());
+//        payloadArg.setDataCartridgeAdminUser(getUsername());
+//        payloadArg.setDataCartridgeAdminPassword(getPassword());
+//
+//        return payloadArg;
+//    }
+//
+//    public CartridgeSubscriptionInfo registerSubscription(Properties payloadProperties)
+//            throws ADCException, UnregisteredCartridgeException {
+//
+//        ApplicationManagementUtil.registerService(getType(),
+//                getCluster().getClusterDomain(),
+//                getCluster().getClusterSubDomain(),
+//                getPayload().createPayload(),
+//                getPayload().getPayloadArg().getTenantRange(),
+//                getCluster().getHostName(),
+//                ApplicationManagementUtil.setRegisterServiceProperties(getAutoscalingPolicy(),
+//                        getSubscriber().getTenantId(), getAlias()));
+//
+//        getPayload().delete();
+//
+//        DataCartridge dataCartridge = new DataCartridge();
+//        dataCartridge.setUserName(getUsername());
+//        dataCartridge.setPassword(getPassword());
+//        dataCartridge.setDataCartridgeType(getType());
+//
+//        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+//                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+//                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+//                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), dataCartridge, "PENDING",getSubscriptionKey());
+//
+//    }
+//
+//    public String getHost() {
+//        return host;
+//    }
+//
+//    public void setHost(String host) {
+//        this.host = host;
+//    }
+//
+//    public String getUsername() {
+//        return username;
+//    }
+//
+//    public void setUsername(String username) {
+//        this.username = username;
+//    }
+//
+//    public String getPassword() {
+//        return password;
+//    }
+//
+//    public void setPassword(String password) {
+//        this.password = password;
+//    }
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
index 668ff55..c5365ad 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/FrameworkCartridgeSubscription.java
@@ -30,7 +30,7 @@ import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 
 import java.util.Properties;
 
-public class FrameworkCartridgeSubscription extends AbstractCartridgeSubscription {
+public class FrameworkCartridgeSubscription extends CartridgeSubscription {
 
     /**
      * Constructor

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
new file mode 100644
index 0000000..151f157
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/LBCartridgeSubscription.java
@@ -0,0 +1,51 @@
+/*
+ * 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.adc.mgt.subscription;
+
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
+import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+
+import java.util.Properties;
+
+public class LBCartridgeSubscription extends CartridgeSubscription {
+
+    /**
+     * Constructor
+     *
+     * @param cartridgeInfo CartridgeInfo subscription
+     */
+    public LBCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+        super(cartridgeInfo);
+    }
+
+    @Override
+    public void removeSubscription() throws ADCException, NotSubscribedException {
+        //TODO
+    }
+
+    @Override
+    public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException, UnregisteredCartridgeException {
+        //TODO
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/702d5ca1/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
index d14d18b..de9fbcf 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
@@ -1,134 +1,134 @@
-/*
- * 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.adc.mgt.subscription;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
-import org.apache.stratos.adc.mgt.dto.Policy;
-import org.apache.stratos.adc.mgt.exception.*;
-import org.apache.stratos.adc.mgt.internal.DataHolder;
-import org.apache.stratos.adc.mgt.payload.PayloadArg;
-import org.apache.stratos.adc.mgt.repository.Repository;
-import org.apache.stratos.adc.mgt.subscriber.Subscriber;
-import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
-import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
-import org.apache.stratos.adc.mgt.utils.PersistenceManager;
-import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
-import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
-import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
-
-import java.util.Properties;
-
-public class MultiTenantCartridgeSubscription extends CartridgeSubscription {
-
-    private static Log log = LogFactory.getLog(MultiTenantCartridgeSubscription.class);
-
-    public MultiTenantCartridgeSubscription(CartridgeInfo cartridgeInfo) {
-        super(cartridgeInfo);
-    }
-
-    @Override
-    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
-
-            throws InvalidCartridgeAliasException,
-            DuplicateCartridgeAliasException, ADCException, AlreadySubscribedException,
-            RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
-            InvalidRepositoryException, RepositoryRequiredException, PolicyException {
-
-        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
-
-        boolean allowMultipleSubscription = Boolean.
-                valueOf(System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
-
-        if (!allowMultipleSubscription) {
-            // If the cartridge is multi-tenant. We should not let users createSubscription twice.
-            boolean subscribed;
-            try {
-                subscribed = PersistenceManager.isAlreadySubscribed(getType(), subscriber.getTenantId());
-            } catch (Exception e) {
-                String msg = "Error checking whether the cartridge type " + getType()
-                        + " is already subscribed";
-                log.error(msg, e);
-                throw new ADCException(msg, e);
-            }
-
-            if (subscribed) {
-                String msg = "Already subscribed to " + getType()
-                        + ". This multi-tenant cartridge will not be available to createSubscription";
-                if (log.isDebugEnabled()) {
-                    log.debug(msg);
-                }
-                throw new AlreadySubscribedException(msg, getType());
-            }
-        }
-
-        TopologyManagementService topologyService = DataHolder.getTopologyMgtService();
-        DomainContext[] domainContexts = topologyService.getDomainsAndSubdomains(getType(), subscriber.getTenantId());
-        log.info("Retrieved " + domainContexts.length + " domain and corresponding subdomain pairs");
-
-        if (domainContexts.length > 0) {
-            if(domainContexts.length > 2) {
-                if(log.isDebugEnabled())
-                    log.debug("Too many domain sub domain pairs");
-            }
-
-            for (DomainContext domainContext : domainContexts) {
-                if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
-                    getCluster().setMgtClusterDomain(domainContext.getDomain());
-                    getCluster().setMgtClusterSubDomain(domainContext.getSubDomain());
-                } else {
-                    getCluster().setClusterDomain(domainContext.getDomain());
-                    getCluster().setClusterSubDomain(domainContext.getSubDomain());
-                }
-            }
-        } else {
-            String msg = "Domain contexts not found for " + getType() + " and tenant id " + subscriber.getTenantId();
-            log.warn(msg);
-            throw new ADCException(msg);
-        }
-    }
-
-    @Override
-    public void removeSubscription() throws ADCException, NotSubscribedException {
-
-        log.info("Cartridge with alias " + getAlias() + ", and type " + getType() +
-                " is a multi-tenant cartridge and therefore will not terminate all instances and " +
-                "unregister services");
-
-        super.cleanupSubscription();
-    }
-
-    @Override
-    public CartridgeSubscriptionInfo registerSubscription(Properties properties) {
-
-        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
-                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
-                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
-                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING",getSubscriptionKey());
-    }
-
-    @Override
-    public PayloadArg createPayloadParameters() {
-
-        return null;
-    }
-
-}
+///*
+// * 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.adc.mgt.subscription;
+//
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+//import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+//import org.apache.stratos.adc.mgt.dto.Policy;
+//import org.apache.stratos.adc.mgt.exception.*;
+//import org.apache.stratos.adc.mgt.internal.DataHolder;
+//import org.apache.stratos.adc.mgt.payload.PayloadArg;
+//import org.apache.stratos.adc.mgt.repository.Repository;
+//import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+//import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+//import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+//import org.apache.stratos.adc.mgt.utils.PersistenceManager;
+//import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+//import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//
+//import java.util.Properties;
+//
+//public class MultiTenantCartridgeSubscription extends CartridgeSubscription {
+//
+//    private static Log log = LogFactory.getLog(MultiTenantCartridgeSubscription.class);
+//
+//    public MultiTenantCartridgeSubscription(CartridgeInfo cartridgeInfo) {
+//        super(cartridgeInfo);
+//    }
+//
+//    @Override
+//    public void createSubscription(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
+//
+//            throws InvalidCartridgeAliasException,
+//            DuplicateCartridgeAliasException, ADCException, AlreadySubscribedException,
+//            RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
+//            InvalidRepositoryException, RepositoryRequiredException, PolicyException {
+//
+//        super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
+//
+//        boolean allowMultipleSubscription = Boolean.
+//                valueOf(System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
+//
+//        if (!allowMultipleSubscription) {
+//            // If the cartridge is multi-tenant. We should not let users createSubscription twice.
+//            boolean subscribed;
+//            try {
+//                subscribed = PersistenceManager.isAlreadySubscribed(getType(), subscriber.getTenantId());
+//            } catch (Exception e) {
+//                String msg = "Error checking whether the cartridge type " + getType()
+//                        + " is already subscribed";
+//                log.error(msg, e);
+//                throw new ADCException(msg, e);
+//            }
+//
+//            if (subscribed) {
+//                String msg = "Already subscribed to " + getType()
+//                        + ". This multi-tenant cartridge will not be available to createSubscription";
+//                if (log.isDebugEnabled()) {
+//                    log.debug(msg);
+//                }
+//                throw new AlreadySubscribedException(msg, getType());
+//            }
+//        }
+//
+//        TopologyManagementService topologyService = DataHolder.getTopologyMgtService();
+//        DomainContext[] domainContexts = topologyService.getDomainsAndSubdomains(getType(), subscriber.getTenantId());
+//        log.info("Retrieved " + domainContexts.length + " domain and corresponding subdomain pairs");
+//
+//        if (domainContexts.length > 0) {
+//            if(domainContexts.length > 2) {
+//                if(log.isDebugEnabled())
+//                    log.debug("Too many domain sub domain pairs");
+//            }
+//
+//            for (DomainContext domainContext : domainContexts) {
+//                if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
+//                    getCluster().setMgtClusterDomain(domainContext.getDomain());
+//                    getCluster().setMgtClusterSubDomain(domainContext.getSubDomain());
+//                } else {
+//                    getCluster().setClusterDomain(domainContext.getDomain());
+//                    getCluster().setClusterSubDomain(domainContext.getSubDomain());
+//                }
+//            }
+//        } else {
+//            String msg = "Domain contexts not found for " + getType() + " and tenant id " + subscriber.getTenantId();
+//            log.warn(msg);
+//            throw new ADCException(msg);
+//        }
+//    }
+//
+//    @Override
+//    public void removeSubscription() throws ADCException, NotSubscribedException {
+//
+//        log.info("Cartridge with alias " + getAlias() + ", and type " + getType() +
+//                " is a multi-tenant cartridge and therefore will not terminate all instances and " +
+//                "unregister services");
+//
+//        super.cleanupSubscription();
+//    }
+//
+//    @Override
+//    public CartridgeSubscriptionInfo registerSubscription(Properties properties) {
+//
+//        return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+//                getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+//                getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+//                getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING",getSubscriptionKey());
+//    }
+//
+//    @Override
+//    public PayloadArg createPayloadParameters() {
+//
+//        return null;
+//    }
+//
+//}