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 2014/01/08 06:51:20 UTC

[09/46] renamed adc.mgt to manager

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
new file mode 100644
index 0000000..bf436e5
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
@@ -0,0 +1,628 @@
+/*
+ * 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.manager.manager;
+
+import org.apache.axis2.AxisFault;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.manager.client.CloudControllerServiceClient;
+import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.manager.dto.SubscriptionInfo;
+import org.apache.stratos.manager.exception.*;
+import org.apache.stratos.manager.payload.BasicPayloadData;
+import org.apache.stratos.manager.payload.PayloadData;
+import org.apache.stratos.manager.payload.PayloadFactory;
+import org.apache.stratos.manager.publisher.ArtifactUpdatePublisher;
+import org.apache.stratos.manager.repository.Repository;
+import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager;
+import org.apache.stratos.manager.subscriber.Subscriber;
+import org.apache.stratos.manager.subscription.CartridgeSubscription;
+import org.apache.stratos.manager.subscription.factory.CartridgeSubscriptionFactory;
+import org.apache.stratos.manager.subscription.tenancy.SubscriptionMultiTenantBehaviour;
+import org.apache.stratos.manager.subscription.tenancy.SubscriptionSingleTenantBehaviour;
+import org.apache.stratos.manager.subscription.tenancy.SubscriptionTenancyBehaviour;
+import org.apache.stratos.manager.subscription.utils.CartridgeSubscriptionUtils;
+import org.apache.stratos.manager.utils.ApplicationManagementUtil;
+import org.apache.stratos.manager.utils.CartridgeConstants;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.pojo.Property;
+import org.wso2.carbon.context.CarbonContext;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Manager class for the purpose of managing CartridgeSubscriptionInfo subscriptions, groupings, etc.
+ */
+public class CartridgeSubscriptionManager {
+
+    private static Log log = LogFactory.getLog(CartridgeSubscriptionManager.class);
+    //private static DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager();
+
+    /**
+     * Subscribes to a cartridge
+     *
+     * @param cartridgeType Cartridge type
+     * @param subscriptionAlias Cartridge alias
+     * @param autoscalingPolicyName Autoscaling policy name
+     * @param deploymentPolicyName Deployment Policy name
+     * @param tenantDomain Subscriing tenant's domain
+     * @param tenantId Subscribing tenant's Id
+     * @param tenantAdminUsername Subscribing tenant's admin user name
+     * @param repositoryType Type of repository
+     * @param repositoryURL Repository URL
+     * @param isPrivateRepository If a private or a public repository
+     * @param repositoryUsername Repository username
+     * @param repositoryPassword Repository password
+     *
+     * @return Subscribed CartridgeSubscription object
+     * @throws ADCException
+     * @throws InvalidCartridgeAliasException
+     * @throws DuplicateCartridgeAliasException
+     * @throws PolicyException
+     * @throws UnregisteredCartridgeException
+     * @throws RepositoryRequiredException
+     * @throws RepositoryCredentialsRequiredException
+     * @throws RepositoryTransportException
+     * @throws AlreadySubscribedException
+     * @throws InvalidRepositoryException
+     */
+    public CartridgeSubscription subscribeToCartridge (String cartridgeType, String subscriptionAlias,
+                                                  String autoscalingPolicyName, String deploymentPolicyName,
+                                                  String tenantDomain, int tenantId,
+                                                  String tenantAdminUsername, String repositoryType,
+                                                  String repositoryURL, boolean isPrivateRepository,
+                                                  String repositoryUsername, String repositoryPassword)
+
+            throws ADCException, InvalidCartridgeAliasException, DuplicateCartridgeAliasException, PolicyException,
+            UnregisteredCartridgeException, RepositoryRequiredException, RepositoryCredentialsRequiredException,
+            RepositoryTransportException, AlreadySubscribedException, InvalidRepositoryException {
+
+        return subscribeToCartridgeWithProperties(cartridgeType, subscriptionAlias, autoscalingPolicyName,
+                                                  deploymentPolicyName, tenantDomain, tenantId, tenantAdminUsername, 
+                                                  repositoryType, repositoryURL, isPrivateRepository, repositoryUsername, 
+                                                  repositoryPassword, null);
+    }
+    
+    public CartridgeSubscription subscribeToCartridgeWithProperties(String cartridgeType, String cartridgeAlias,
+        String autoscalingPolicyName, String deploymentPolicyName, String tenantDomain,
+        int tenantId, String tenantAdminUsername, String repositoryType, String repositoryURL,
+        boolean isPrivateRepository, String repositoryUsername, String repositoryPassword, Property[] props)
+
+    throws ADCException,
+        InvalidCartridgeAliasException,
+        DuplicateCartridgeAliasException,
+        PolicyException,
+        UnregisteredCartridgeException,
+        RepositoryRequiredException,
+        RepositoryCredentialsRequiredException,
+        RepositoryTransportException,
+        AlreadySubscribedException,
+        InvalidRepositoryException {
+
+        // validate cartridge alias
+        CartridgeSubscriptionUtils.validateCartridgeAlias(tenantId, cartridgeType, cartridgeAlias);
+
+        CartridgeInfo cartridgeInfo;
+        try {
+            cartridgeInfo =
+                            CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
+            if (props != null) {
+                cartridgeInfo.setProperties(props);
+            }
+
+        } catch (UnregisteredCartridgeException e) {
+            String message =
+                             cartridgeType +
+                                     " is not a valid cartridgeSubscription type. Please try again with a valid cartridgeSubscription type.";
+            log.error(message);
+            throw e;
+
+        } catch (Exception e) {
+            String message = "Error getting info for " + cartridgeType;
+            log.error(message, e);
+            throw new ADCException(message, e);
+        }
+
+        //Decide tenancy behaviour
+        SubscriptionTenancyBehaviour tenancyBehaviour;
+        if(cartridgeInfo.getMultiTenant()) {
+            tenancyBehaviour = new SubscriptionMultiTenantBehaviour();
+        } else {
+            tenancyBehaviour = new SubscriptionSingleTenantBehaviour();
+        }
+
+        //Create the CartridgeSubscription instance
+        CartridgeSubscription cartridgeSubscription = CartridgeSubscriptionFactory.
+                getCartridgeSubscriptionInstance(cartridgeInfo, tenancyBehaviour);
+
+        //Create repository
+        Repository repository = cartridgeSubscription.manageRepository(repositoryURL,
+                                                                       repositoryUsername,
+                                                                       repositoryPassword,
+                                                                       isPrivateRepository,
+                                                                       cartridgeAlias,
+                                                                       cartridgeInfo, tenantDomain);
+
+        //Create subscriber
+        Subscriber subscriber = new Subscriber(tenantAdminUsername, tenantId, tenantDomain);
+
+        //create subscription
+        cartridgeSubscription.createSubscription(subscriber, cartridgeAlias, autoscalingPolicyName,
+                                                 deploymentPolicyName, repository);
+        cartridgeSubscription.setSubscriptionKey(CartridgeSubscriptionUtils.generateSubscriptionKey()); // TODO ---- fix
+                                                                             // properly
+
+        log.info("Tenant [" + tenantId + "] with username [" + tenantAdminUsername +
+                 " subscribed to " + "] Cartridge Alias " + cartridgeAlias + ", Cartridge Type: " +
+                 cartridgeType + ", Repo URL: " + repositoryURL + ", Policy: " +
+                 autoscalingPolicyName);
+
+        //Create the payload
+        BasicPayloadData basicPayloadData = CartridgeSubscriptionUtils.createBasicPayload(cartridgeSubscription);
+        //Populate the basic payload details
+        basicPayloadData.populatePayload();
+
+        PayloadData payloadData = PayloadFactory.getPayloadDataInstance(cartridgeInfo.getProvider(),
+                cartridgeInfo.getType(), basicPayloadData);
+
+        // get the payload parameters defined in the cartridge definition file for this cartridge type
+        if (cartridgeInfo.getProperties() != null && cartridgeInfo.getProperties().length != 0) {
+
+            for (Property property : cartridgeInfo.getProperties()) {
+                // check if a property is related to the payload. Currently this is done by checking if the
+                // property name starts with 'payload_parameter.' suffix. If so the payload param name will
+                // be taken as the substring from the index of '.' to the end of the property name.
+                if (property.getName()
+                            .startsWith(CartridgeConstants.CUSTOM_PAYLOAD_PARAM_NAME_PREFIX)) {
+                    String payloadParamName = property.getName();
+                    payloadData.add(payloadParamName.substring(payloadParamName.indexOf(".") + 1), property.getValue());
+                }
+            }
+        }
+
+        //check if there are any custom payload entries defined
+        if (cartridgeSubscription.getCustomPayloadEntries() != null) {
+            //add them to the payload
+            Map<String, String> customPayloadEntries = cartridgeSubscription.getCustomPayloadEntries();
+            Set<Map.Entry<String,String>> entrySet = customPayloadEntries.entrySet();
+            for (Map.Entry<String, String> entry : entrySet) {
+                payloadData.add(entry.getKey(), entry.getValue());
+            }
+        }
+
+        cartridgeSubscription.setPayloadData(payloadData);
+
+        // Publish tenant subscribed event to message broker
+        CartridgeSubscriptionUtils.publishTenantSubscribedEvent(cartridgeSubscription.getSubscriber().getTenantId(),
+                cartridgeSubscription.getCartridgeInfo().getType());
+        
+        if(cartridgeInfo.getMultiTenant()) {
+        	log.info(" Multitenant --> Publishing Artifact update event -- ");
+        	log.info(" Values :  cluster id - " + cartridgeSubscription.getClusterDomain() + "  tenant - " + 
+        			cartridgeSubscription.getSubscriber().getTenantId());
+            ArtifactUpdatePublisher publisher = new ArtifactUpdatePublisher(cartridgeSubscription.getRepository(),
+            		cartridgeSubscription.getClusterDomain(), // clusterId 
+            		String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
+            publisher.publish();
+        } 
+
+        return cartridgeSubscription;
+    }
+
+    /**
+     * Connects / groups cartridges
+     *
+     * @param tenantDomain Tenant's domain
+     * @param cartridgeSubscription CartridgeSubscription instance to which the CartridgeSubscription denoted by
+     *                          connectingSubscriptionAlias will be connected to
+     * @param connectingSubscriptionAlias Alias of the connecting cartridge
+     *
+     * @throws ADCException
+     * @throws NotSubscribedException
+     * @throws AxisFault
+     */
+//    public void connectCartridges (String tenantDomain, CartridgeSubscription cartridgeSubscription,
+//                                   String connectingSubscriptionAlias)
+//            throws ADCException, NotSubscribedException, AxisFault {
+//
+//        //TODO: retrieve from the cache and connect. For now, new objects are created
+//
+//        CartridgeSubscription connectingCartridgeSubscription = getCartridgeSubscription(tenantDomain,
+//                connectingSubscriptionAlias);
+//
+//        if(cartridgeSubscription == null) {
+//            String errorMsg = "No cartridge subscription found in cache for tenant " + tenantDomain + "  connecting aborted";
+//            log.error(errorMsg);
+//            return;
+//        }
+//
+//        if(connectingCartridgeSubscription == null) {
+//            String errorMsg = "No cartridge subscription found in cache for tenant " + tenantDomain + ", alias " +
+//                    connectingSubscriptionAlias + ",  connecting aborted";
+//            log.error(errorMsg);
+//            return;
+//        }
+//
+//        CartridgeSubscriptionConnector cartridgeSubscriptionConnector = CartridgeSubscriptionConnectorFactory.
+//                getCartridgeInstanceConnector(connectingCartridgeSubscription.getType());
+//
+//        cartridgeSubscription.connect(connectingSubscriptionAlias);
+//
+//        //PayloadArg payloadArg = cartridgeSubscription.createPayloadParameters();
+//
+//        //get additional payload params for connecting cartridges
+//        Properties payloadProperties = cartridgeSubscriptionConnector.createConnection(cartridgeSubscription,
+//                connectingCartridgeSubscription);
+//        StringBuilder connectionParamsBuilder = new StringBuilder();
+//        Set<Map.Entry<Object,Object>> payloadParamEntries = payloadProperties.entrySet();
+//
+//        for (Map.Entry<Object, Object> payloadParamEntry : payloadParamEntries) {
+//            connectionParamsBuilder.append(",");
+//            connectionParamsBuilder.append(payloadParamEntry.getKey().toString());
+//            connectionParamsBuilder.append("=");
+//            connectionParamsBuilder.append(payloadParamEntry.getValue().toString());
+//        }
+//
+//        //add connection relates parameters to the payload
+//        if(cartridgeSubscription.getPayloadData() != null) {
+//            //cartridgeSubscription.getPayloadData().populatePayload(connectionParamsBuilder.toString());
+//        } else {
+//            //no existing payload
+//            /*Payload payload = PayloadFactory.getPayloadDataInstance(cartridgeSubscription.getCartridgeInfo().getProvider(),
+//                    cartridgeSubscription.getType(), "/tmp/" + tenantDomain + "-" + cartridgeSubscription.getAlias() +
+//                    ".zip");
+//            payload.populatePayload(connectionParamsBuilder.toString());
+//            cartridgeSubscription.setPayloadData(payload);*/
+//        }
+//
+//    }
+
+    /**
+     * Registers the cartridge subscription for the given CartridgeSubscriptionInfo object
+     *
+     * @param cartridgeSubscription CartridgeSubscription subscription
+     *
+     * @return SubscriptionInfo object populated with relevant information
+     * @throws ADCException
+     * @throws UnregisteredCartridgeException
+     */
+    public SubscriptionInfo registerCartridgeSubscription(CartridgeSubscription cartridgeSubscription)
+            throws ADCException, UnregisteredCartridgeException {
+
+        CartridgeSubscriptionInfo cartridgeSubscriptionInfo = cartridgeSubscription.registerSubscription(null);
+
+        //set status as 'SUBSCRIBED'
+        cartridgeSubscription.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        /*int subscriptionId;
+        try {
+            subscriptionId = PersistenceManager.persistSubscription(cartridgeSubscriptionInfo);
+
+        } catch (Exception e) {
+            String errorMsg = "Error saving subscription for tenant " +
+                    cartridgeSubscription.getSubscriber().getTenantDomain() + ", alias " + cartridgeSubscription.getType();
+            log.error(errorMsg);
+            throw new ADCException(errorMsg, e);
+        }*/
+
+        //cartridgeSubscription.setSubscriptionId(subscriptionId);
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+        try {
+            new DataInsertionAndRetrievalManager().cacheAndPersistSubcription(cartridgeSubscription);
+
+        } catch (PersistenceManagerException e) {
+            String errorMsg = "Error saving subscription for tenant " +
+                    cartridgeSubscription.getSubscriber().getTenantDomain() + ", alias " + cartridgeSubscription.getType();
+            log.error(errorMsg);
+            throw new ADCException(errorMsg, e);
+        }
+
+        ApplicationManagementUtil.addDNSEntry(cartridgeSubscriptionInfo.getAlias(), cartridgeSubscription.getType());
+
+        log.info("Successful Subscription: " + cartridgeSubscription.toString());
+        return ApplicationManagementUtil.
+                createSubscriptionResponse(cartridgeSubscriptionInfo, cartridgeSubscription.getRepository());
+    }
+
+    public Collection<CartridgeSubscription> getCartridgeSubscriptions (int tenantId, String type) throws ADCException {
+
+        if (type == null || type.isEmpty()) {
+            return new DataInsertionAndRetrievalManager().getCartridgeSubscriptions(tenantId);
+
+        } else {
+            return new DataInsertionAndRetrievalManager().getCartridgeSubscriptions(tenantId, type);
+        }
+    }
+
+    public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias) {
+
+        return new DataInsertionAndRetrievalManager().getCartridgeSubscription(tenantId, subscriptionAlias);
+    }
+
+    /**
+     * Unsubscribe from a Cartridge
+     *
+     * @param tenantDomain Tenant's domain
+     * @param alias Alias given at subscription time
+     * @throws ADCException
+     * @throws NotSubscribedException
+     */
+    public void unsubscribeFromCartridge (String tenantDomain, String alias)
+            throws ADCException, NotSubscribedException {
+
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        /*CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(tenantDomain, alias);
+
+        if(cartridgeSubscription != null) {
+            cartridgeSubscription.removeSubscription();
+
+            // Publish tenant un-subscribed event to message broker
+            CartridgeSubscriptionUtils.publishTenantUnSubscribedEvent(cartridgeSubscription.getSubscriber().getTenantId(),
+                    cartridgeSubscription.getCartridgeInfo().getType());
+        }
+        else {
+            if(log.isDebugEnabled()) {
+                log.debug("No cartridge subscription found with alias " + alias + " for tenant " + tenantDomain);
+            }
+        }*/
+        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+        //fix properly
+        DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager();
+
+        CartridgeSubscription cartridgeSubscription = dataInsertionAndRetrievalManager.getCartridgeSubscription(CarbonContext.getThreadLocalCarbonContext().getTenantId(), alias);
+        if(cartridgeSubscription != null) {
+            cartridgeSubscription.removeSubscription();
+
+            //set status as 'UNSUBSCRIBED'
+            //cartridgeSubscription.setSubscriptionStatus(CartridgeConstants.UNSUBSCRIBED);
+
+            // remove subscription
+            try {
+                dataInsertionAndRetrievalManager.removeSubscription(cartridgeSubscription.getSubscriber().getTenantId(), alias);
+
+            } catch (PersistenceManagerException e) {
+                String errorMsg = "Error removing subscription for tenant " + tenantDomain + ", alias " + cartridgeSubscription.getAlias();
+                log.error(errorMsg);
+                throw new ADCException(errorMsg, e);
+            }
+
+            // update with new state
+            /*try {
+                dataInsertionAndRetrievalManager.cacheAndPersistSubcription(cartridgeSubscription);
+
+            } catch (PersistenceManagerException e) {
+                String errorMsg = "Error updating subscription for tenant " + tenantDomain + ", alias " + cartridgeSubscription.getAlias();
+                log.error(errorMsg);
+                throw new ADCException(errorMsg, e);
+            }*/
+
+            // Publish tenant un-subscribed event to message broker
+            CartridgeSubscriptionUtils.publishTenantUnSubscribedEvent(cartridgeSubscription.getSubscriber().getTenantId(),
+                    cartridgeSubscription.getCartridgeInfo().getType());
+        }
+        else {
+            String errorMsg = "No cartridge subscription found with alias " + alias + " for tenant " + tenantDomain;
+            log.error(errorMsg);
+            throw new NotSubscribedException(errorMsg, alias);
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    /*
+    /**
+     * Creates and returns a CartridgeSubscription object
+     *
+     * @param tenantDomain Tenant's domain
+     * @param alias alias given at subscription
+     *
+     * @return CartridgeSubscription object populated with relevant information
+     * @throws ADCException
+     * @throws NotSubscribedException
+     */
+    /*public CartridgeSubscription getCartridgeSubscription(String tenantDomain, String alias)
+            throws ADCException, NotSubscribedException {
+
+        CartridgeSubscriptionInfo cartridgeSubscriptionInfo = getCartridgeSubscriptionInfo(tenantDomain, alias);
+
+        CartridgeInfo cartridgeInfo;
+        try {
+            cartridgeInfo = CloudControllerServiceClient.getServiceClient().
+                    getCartridgeInfo(cartridgeSubscriptionInfo.getCartridge());
+        } catch (Exception e) {
+            throw new ADCException(e.getMessage(), e);
+        }
+
+        return populateCartridgeSubscriptionInformation(cartridgeInfo, cartridgeSubscriptionInfo);
+    }*/
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    //TODO: remove
+    /*public CartridgeSubscription deployMultitenantService(String cartridgeType, String cartridgeAlias,
+            String autoscalingPolicyName, String deploymentPolicyName,
+            String tenantDomain, int tenantId,
+            String tenantAdminUsername,
+            String clusterDomain, String clusterSubdomain,
+            String repositoryURL, boolean isPrivateRepository,
+            String repositoryUsername, String repositoryPassword, String tenantRange) throws ADCException, InvalidCartridgeAliasException, DuplicateCartridgeAliasException, PolicyException,
+            UnregisteredCartridgeException, RepositoryRequiredException, RepositoryCredentialsRequiredException,
+            RepositoryTransportException, AlreadySubscribedException, InvalidRepositoryException {
+    	
+    	log.info(" ---- in deploy multitenant service ---- ");
+    	//validate cartridge alias
+        ApplicationManagementUtil.validateCartridgeAlias(cartridgeAlias, cartridgeType);
+
+        CartridgeInfo cartridgeInfo;
+        try {
+            cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
+
+        } catch (UnregisteredCartridgeException e) {
+            String message = cartridgeType
+                    + " is not a valid cartridgeSubscription type. Please try again with a valid cartridgeSubscription type.";
+            log.error(message);
+            throw e;
+
+        } catch (Exception e) {
+            String message = "Error getting info for " + cartridgeType;
+            log.error(message, e);
+            throw new ADCException(message, e);
+        }
+
+        Subscriber subscriber = new Subscriber(tenantAdminUsername, tenantId, tenantDomain);
+
+        CartridgeSubscription cartridgeSubscription = new FrameworkCartridgeSubscription(cartridgeInfo,true);
+        log.info("-- Cartridge subscription is created --- ");
+        Repository repository = cartridgeSubscription.manageRepository(repositoryURL, repositoryUsername,
+                repositoryPassword, isPrivateRepository, cartridgeAlias, cartridgeInfo, tenantDomain);
+        log.info("-- Repository creation is done --- ");
+        cartridgeSubscription.createSubscription(subscriber, cartridgeAlias, autoscalingPolicyName, deploymentPolicyName, repository);
+        cartridgeSubscription.setSubscriptionKey(generateSubscriptionKey());
+        
+        //cartridgeSubscription.setClusterDomain(clusterDomain);
+        //cartridgeSubscription.setClusterSubDomain(clusterDomain);        
+        
+        log.info("-- subscription key is generated --- ");
+        log.info("Tenant [" + tenantId + "] with username [" + tenantAdminUsername +
+                " subscribed to " + "] Cartridge Alias " + cartridgeAlias + ", Cartridge Type: " + cartridgeType +
+                ", Repo URL: " + repositoryURL + ", Policy: " + autoscalingPolicyName);
+        
+        // TODO -- payload would need some additional params - like Puppet master IP .. etc
+        
+        Payload payload = PayloadFactory.getPayloadDataInstance(cartridgeInfo.getProvider(), cartridgeType,
+                "/tmp/" + tenantDomain + "-" + cartridgeAlias + ".zip");
+        PayloadArg payloadArg = cartridgeSubscription.createPayloadParameters();
+
+        if (payloadArg != null) {
+            //populate the payload
+            payload.populatePayload(payloadArg);
+            
+            // populate payload from UI here
+            payloadArg.setTenantRange(tenantRange);
+            //payloadArg.setDeployment("default");   
+            payloadArg.setServiceDomain(cartridgeAlias+"."+cartridgeInfo.getHostName()+".domain"); // This is cluster id
+            cartridgeSubscription.setPayloadData(payload);
+        }
+
+        //get the payload parameters defined in the cartridge definition file for this cartridge type
+        if (cartridgeInfo.getProperties() != null && cartridgeInfo.getProperties().length != 0) {
+
+            StringBuilder customPayloadParamsBuilder = new StringBuilder();
+            for(Property property : cartridgeInfo.getProperties()) {
+                //check if a property is related to the payload. Currently this is done by checking if the
+                //property name starts with 'payload_parameter.' suffix. If so the payload param name will
+                //be taken as the substring from the index of '.' to the end of the property name.
+                if(property.getName().startsWith(CartridgeConstants.CUSTOM_PAYLOAD_PARAM_NAME_PREFIX)) {
+                    String payloadParamName = property.getName();
+                    customPayloadParamsBuilder.append(",");
+                    customPayloadParamsBuilder.append(payloadParamName.
+                            substring(payloadParamName.indexOf(".") + 1));
+                    customPayloadParamsBuilder.append("=");
+                    customPayloadParamsBuilder.append(property.getValue());
+                }
+            }
+            //if valid payload related parameters are found in the cartridge definition file, add them to the payload
+            String customPayloadParamString = customPayloadParamsBuilder.toString();
+            if(!customPayloadParamString.isEmpty()) {
+                payload.populatePayload(customPayloadParamString);
+                cartridgeSubscription.setPayloadData(payload);
+            }
+        }
+        
+        return cartridgeSubscription;
+    	
+    }*/
+
+    /*private CartridgeSubscriptionInfo getCartridgeSubscriptionInfo (String tenantDomain, String alias)
+            throws ADCException, NotSubscribedException {
+
+        CartridgeSubscriptionInfo subscription;
+        try {
+            subscription = PersistenceManager.getSubscription(tenantDomain, alias);
+
+        } catch (Exception e) {
+            String msg = "Failed to get subscriptions for " + tenantDomain;
+            log.error(msg, e);
+            throw new ADCException(msg, e);
+        }
+
+        if (subscription == null) {
+            String msg = "Tenant " + tenantDomain + " has not subscribed for cartridges";
+            log.error(msg);
+            throw new NotSubscribedException(msg, msg);
+        }
+
+        return subscription;
+
+    }*/
+
+    /*private List<CartridgeSubscriptionInfo> getCartridgeSubscriptions (int tenantId) throws ADCException, NotSubscribedException {
+
+        List<CartridgeSubscriptionInfo> subscriptions;
+        try {
+            subscriptions = PersistenceManager.getSubscriptionsForTenant(tenantId);
+
+        } catch (Exception e) {
+            String msg = "Failed to get subscriptions for " + tenantId;
+            log.error(msg, e);
+            throw new ADCException(msg, e);
+        }
+
+        if (subscriptions == null) {
+            String msg = "Tenant " + tenantId + " has not subscribed for cartridges";
+            log.error(msg);
+            throw new NotSubscribedException(msg, msg);
+        }
+
+        return subscriptions;
+    }*/
+
+    /*private CartridgeSubscription populateCartridgeSubscriptionInformation(CartridgeInfo cartridgeInfo,
+                                                                           CartridgeSubscriptionInfo cartridgeSubscriptionInfo)
+            throws ADCException {
+
+        SubscriptionTenancyBehaviour tenancyBehaviour;
+        if(cartridgeInfo.getMultiTenant()) {
+            tenancyBehaviour = new SubscriptionMultiTenantBehaviour();
+        } else {
+            tenancyBehaviour = new SubscriptionSingleTenantBehaviour();
+        }
+
+        CartridgeSubscription cartridgeSubscription = CartridgeSubscriptionFactory.
+                getCartridgeSubscriptionInstance(cartridgeInfo, tenancyBehaviour);
+
+        cartridgeSubscription.setSubscriptionId(cartridgeSubscriptionInfo.getSubscriptionId());
+        cartridgeSubscription.setAlias(cartridgeSubscriptionInfo.getAlias());
+        cartridgeSubscription.setHostName(cartridgeSubscriptionInfo.getHostName());
+        cartridgeSubscription.setClusterDomain(cartridgeSubscriptionInfo.getClusterDomain());
+        cartridgeSubscription.setClusterSubDomain(cartridgeSubscriptionInfo.getClusterSubdomain());
+        cartridgeSubscription.setMgtClusterDomain(cartridgeSubscriptionInfo.getMgtClusterDomain());
+        cartridgeSubscription.setMgtClusterSubDomain(cartridgeSubscriptionInfo.getMgtClusterSubDomain());
+        cartridgeSubscription.setAutoscalingPolicyName(cartridgeSubscriptionInfo.getPolicy());
+        Subscriber subscriber = new Subscriber(CarbonContext.getThreadLocalCarbonContext().getUsername(),
+                cartridgeSubscriptionInfo.getTenantId(), cartridgeSubscriptionInfo.getTenantDomain());
+        cartridgeSubscription.setSubscriber(subscriber);
+        cartridgeSubscription.setRepository(cartridgeSubscriptionInfo.getRepository());
+
+        return cartridgeSubscription;
+    }*/
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/ApplicationCartridgePayloadData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/ApplicationCartridgePayloadData.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/ApplicationCartridgePayloadData.java
new file mode 100644
index 0000000..5506427
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/ApplicationCartridgePayloadData.java
@@ -0,0 +1,27 @@
+/*
+ * 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.manager.payload;
+
+public class ApplicationCartridgePayloadData extends PayloadData {
+
+    public ApplicationCartridgePayloadData(BasicPayloadData basicPayloadData) {
+        super(basicPayloadData);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/BasicPayloadData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/BasicPayloadData.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/BasicPayloadData.java
new file mode 100644
index 0000000..916fa9e
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/BasicPayloadData.java
@@ -0,0 +1,224 @@
+/*
+ * 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.manager.payload;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.manager.utils.CartridgeConstants;
+
+import java.io.Serializable;
+
+/**
+ * Contains basic payload data fields
+ */
+public class BasicPayloadData implements Serializable {
+
+    private static Log log = LogFactory.getLog(BasicPayloadData.class);
+
+    private String serviceName;
+    private String clusterId;
+    private String hostName;
+    private int tenantId;
+    private String tenantRange;
+    private String subscriptionAlias;
+    private String deployment;
+    private String puppetIp;
+    private String subscriptionKey;
+    private String applicationPath;
+    private String gitRepositoryUrl;
+    private String portMappings;
+    private String multitenant;
+
+    protected StringBuilder payloadBuilder;
+
+    public BasicPayloadData() {
+
+    }
+
+    public void populatePayload () {
+
+        payloadBuilder = new StringBuilder();
+
+        payloadBuilder.append("SERVICE_NAME=" + getServiceName());
+        payloadBuilder.append(",");
+        payloadBuilder.append("HOST_NAME=" + getHostName());
+        payloadBuilder.append(",");
+        payloadBuilder.append("MULTITENANT=" + getMultitenant());
+        payloadBuilder.append(",");
+        payloadBuilder.append("TENANT_ID=" + getTenantId());
+        payloadBuilder.append(",");
+        payloadBuilder.append("TENANT_RANGE=" + getTenantRange());
+        payloadBuilder.append(",");
+        payloadBuilder.append("CARTRIDGE_ALIAS=" + getSubscriptionAlias());
+        payloadBuilder.append(",");
+        payloadBuilder.append("CLUSTER_ID=" + getClusterId());
+        payloadBuilder.append(",");
+        payloadBuilder.append("CARTRIDGE_KEY=" + getSubscriptionKey());
+        payloadBuilder.append(",");
+        payloadBuilder.append("DEPLOYMENT=" + getDeployment());
+        payloadBuilder.append(",");
+        //payloadBuilder.append("APP_PATH=" + getApplicationPath());
+        //payloadBuilder.append(",");
+        payloadBuilder.append("GIT_REPO=" + getGitRepositoryUrl());
+        payloadBuilder.append(",");
+        payloadBuilder.append("PORTS=" + getPortMappings());
+
+        //Payload Data exposed as system variables
+        payloadBuilder.append(",");
+        payloadBuilder.append("PUPPET_IP=" + System.getProperty(CartridgeConstants.PUPPET_IP));
+    }
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public String getClusterId() {
+        return clusterId;
+    }
+
+    public void setClusterId(String clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    public String getHostName() {
+        return hostName;
+    }
+
+    public void setHostName(String hostName) {
+        this.hostName = hostName;
+    }
+
+    public int getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(int tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getTenantRange() {
+        return tenantRange;
+    }
+
+    public void setTenantRange(String tenantRange) {
+        this.tenantRange = tenantRange;
+    }
+
+    public String getSubscriptionAlias() {
+        return subscriptionAlias;
+    }
+
+    public void setSubscriptionAlias(String subscriptionAlias) {
+        this.subscriptionAlias = subscriptionAlias;
+    }
+
+    public String getDeployment() {
+        return deployment;
+    }
+
+    public void setDeployment(String deployment) {
+        this.deployment = deployment;
+    }
+
+    public String getPuppetIp() {
+        return puppetIp;
+    }
+
+    public void setPuppetIp(String puppetIp) {
+        this.puppetIp = puppetIp;
+    }
+
+    public String getSubscriptionKey() {
+        return subscriptionKey;
+    }
+
+    public void setSubscriptionKey(String subscriptionKey) {
+        this.subscriptionKey = subscriptionKey;
+    }
+
+    public StringBuilder getPayloadData () {
+
+        /*payloadBuilder.append("SERVICE_NAME=" + getServiceName());
+        payloadBuilder.append(",");
+        payloadBuilder.append("HOST_NAME=" + getHostName());
+        payloadBuilder.append(",");
+        payloadBuilder.append("MULTITENANT=" + getMultitenant());
+        payloadBuilder.append(",");
+        payloadBuilder.append("TENANT_ID=" + getTenantId());
+        payloadBuilder.append(",");
+        payloadBuilder.append("TENANT_RANGE=" + getTenantRange());
+        payloadBuilder.append(",");
+        payloadBuilder.append("CARTRIDGE_ALIAS=" + getSubscriptionAlias());
+        payloadBuilder.append(",");
+        payloadBuilder.append("CLUSTER_ID=" + getClusterId());
+        payloadBuilder.append(",");
+        payloadBuilder.append("CARTRIDGE_KEY=" + getSubscriptionKey());
+        payloadBuilder.append(",");
+        payloadBuilder.append("DEPLOYMENT=" + getDeployment());
+        payloadBuilder.append(",");
+        payloadBuilder.append("APP_PATH=" + getApplicationPath());
+        payloadBuilder.append(",");
+        payloadBuilder.append("GIT_REPO=" + getGitRepositoryUrl());
+        payloadBuilder.append(",");
+        payloadBuilder.append("PORTS=" + getPortMappings());
+
+        //Payload Data exposed as system variables
+        payloadBuilder.append(",");
+        payloadBuilder.append("PUPPET_IP=" + System.getProperty(CartridgeConstants.PUPPET_IP));*/
+
+        return payloadBuilder;
+    }
+
+    public String getApplicationPath() {
+        return applicationPath;
+    }
+
+    public void setApplicationPath(String applicationPath) {
+        this.applicationPath = applicationPath;
+    }
+
+    public String getGitRepositoryUrl() {
+        return gitRepositoryUrl;
+    }
+
+    public void setGitRepositoryUrl(String gitRepositoryUrl) {
+        this.gitRepositoryUrl = gitRepositoryUrl;
+    }
+
+    public String getPortMappings() {
+        return portMappings;
+    }
+
+    public void setPortMappings(String portMappings) {
+        this.portMappings = portMappings;
+    }
+
+    public String getMultitenant() {
+        return multitenant;
+    }
+
+    public void setMultitenant(String multitenant) {
+        this.multitenant = multitenant;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/CarbonPayload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/CarbonPayload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/CarbonPayload.java
new file mode 100644
index 0000000..8e2c970
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/CarbonPayload.java
@@ -0,0 +1,43 @@
+///*
+// * 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.manager.payload;
+//
+//import org.apache.stratos.manager.utils.CartridgeConstants;
+//
+//public class CarbonPayload extends Payload {
+//
+//    public CarbonPayload(String payloadFilePath) {
+//        super(payloadFilePath);
+//    }
+//
+//    public void populatePayload(PayloadArg payloadArg) {
+//
+//        super.populatePayload(payloadArg);
+//        payloadBuilder.append(",");
+//
+//        //carbon specific
+//        //payloadBuilder.append("DEPLOYMENT=" + payloadArg.getDeployment());
+//        //payloadBuilder.append(",");
+//        //payloadBuilder.append("PUPPET_IP=" + System.getProperty(CartridgeConstants.PUPPET_IP));
+//        //payloadBuilder.append(",");
+//        payloadBuilder.append("MULTITENANT=" + payloadArg.getCartridgeInfo().getMultiTenant());
+//
+//    }
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/DataCartridgePayloadData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/DataCartridgePayloadData.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/DataCartridgePayloadData.java
new file mode 100644
index 0000000..2c71157
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/DataCartridgePayloadData.java
@@ -0,0 +1,27 @@
+/*
+ * 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.manager.payload;
+
+public class DataCartridgePayloadData extends PayloadData {
+
+    public DataCartridgePayloadData(BasicPayloadData basicPayloadData) {
+        super(basicPayloadData);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/DataPayload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/DataPayload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/DataPayload.java
new file mode 100644
index 0000000..f96edb7
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/DataPayload.java
@@ -0,0 +1,40 @@
+///*
+// * 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.manager.payload;
+//
+//public class DataPayload extends NonCarbonPayload {
+//
+//    public DataPayload(String payloadFilePath) {
+//        super(payloadFilePath);
+//    }
+//
+//    public void populatePayload(PayloadArg payloadArg) {
+//
+//        super.populatePayload(payloadArg);
+//        payloadBuilder.append(",");
+//
+//        //data specific
+//        payloadBuilder.append("MYSQL_USER=" + payloadArg.getDataCartridgeAdminUser());
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("MYSQL_HOST=" + payloadArg.getDataCartridgeHost());
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("MYSQL_PASSWORD=" + payloadArg.getDataCartridgeAdminPassword());
+//    }
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/FramewrokCartridgePayloadData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/FramewrokCartridgePayloadData.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/FramewrokCartridgePayloadData.java
new file mode 100644
index 0000000..613fdec
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/FramewrokCartridgePayloadData.java
@@ -0,0 +1,27 @@
+/*
+ * 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.manager.payload;
+
+public class FramewrokCartridgePayloadData extends PayloadData {
+
+    public FramewrokCartridgePayloadData(BasicPayloadData basicPayloadData) {
+        super(basicPayloadData);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/LoadBalancerCartridgePayloadData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/LoadBalancerCartridgePayloadData.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/LoadBalancerCartridgePayloadData.java
new file mode 100644
index 0000000..79e88c9
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/LoadBalancerCartridgePayloadData.java
@@ -0,0 +1,27 @@
+/*
+ * 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.manager.payload;
+
+public class LoadBalancerCartridgePayloadData extends PayloadData {
+
+    public LoadBalancerCartridgePayloadData(BasicPayloadData basicPayloadData) {
+        super(basicPayloadData);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/NonCarbonPayload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/NonCarbonPayload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/NonCarbonPayload.java
new file mode 100644
index 0000000..bcd7bfd
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/NonCarbonPayload.java
@@ -0,0 +1,125 @@
+///*
+// * 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.manager.payload;
+//
+//import org.apache.stratos.manager.utils.CartridgeConstants;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//
+//public class NonCarbonPayload extends Payload {
+//
+//    public NonCarbonPayload(String payloadFilePath) {
+//        super(payloadFilePath);
+//    }
+//
+//    public void populatePayload(PayloadArg payloadArg) {
+//
+//        super.populatePayload(payloadArg);
+//        payloadBuilder.append(",");
+//
+//        //general
+//        payloadBuilder.append("REPO_INFO_EPR=" + System.getProperty(CartridgeConstants.REPO_INFO_EPR));
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("CARTRIDGE_AGENT_EPR=" + System.getProperty(CartridgeConstants.CARTRIDGE_AGENT_EPR));
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("APP_PATH=" + payloadArg.getCartridgeInfo().getBaseDir());
+//
+//        //port mapping specific
+//        if(payloadArg.getCartridgeInfo() != null) {
+//            payloadBuilder.append(",");
+//            payloadBuilder.append(createPortMappingPayloadString(payloadArg.getCartridgeInfo()));
+//        }
+//
+//        //git repository specific
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("GIT_REPO=" + getRepositoryUrlParam(payloadArg));
+//
+//        //BAM specific
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("BAM_IP=" + System.getProperty(CartridgeConstants.BAM_IP));
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("BAM_PORT=" + System.getProperty(CartridgeConstants.BAM_PORT));
+//
+//        //TODO: remove
+//        //Autoscale policy specific
+//        /*if(payloadArg.getPolicy() != null) {
+//            payloadBuilder.append(getAutoscalingParams(payloadArg.getPolicy()));
+//        }*/
+//
+//    }
+//
+//    private String createPortMappingPayloadString(CartridgeInfo cartridgeInfo) {
+//        // port mappings
+//        StringBuilder portMapBuilder = new StringBuilder();
+//        org.apache.stratos.cloud.controller.pojo.PortMapping[] portMappings = cartridgeInfo.getPortMappings();
+//        for (org.apache.stratos.cloud.controller.pojo.PortMapping portMapping : portMappings) {
+//            String port = portMapping.getPort();
+//            portMapBuilder.append(port).append("|");
+//        }
+//
+//        // remove last "|" character
+//        String portMappingString = portMapBuilder.toString().replaceAll("\\|$", "");
+//	        /*String portMappingPayloadString = null;
+//	        if (portMappingString.charAt(portMappingString.length() - 1) == '|') {
+//	            portMappingPayloadString = portMappingString.substring(0, portMappingString.length() - 1);
+//	        } else {
+//	            portMappingPayloadString = portMappingString;
+//	        }*/
+//
+//        return "PORTS=" + portMappingString;
+//    }
+//
+//    private String getRepositoryUrlParam (PayloadArg arg) {
+//
+//        String gitRepoURL = null;
+//        if (arg.getRepoURL() != null) {
+//            gitRepoURL = arg.getRepoURL();
+//        } else {
+//            gitRepoURL = "git@" + System.getProperty(CartridgeConstants.GIT_HOST_IP) + ":" + arg.getTenantDomain()
+//                    + System.getProperty("file.separator") + arg.getCartridgeAlias() + ".git";
+//        }
+//        return gitRepoURL;
+//    }
+//
+//    //TODO: remove
+//    /*private String getAutoscalingParams (Policy policy) {
+//
+//        DecimalFormat df = new DecimalFormat("##.##");
+//        df.setParseBigDecimal(true);
+//
+//        StringBuilder autoscalingPayloadBuilder = new StringBuilder();
+//
+//        autoscalingPayloadBuilder.append(",");
+//        autoscalingPayloadBuilder.append("MIN=" + policy.getMinAppInstances());
+//        autoscalingPayloadBuilder.append(",");
+//        autoscalingPayloadBuilder.append("MAX=" + policy.getMaxAppInstances());
+//        autoscalingPayloadBuilder.append(",");
+//        autoscalingPayloadBuilder.append("ALARMING_LOWER_RATE=" + policy.getAlarmingLowerRate());
+//        autoscalingPayloadBuilder.append(",");
+//        autoscalingPayloadBuilder.append("ALARMING_UPPER_RATE=" + policy.getAlarmingUpperRate());
+//        autoscalingPayloadBuilder.append(",");
+//        autoscalingPayloadBuilder.append("MAX_REQUESTS_PER_SEC=" + policy.getMaxRequestsPerSecond());
+//        autoscalingPayloadBuilder.append(",");
+//        autoscalingPayloadBuilder.append("ROUNDS_TO_AVERAGE=" + policy.getRoundsToAverage());
+//        autoscalingPayloadBuilder.append(",");
+//        autoscalingPayloadBuilder.append("SCALE_DOWN_FACTOR=" + policy.getScaleDownFactor());
+//
+//        return autoscalingPayloadBuilder.toString();
+//    }*/
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/Payload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/Payload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/Payload.java
new file mode 100644
index 0000000..551979e
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/Payload.java
@@ -0,0 +1,224 @@
+///*
+// * 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.manager.payload;
+//
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+//import org.apache.stratos.manager.exception.ADCException;
+//import org.apache.stratos.manager.utils.CartridgeConstants;
+//
+//import java.io.*;
+//import java.util.zip.ZipEntry;
+//import java.util.zip.ZipOutputStream;
+//
+//public abstract class Payload implements Serializable {
+//
+//    private static Log log = LogFactory.getLog(Payload.class);
+//
+//    protected StringBuilder payloadBuilder;
+//    protected String payloadFilePath;
+//    protected PayloadArg payloadArg;
+//
+//    /**
+//     * Constructor
+//     *
+//     * @param payloadFilePath Full path at which the payload file is created
+//     */
+//    public Payload(String payloadFilePath) {
+//        this.payloadFilePath = payloadFilePath;
+//        payloadBuilder = new StringBuilder();
+//    }
+//
+//    /**
+//     * Pupulates the Payload subscription with relevant parameters and values given in PayloadArg subscription
+//     *
+//     * @param payloadArg PayloadArg subscription with relevant values
+//     */
+//    public void populatePayload(PayloadArg payloadArg) {
+//
+//        this.payloadArg = payloadArg;
+//        payloadBuilder.append("HOST_NAME=" + payloadArg.getHostName());
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("TENANT_ID=" + payloadArg.getTenantId());
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("TENANT_RANGE=" + payloadArg.getTenantRange());
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("TENANT_CONTEXT=" + payloadArg.getTenantDomain()); // No need to send those now
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("CARTRIDGE_ALIAS=" + payloadArg.getCartridgeAlias());
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("MB_IP=" + System.getProperty(CartridgeConstants.MB_IP));  // No need to send those now, will get from Puppet
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("MB_PORT=" + System.getProperty(CartridgeConstants.MB_PORT)); // No need to send those now, will get from Puppet
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("CEP_IP=" + System.getProperty(CartridgeConstants.CEP_IP)); // No need to send those now, will get from Puppet
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("CEP_PORT=" + System.getProperty(CartridgeConstants.CEP_PORT)); // No need to send those now, will get from Puppet
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("CLUSTER_ID=" + payloadArg.getServiceDomain());
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("CARTRIDGE_KEY=" + payloadArg.getSubscriptionKey());
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("DEPLOYMENT=" + "default"); // hard coded to default
+//        payloadBuilder.append(",");
+//        payloadBuilder.append("PUPPET_IP=" + System.getProperty(CartridgeConstants.PUPPET_IP));
+//
+//
+//        if(payloadArg.getCartridgeInfo() != null) {
+//            payloadBuilder.append(",");
+//            payloadBuilder.append("SERVICE_NAME=" + payloadArg.getCartridgeInfo().getType());
+//        }
+//
+//        //add the user defined payload String (if any)
+//        //this should be of the format <key_1>=<value_1>,<key_2>=<value_2>,....<key_n>=<value_n>
+//        if (payloadArg.getUserDefinedPayload() != null && !payloadArg.getUserDefinedPayload().trim().isEmpty()) {
+//
+//            if(!payloadBuilder.toString().endsWith(",")) {
+//                payloadBuilder.append(",");
+//            }
+//            payloadBuilder.append(payloadArg.getUserDefinedPayload());
+//        }
+//    }
+//
+//    /**
+//     * Add the user defined payload String (if any). This should be of the format
+//     * <key_1>=<value_1>,<key_2>=<value_2>,....<key_n>=<value_n>
+//     *
+//     * @param payloadString String object with payload information
+//     */
+//    public void populatePayload (String payloadString) {
+//
+//        if(payloadBuilder.toString().isEmpty()) {
+//            if(payloadString.startsWith(",")) {
+//                payloadBuilder.append(payloadString.substring(1));
+//            }
+//            else {
+//                payloadBuilder.append(payloadString);
+//            }
+//        } else {
+//            if(!payloadBuilder.toString().endsWith(",") && !payloadString.startsWith(",")) {
+//                payloadBuilder.append(",");
+//                payloadBuilder.append(payloadString);
+//            }
+//            else if (payloadBuilder.toString().endsWith(",") && payloadString.startsWith(",")) {
+//                payloadBuilder.append(payloadString.substring(1));
+//            }
+//            else {
+//                payloadBuilder.append(payloadString);
+//            }
+//        }
+//    }
+//
+//    /**
+//     * Create the actual payload in the file system
+//     *
+//     * @return DataHandler subscription with payload
+//     * @throws ADCException in case of an error
+//     */
+//    public StringBuilder createPayload () throws ADCException {
+//
+//        if(payloadBuilder.length() == 0) {
+//            log.warn("Payload string length is zero. Create payload failed");
+//            return null;
+//        }
+//
+//        File payloadFile = new File(getPayloadFilePath());
+//        if(payloadFile.exists()) {
+//            payloadFile.delete();
+//        }
+//
+//        log.info("** Payload ** " + payloadBuilder.toString());
+//
+//        return payloadBuilder;
+//    }
+//
+//    /**
+//     * Adds content to a zip file
+//     *
+//     * @param dir Name of directory
+//     * @param fileName Name of file to add
+//     * @param zos ZipOutputStream subscription to write
+//     * @throws ADCException in an error
+//     */
+//    private void addToZipFile(String dir, String fileName, ZipOutputStream zos) throws ADCException {
+//
+//        log.info("Writing '" + fileName + "' to zip file");
+//
+//        File file = new File(dir + File.separator + fileName);
+//        FileInputStream fis;
+//        try {
+//            fis = new FileInputStream(file);
+//
+//        } catch (FileNotFoundException e) {
+//            log.error(e.getMessage());
+//            throw new ADCException(e.getMessage(), e);
+//        }
+//
+//        ZipEntry zipEntry = new ZipEntry(fileName);
+//        try {
+//            zos.putNextEntry(zipEntry);
+//
+//        } catch (IOException e) {
+//            log.error(e.getMessage());
+//            throw new ADCException(e.getMessage(), e);
+//        }
+//
+//        byte[] bytes = new byte[1024];
+//        int length;
+//
+//            try {
+//                while ((length = fis.read(bytes)) >= 0) {
+//                    zos.write(bytes, 0, length);
+//                }
+//            } catch (IOException e) {
+//                log.error(e.getMessage());
+//                throw new ADCException(e.getMessage(), e);
+//            }
+//
+//        try {
+//            zos.closeEntry();
+//            fis.close();
+//
+//        } catch (IOException e) {
+//            log.error(e.getMessage());
+//            throw new ADCException(e.getMessage(), e);
+//        }
+//    }
+//
+//    public String getPayloadFilePath() {
+//        return payloadFilePath;
+//    }
+//
+//    public void setPayloadFilePath(String payloadFilePath) {
+//        this.payloadFilePath = payloadFilePath;
+//    }
+//
+//    public boolean delete () {
+//        return new File(payloadFilePath).delete();
+//    }
+//
+//    public PayloadArg getPayloadArg() {
+//        return payloadArg;
+//    }
+//
+//    public void setPayloadArg(PayloadArg payloadArg) {
+//        this.payloadArg = payloadArg;
+//    }
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadArg.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadArg.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadArg.java
new file mode 100755
index 0000000..f22da5c
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadArg.java
@@ -0,0 +1,194 @@
+///**
+// *  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.manager.payload;
+//
+//import org.apache.stratos.manager.dto.Policy;
+//import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+//
+//public class PayloadArg {
+//
+//    //basic
+//    private String hostName;
+//    private String tenantRange;
+//    private int tenantId;
+//    private String serviceName;
+//    private String cartridgeAlias;
+//    private String tenantDomain;
+//    private CartridgeInfo cartridgeInfo;
+//    private Policy policy;
+//    private String repoURL;
+//    private boolean multitenant;
+//
+//    //other
+//	private String userDefinedPayload;
+//    private String serviceDomain;
+//    private String serviceSubDomain;
+//    private String mgtServiceDomain;
+//    private String mgtServiceSubDomain;
+//    private String deployment;
+//    private String subscriptionKey;
+//
+//    //data cartridge specific
+//    private String dataCartridgeHost;
+//    private String dataCartridgeAdminUser;
+//    private String dataCartridgeAdminPassword;
+//
+//
+//	public CartridgeInfo getCartridgeInfo() {
+//		return cartridgeInfo;
+//	}
+//	public void setCartridgeInfo(CartridgeInfo cartridgeInfo) {
+//		this.cartridgeInfo = cartridgeInfo;
+//	}
+//	public Policy getPolicy() {
+//		return policy;
+//	}
+//	public void setPolicy(Policy policy) {
+//		this.policy = policy;
+//	}
+//	public String getRepoURL() {
+//		return repoURL;
+//	}
+//	public void setRepoURL(String repoURL) {
+//		this.repoURL = repoURL;
+//	}
+//	public String getDataCartridgeAdminPassword() {
+//		return dataCartridgeAdminPassword;
+//	}
+//	public void setDataCartridgeAdminPassword(String dataCartridgeAdminPassword) {
+//		this.dataCartridgeAdminPassword = dataCartridgeAdminPassword;
+//	}
+//	public String getDataCartridgeHost() {
+//		return dataCartridgeHost;
+//	}
+//	public void setDataCartridgeHost(String dataCartridgeHost) {
+//		this.dataCartridgeHost = dataCartridgeHost;
+//	}
+//	public int getTenantId() {
+//		return tenantId;
+//	}
+//	public void setTenantId(int tenantId) {
+//		this.tenantId = tenantId;
+//	}
+//	public String getTenantDomain() {
+//		return tenantDomain;
+//	}
+//	public void setTenantDomain(String tenantDomain) {
+//		this.tenantDomain = tenantDomain;
+//	}
+//	public String getUserDefinedPayload() {
+//		return userDefinedPayload;
+//	}
+//	public void setUserDefinedPayload(String userDefinedPayload) {
+//		this.userDefinedPayload = userDefinedPayload;
+//	}
+//	public boolean isMultitenant() {
+//		return multitenant;
+//	}
+//	public void setMultitenant(boolean multitenant) {
+//		this.multitenant = multitenant;
+//	}
+//	public String getCartridgeAlias() {
+//		return cartridgeAlias;
+//	}
+//	public void setCartridgeAlias(String cartridgeAlias) {
+//		this.cartridgeAlias = cartridgeAlias;
+//	}
+//
+//    public String getTenantRange() {
+//        return tenantRange;
+//    }
+//
+//    public void setTenantRange(String tenantRange) {
+//        this.tenantRange = tenantRange;
+//    }
+//
+//    public String getHostName() {
+//        return hostName;
+//    }
+//
+//    public void setHostName(String hostName) {
+//        this.hostName = hostName;
+//    }
+//
+//    public String getServiceDomain() {
+//        return serviceDomain;
+//    }
+//
+//    public void setServiceDomain(String serviceDomain) {
+//        this.serviceDomain = serviceDomain;
+//    }
+//
+//    public String getServiceSubDomain() {
+//        return serviceSubDomain;
+//    }
+//
+//    public void setServiceSubDomain(String serviceSubDomain) {
+//        this.serviceSubDomain = serviceSubDomain;
+//    }
+//
+//    public String getMgtServiceDomain() {
+//        return mgtServiceDomain;
+//    }
+//
+//    public void setMgtServiceDomain(String mgtServiceDomain) {
+//        this.mgtServiceDomain = mgtServiceDomain;
+//    }
+//
+//    public String getMgtServiceSubDomain() {
+//        return mgtServiceSubDomain;
+//    }
+//
+//    public void setMgtServiceSubDomain(String mgtServiceSubDomain) {
+//        this.mgtServiceSubDomain = mgtServiceSubDomain;
+//    }
+//
+//    public String getDataCartridgeAdminUser() {
+//        return dataCartridgeAdminUser;
+//    }
+//
+//    public void setDataCartridgeAdminUser(String dataCartridgeAdminUser) {
+//        this.dataCartridgeAdminUser = dataCartridgeAdminUser;
+//    }
+//
+//    public String getDeployment() {
+//        return deployment;
+//    }
+//
+//    public void setDeployment(String deployment) {
+//        this.deployment = deployment;
+//    }
+//
+//    public String getServiceName() {
+//        return serviceName;
+//    }
+//
+//    public void setServiceName(String serviceName) {
+//        this.serviceName = serviceName;
+//    }
+//	public String getSubscriptionKey() {
+//		return subscriptionKey;
+//	}
+//	public void setSubscriptionKey(String subscriptionKey) {
+//		this.subscriptionKey = subscriptionKey;
+//	}
+//
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadData.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadData.java
new file mode 100644
index 0000000..168e656
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadData.java
@@ -0,0 +1,74 @@
+/*
+ * 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.manager.payload;
+
+import java.io.Serializable;
+
+public abstract class PayloadData implements Serializable {
+
+    //protected StringBuilder additionalPayloadDataBuilder;
+    //private Map<String, String> payloadDataMap;
+    private BasicPayloadData basicPayloadData;
+    private StringBuilder completePayloadDataBuilder;
+
+    public PayloadData(BasicPayloadData basicPayloadData) {
+        this.setBasicPayloadData(basicPayloadData);
+        //additionalPayloadDataBuilder = new StringBuilder();
+        completePayloadDataBuilder = new StringBuilder(basicPayloadData.getPayloadData());
+        //payloadDataMap = new HashMap<String, String>();
+    }
+
+    public void add (String payloadDataName, String payloadDataValue) {
+
+        if(completePayloadDataBuilder.length() > 0) {
+            completePayloadDataBuilder.append(",");
+        }
+
+        //payloadDataMap.putSubscription(payloadDataName, payloadDataValue);
+        completePayloadDataBuilder.append(payloadDataName + "=" + payloadDataValue);
+    }
+
+    /*public String getPayloadDataValue (String payloadDataName) {
+        return payloadDataMap.get(payloadDataName);
+    }*/
+
+    public StringBuilder getCompletePayloadData () {
+
+        /*if(additionalPayloadDataBuilder.length() > 0) {
+            return getBasicPayloadData().getPayloadData().append(",").append(additionalPayloadDataBuilder);
+        } else {
+            return getBasicPayloadData().getPayloadData();
+        }*/
+
+        return completePayloadDataBuilder;
+    }
+
+    public BasicPayloadData getBasicPayloadData() {
+        return basicPayloadData;
+    }
+
+    public void setBasicPayloadData(BasicPayloadData basicPayloadData) {
+        this.basicPayloadData = basicPayloadData;
+    }
+
+    public String toString () {
+        return getCompletePayloadData().toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9f74f29c/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadFactory.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadFactory.java
new file mode 100755
index 0000000..c32371e
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/manager/payload/PayloadFactory.java
@@ -0,0 +1,60 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+
+ *  http://www.apache.org/licenses/LICENSE-2.0
+
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.stratos.manager.payload;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.manager.exception.ADCException;
+import org.apache.stratos.manager.utils.CartridgeConstants;
+
+public class PayloadFactory {
+
+	private static Log log = LogFactory.getLog(PayloadFactory.class);
+
+    /**
+     * Creates and returns a PayloadData instance
+     *
+     * @param cartridgeProvider Cartridge provider
+     * @param cartridgeType Cartridge type
+     * @param basicPayloadData BasicPayloadData instance
+     * @return Payload subscription
+     * @throws ADCException if no matching criteria is found to create a payload
+     */
+	public static PayloadData getPayloadDataInstance(String cartridgeProvider, String cartridgeType,
+                                                     BasicPayloadData basicPayloadData)
+            throws ADCException {
+
+        PayloadData payloadData = null;
+
+        //TODO: fix after adding the property Category to Cartridge Definition
+        if (cartridgeProvider.equals(CartridgeConstants.DATA_CARTRIDGE_PROVIDER)) {
+            payloadData = new DataCartridgePayloadData(basicPayloadData);
+        } else {
+            payloadData = new FramewrokCartridgePayloadData(basicPayloadData);
+        }
+
+        if(payloadData == null) {
+            throw new ADCException("Unable to find matching payload for cartridge type " + cartridgeType +
+                    ", provider " + cartridgeProvider);
+        }
+
+        return payloadData;
+    }
+}