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:40 UTC
[29/46] renaming package adc.mgt to manager
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/ApplicationManagementService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/ApplicationManagementService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/ApplicationManagementService.java
new file mode 100644
index 0000000..df0cdb6
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/ApplicationManagementService.java
@@ -0,0 +1,679 @@
+/*
+ * 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.service;
+
+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.*;
+import org.apache.stratos.manager.exception.*;
+import org.apache.stratos.manager.subscription.CartridgeSubscription;
+import org.apache.stratos.manager.internal.DataHolder;
+import org.apache.stratos.manager.manager.CartridgeSubscriptionManager;
+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.manager.utils.PersistenceManager;
+import org.apache.stratos.manager.utils.PolicyHolder;
+import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.core.AbstractAdmin;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.utils.DataPaginator;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ *
+ *
+ *
+ */
+public class ApplicationManagementService extends AbstractAdmin {
+
+ private static final Log log = LogFactory.getLog(ApplicationManagementService.class);
+ //private RegistryManager registryManager = new RegistryManager();
+ private CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager();
+
+ /*
+ * Instantiate RepoNotificationService. Since this service is in the same
+ * component (org.apache.stratos.manager), a new object is created.
+ * TODO: Is there a better way to get this service?
+ */
+ private RepoNotificationService repoNotificationService = new RepoNotificationService();
+
+ /**
+ * Get Available Cartridges
+ *
+ * @return Available Cartridges
+ */
+ public Cartridge[] getAvailableCartridges(boolean multiTenant) throws ADCException {
+ List<Cartridge> cartridges = getAvailableCartridges(null, multiTenant);
+ // Following is very important when working with axis2
+ return cartridges.isEmpty() ? new Cartridge[0] : cartridges.toArray(new Cartridge[cartridges.size()]);
+ }
+
+ /**
+ * Get Subscribed Cartridges
+ *
+ * @return Subscribed Cartridges
+ */
+ public Cartridge[] getSubscribedCartridges() throws ADCException {
+ checkSuperTenant();
+ List<Cartridge> cartridgeList = getSubscribedCartridges(null);
+ // Following is very important when working with axis2
+ return cartridgeList.isEmpty() ? new Cartridge[0] : cartridgeList.toArray(new Cartridge[cartridgeList.size()]);
+ }
+
+ /**
+ * Get available cartridges
+ */
+ public CartridgeWrapper getPagedAvailableCartridges(String cartridgeSearchString, int pageNumber, boolean multiTenant)
+ throws ADCException {
+ checkSuperTenant();
+ CartridgeWrapper cartridgeWrapper = new CartridgeWrapper();
+ List<Cartridge> cartridges = getAvailableCartridges(cartridgeSearchString, multiTenant);
+
+ // TODO Improve pagination
+ if (!cartridges.isEmpty()) {
+ // Paginate only if cartridges are there.
+ DataPaginator.doPaging(pageNumber, cartridges, cartridgeWrapper);
+ } else {
+ // Must set this value as axis2 stub client will return an array
+ // with length = 1 and null element if cartridges[] is null
+ cartridgeWrapper.set(cartridges);
+ }
+ return cartridgeWrapper;
+ }
+
+ private List<Cartridge> getAvailableCartridges(String cartridgeSearchString, Boolean multiTenant) throws ADCException {
+ List<Cartridge> cartridges = new ArrayList<Cartridge>();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Getting available cartridges. Search String: " + cartridgeSearchString + ", Multi-Tenant: " + multiTenant);
+ }
+
+ boolean allowMultipleSubscription = new Boolean(
+ System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
+
+ try {
+ Pattern searchPattern = getSearchStringPattern(cartridgeSearchString);
+
+ String[] availableCartridges = CloudControllerServiceClient.getServiceClient().getRegisteredCartridges();
+
+ if (availableCartridges != null) {
+ for (String cartridgeType : availableCartridges) {
+ CartridgeInfo cartridgeInfo = null;
+ try {
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn("Error when calling getCartridgeInfo for " + cartridgeType + ", Error: "
+ + e.getMessage());
+ }
+ }
+ if (cartridgeInfo == null) {
+ // This cannot happen. But continue
+ if (log.isDebugEnabled()) {
+ log.debug("Cartridge Info not found: " + cartridgeType);
+ }
+ continue;
+ }
+
+ if (multiTenant != null && !multiTenant && cartridgeInfo.getMultiTenant()) {
+ // Need only Single-Tenant cartridges
+ continue;
+ } else if (multiTenant != null && multiTenant && !cartridgeInfo.getMultiTenant()) {
+ // Need only Multi-Tenant cartridges
+ continue;
+ }
+
+ if (!cartridgeMatches(cartridgeInfo, searchPattern)) {
+ continue;
+ }
+
+ Cartridge cartridge = new Cartridge();
+ cartridge.setCartridgeType(cartridgeType);
+ cartridge.setProvider(cartridgeInfo.getProvider());
+ cartridge.setDisplayName(cartridgeInfo.getDisplayName());
+ cartridge.setDescription(cartridgeInfo.getDescription());
+ cartridge.setVersion(cartridgeInfo.getVersion());
+ cartridge.setMultiTenant(cartridgeInfo.getMultiTenant());
+ //cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
+ cartridge.setCartridgeAlias("-");
+ //cartridge.setActiveInstances(0);
+ cartridges.add(cartridge);
+
+ if (cartridgeInfo.getMultiTenant() && !allowMultipleSubscription) {
+ // If the cartridge is multi-tenant. We should not let users
+ // createSubscription twice.
+ if (PersistenceManager.isAlreadySubscribed(cartridgeType,
+ ApplicationManagementUtil.getTenantId(getConfigContext()))) {
+ if (log.isDebugEnabled()) {
+ log.debug("Already subscribed to " + cartridgeType
+ + ". This multi-tenant cartridge will not be available to createSubscription");
+ }
+ //cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
+ }
+ }
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("There are no available cartridges");
+ }
+ }
+ } catch (Exception e) {
+ String msg = "Error when getting available cartridges. " + e.getMessage();
+ log.error(msg, e);
+ throw new ADCException("An error occurred getting available cartridges ", e);
+ }
+
+ Collections.sort(cartridges);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Returning available cartridges " + cartridges.size());
+ }
+
+ return cartridges;
+ }
+
+ /**
+ * Get subscribed cartridges
+ */
+ public CartridgeWrapper getPagedSubscribedCartridges(String cartridgeSearchString, int pageNumber)
+ throws ADCException {
+ checkSuperTenant();
+ CartridgeWrapper cartridgeWrapper = new CartridgeWrapper();
+ List<Cartridge> cartridges = getSubscribedCartridges(cartridgeSearchString);
+
+ // TODO Improve pagination
+ if (!cartridges.isEmpty()) {
+ // Paginate only if cartridges are there.
+ DataPaginator.doPaging(pageNumber, cartridges, cartridgeWrapper);
+ } else {
+ cartridgeWrapper.set(cartridges);
+ }
+ return cartridgeWrapper;
+ }
+
+ private List<Cartridge> getSubscribedCartridges(String cartridgeSearchString) throws ADCException {
+ List<Cartridge> cartridges = new ArrayList<Cartridge>();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Getting subscribed cartridges. Search String: " + cartridgeSearchString);
+ }
+
+ try {
+ Pattern searchPattern = getSearchStringPattern(cartridgeSearchString);
+
+ List<CartridgeSubscriptionInfo> subscriptionList = PersistenceManager
+ .retrieveSubscribedCartridges(ApplicationManagementUtil.getTenantId(getConfigContext()));
+
+ if (subscriptionList != null && !subscriptionList.isEmpty()) {
+ for (CartridgeSubscriptionInfo subscription : subscriptionList) {
+ CartridgeInfo cartridgeInfo = null;
+ try {
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(
+ subscription.getCartridge());
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn("Error when calling getCartridgeInfo for " + subscription.getCartridge()
+ + ", Error: " + e.getMessage());
+ }
+ }
+ if (cartridgeInfo == null) {
+ // This cannot happen. But continue
+ if (log.isDebugEnabled()) {
+ log.debug("Cartridge Info not found: " + subscription.getCartridge());
+ }
+ continue;
+ }
+ if (!cartridgeMatches(cartridgeInfo, subscription, searchPattern)) {
+ continue;
+ }
+ TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
+ String[] ips = topologyMgtService.getActiveIPs(subscription.getCartridge(),
+ subscription.getClusterDomain(), subscription.getClusterSubdomain());
+ Cartridge cartridge = ApplicationManagementUtil.populateCartridgeInfo(cartridgeInfo, subscription, ips, getTenantDomain());
+ cartridges.add(cartridge);
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("There are no subscribed cartridges");
+ }
+ }
+ } catch (Exception e) {
+ String msg = "Error when getting subscribed cartridges. " + e.getMessage();
+ log.error(msg, e);
+ throw new ADCException("An Error occurred when getting subscribed cartridges.", e);
+ }
+
+ Collections.sort(cartridges);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Returning subscribed cartridges " + cartridges.size());
+ }
+
+ return cartridges;
+ }
+
+ private Pattern getSearchStringPattern(String searchString) {
+ if (log.isDebugEnabled()) {
+ log.debug("Creating search pattern for " + searchString);
+ }
+ if (searchString != null) {
+ // Copied from org.wso2.carbon.webapp.mgt.WebappAdmin.doesWebappSatisfySearchString(WebApplication, String)
+ String regex = searchString.toLowerCase().replace("..?", ".?").replace("..*", ".*").replaceAll("\\?", ".?")
+ .replaceAll("\\*", ".*?");
+ if (log.isDebugEnabled()) {
+ log.debug("Created regex: " + regex + " for search string " + searchString);
+ }
+
+ Pattern pattern = Pattern.compile(regex);
+ return pattern;
+ }
+ return null;
+ }
+
+ // TODO: Improve search method
+ private boolean cartridgeMatches(CartridgeInfo cartridgeInfo, Pattern pattern) {
+ if (pattern != null) {
+ boolean matches = false;
+ if (cartridgeInfo.getDisplayName() != null) {
+ matches = pattern.matcher(cartridgeInfo.getDisplayName().toLowerCase()).find();
+ }
+ if (!matches && cartridgeInfo.getDescription() != null) {
+ matches = pattern.matcher(cartridgeInfo.getDescription().toLowerCase()).find();
+ }
+ return matches;
+ }
+ return true;
+ }
+
+ private boolean cartridgeMatches(CartridgeInfo cartridgeInfo, CartridgeSubscriptionInfo cartridgeSubscriptionInfo, Pattern pattern) {
+ if (pattern != null) {
+ boolean matches = false;
+ if (cartridgeInfo.getDisplayName() != null) {
+ matches = pattern.matcher(cartridgeInfo.getDisplayName().toLowerCase()).find();
+ }
+ if (!matches && cartridgeInfo.getDescription() != null) {
+ matches = pattern.matcher(cartridgeInfo.getDescription().toLowerCase()).find();
+ }
+ if (!matches && cartridgeSubscriptionInfo.getCartridge() != null) {
+ matches = pattern.matcher(cartridgeSubscriptionInfo.getCartridge().toLowerCase()).find();
+ }
+ if (!matches && cartridgeSubscriptionInfo.getAlias() != null) {
+ matches = pattern.matcher(cartridgeSubscriptionInfo.getAlias().toLowerCase()).find();
+ }
+ return matches;
+ }
+ return true;
+ }
+
+ public Cartridge getCartridgeInfo(String alias) throws ADCException, NotSubscribedException {
+ checkSuperTenant();
+ return ApplicationManagementUtil.getCartridgeInfo(alias, getTenantDomain());
+ }
+
+ public String[] getSubscribedCartridgeAliases() throws AxisFault {
+ try {
+ List<CartridgeSubscriptionInfo> subscriptionList = PersistenceManager
+ .retrieveSubscribedCartridges(ApplicationManagementUtil.getTenantId(getConfigContext()));
+ List<String> subscribedAliases = new ArrayList<String>();
+ for (CartridgeSubscriptionInfo cartridgeSubscriptionInfo : subscriptionList) {
+
+ if(cartridgeSubscriptionInfo.getProvider().equalsIgnoreCase(CartridgeConstants.PROVIDER_NAME_WSO2) &&
+ getCartridgeInfo(cartridgeSubscriptionInfo.getAlias()).isMultiTenant()) {
+
+ subscribedAliases.add(cartridgeSubscriptionInfo.getCartridge());
+ } else {
+ subscribedAliases.add(cartridgeSubscriptionInfo.getAlias());
+ }
+ }
+ if(subscribedAliases.size() == 0) {
+ return new String[]{""};
+ } else {
+ return subscribedAliases.toArray(new String[subscribedAliases.size()]);
+ }
+
+ } catch (Exception e) {
+ String msg = "Exception in getting subscribed cartridge aliases :" + e.getMessage();
+ log.error(msg, e);
+ throw new AxisFault("An error occurred while getting subscribed cartridge aliases", e);
+ }
+ }
+
+ public PolicyDefinition[] getPolicyDefinitions() {
+ List<PolicyDefinition> policyDefinitions = PolicyHolder.getInstance().getPolicyDefinitions();
+ return policyDefinitions == null || policyDefinitions.isEmpty() ? new PolicyDefinition[0] : policyDefinitions
+ .toArray(new PolicyDefinition[policyDefinitions.size()]);
+ }
+
+ /**
+ * Subscribe to a cartridge
+ */
+ public SubscriptionInfo subscribe(String cartridgeType, String alias, String policy, String repoURL,
+ boolean privateRepo, String repoUsername, String repoPassword, String dataCartridgeType,
+ String dataCartridgeAlias) throws ADCException, PolicyException, UnregisteredCartridgeException,
+ InvalidCartridgeAliasException, DuplicateCartridgeAliasException, RepositoryRequiredException,
+ AlreadySubscribedException, RepositoryCredentialsRequiredException, InvalidRepositoryException,
+ RepositoryTransportException {
+
+ checkSuperTenant();
+
+ //return ApplicationManagementUtil.doSubscribe(cartridgeType, alias, policy, repoURL, privateRepo, repoUsername,
+ // repoPassword, dataCartridgeType, dataCartridgeAlias, getUsername(),
+ // ApplicationManagementUtil.getTenantId(getConfigContext()), getTenantDomain());
+
+ CartridgeSubscription cartridgeSubscription = cartridgeSubsciptionManager.subscribeToCartridge(cartridgeType,
+ alias.trim(), "economyPolicy", "economy-deployment", getTenantDomain(), ApplicationManagementUtil.getTenantId(configurationContext),
+ getUsername(), "git", repoURL, privateRepo, repoUsername, repoPassword);
+
+ if(dataCartridgeAlias != null && !dataCartridgeAlias.trim().isEmpty()) {
+
+ /*dataCartridgeAlias = dataCartridgeAlias.trim();
+
+ CartridgeSubscription connectingCartridgeSubscription = null;
+ try {
+ connectingCartridgeSubscription = cartridgeSubsciptionManager.getCartridgeSubscription(getTenantDomain(),
+ dataCartridgeAlias);
+ } catch (NotSubscribedException e) {
+ log.error(e.getMessage(), e);
+ }
+ if (connectingCartridgeSubscription != null) {
+ // Publish tenant subscribed event
+ CartridgeSubscriptionUtils.publishTenantSubscribedEvent(getTenantId(), connectingCartridgeSubscription.getCartridgeInfo().getType());
+
+ try {
+ cartridgeSubsciptionManager.connectCartridges(getTenantDomain(), cartridgeSubscription,
+ connectingCartridgeSubscription.getAlias());
+
+ } catch (NotSubscribedException e) {
+ log.error(e.getMessage(), e);
+
+ } catch (AxisFault axisFault) {
+ log.error(axisFault.getMessage(), axisFault);
+ }
+ } else {
+ log.error("Failed to connect. No cartridge subscription found for tenant " +
+ ApplicationManagementUtil.getTenantId(configurationContext) + " with alias " + alias);
+ } */
+ }
+
+ return cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription);
+
+ }
+
+ /**
+ * Unsubscribing the cartridge
+ *
+ * @param alias name of the cartridge to be unsubscribed
+ */
+ public void unsubscribe(String alias) throws ADCException, NotSubscribedException {
+
+ checkSuperTenant();
+
+ // Find subscription of alias
+ CartridgeSubscriptionInfo subscription;
+ String errorMessage = String.format("Tenant %s is not subscribed for %s", getTenantDomain(), alias);
+ try {
+ subscription = PersistenceManager.getSubscription(getTenantDomain(), alias);
+ if(subscription == null) {
+ throw new ADCException(errorMessage);
+ }
+ } catch (Exception e) {
+ throw new ADCException(errorMessage);
+ }
+
+ // Un-subscribe from cartridge
+ cartridgeSubsciptionManager.unsubscribeFromCartridge(getTenantDomain(), alias);
+
+ // Publish tenant un-subscribed event
+ String serviceName = subscription.getCartridge();
+ CartridgeSubscriptionUtils.publishTenantUnSubscribedEvent(getTenantId(), serviceName);
+
+
+ /*CartridgeSubscriptionInfo subscription = null;
+
+ try {
+ subscription = PersistenceManager.getSubscription(getTenantDomain(), alias);
+ } catch (Exception e) {
+ String msg = "Failed to get subscription for " + getTenantDomain() + " and alias " + alias;
+ log.error(msg, e);
+ throw new ADCException(msg, e);
+ }
+
+ if (subscription == null) {
+ String msg = "Tenant " + getTenantDomain() + " is not subscribed for " + alias;
+ log.error(msg);
+ throw new NotSubscribedException("You have not subscribed for " + alias, alias);
+ }
+
+ try {
+ String clusterDomain = subscription.getClusterDomain();
+ String clusterSubDomain = subscription.getClusterSubdomain();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Finding cartridge information for " + subscription.getCartridge());
+ }
+ CartridgeInfo cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(subscription.getCartridge());
+ if (log.isDebugEnabled()) {
+ log.debug("Found " + cartridgeInfo.getDisplayName() + " for " + subscription.getCartridge());
+ }
+ if (!cartridgeInfo.getMultiTenant()) {
+ log.info("Terminating all instances of " + clusterDomain + " " + clusterSubDomain);
+ CloudControllerServiceClient.getServiceClient().terminateAllInstances(clusterDomain, clusterSubDomain);
+ log.info("All instances terminated.");
+ log.info("Unregistering services...");
+ CloudControllerServiceClient.getServiceClient().unregisterService(clusterDomain, clusterSubDomain);
+ log.info("Successfully terminated instances ..");
+ } else {
+ if (log.isInfoEnabled()) {
+ log.info("Cartridge "
+ + subscription.getCartridge()
+ + " is a multi-tenant cartridge and therefore will not terminate all instances and unregister services");
+ }
+ }
+
+ new RepositoryFactory().destroyRepository(alias, getTenantDomain(), getUsername());
+ log.info("Repo is destroyed successfully.. ");
+
+ PersistenceManager.updateSubscriptionState(subscription.getSubscriptionId(), "UNSUBSCRIBED");
+ new DNSManager().removeSubDomain(subscription.getHostName());
+ registryManager.removeDomainMappingFromRegistry(subscription.getHostName());
+ TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
+
+ String[] ips = topologyMgtService.getActiveIPs(subscription.getCartridge(),
+ subscription.getClusterDomain(), subscription.getClusterSubdomain());
+ PersistenceManager.updateInstanceState("INACTIVE", ips, subscription.getClusterDomain(), subscription.getClusterSubdomain(), subscription.getCartridge());
+
+ } catch (ADCException e) {
+ log.error(e.getMessage(), e);
+ throw e;
+ } catch (Exception e1) {
+ String msg1 = "Exception occurred :" + e1.getMessage();
+ log.error(msg1);
+ throw new ADCException("Unsubscribe failed for cartridge " + alias, e1);
+ }*/
+ }
+
+
+ public String addDomainMapping(String mappedDomain, String cartridgeAlias) throws ADCException, DomainMappingExistsException, NotSubscribedException {
+ checkSuperTenant();
+ // TODO Following was in CLI. Fix this
+ // if (domain.indexOf('.') == -1) {
+ // System.out.println("\nOwn domain should include a '.' ");
+ // }
+
+ CartridgeSubscriptionInfo subscription = null;
+ String actualHost = null;
+
+ try {
+ subscription = PersistenceManager.getSubscription(getTenantDomain(), cartridgeAlias);
+ } catch (Exception e) {
+ String msg = "Failed to get subscription for " + getTenantDomain() + " and alias " + cartridgeAlias;
+ log.error(msg, e);
+ throw new ADCException(msg, e);
+ }
+ if (subscription == null) {
+ String msg = "Tenant " + getTenantDomain() + " is not subscribed for " + cartridgeAlias;
+ log.error(msg);
+ throw new NotSubscribedException("You have not subscribed for " + cartridgeAlias, cartridgeAlias);
+ }
+
+ try {
+ actualHost = getActualHost(cartridgeAlias);
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //registryManager.addDomainMappingToRegistry(mappedDomain, actualHost);
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ log.info("Domain mapping is added for " + mappedDomain + " tenant: " + getTenantDomain());
+ PersistenceManager.updateDomainMapping(
+ ApplicationManagementUtil.getTenantId(getConfigContext()), cartridgeAlias, mappedDomain);
+ } catch (RegistryException e) {
+ String msg = "Unable to add the mapping due to registry transaction error";
+ log.error(msg, e);
+ throw new ADCException("Unable to add the mapping due to internal error!", e);
+ } catch (DomainMappingExistsException e) {
+ String msg = "Domain mapping already exists.";
+ log.error(msg, e);
+ throw e;
+ } catch (Exception e) {
+ String msg = "Error occurred. Reason : " + e.getMessage();
+ log.error(msg, e);
+ throw new ADCException(msg, e);
+ }
+ return actualHost;
+ }
+
+ private String getActualHost(String cartridgeName) throws Exception {
+ return PersistenceManager.getHostNameForCartridgeName(
+ ApplicationManagementUtil.getTenantId(getConfigContext()), cartridgeName);
+ }
+
+ public void removeDomainMapping(String cartridgeAlias) throws ADCException, NotSubscribedException {
+ checkSuperTenant();
+ CartridgeSubscriptionInfo subscription = null;
+ String actualHost = null;
+
+ try {
+ subscription = PersistenceManager.getSubscription(getTenantDomain(), cartridgeAlias);
+ } catch (Exception e) {
+ String msg = "Failed to get subscription for " + getTenantDomain() + " and alias " + cartridgeAlias;
+ log.error(msg, e);
+ throw new ADCException(msg, e);
+ }
+ if (subscription == null) {
+ String msg = "Tenant " + getTenantDomain() + " is not subscribed for " + cartridgeAlias;
+ log.error(msg);
+ throw new NotSubscribedException("You have not subscribed for " + cartridgeAlias, cartridgeAlias);
+ }
+
+ try {
+ actualHost = getActualHost(cartridgeAlias);
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //registryManager.removeDomainMappingFromRegistry(actualHost);
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ log.info("Domain mapping is removed for " + actualHost + " tenant: " + getTenantDomain());
+ PersistenceManager.updateDomainMapping(ApplicationManagementUtil.getTenantId(getConfigContext()),
+ cartridgeAlias, null);
+ } catch (RegistryException e) {
+ String msg = "Unable to remove the mapping due to registry transaction error";
+ log.error(msg, e);
+ throw new ADCException("Unable to remove the mapping due to internal error!", e);
+ } catch (Exception e) {
+ String msg = "Error occurred. Reason : " + e.getMessage();
+ log.error(msg, e);
+ throw new ADCException(msg, e);
+ }
+ }
+
+ public void synchronizeRepository(String cartridgeAlias) throws ADCException, NotSubscribedException {
+ checkSuperTenant();
+ CartridgeSubscriptionInfo subscription = null;
+
+ // Validating subscription
+ try {
+ subscription = PersistenceManager.getSubscription(getTenantDomain(), cartridgeAlias);
+ } catch (Exception e) {
+ String msg = "Failed to get subscription for " + getTenantDomain() + " and alias " + cartridgeAlias;
+ log.error(msg, e);
+ throw new ADCException(msg, e);
+ }
+ if (subscription == null) {
+ String msg = "Tenant " + getTenantDomain() + " is not subscribed for " + cartridgeAlias;
+ log.error(msg);
+ throw new NotSubscribedException("You have not subscribed for " + cartridgeAlias, cartridgeAlias);
+ }
+
+ try {
+ repoNotificationService.notifyRepoUpdate(getTenantDomain(), cartridgeAlias);
+ } catch (Exception e) {
+ throw new ADCException(e.getMessage() != null ? e.getMessage() : "Failed to synchronize repository", e);
+ }
+ }
+
+ public String getTenantDomain() {
+ PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
+ return carbonContext.getTenantDomain();
+ }
+
+ public int getTenantId() {
+ PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
+ return carbonContext.getTenantId();
+ }
+
+ /**
+ * Allow to check whether features are enabled in the back-end
+ *
+ * @param key
+ * The propery key
+ * @return {@code true} if feature is enabled
+ */
+ public boolean isFeatureEnabled(String key) {
+ if (key != null && key.startsWith("feature.")) {
+ return new Boolean(System.getProperty(key));
+ }
+ return false;
+ }
+
+
+ public RepositoryInformation testRepositoryConnection(String repoURL, String repoUsername, String repoPassword, boolean privateRepo)
+ throws RepositoryRequiredException, ADCException, RepositoryCredentialsRequiredException,
+ InvalidRepositoryException, RepositoryTransportException {
+ return ApplicationManagementUtil.validateRepository(repoURL, repoUsername, repoPassword, privateRepo, true);
+ }
+
+ // TODO Remove following when we support cartridge subscription for Super-tenant
+ private void checkSuperTenant() throws ADCException {
+ if (log.isDebugEnabled()) {
+ log.debug("Checking whether super tenant accesses the service methods. Tenant ID: "
+ + ApplicationManagementUtil.getTenantId(getConfigContext()) + ", Tenant Domain: " + getTenantDomain());
+ }
+ if (MultitenantConstants.SUPER_TENANT_ID == ApplicationManagementUtil.getTenantId(getConfigContext())) {
+ throw new ADCException("Super Tenant is not allowed to complete requested operation");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/InstanceInformationManagementService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/InstanceInformationManagementService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/InstanceInformationManagementService.java
new file mode 100644
index 0000000..93bf70c
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/InstanceInformationManagementService.java
@@ -0,0 +1,58 @@
+/*
+ * 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.service;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.manager.utils.PersistenceManager;
+
+public class InstanceInformationManagementService {
+
+
+ private static final Log log = LogFactory.getLog(InstanceInformationManagementService.class);
+
+ /**
+ * Everytime an subscription is started up, this operation is invoked
+ * (by the AgentService)
+ * @param instanceIp
+ * @param tenantId
+ * @param clusterDomain
+ * @param clusterSubDomain
+ * @param cartridge
+ * @param state
+ *
+ */
+ public void updateInstanceState(String instanceIp,
+ int tenantId,
+ String clusterDomain,
+ String clusterSubDomain,
+ String cartridge,
+ String state) {
+
+ log.info("Message receieved in Instance Info Service.." + instanceIp + tenantId + clusterDomain + clusterSubDomain
+ + cartridge + state);
+
+ try {
+ PersistenceManager.persistCartridgeInstanceInfo(instanceIp, clusterDomain, clusterSubDomain, cartridge, state);
+ } catch (Exception e) {
+ log.error("Exception is occurred in updating subscription state. Reason, " + e.getMessage());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/RepoNotificationService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/RepoNotificationService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/RepoNotificationService.java
new file mode 100644
index 0000000..28a627c
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/RepoNotificationService.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.manager.service;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.axis2.clustering.ClusteringAgent;
+import org.apache.axis2.clustering.ClusteringFault;
+import org.apache.axis2.clustering.management.GroupManagementAgent;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.manager.internal.DataHolder;
+import org.apache.stratos.manager.publisher.ArtifactUpdatePublisher;
+import org.apache.stratos.manager.utils.CartridgeConstants;
+import org.apache.stratos.manager.utils.PersistenceManager;
+import org.wso2.carbon.core.deployment.SynchronizeGitRepositoryRequest;
+
+
+public class RepoNotificationService {
+
+ private static final Log log = LogFactory.getLog(RepoNotificationService.class);
+
+
+ public void notifyRepoUpdate(String tenantDomain, String cartridgeAlias) throws Exception {
+ // FIXME Throwing generic Exception is wrong
+ log.info("Updating repository of tenant : " + tenantDomain + " , cartridge: " +
+ cartridgeAlias);
+
+ CartridgeSubscriptionInfo subscription = null;
+ try {
+ subscription = PersistenceManager.getSubscription(tenantDomain, cartridgeAlias);
+ } catch (Exception e) {
+ String msg = "Failed to find subscription for " + cartridgeAlias + ". "
+ + (e.getMessage() != null ? e.getMessage() : "");
+ log.error(msg, e);
+ throw new Exception(msg, e);
+ }
+
+ if (subscription == null) {
+ String msg = "Tenant " + tenantDomain + " is not subscribed for " + cartridgeAlias;
+ log.error(msg);
+ throw new Exception("You have not subscribed for " + cartridgeAlias);
+ }
+
+ try {
+ handleRepoSynch(subscription);
+ } catch (Exception e) {
+ String msg = "Failed to synchronize the repository for " + cartridgeAlias + ". "
+ + (e.getMessage() != null ? e.getMessage() : "");
+ log.error(msg, e);
+ throw new Exception(msg, e);
+ }
+
+ }
+
+ public void synchronize(String repositoryURL) throws Exception {
+
+ log.info(" repository URL received : " + repositoryURL);
+ List<CartridgeSubscriptionInfo> subscription = PersistenceManager.getSubscription(repositoryURL);
+ for (CartridgeSubscriptionInfo cartridgeSubscriptionInfo : subscription) {
+ handleRepoSynch(cartridgeSubscriptionInfo);
+ }
+ }
+
+ private void handleRepoSynch(CartridgeSubscriptionInfo subscription) throws Exception {
+ if (subscription == null) {
+ throw new Exception("Cannot synchronize repository. subscription is null");
+ }
+
+ if (CartridgeConstants.PROVIDER_NAME_WSO2.equals(subscription.getProvider())) {
+ createAndSendClusterMessage(subscription.getTenantId(), subscription.getTenantDomain(),
+ UUID.randomUUID(), subscription.getClusterDomain(),
+ subscription.getClusterSubdomain());
+
+ } else {
+ new ArtifactUpdatePublisher(subscription.getRepository(),
+ subscription.getClusterDomain(),
+ String.valueOf(subscription.getTenantId())).publish();;
+ }
+ }
+
+ private void createAndSendClusterMessage(int tenantId, String tenantDomain, UUID uuid,
+ String clusterDomain, String clusterSubdomain) {
+
+ SynchronizeGitRepositoryRequest request =
+ new SynchronizeGitRepositoryRequest(tenantId,
+ tenantDomain,
+ uuid);
+
+ ClusteringAgent clusteringAgent =
+ DataHolder.getServerConfigContext()
+ .getAxisConfiguration().getClusteringAgent();
+ GroupManagementAgent groupMgtAgent =
+ clusteringAgent.getGroupManagementAgent(clusterDomain,
+ clusterSubdomain);
+
+ try {
+ log.info("Sending Request to.. " + clusterDomain + " : " + clusterSubdomain);
+ groupMgtAgent.send(request);
+
+ } catch (ClusteringFault e) {
+ e.printStackTrace();
+ }
+
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/RepositoryInfoBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/RepositoryInfoBean.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/RepositoryInfoBean.java
new file mode 100644
index 0000000..3ee4d83
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/service/RepositoryInfoBean.java
@@ -0,0 +1,98 @@
+/**
+ *
+ */
+package org.apache.stratos.manager.service;
+/*
+ *
+ * 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.
+ *
+*/
+
+
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+
+/**
+ *
+ */
+public class RepositoryInfoBean {
+
+ private String repoURL;
+ private String cartridgeAlias;
+ private String tenantDomain;
+ private String userName;
+ private String password;
+ private String[] dirArray;
+ private CartridgeInfo cartridgeInfo;
+
+
+ public RepositoryInfoBean(String repoURL, String cartridgeAlias, String tenantDomain,
+ String userName, String password, String[] dirArray, CartridgeInfo cartridgeInfo) {
+ this.repoURL = repoURL;
+ this.cartridgeAlias = cartridgeAlias;
+ this.tenantDomain = tenantDomain;
+ this.userName = userName;
+ this.setPassword(password);
+ this.dirArray = dirArray;
+ this.cartridgeInfo = cartridgeInfo;
+ }
+ public String getRepoURL() {
+ return repoURL;
+ }
+ public void setRepoURL(String repoURL) {
+ this.repoURL = repoURL;
+ }
+ public String getCartridgeAlias() {
+ return cartridgeAlias;
+ }
+ public void setCartridgeAlias(String cartridgeAlias) {
+ this.cartridgeAlias = cartridgeAlias;
+ }
+ public String getTenantDomain() {
+ return tenantDomain;
+ }
+ public void setTenantDomain(String tenantDomain) {
+ this.tenantDomain = tenantDomain;
+ }
+ public String getUserName() {
+ return userName;
+ }
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+ public String[] getDirArray() {
+ return dirArray;
+ }
+ public void setDirArray(String[] dirArray) {
+ this.dirArray = dirArray;
+ }
+ public CartridgeInfo getCartridgeInfo() {
+ return cartridgeInfo;
+ }
+ public void setCartridgeInfo(CartridgeInfo cartridgeInfo) {
+ this.cartridgeInfo = cartridgeInfo;
+ }
+ public String getPassword() {
+ return password;
+ }
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscriber/Subscriber.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscriber/Subscriber.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscriber/Subscriber.java
new file mode 100644
index 0000000..cec252b
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscriber/Subscriber.java
@@ -0,0 +1,68 @@
+/*
+ * 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.subscriber;
+
+import java.io.Serializable;
+
+public class Subscriber implements Serializable {
+
+ private static final long serialVersionUID = 6429685206817913437L;
+ private String adminUserName;
+ private int tenantId;
+ private String tenantDomain;
+
+ public Subscriber (String adminUserName, int tenantId, String tenantDomain) {
+
+ this.adminUserName = adminUserName;
+ this.tenantId = tenantId;
+ this.tenantDomain = tenantDomain;
+ }
+
+ public String getAdminUserName() {
+ return adminUserName;
+ }
+
+ public void setAdminUserName(String adminUserName) {
+ this.adminUserName = adminUserName;
+ }
+
+ 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;
+ }
+
+ @Override
+ public String toString() {
+ return "Subscriber [adminUserName=" + adminUserName + ", tenantId=" + tenantId +
+ ", tenantDomain=" + tenantDomain + "]";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/ApplicationCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/ApplicationCartridgeSubscription.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/ApplicationCartridgeSubscription.java
new file mode 100644
index 0000000..eed644a
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/ApplicationCartridgeSubscription.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.manager.subscription;
+
+import org.apache.stratos.manager.repository.Repository;
+import org.apache.stratos.manager.subscription.tenancy.SubscriptionTenancyBehaviour;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+
+public class ApplicationCartridgeSubscription extends CartridgeSubscription {
+
+
+ private static final long serialVersionUID = 3969055979835359336L;
+
+ /**
+ * Constructor
+ *
+ * @param cartridgeInfo CartridgeInfo instance
+ * @param subscriptionTenancyBehaviour SubscriptionTenancyBehaviour instance
+ */
+ public ApplicationCartridgeSubscription(CartridgeInfo cartridgeInfo, SubscriptionTenancyBehaviour
+ subscriptionTenancyBehaviour) {
+ super(cartridgeInfo, subscriptionTenancyBehaviour);
+ }
+
+
+ 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;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java
new file mode 100644
index 0000000..acd3055
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription.java
@@ -0,0 +1,467 @@
+/*
+ * 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.subscription;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.manager.dao.Cluster;
+import org.apache.stratos.manager.exception.*;
+import org.apache.stratos.manager.payload.PayloadData;
+import org.apache.stratos.manager.repository.Repository;
+import org.apache.stratos.manager.subscriber.Subscriber;
+import org.apache.stratos.manager.subscription.tenancy.SubscriptionTenancyBehaviour;
+import org.apache.stratos.manager.utils.ApplicationManagementUtil;
+import org.apache.stratos.manager.utils.CartridgeConstants;
+import org.apache.stratos.manager.utils.RepositoryFactory;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.pojo.Properties;
+
+import java.io.Serializable;
+import java.util.Map;
+
+public abstract class CartridgeSubscription implements Serializable {
+
+
+ private static final long serialVersionUID = -5197430500059231924L;
+ private static Log log = LogFactory.getLog(CartridgeSubscription.class);
+ private int subscriptionId;
+ private String type;
+ private String alias;
+ private String autoscalingPolicyName;
+ private String deploymentPolicyName;
+ private Subscriber subscriber;
+ private Repository repository;
+ private CartridgeInfo cartridgeInfo;
+ private PayloadData payloadData;
+ private Cluster cluster;
+ private String subscriptionStatus;
+ //private String serviceStatus;
+ private String mappedDomain;
+ //private List<String> connectedSubscriptionAliases;
+ private String subscriptionKey;
+ private SubscriptionTenancyBehaviour subscriptionTenancyBehaviour;
+
+
+ /**
+ * Constructor
+ *
+ * @param cartridgeInfo CartridgeInfo instance
+ * @param subscriptionTenancyBehaviour SubscriptionTenancyBehaviour instance
+ */
+ public CartridgeSubscription(CartridgeInfo cartridgeInfo, SubscriptionTenancyBehaviour subscriptionTenancyBehaviour) {
+
+ 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>();
+ this.setSubscriptionTenancyBehaviour(subscriptionTenancyBehaviour);
+ }
+
+ /**
+ * Subscribes to this cartridge subscription
+ *
+ * @param subscriber Subscriber subscription
+ * @param alias Alias of the cartridge subscription
+ * @param autoscalingPolicy Auto scaling policy
+ * @param deploymentPolicyName Deployment policy
+ * @param repository Relevenat Repository subscription
+ *
+ * @throws org.apache.stratos.manager.exception.ADCException
+ * @throws org.apache.stratos.manager.exception.PolicyException
+ * @throws org.apache.stratos.manager.exception.UnregisteredCartridgeException
+ * @throws org.apache.stratos.manager.exception.InvalidCartridgeAliasException
+ * @throws org.apache.stratos.manager.exception.DuplicateCartridgeAliasException
+ * @throws org.apache.stratos.manager.exception.RepositoryRequiredException
+ * @throws org.apache.stratos.manager.exception.AlreadySubscribedException
+ * @throws org.apache.stratos.manager.exception.RepositoryCredentialsRequiredException
+ * @throws org.apache.stratos.manager.exception.InvalidRepositoryException
+ * @throws org.apache.stratos.manager.exception.RepositoryTransportException
+ */
+ public void createSubscription (Subscriber subscriber, String alias, String autoscalingPolicy,
+ String deploymentPolicyName, Repository repository)
+ throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
+ DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
+ RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
+
+ setSubscriber(subscriber);
+ setAlias(alias);
+ setAutoscalingPolicyName(autoscalingPolicy);
+ setDeploymentPolicyName(deploymentPolicyName);
+ setRepository(repository);
+ getSubscriptionTenancyBehaviour().createSubscription(this);
+ }
+
+ /**
+ * Unsubscribe from this cartridge subscription
+ *
+ * @throws ADCException
+ * @throws NotSubscribedException
+ */
+ public void removeSubscription() throws ADCException, NotSubscribedException {
+
+ getSubscriptionTenancyBehaviour().removeSubscription(this);
+ cleanupSubscription();
+ }
+
+ /**
+ * Registers the subscription
+ *
+ * @param properties Any additional properties needed
+ *
+ * @return CartridgeSubscriptionInfo subscription populated with relevant data
+ * @throws ADCException
+ * @throws UnregisteredCartridgeException
+ */
+ public CartridgeSubscriptionInfo registerSubscription(Properties properties)
+ throws ADCException, UnregisteredCartridgeException {
+
+ Properties props = new Properties();
+ props.setProperties(getCartridgeInfo().getProperties());
+
+ getSubscriptionTenancyBehaviour().registerSubscription(this, props);
+
+ return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicyName(),
+ getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+ getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+ getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING", getSubscriptionKey());
+ }
+
+ /**
+ * 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);
+ }
+
+ /**
+ * 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 = null;
+ if (repoURL != null && repoURL.trim().length() > 0) {
+ repository = new Repository();
+ 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);
+
+ }
+
+ // 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 Map<String, String> getCustomPayloadEntries () {
+
+ //no custom payload entries by default
+ return null;
+ }
+
+ 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 String getAutoscalingPolicyName() {
+ return autoscalingPolicyName;
+ }
+
+ public void setAutoscalingPolicyName(String autoscalingPolicyName) {
+ this.autoscalingPolicyName = autoscalingPolicyName;
+ }
+
+ 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 PayloadData getPayloadData() {
+ return payloadData;
+ }
+
+ public void setPayloadData(PayloadData payloadData) {
+ this.payloadData = payloadData;
+ }
+
+ 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;
+ }
+
+ public String getDeploymentPolicyName() {
+ return deploymentPolicyName;
+ }
+
+ public void setDeploymentPolicyName(String deploymentPolicyName) {
+ this.deploymentPolicyName = deploymentPolicyName;
+ }
+
+ public SubscriptionTenancyBehaviour getSubscriptionTenancyBehaviour() {
+ return subscriptionTenancyBehaviour;
+ }
+
+ public void setSubscriptionTenancyBehaviour(SubscriptionTenancyBehaviour subscriptionTenancyBehaviour) {
+ this.subscriptionTenancyBehaviour = subscriptionTenancyBehaviour;
+ }
+
+ public boolean equals(Object other) {
+
+ if(this == other) {
+ return true;
+ }
+ if(!(other instanceof CartridgeSubscription)) {
+ return false;
+ }
+
+ CartridgeSubscription that = (CartridgeSubscription)other;
+ return ((this.type.equals(that.type)) && (this.alias.equals(that.alias)));
+ }
+
+ public int hashCode () {
+
+ return type.hashCode() + alias.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return "CartridgeSubscription [subscriptionId=" + subscriptionId + ", type=" + type +
+ ", alias=" + alias + ", autoscalingPolicyName=" + autoscalingPolicyName +
+ ", deploymentPolicyName=" + deploymentPolicyName + ", subscriber=" + subscriber +
+ ", repository=" + repository + ", cartridgeInfo=" + cartridgeInfo + ", payload=" +
+ payloadData + ", cluster=" + cluster + "]";
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription_old.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription_old.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/CartridgeSubscription_old.java
new file mode 100644
index 0000000..b77f3ab
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/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.manager.subscription;
+//
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+//import org.apache.stratos.manager.domain.RegistryManager;
+//import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
+//import org.apache.stratos.manager.dao.Cluster;
+//import org.apache.stratos.manager.dns.DNSManager;
+//import org.apache.stratos.manager.dto.Policy;
+//import org.apache.stratos.manager.exception.*;
+//import org.apache.stratos.manager.internal.DataHolder;
+//import org.apache.stratos.manager.payload.Payload;
+//import org.apache.stratos.manager.payload.PayloadArg;
+//import org.apache.stratos.manager.repository.Repository;
+//import org.apache.stratos.manager.service.RepositoryInfoBean;
+//import org.apache.stratos.manager.subscriber.Subscriber;
+//import org.apache.stratos.manager.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);
+// setAutoscalingPolicyName(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(getAutoscalingPolicyName());
+// 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 getAutoscalingPolicyName() {
+// return autoscalingPolicy;
+// }
+//
+// public void setAutoscalingPolicyName(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 getPayloadData() {
+// return payload;
+// }
+//
+// public void setPayloadData(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/9d280533/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.java
new file mode 100644
index 0000000..03cfecd
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/DataCartridgeSubscription.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.manager.subscription;
+
+import org.apache.stratos.manager.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.manager.dao.DataCartridge;
+import org.apache.stratos.manager.exception.ADCException;
+import org.apache.stratos.manager.exception.UnregisteredCartridgeException;
+import org.apache.stratos.manager.repository.Repository;
+import org.apache.stratos.manager.subscription.tenancy.SubscriptionTenancyBehaviour;
+import org.apache.stratos.manager.utils.ApplicationManagementUtil;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.pojo.Properties;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DataCartridgeSubscription extends CartridgeSubscription {
+
+ private String host;
+ private String username;
+ private String password;
+
+ /**
+ * Constructor
+ *
+ * @param cartridgeInfo CartridgeInfo instance
+ * @param subscriptionTenancyBehaviour SubscriptionTenancyBehaviour instance
+ */
+ public DataCartridgeSubscription(CartridgeInfo cartridgeInfo, SubscriptionTenancyBehaviour
+ subscriptionTenancyBehaviour) {
+
+ super(cartridgeInfo, subscriptionTenancyBehaviour);
+ setHost("localhost");
+ setUsername("root");
+ setPassword(ApplicationManagementUtil.generatePassword());
+ }
+
+ @Override
+ public CartridgeSubscriptionInfo registerSubscription(Properties properties) throws ADCException,
+ UnregisteredCartridgeException {
+
+ Properties props = new Properties();
+ props.setProperties(getCartridgeInfo().getProperties());
+ getSubscriptionTenancyBehaviour().registerSubscription(this, props);
+
+ DataCartridge dataCartridge = new DataCartridge();
+ dataCartridge.setUserName(getUsername());
+ dataCartridge.setPassword(getPassword());
+ dataCartridge.setDataCartridgeType(getType());
+
+ return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicyName(),
+ 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 Map<String, String> getCustomPayloadEntries() {
+
+ Map<String, String> payloadEntriesMap = new HashMap<String, String>();
+ payloadEntriesMap.put("MYSQL_HOST", host);
+ payloadEntriesMap.put("MYSQL_USER", username);
+ payloadEntriesMap.put("MYSQL_PASSWORD", password);
+
+ return payloadEntriesMap;
+ }
+
+ 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;
+ }
+}