You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2013/10/15 18:13:42 UTC
[2/3] committing cartridge subscription model changes
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
new file mode 100644
index 0000000..c890034
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
@@ -0,0 +1,400 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.manager;
+
+import org.apache.axis2.AxisFault;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
+import org.apache.stratos.adc.mgt.connector.CartridgeInstanceConnector;
+import org.apache.stratos.adc.mgt.connector.CartridgeInstanceConnectorFactory;
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.dto.SubscriptionInfo;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.instance.CartridgeInstance;
+import org.apache.stratos.adc.mgt.instance.factory.CartridgeInstanceFactory;
+import org.apache.stratos.adc.mgt.payload.Payload;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.payload.PayloadFactory;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.PersistenceManager;
+import org.apache.stratos.adc.mgt.utils.PolicyHolder;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+import org.wso2.carbon.context.CarbonContext;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * Manager class for the purpose of managing CartridgeInstance subscriptions, groupings, etc.
+ */
+public class CartridgeSubscriptionManager {
+
+ private static Log log = LogFactory.getLog(CartridgeSubscriptionManager.class);
+
+ /**
+ * Subscribes to a cartridge
+ *
+ * @param cartridgeType Cartridge type
+ * @param cartridgeAlias Cartridge alias
+ * @param autoscalingPolicyName Autoscaling 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 CartridgeInstance object
+ * @throws ADCException
+ * @throws InvalidCartridgeAliasException
+ * @throws DuplicateCartridgeAliasException
+ * @throws PolicyException
+ * @throws UnregisteredCartridgeException
+ * @throws RepositoryRequiredException
+ * @throws RepositoryCredentialsRequiredException
+ * @throws RepositoryTransportException
+ * @throws AlreadySubscribedException
+ * @throws InvalidRepositoryException
+ */
+ public CartridgeInstance subscribeToCartridge (String cartridgeType, String cartridgeAlias,
+ String autoscalingPolicyName, 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 {
+
+ //validate cartridge alias
+ ApplicationManagementUtil.validateCartridgeAlias(cartridgeAlias, cartridgeType);
+
+ Policy autoScalingPolicy;
+ if(autoscalingPolicyName != null && !autoscalingPolicyName.isEmpty()) {
+ autoScalingPolicy = PolicyHolder.getInstance().getPolicy(autoscalingPolicyName);
+ } else {
+ autoScalingPolicy = PolicyHolder.getInstance().getDefaultPolicy();
+ }
+
+ if(autoScalingPolicy == null) {
+ throw new PolicyException("Could not load the auto scaling policy.");
+ }
+
+ CartridgeInfo cartridgeInfo;
+ try {
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
+
+ } catch (UnregisteredCartridgeException e) {
+ String message = cartridgeType
+ + " is not a valid cartridgeInstance type. Please try again with a valid cartridgeInstance 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);
+
+ CartridgeInstance cartridgeInstance = CartridgeInstanceFactory.getCartridgeInstance(cartridgeInfo);
+ Repository repository = cartridgeInstance.manageRepository(repositoryURL, repositoryUsername,
+ repositoryPassword, isPrivateRepository, cartridgeAlias, cartridgeInfo, tenantDomain);
+
+ cartridgeInstance.subscribe(subscriber, cartridgeAlias, autoScalingPolicy, repository);
+
+ log.info("Tenant [" + tenantId + "] with username [" + tenantAdminUsername +
+ " subscribed to " + "] Cartridge Alias " + cartridgeAlias + ", Cartridge Type: " + cartridgeType +
+ ", Repo URL: " + repositoryURL + ", Policy: " + autoscalingPolicyName);
+
+ PayloadArg payloadArg = cartridgeInstance.createPayloadParameters();
+ Payload payload = PayloadFactory.getPayloadInstance(cartridgeInfo.getProvider(), cartridgeType,
+ "/tmp/" + tenantDomain + "-" + cartridgeAlias + ".zip");
+ payload.populatePayload(payloadArg);
+
+ //set the payload to the cartridge instance
+ cartridgeInstance.setPayload(payload);
+
+ //CartridgeInstanceCache.getCartridgeInstanceCache().
+ // addCartridgeInstance(new CartridgeInstanceCacheKey(tenantId, cartridgeAlias), cartridgeInstance);
+
+ return cartridgeInstance;
+ }
+
+ /**
+ * Connects / groups cartridges
+ *
+ * @param tenantDomain Tenant's domain
+ * @param cartridgeInstance CartridgeInstance object to which the CartridgeInstance denoted by
+ * connectingCartridgeAlias will be connected to
+ * @param connectingCartridgeAlias Alias of the connecting cartridge
+ *
+ * @throws ADCException
+ * @throws NotSubscribedException
+ * @throws AxisFault
+ */
+ public void connectCartridges (String tenantDomain, CartridgeInstance cartridgeInstance,
+ String connectingCartridgeAlias)
+ throws ADCException, NotSubscribedException, AxisFault {
+
+ //TODO: retrieve from the cache and connect. For now, new objects are created
+
+ CartridgeInstance connectingCartridgeInstance = getCartridgeInstance(tenantDomain, connectingCartridgeAlias);
+
+ if(cartridgeInstance == null) {
+ String errorMsg = "No cartridge instance found in cache for tenant " + tenantDomain + ", alias " +
+ cartridgeInstance.getAlias() + ", connecting aborted";
+ log.error(errorMsg);
+ return;
+ }
+
+ if(connectingCartridgeInstance == null) {
+ String errorMsg = "No cartridge instance found in cache for tenant " + tenantDomain + ", alias " +
+ connectingCartridgeAlias + ", connecting aborted";
+ log.error(errorMsg);
+ return;
+ }
+
+ CartridgeInstanceConnector cartridgeInstanceConnector = CartridgeInstanceConnectorFactory.
+ getCartridgeInstanceConnector(connectingCartridgeInstance.getType());
+
+ cartridgeInstance.connect(connectingCartridgeAlias);
+
+ //PayloadArg payloadArg = cartridgeInstance.createPayloadParameters();
+
+ //get additional payload params for connecting cartridges
+ Properties payloadProperties = cartridgeInstanceConnector.createConnection(cartridgeInstance,
+ connectingCartridgeInstance);
+ 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 additional connection relates parameters to the payload
+ cartridgeInstance.getPayload().populatePayload(connectionParamsBuilder.toString());
+
+ /*
+ payloadArg.setUserDefinedPayload(connectionParamsBuilder.toString());
+ Payload payload = PayloadFactory.getPayloadInstance(cartridgeInstance.getCartridgeInfo().getProvider(),
+ cartridgeInstance.getType(),
+ "/tmp/" + tenantDomain + "-" + cartridgeInstance.getAlias() + ".zip");
+ payload.populatePayload(payloadArg);
+ payload.createPayload();
+ */
+ }
+
+ /**
+ * Registers the cartridge subscription for the given CartridgeInstance object
+ *
+ * @param cartridgeInstance CartridgeInstance instance
+ *
+ * @return SubscriptionInfo object populated with relevant information
+ * @throws ADCException
+ * @throws UnregisteredCartridgeException
+ */
+ public SubscriptionInfo registerCartridgeSubscription(CartridgeInstance cartridgeInstance)
+ throws ADCException, UnregisteredCartridgeException {
+
+ /*CartridgeInstance cartridgeInstance = CartridgeInstanceCache.getCartridgeInstanceCache().
+ getCartridgeInstance(new CartridgeInstanceCacheKey(tenantId, alias));
+
+ if(cartridgeInstance == null) {
+ throw new ADCException("Unable to find cartridge with alias " + alias + ", for tenant Id " + tenantId +
+ " in cache");
+ }*/
+
+ CartridgeSubscription cartridgeSubscription = cartridgeInstance.registerSubscription(null);
+
+ int subscriptionId;
+ try {
+ subscriptionId = PersistenceManager.persistSubscription(cartridgeSubscription);
+
+ } catch (Exception e) {
+ String errorMsg = "Error saving subscription for tenant " +
+ cartridgeInstance.getSubscriber().getTenantDomain() + ", alias " + cartridgeInstance.getType();
+ log.error(errorMsg);
+ throw new ADCException(errorMsg, e);
+ }
+
+ cartridgeInstance.setSubscriptionId(subscriptionId);
+ ApplicationManagementUtil.addDNSEntry(cartridgeSubscription.getAlias(), cartridgeInstance.getType());
+
+ return ApplicationManagementUtil.
+ createSubscriptionResponse(cartridgeSubscription, cartridgeInstance.getRepository());
+ }
+
+ /**
+ * Unsubscribe from a CartridgeInstance
+ *
+ * @param tenantDomain Tenant's domain
+ * @param alias Alias of the CartridgeInstance to unsubscribe from
+ * @throws ADCException
+ * @throws NotSubscribedException
+ */
+ public void unsubscribeFromCartridge (String tenantDomain, String alias)
+ throws ADCException, NotSubscribedException {
+
+ //TODO: retrieve from the cache and connect. For now, new objects are created
+
+ CartridgeInstance cartridgeInstance = getCartridgeInstance(tenantDomain, alias);
+
+ if(cartridgeInstance != null) {
+ cartridgeInstance.unsubscribe();
+ //CartridgeInstanceCache.getCartridgeInstanceCache().removeCartridgeInstance(cartridgeInstanceCacheKey);
+ }
+ else {
+ if(log.isDebugEnabled()) {
+ log.debug("No cartridge instance found with alias " + alias + " for tenant " + tenantDomain);
+ }
+ }
+ }
+
+ /*public List<CartridgeInstance> getCartridgeInstances (int tenantId) throws ADCException, NotSubscribedException {
+
+ List<CartridgeSubscription> cartridgeSubscriptions = getCartridgeSubscriptions(tenantId);
+ List<CartridgeInstance> cartridgeInstances = new ArrayList<CartridgeInstance>();
+ CartridgeInfo cartridgeInfo;
+
+ for(CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+ try {
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().
+ getCartridgeInfo(cartridgeSubscription.getCartridge());
+ cartridgeInstances.add(populateCartridgeInstanceInformation(cartridgeInfo, cartridgeSubscription));
+
+ } catch (Exception e) {
+ throw new ADCException(e.getMessage(), e);
+ }
+ }
+
+ return cartridgeInstances;
+ }*/
+
+ /**
+ * Creates and returns a CartridgeInstance object
+ *
+ * @param tenantDomain Tenant's domain
+ * @param alias Alias of the CartridgeInstance
+ *
+ * @return CartridgeInstance object populated with relevant information
+ * @throws ADCException
+ * @throws NotSubscribedException
+ */
+ public CartridgeInstance getCartridgeInstance (String tenantDomain, String alias)
+ throws ADCException, NotSubscribedException {
+
+ CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(tenantDomain, alias);
+
+ CartridgeInfo cartridgeInfo;
+ try {
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().
+ getCartridgeInfo(cartridgeSubscription.getCartridge());
+ } catch (Exception e) {
+ throw new ADCException(e.getMessage(), e);
+ }
+
+ return populateCartridgeInstanceInformation(cartridgeInfo, cartridgeSubscription);
+ }
+
+ private CartridgeSubscription getCartridgeSubscription (String tenantDomain, String alias)
+ throws ADCException, NotSubscribedException {
+
+ CartridgeSubscription 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<CartridgeSubscription> getCartridgeSubscriptions (int tenantId) throws ADCException, NotSubscribedException {
+
+ List<CartridgeSubscription> 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 CartridgeInstance populateCartridgeInstanceInformation (CartridgeInfo cartridgeInfo,
+ CartridgeSubscription cartridgeSubscription)
+ throws ADCException {
+
+ CartridgeInstance cartridgeInstance = CartridgeInstanceFactory.getCartridgeInstance(cartridgeInfo);
+
+ cartridgeInstance.setSubscriptionId(cartridgeSubscription.getSubscriptionId());
+ cartridgeInstance.setAlias(cartridgeSubscription.getAlias());
+ cartridgeInstance.setHostName(cartridgeSubscription.getHostName());
+ cartridgeInstance.setClusterDomain(cartridgeSubscription.getClusterDomain());
+ cartridgeInstance.setClusterSubDomain(cartridgeSubscription.getClusterSubdomain());
+ cartridgeInstance.setMgtClusterDomain(cartridgeSubscription.getMgtClusterDomain());
+ cartridgeInstance.setMgtClusterSubDomain(cartridgeSubscription.getMgtClusterSubDomain());
+ Policy autoScalingPolicy;
+ if(cartridgeSubscription.getPolicy() != null && !cartridgeSubscription.getPolicy().isEmpty()) {
+ autoScalingPolicy = PolicyHolder.getInstance().getPolicy(cartridgeSubscription.getPolicy());
+ } else {
+ autoScalingPolicy = PolicyHolder.getInstance().getDefaultPolicy();
+ }
+ cartridgeInstance.setAutoscalingPolicy(autoScalingPolicy);
+ Subscriber subscriber = new Subscriber(CarbonContext.getThreadLocalCarbonContext().getUsername(),
+ cartridgeSubscription.getTenantId(), cartridgeSubscription.getTenantDomain());
+ cartridgeInstance.setSubscriber(subscriber);
+ cartridgeInstance.setRepository(cartridgeSubscription.getRepository());
+
+ return cartridgeInstance;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/CarbonPayload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/CarbonPayload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/CarbonPayload.java
new file mode 100644
index 0000000..7581138
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/CarbonPayload.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.payload;
+
+import org.apache.stratos.adc.mgt.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("SC_IP=" + System.getProperty(CartridgeConstants.SC_IP));
+ payloadBuilder.append(",");
+ payloadBuilder.append("MULTITENANT=" + payloadArg.getCartridgeInfo().getMultiTenant());
+ payloadBuilder.append(",");
+ payloadBuilder.append("DOMAIN=" + payloadArg.getServiceDomain());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/DataPayload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/DataPayload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/DataPayload.java
new file mode 100644
index 0000000..f4c8701
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/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.adc.mgt.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/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/NonCarbonPayload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/NonCarbonPayload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/NonCarbonPayload.java
new file mode 100644
index 0000000..8a528d2
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/NonCarbonPayload.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.payload;
+
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+
+import java.text.DecimalFormat;
+
+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());
+ payloadBuilder.append(",");
+
+ //port mapping specific
+ payloadBuilder.append(createPortMappingPayloadString(payloadArg.getCartridgeInfo()));
+ payloadBuilder.append(",");
+
+ //git repository specific
+ payloadBuilder.append("GIT_REPO=" + getRepositoryUrlParam(payloadArg));
+ payloadBuilder.append(",");
+
+ //BAM specific
+ payloadBuilder.append("BAM_IP=" + System.getProperty(CartridgeConstants.BAM_IP));
+ payloadBuilder.append(",");
+ payloadBuilder.append("BAM_PORT=" + System.getProperty(CartridgeConstants.BAM_PORT));
+
+ //Autoscale policy specific
+ payloadBuilder.append(getAutoscalingParams(payloadArg));
+ }
+
+ private String createPortMappingPayloadString(CartridgeInfo cartridgeInfo) {
+ // port mappings
+ StringBuilder portMapBuilder = new StringBuilder();
+ org.apache.stratos.cloud.controller.util.xsd.PortMapping[] portMappings = cartridgeInfo.getPortMappings();
+ for (org.apache.stratos.cloud.controller.util.xsd.PortMapping portMapping : portMappings) {
+ String port = portMapping.getPort();
+ String protocol = portMapping.getProtocol();
+ String proxyPort = portMapping.getProxyPort();
+ portMapBuilder.append(protocol).append(":").append(port).append(":").append(proxyPort).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;
+ }
+
+ private String getAutoscalingParams (PayloadArg arg) {
+
+ DecimalFormat df = new DecimalFormat("##.##");
+ df.setParseBigDecimal(true);
+
+ StringBuilder autoscalingPayloadBuilder = new StringBuilder();
+ autoscalingPayloadBuilder.append(",");
+ autoscalingPayloadBuilder.append("MIN=" + arg.getPolicy().getMinAppInstances());
+ autoscalingPayloadBuilder.append(",");
+ autoscalingPayloadBuilder.append("MAX=" + arg.getPolicy().getMaxAppInstances());
+ autoscalingPayloadBuilder.append(",");
+ autoscalingPayloadBuilder.append("ALARMING_LOWER_RATE=" + arg.getPolicy().getAlarmingLowerRate());
+ autoscalingPayloadBuilder.append(",");
+ autoscalingPayloadBuilder.append("ALARMING_UPPER_RATE=" + arg.getPolicy().getAlarmingUpperRate());
+ autoscalingPayloadBuilder.append(",");
+ autoscalingPayloadBuilder.append("MAX_REQUESTS_PER_SEC=" + arg.getPolicy().getMaxRequestsPerSecond());
+ autoscalingPayloadBuilder.append(",");
+ autoscalingPayloadBuilder.append("ROUNDS_TO_AVERAGE=" + arg.getPolicy().getRoundsToAverage());
+ autoscalingPayloadBuilder.append(",");
+ autoscalingPayloadBuilder.append("SCALE_DOWN_FACTOR=" + arg.getPolicy().getScaleDownFactor());
+
+ return autoscalingPayloadBuilder.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java
new file mode 100644
index 0000000..5b236f2
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java
@@ -0,0 +1,257 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.payload;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.wso2.carbon.utils.CarbonUtils;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import java.io.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+public abstract class Payload {
+
+ 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 instance with relevant parameters and values given in PayloadArg instance
+ *
+ * @param payloadArg PayloadArg instance 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());
+ payloadBuilder.append(",");
+ payloadBuilder.append("CARTRIDGE_ALIAS=" + payloadArg.getCartridgeAlias());
+ payloadBuilder.append(",");
+ payloadBuilder.append("SERVICE=" + 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().endsWith(",")) {
+ payloadBuilder.append(",");
+ }
+ payloadBuilder.append(payloadString);
+ }
+
+ /**
+ * Create the actual payload in the file system
+ *
+ * @return DataHandler instance with payload
+ * @throws ADCException in case of an error
+ */
+ public DataHandler 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());
+
+ String payloadStringTempFile = "launch-params";
+
+ FileWriter fstream = null;
+ try {
+ fstream = new FileWriter(payloadStringTempFile);
+
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ throw new ADCException(e.getMessage(), e);
+ }
+ BufferedWriter out = new BufferedWriter(fstream);
+ try {
+ out.write(payloadBuilder.toString());
+ out.close();
+
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ throw new ADCException(e.getMessage(), e);
+ }
+
+ FileOutputStream fos = null;
+ try {
+ fos = new FileOutputStream(getPayloadFilePath());
+
+ } catch (FileNotFoundException e) {
+ log.error(e.getMessage());
+ throw new ADCException(e.getMessage(), e);
+ }
+
+ ZipOutputStream zos = new ZipOutputStream(fos);
+ addToZipFile(System.getProperty("user.dir"), payloadStringTempFile, zos);
+
+ File folder = new File(CarbonUtils.getCarbonHome() + File.separator
+ + "repository" + File.separator + "resources" + File.separator
+ + "user-data");
+
+ if(folder != null && folder.exists()) {
+ for (File fileEntry : folder.listFiles()) {
+ if (fileEntry != null && !fileEntry.isDirectory()) {
+ addToZipFile(folder.getPath(), fileEntry.getName(), zos);
+ }
+ }
+ }
+
+ try {
+ zos.close();
+ fos.close();
+
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ throw new ADCException(e.getMessage(), e);
+ }
+
+ FileDataSource payloadDataSource;
+ try {
+ payloadDataSource = new FileDataSource(new File(payloadFilePath));
+
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ throw new ADCException(e.getMessage(), e);
+ }
+
+ DataHandler payloadDataHandler = new DataHandler(payloadDataSource);
+ return payloadDataHandler;
+ }
+
+ /**
+ * Adds content to a zip file
+ *
+ * @param dir Name of directory
+ * @param fileName Name of file to add
+ * @param zos ZipOutputStream instance 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/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadArg.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadArg.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadArg.java
new file mode 100755
index 0000000..98986f7
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadArg.java
@@ -0,0 +1,185 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.payload;
+
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.cloud.controller.util.xsd.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;
+
+ //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;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java
new file mode 100755
index 0000000..f89f2b1
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.payload;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+
+public class PayloadFactory {
+
+ private static Log log = LogFactory.getLog(PayloadFactory.class);
+
+ /**
+ * Creates and returns a Payload instance
+ *
+ * @param cartridgeProvider Cartridge provider
+ * @param cartridgeType Cartridge type
+ * @param payloadFilePath Location to create the payload
+ * @return Payload instance
+ * @throws ADCException if no matching criteria is found to create a payload
+ */
+ public static Payload getPayloadInstance (String cartridgeProvider, String cartridgeType, String payloadFilePath)
+ throws ADCException {
+
+ Payload payload = null;
+
+ if(cartridgeProvider.equals(CartridgeConstants.PROVIDER_NAME_WSO2)) {
+ payload = new CarbonPayload(payloadFilePath);
+
+ } else {
+ if(cartridgeType.equals(CartridgeConstants.MYSQL_CARTRIDGE_NAME)) {
+ payload = new DataPayload(payloadFilePath);
+ }
+ else {
+ payload = new NonCarbonPayload(payloadFilePath);
+ }
+ }
+
+ if(payload == null) {
+ throw new ADCException("Unable to find matching payload for cartridge type " + cartridgeType +
+ ", provider " + cartridgeProvider);
+ }
+
+ return payload;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
new file mode 100644
index 0000000..43b6bb5
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.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.adc.mgt.repository;
+
+public class Repository {
+
+ private String url;
+ private String userName;
+ private String password;
+ private boolean isPrivateRepository;
+
+ 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;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public boolean isPrivateRepository() {
+ return isPrivateRepository;
+ }
+
+ public void setPrivateRepository(boolean privateRepository) {
+ isPrivateRepository = privateRepository;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
index 00244e1..7a67eba 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
@@ -22,22 +22,23 @@ package org.apache.stratos.adc.mgt.service;
import org.apache.axis2.AxisFault;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
import org.apache.stratos.adc.mgt.custom.domain.RegistryManager;
import org.apache.stratos.adc.mgt.dao.CartridgeSubscription;
-import org.apache.stratos.adc.mgt.dns.DNSManager;
-import org.apache.stratos.adc.mgt.dto.Cartridge;
-import org.apache.stratos.adc.mgt.dto.CartridgeWrapper;
-import org.apache.stratos.adc.mgt.dto.PolicyDefinition;
-import org.apache.stratos.adc.mgt.dto.RepositoryInformation;
-import org.apache.stratos.adc.mgt.dto.SubscriptionInfo;
+import org.apache.stratos.adc.mgt.dto.*;
import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.instance.CartridgeInstance;
import org.apache.stratos.adc.mgt.internal.DataHolder;
-import org.apache.stratos.adc.mgt.utils.*;
+import org.apache.stratos.adc.mgt.manager.CartridgeSubscriptionManager;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.adc.mgt.utils.PersistenceManager;
+import org.apache.stratos.adc.mgt.utils.PolicyHolder;
import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.core.AbstractAdmin;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
-import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
import org.wso2.carbon.utils.DataPaginator;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
@@ -56,6 +57,7 @@ public class ApplicationManagementService extends AbstractAdmin {
private static final Log log = LogFactory.getLog(ApplicationManagementService.class);
RegistryManager registryManager = new RegistryManager();
+ private CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager();
PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
String tenantDomain = carbonContext.getTenantDomain();
@@ -124,13 +126,13 @@ public class ApplicationManagementService extends AbstractAdmin {
try {
Pattern searchPattern = getSearchStringPattern(cartridgeSearchString);
- String[] availableCartridges = ApplicationManagementUtil.getServiceClient().getRegisteredCartridges();
+ String[] availableCartridges = CloudControllerServiceClient.getServiceClient().getRegisteredCartridges();
if (availableCartridges != null) {
for (String cartridgeType : availableCartridges) {
CartridgeInfo cartridgeInfo = null;
try {
- cartridgeInfo = ApplicationManagementUtil.getServiceClient().getCartridgeInfo(cartridgeType);
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
} catch (Exception e) {
if (log.isWarnEnabled()) {
log.warn("Error when calling getCartridgeInfo for " + cartridgeType + ", Error: "
@@ -238,7 +240,7 @@ public class ApplicationManagementService extends AbstractAdmin {
for (CartridgeSubscription subscription : subscriptionList) {
CartridgeInfo cartridgeInfo = null;
try {
- cartridgeInfo = ApplicationManagementUtil.getServiceClient().getCartridgeInfo(
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(
subscription.getCartridge());
} catch (Exception e) {
if (log.isWarnEnabled()) {
@@ -386,9 +388,44 @@ public class ApplicationManagementService extends AbstractAdmin {
checkSuperTenant();
- return ApplicationManagementUtil.doSubscribe(cartridgeType, alias, policy, repoURL, privateRepo, repoUsername,
- repoPassword, dataCartridgeType, dataCartridgeAlias, getUsername(),
- ApplicationManagementUtil.getTenantId(getConfigContext()), getTenantDomain());
+ //return ApplicationManagementUtil.doSubscribe(cartridgeType, alias, policy, repoURL, privateRepo, repoUsername,
+ // repoPassword, dataCartridgeType, dataCartridgeAlias, getUsername(),
+ // ApplicationManagementUtil.getTenantId(getConfigContext()), getTenantDomain());
+
+ CartridgeInstance cartridgeInstance = cartridgeSubsciptionManager.subscribeToCartridge(cartridgeType,
+ alias.trim(), policy, getTenantDomain(), ApplicationManagementUtil.getTenantId(configurationContext),
+ getUsername(), "git", repoURL, privateRepo, repoUsername, repoPassword);
+
+ if(dataCartridgeAlias != null && !dataCartridgeAlias.trim().isEmpty()) {
+
+ dataCartridgeAlias = dataCartridgeAlias.trim();
+
+ CartridgeInstance connectingCartridgeInstance = null;
+ try {
+ connectingCartridgeInstance = cartridgeSubsciptionManager.getCartridgeInstance(getTenantDomain(),
+ dataCartridgeAlias);
+
+ } catch (NotSubscribedException e) {
+ log.error(e.getMessage(), e);
+ }
+ if (connectingCartridgeInstance != null) {
+ try {
+ cartridgeSubsciptionManager.connectCartridges(tenantDomain, cartridgeInstance,
+ connectingCartridgeInstance.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 instance found for tenant " +
+ ApplicationManagementUtil.getTenantId(configurationContext) + " with alias " + alias);
+ }
+ }
+
+ return cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeInstance);
}
@@ -399,8 +436,11 @@ public class ApplicationManagementService extends AbstractAdmin {
* @param alias name of the cartridge to be unsubscribed
*/
public void unsubscribe(String alias) throws ADCException, NotSubscribedException {
- checkSuperTenant();
- CartridgeSubscription subscription = null;
+
+ checkSuperTenant();
+
+ cartridgeSubsciptionManager.unsubscribeFromCartridge(getTenantDomain(), alias);
+ /*CartridgeSubscription subscription = null;
try {
subscription = PersistenceManager.getSubscription(tenantDomain, alias);
@@ -423,16 +463,16 @@ public class ApplicationManagementService extends AbstractAdmin {
if (log.isDebugEnabled()) {
log.debug("Finding cartridge information for " + subscription.getCartridge());
}
- CartridgeInfo cartridgeInfo = ApplicationManagementUtil.getServiceClient().getCartridgeInfo(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);
- ApplicationManagementUtil.getServiceClient().terminateAllInstances(clusterDomain, clusterSubDomain);
+ CloudControllerServiceClient.getServiceClient().terminateAllInstances(clusterDomain, clusterSubDomain);
log.info("All instances terminated.");
log.info("Unregistering services...");
- ApplicationManagementUtil.getServiceClient().unregisterService(clusterDomain, clusterSubDomain);
+ CloudControllerServiceClient.getServiceClient().unregisterService(clusterDomain, clusterSubDomain);
log.info("Successfully terminated instances ..");
} else {
if (log.isInfoEnabled()) {
@@ -461,7 +501,7 @@ public class ApplicationManagementService extends AbstractAdmin {
String msg1 = "Exception occurred :" + e1.getMessage();
log.error(msg1);
throw new ADCException("Unsubscribe failed for cartridge " + alias, e1);
- }
+ }*/
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java
new file mode 100644
index 0000000..54a636b
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscriber/Subscriber.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.subscriber;
+
+public class Subscriber {
+
+ 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;
+ }
+
+ public String toString () {
+ return "[Admin username: " + adminUserName +
+ " -- tenant Id: " + tenantId +
+ " -- tenant domain: " + tenantDomain + "] ";
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
index 932a061..4bbc569 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
@@ -21,32 +21,7 @@ package org.apache.stratos.adc.mgt.utils;
*/
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.rmi.RemoteException;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.regex.Pattern;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import javax.activation.DataHandler;
-import javax.activation.FileDataSource;
-
-import org.apache.axis2.AxisFault;
+import com.google.gson.Gson;
import org.apache.axis2.clustering.ClusteringAgent;
import org.apache.axis2.clustering.Member;
import org.apache.axis2.clustering.management.GroupManagementAgent;
@@ -58,25 +33,21 @@ import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
import org.apache.stratos.adc.mgt.dao.CartridgeSubscription;
import org.apache.stratos.adc.mgt.dao.DataCartridge;
import org.apache.stratos.adc.mgt.dao.PortMapping;
-import org.apache.stratos.adc.mgt.dao.Repository;
import org.apache.stratos.adc.mgt.dns.DNSManager;
import org.apache.stratos.adc.mgt.dto.Cartridge;
import org.apache.stratos.adc.mgt.dto.Policy;
import org.apache.stratos.adc.mgt.dto.RepositoryInformation;
import org.apache.stratos.adc.mgt.dto.SubscriptionInfo;
-import org.apache.stratos.adc.mgt.exception.ADCException;
-import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException;
-import org.apache.stratos.adc.mgt.exception.DuplicateCartridgeAliasException;
-import org.apache.stratos.adc.mgt.exception.InvalidCartridgeAliasException;
-import org.apache.stratos.adc.mgt.exception.InvalidRepositoryException;
-import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
-import org.apache.stratos.adc.mgt.exception.PolicyException;
-import org.apache.stratos.adc.mgt.exception.RepositoryCredentialsRequiredException;
-import org.apache.stratos.adc.mgt.exception.RepositoryRequiredException;
-import org.apache.stratos.adc.mgt.exception.RepositoryTransportException;
-import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.exception.*;
import org.apache.stratos.adc.mgt.internal.DataHolder;
+import org.apache.stratos.adc.mgt.repository.Repository;
import org.apache.stratos.adc.mgt.service.RepositoryInfoBean;
+import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+import org.apache.stratos.cloud.controller.util.xsd.Properties;
+import org.apache.stratos.cloud.controller.util.xsd.Property;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.LsRemoteCommand;
import org.eclipse.jgit.api.errors.GitAPIException;
@@ -86,16 +57,20 @@ import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.storage.file.FileRepository;
import org.eclipse.jgit.transport.CredentialsProvider;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
-import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
-import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
-import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
-import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
-import org.apache.stratos.cloud.controller.util.xsd.Properties;
-import org.apache.stratos.cloud.controller.util.xsd.Property;
import org.wso2.carbon.utils.CarbonUtils;
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
-import com.google.gson.Gson;
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.rmi.RemoteException;
+import java.text.DecimalFormat;
+import java.util.*;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
/**
* This class contains utility methods used by ApplicationManagementService.
@@ -103,7 +78,7 @@ import com.google.gson.Gson;
public class ApplicationManagementUtil {
private static Log log = LogFactory.getLog(ApplicationManagementUtil.class);
- private static volatile CloudControllerServiceClient serviceClient;
+ //private static volatile CloudControllerServiceClient serviceClient;
/**
* Method used to subscribe to cartridges.
@@ -135,7 +110,7 @@ public class ApplicationManagementUtil {
CartridgeInfo cartridgeInfo;
try {
- cartridgeInfo = getServiceClient().getCartridgeInfo(cartridgeType);
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
} catch (UnregisteredCartridgeException e) {
String message = cartridgeType
+ " is not a valid cartridge type. Please try again with a valid cartridge type.";
@@ -340,11 +315,12 @@ public class ApplicationManagementUtil {
}
}
- subscription =
+ /*subscription =
createCartridgeSubscription(cartridgeInfo, autoScalingPolicy,
cartridgeType, cartName, tenantId, tenantDomain,
repository, clusterDomain, clusterSubDomain,
mgtClusterDomain, mgtClusterSubDomain, dataCartridge);
+ */
try {
PersistenceManager.persistSubscription(subscription);
@@ -561,37 +537,30 @@ public class ApplicationManagementUtil {
return axisConfig.getRepository().getPath() + File.separator + cartridge;
}
- private static CartridgeSubscription createCartridgeSubscription(CartridgeInfo cartridgeInfo,
- Policy policy,
- String cartridgeType,
- String cartridgeName,
- int tenantId,
- String tenantDomain,
- Repository repository,
- String clusterDomain,
- String clusterSubDomain,
- String mgtClusterDomain,
- String mgtClusterSubDomain,
- DataCartridge dataCartridge) {
+ public static CartridgeSubscription createCartridgeSubscription(CartridgeInfo cartridgeInfo,
+ Policy policy,
+ String cartridgeType,
+ String cartridgeName,
+ int tenantId,
+ String tenantDomain,
+ Repository repository,
+ String hostName,
+ String clusterDomain,
+ String clusterSubDomain,
+ String mgtClusterDomain,
+ String mgtClusterSubDomain,
+ DataCartridge dataCartridge,
+ String state) {
CartridgeSubscription cartridgeSubscription = new CartridgeSubscription();
cartridgeSubscription.setCartridge(cartridgeType);
cartridgeSubscription.setAlias(cartridgeName);
cartridgeSubscription.setClusterDomain(clusterDomain);
cartridgeSubscription.setClusterSubdomain(clusterSubDomain);
- cartridgeSubscription.setMgtClusterDomain(mgtClusterDomain);
- cartridgeSubscription.setMgtClusterSubDomain(mgtClusterSubDomain);
- String hostName = null;
- if (cartridgeInfo.getMultiTenant()) {
- hostName = cartridgeInfo.getHostName();
- } else {
- hostName = cartridgeName + "." + cartridgeInfo.getHostName();
- }
+ cartridgeSubscription.setMgtClusterDomain(mgtClusterDomain);
+ cartridgeSubscription.setMgtClusterSubDomain(mgtClusterSubDomain);
cartridgeSubscription.setHostName(hostName);
- if (policy != null) {
- // Policy can be null for multi-tenant cartridge
- cartridgeSubscription.setPolicy(policy.getName());
- }
+ cartridgeSubscription.setPolicy(policy.getName());
cartridgeSubscription.setRepository(repository);
cartridgeSubscription.setPortMappings(createPortMappings(cartridgeInfo));
cartridgeSubscription.setProvider(cartridgeInfo.getProvider());
@@ -599,7 +568,8 @@ public class ApplicationManagementUtil {
cartridgeSubscription.setTenantId(tenantId);
cartridgeSubscription.setTenantDomain(tenantDomain);
cartridgeSubscription.setBaseDirectory(cartridgeInfo.getBaseDir());
- cartridgeSubscription.setState("PENDING");
+ //cartridgeSubscription.setState("PENDING");
+ cartridgeSubscription.setState(state);
return cartridgeSubscription;
}
@@ -619,7 +589,7 @@ public class ApplicationManagementUtil {
return portMappings;
}
- public static CloudControllerServiceClient getServiceClient() throws AxisFault {
+ /*public static CloudControllerServiceClient getServiceClient() throws AxisFault {
if (serviceClient == null) {
synchronized (CloudControllerServiceClient.class) {
if (serviceClient == null) {
@@ -629,7 +599,7 @@ public class ApplicationManagementUtil {
}
}
return serviceClient;
- }
+ }*/
public static int getTenantId(ConfigurationContext configurationContext) {
int tenantId = MultitenantUtils.getTenantId(configurationContext);
@@ -639,7 +609,7 @@ public class ApplicationManagementUtil {
return tenantId;
}
- private static void validateCartridgeAlias(String alias, String cartridgeType) throws InvalidCartridgeAliasException, DuplicateCartridgeAliasException, ADCException {
+ public static void validateCartridgeAlias(String alias, String cartridgeType) throws InvalidCartridgeAliasException, DuplicateCartridgeAliasException, ADCException {
// Do not use quotes in messages, current UI JavaScript does not work if there are quotes
// TODO: Fix message display in UI
String patternString = "([a-z0-9]+([-][a-z0-9])*)+";
@@ -753,7 +723,7 @@ public class ApplicationManagementUtil {
return repositoryInformation;
}
- private static String generatePassword() {
+ public static String generatePassword() {
final int PASSWORD_LENGTH = 8;
StringBuffer sb = new StringBuffer();
@@ -770,7 +740,7 @@ public class ApplicationManagementUtil {
log.info(" Payload file is deleted. ");
}
- private static Properties setRegisterServiceProperties(Policy policy, int tenantId, String alias) {
+ public static Properties setRegisterServiceProperties(Policy policy, int tenantId, String alias) {
DecimalFormat df = new DecimalFormat("##.##");
df.setParseBigDecimal(true);
@@ -852,15 +822,15 @@ public class ApplicationManagementUtil {
return convertedHttpURL;
}
- private static void addDNSEntry(String alias, String cartridgeType) {
+ public static void addDNSEntry(String alias, String cartridgeType) {
new DNSManager().addNewSubDomain(alias + "." + cartridgeType, System.getProperty(CartridgeConstants.ELB_IP));
}
- private static SubscriptionInfo createSubscriptionResponse(CartridgeSubscription cartridgeSubscription, Repository repository) {
+ public static SubscriptionInfo createSubscriptionResponse(CartridgeSubscription cartridgeSubscription, Repository repository) {
SubscriptionInfo subscriptionInfo = new SubscriptionInfo();
- if (repository != null && repository.getRepoName() != null) {
- subscriptionInfo.setRepositoryURL(convertRepoURL(repository.getRepoName()));
+ if (repository != null && repository.getUrl() != null) {
+ subscriptionInfo.setRepositoryURL(convertRepoURL(repository.getUrl()));
}
subscriptionInfo.setHostname(cartridgeSubscription.getHostName());
@@ -884,9 +854,9 @@ public class ApplicationManagementUtil {
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.setRepoName(repoURL);
- repository.setRepoUserName(repoUserName);
- repository.setRepoUserPassword(repoUserPassword);
+ repository.setUrl(repoURL);
+ repository.setUserName(repoUserName);
+ repository.setPassword(repoUserPassword);
} else {
//log.info("External REPO URL is not provided. Therefore creating a new repo. Adding to Executor");
@@ -894,8 +864,8 @@ public class ApplicationManagementUtil {
+ tenantDomain + ", creating an git internal repository");
// for internal repos internal git server username and password is used.
- repository.setRepoUserName(System.getProperty(CartridgeConstants.INTERNAL_GIT_USERNAME));
- repository.setRepoUserPassword(System.getProperty(CartridgeConstants.INTERNAL_GIT_PASSWORD));
+ repository.setUserName(System.getProperty(CartridgeConstants.INTERNAL_GIT_USERNAME));
+ repository.setPassword(System.getProperty(CartridgeConstants.INTERNAL_GIT_PASSWORD));
/*repoCreationExecutor.execute(new RepositoryCreator(new RepositoryInfoBean(repoURL,
cartName,
tenantDomain,
@@ -906,12 +876,12 @@ public class ApplicationManagementUtil {
new RepositoryCreator(new RepositoryInfoBean(repoURL,
cartName,
tenantDomain,
- repository.getRepoUserName(),
- repository.getRepoUserPassword(),
+ repository.getUserName(),
+ repository.getPassword(),
cartridgeInfo.getDeploymentDirs(),
cartridgeInfo)).createInternalRepository();
String repoName = tenantDomain + "/" + cartName;
- repository.setRepoName("https://" + System.getProperty(CartridgeConstants.GIT_HOST_NAME) + ":8443/git/" + repoName);
+ repository.setUrl("https://" + System.getProperty(CartridgeConstants.GIT_HOST_NAME) + ":8443/git/" + repoName);
}
return repository;
@@ -943,7 +913,7 @@ public class ApplicationManagementUtil {
CartridgeInfo cartridgeInfo = null;
try {
- cartridgeInfo = getServiceClient().getCartridgeInfo(sub.getCartridge());
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(sub.getCartridge());
} catch (Exception e) {
throw new ADCException("Cannot get cartridge info: " + sub.getCartridge(), e);
}
@@ -957,12 +927,12 @@ public class ApplicationManagementUtil {
return populateCartridgeInfo(cartridgeInfo, sub, ips, tenantDomain);
}
- private static void registerService(String cartridgeType, String domain, String subDomain,
+ public static void registerService(String cartridgeType, String domain, String subDomain,
DataHandler payload, String tenantRange, String hostName, Properties properties)
throws ADCException, UnregisteredCartridgeException {
log.info("Register service..");
try {
- getServiceClient().register(domain, subDomain, cartridgeType, payload, tenantRange,
+ CloudControllerServiceClient.getServiceClient().register(domain, subDomain, cartridgeType, payload, tenantRange,
hostName, properties);
} catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) {
String msg = "Exception is occurred in register service operation. Reason :" + e.getMessage();
@@ -1082,7 +1052,7 @@ public class ApplicationManagementUtil {
cartridge.setMappedDomain(sub.getMappedDomain());
if (sub.getRepository() != null) {
- cartridge.setRepoURL(convertRepoURL(sub.getRepository().getRepoName()));
+ cartridge.setRepoURL(convertRepoURL(sub.getRepository().getUrl()));
}
return cartridge;
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/CartridgeConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/CartridgeConstants.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/CartridgeConstants.java
index 4e3184d..ae873d8 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/CartridgeConstants.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/CartridgeConstants.java
@@ -57,6 +57,9 @@ public class CartridgeConstants {
public static final String FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED = "feature.multitenant.multiplesubscription.enabled";
public static final String MYSQL_CARTRIDGE_NAME = "mysql";
+ public static final String PHP_CARTRIDGE_NAME = "php";
+ public static final String TOMCAT_CARTRIDGE_NAME = "tomcat";
+
public static final String DEFAULT_SUBDOMAIN = "__$default";
public static final String DEFAULT_MGT_SUBDOMAIN = "mgt";
public static final String MYSQL_DEFAULT_USER = "root";
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/PersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/PersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/PersistenceManager.java
index cda711c..3820ff5 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/PersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/PersistenceManager.java
@@ -18,23 +18,6 @@
*/
package org.apache.stratos.adc.mgt.utils;
-import java.io.File;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.crypto.Cipher;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.SecretKeySpec;
-import javax.xml.namespace.QName;
-
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.commons.codec.binary.Base64;
@@ -43,12 +26,20 @@ import org.apache.commons.logging.LogFactory;
import org.apache.stratos.adc.mgt.dao.CartridgeSubscription;
import org.apache.stratos.adc.mgt.dao.DataCartridge;
import org.apache.stratos.adc.mgt.dao.PortMapping;
-import org.apache.stratos.adc.mgt.dao.Repository;
import org.apache.stratos.adc.mgt.dao.RepositoryCredentials;
+import org.apache.stratos.adc.mgt.repository.Repository;
import org.wso2.carbon.utils.CarbonUtils;
import org.wso2.securevault.SecretResolver;
import org.wso2.securevault.SecretResolverFactory;
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import javax.xml.namespace.QName;
+import java.io.File;
+import java.sql.*;
+import java.util.*;
+
/**
* This class is responsible for handling persistence
*
@@ -191,7 +182,7 @@ public class PersistenceManager {
cartridge.setPolicy(resultSet.getString("POLICY"));
cartridge.setMappedDomain(resultSet.getString("MAPPED_DOMAIN"));
Repository repo = new Repository();
- repo.setRepoName(resultSet.getString("REPO_NAME"));
+ repo.setUrl(resultSet.getString("REPO_NAME"));
cartridge.setRepository(repo);
cartridge.setHostName(resultSet.getString("HOSTNAME"));
int dataCartridgeId = resultSet.getInt("DATA_CARTRIDGE_ID");
@@ -336,14 +327,14 @@ public class PersistenceManager {
// persist repo
if (cartridgeSubscription.getRepository() != null) {
String encryptedRepoUserPassword = encryptPassword(cartridgeSubscription.getRepository()
- .getRepoUserPassword());
+ .getPassword());
String insertRepo = "INSERT INTO REPOSITORY (REPO_NAME,STATE,REPO_USER_NAME,REPO_USER_PASSWORD)"
+ " VALUES (?,?,?,?)";
insertRepoStmt = con.prepareStatement(insertRepo, Statement.RETURN_GENERATED_KEYS);
- insertRepoStmt.setString(1, cartridgeSubscription.getRepository().getRepoName());
+ insertRepoStmt.setString(1, cartridgeSubscription.getRepository().getUrl());
insertRepoStmt.setString(2, "ACTIVE");
- insertRepoStmt.setString(3, cartridgeSubscription.getRepository().getRepoUserName());
+ insertRepoStmt.setString(3, cartridgeSubscription.getRepository().getUserName());
insertRepoStmt.setString(4, encryptedRepoUserPassword);
if (log.isDebugEnabled()) {
log.debug("Executing insert: " + insertRepo);
@@ -517,7 +508,7 @@ public class PersistenceManager {
String repoName = resultSet.getString("REPO_NAME");
if (repoName != null) {
Repository repo = new Repository();
- repo.setRepoName(repoName);
+ repo.setUrl(repoName);
cartridgeSubscription.setRepository(repo);
}
@@ -645,7 +636,45 @@ public class PersistenceManager {
return subscriptionList;
}
- public static void updateSubscriptionState(int subscriptionId, String state) throws Exception {
+ public static List<CartridgeSubscription> getSubscriptionsForTenant (int tenantId) throws Exception {
+
+ List<CartridgeSubscription> cartridgeSubscriptions = null;
+ Connection con = null;
+ PreparedStatement statement = null;
+ ResultSet resultSet = null;
+
+ try {
+ con = StratosDBUtils.getConnection();
+ String sql = "SELECT * FROM CARTRIDGE_SUBSCRIPTION C left join REPOSITORY R on "
+ + "C.REPO_ID=R.REPO_ID left join DATA_CARTRIDGE D on "
+ + "D.DATA_CART_ID=C.DATA_CARTRIDGE_ID WHERE TENANT_ID=? AND C.STATE != 'UNSUBSCRIBED'";
+ statement = con.prepareStatement(sql);
+ statement.setInt(1, tenantId);
+ if (log.isDebugEnabled()) {
+ log.debug("Executing query: " + sql);
+ }
+
+ resultSet = statement.executeQuery();
+ cartridgeSubscriptions = new ArrayList<CartridgeSubscription>();
+ if (resultSet.next()) {
+ CartridgeSubscription cartridgeSubscription = new CartridgeSubscription();
+ populateSubscription(cartridgeSubscription, resultSet);
+ cartridgeSubscriptions.add(cartridgeSubscription);
+ }
+ } catch (Exception s) {
+ String msg = "Error while sql connection :" + s.getMessage();
+ log.error(msg, s);
+ throw s;
+
+ } finally {
+ StratosDBUtils.closeAllConnections(con, statement, resultSet);
+ }
+
+ return cartridgeSubscriptions;
+ }
+
+
+ public static void updateSubscriptionState(int subscriptionId, String state) throws Exception {
Connection con = null;
PreparedStatement statement = null;
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/RepositoryCreator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/RepositoryCreator.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/RepositoryCreator.java
index d9a0568..28885f9 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/RepositoryCreator.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/RepositoryCreator.java
@@ -26,8 +26,7 @@ import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.RpcUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.adc.mgt.dao.Repository;
-import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.repository.Repository;
import org.apache.stratos.adc.mgt.service.RepositoryInfoBean;
import org.eclipse.jgit.api.*;
import org.eclipse.jgit.storage.file.FileRepository;