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:43 UTC
[3/3] git commit: committing cartridge subscription model changes
committing cartridge subscription model changes
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/fce0c67d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/fce0c67d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/fce0c67d
Branch: refs/heads/master
Commit: fce0c67dd1709675cd80510fdff17395dc8149c9
Parents: 221982e
Author: Isuru <is...@wso2.com>
Authored: Tue Oct 15 21:42:51 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Tue Oct 15 21:42:51 2013 +0530
----------------------------------------------------------------------
.../client/CloudControllerServiceClient.java | 21 +-
.../connector/CartridgeInstanceConnector.java | 42 ++
.../CartridgeInstanceConnectorFactory.java | 41 ++
.../data/DataCartridgeInstanceConnector.java | 92 +++++
.../adc/mgt/dao/CartridgeSubscription.java | 2 +
.../apache/stratos/adc/mgt/dao/Repository.java | 59 ---
.../adc/mgt/instance/CartridgeInstance.java | 405 +++++++++++++++++++
.../adc/mgt/instance/DataCartridgeInstance.java | 110 +++++
.../instance/MultiTenantCartridgeInstance.java | 134 ++++++
.../instance/SingleTenantCartridgeInstance.java | 138 +++++++
.../instance/cache/CartridgeInstanceCache.java | 119 ++++++
.../cache/CartridgeInstanceCacheKey.java | 59 +++
.../factory/CartridgeInstanceFactory.java | 65 +++
.../instance/utils/CartridgeInstanceUtils.java | 240 +++++++++++
.../manager/CartridgeSubscriptionManager.java | 400 ++++++++++++++++++
.../stratos/adc/mgt/payload/CarbonPayload.java | 44 ++
.../stratos/adc/mgt/payload/DataPayload.java | 40 ++
.../adc/mgt/payload/NonCarbonPayload.java | 121 ++++++
.../apache/stratos/adc/mgt/payload/Payload.java | 257 ++++++++++++
.../stratos/adc/mgt/payload/PayloadArg.java | 185 +++++++++
.../stratos/adc/mgt/payload/PayloadFactory.java | 64 +++
.../stratos/adc/mgt/repository/Repository.java | 60 +++
.../service/ApplicationManagementService.java | 80 +++-
.../stratos/adc/mgt/subscriber/Subscriber.java | 64 +++
.../mgt/utils/ApplicationManagementUtil.java | 158 +++-----
.../adc/mgt/utils/CartridgeConstants.java | 3 +
.../adc/mgt/utils/PersistenceManager.java | 77 ++--
.../adc/mgt/utils/RepositoryCreator.java | 3 +-
.../adc/mgt/utils/RepositoryFactory.java | 5 +-
.../adc/mgt/test/CartridgeInstanceTest.java | 71 ++++
.../stratos/adc/mgt/test/PayloadTest.java | 195 +++++++++
31 files changed, 3148 insertions(+), 206 deletions(-)
----------------------------------------------------------------------
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/client/CloudControllerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/client/CloudControllerServiceClient.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/client/CloudControllerServiceClient.java
index cc5bc62..cfd29c7 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/client/CloudControllerServiceClient.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/client/CloudControllerServiceClient.java
@@ -19,26 +19,27 @@
package org.apache.stratos.adc.mgt.client;
-import java.rmi.RemoteException;
-
-import javax.activation.DataHandler;
-
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
import org.apache.stratos.adc.mgt.internal.DataHolder;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceStub;
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 javax.activation.DataHandler;
+import java.rmi.RemoteException;
+
public class CloudControllerServiceClient {
private CloudControllerServiceStub stub;
private static final Log log = LogFactory.getLog(CloudControllerServiceClient.class);
+ private static volatile CloudControllerServiceClient serviceClient;
public CloudControllerServiceClient(String epr) throws AxisFault {
@@ -55,6 +56,18 @@ public class CloudControllerServiceClient {
}
+ public static CloudControllerServiceClient getServiceClient() throws AxisFault {
+ if (serviceClient == null) {
+ synchronized (CloudControllerServiceClient.class) {
+ if (serviceClient == null) {
+ serviceClient = new CloudControllerServiceClient(
+ System.getProperty(CartridgeConstants.AUTOSCALER_SERVICE_URL));
+ }
+ }
+ }
+ return serviceClient;
+ }
+
public boolean register(String domainName, String subDomain, String cartridgeType,
DataHandler payload, String tenantRange, String hostName, Properties properties) throws RemoteException, CloudControllerServiceUnregisteredCartridgeExceptionException
{
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/connector/CartridgeInstanceConnector.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/CartridgeInstanceConnector.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/CartridgeInstanceConnector.java
new file mode 100644
index 0000000..19389a4
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/CartridgeInstanceConnector.java
@@ -0,0 +1,42 @@
+/*
+ * 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.connector;
+
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.instance.CartridgeInstance;
+
+import java.util.Properties;
+
+public abstract class CartridgeInstanceConnector {
+
+ /**
+ * Connects two cartridge instances
+ *
+ * @param cartridgeInstance CartridgeInstance instance
+ * @param connectingCartridgeInstance CartridgeInstance instance that is connecting with cartridgeInstance
+ *
+ * @return Custom properties for the connection as a key value set
+ * @throws ADCException in case of an error
+ */
+ public abstract Properties createConnection (CartridgeInstance cartridgeInstance,
+ CartridgeInstance connectingCartridgeInstance) throws ADCException;
+ public abstract Properties teminateConnection (CartridgeInstance cartridgeInstance,
+ CartridgeInstance connectedCartridgeInstance) throws ADCException;
+}
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/connector/CartridgeInstanceConnectorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/CartridgeInstanceConnectorFactory.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/CartridgeInstanceConnectorFactory.java
new file mode 100644
index 0000000..61ca81c
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/CartridgeInstanceConnectorFactory.java
@@ -0,0 +1,41 @@
+/*
+ * 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.connector;
+
+import org.apache.stratos.adc.mgt.connector.data.DataCartridgeInstanceConnector;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+
+public class CartridgeInstanceConnectorFactory {
+
+ public static CartridgeInstanceConnector getCartridgeInstanceConnector (String type) throws ADCException {
+
+ CartridgeInstanceConnector cartridgeInstanceConnector = null;
+
+ if(type.equals("mysql")) {
+ cartridgeInstanceConnector = new DataCartridgeInstanceConnector();
+ }
+
+ if(cartridgeInstanceConnector == null) {
+ throw new ADCException("Unable to find matching CartridgeInstanceConnector for " + type);
+ }
+
+ return cartridgeInstanceConnector;
+ }
+}
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/connector/data/DataCartridgeInstanceConnector.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/data/DataCartridgeInstanceConnector.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/data/DataCartridgeInstanceConnector.java
new file mode 100644
index 0000000..e9d35e6
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/data/DataCartridgeInstanceConnector.java
@@ -0,0 +1,92 @@
+/*
+ * 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.connector.data;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.connector.CartridgeInstanceConnector;
+import org.apache.stratos.adc.mgt.dto.Cartridge;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.NotSubscribedException;
+import org.apache.stratos.adc.mgt.instance.CartridgeInstance;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+
+import java.util.Properties;
+
+public class DataCartridgeInstanceConnector extends CartridgeInstanceConnector {
+
+ private static Log log = LogFactory.getLog(DataCartridgeInstanceConnector.class);
+
+ @Override
+ public Properties createConnection(CartridgeInstance cartridgeInstance,
+ CartridgeInstance connectingCartridgeInstance) throws ADCException {
+
+ //TODO: change the logic to do with topology information
+ log.info("Retrieving cartridge information for connecting ... alias : " +
+ connectingCartridgeInstance.getAlias() + ", Type: " + connectingCartridgeInstance.getType());
+
+ Properties connectionProperties = new Properties();
+
+ int maxAttempts = Integer.parseInt(System.getProperty(CartridgeConstants.MAX_ATTEMPTS, "50"));
+ int attempts = 0;
+ while (attempts < maxAttempts) {
+ attempts++;
+ Cartridge cartridge = null;
+ try {
+ cartridge = ApplicationManagementUtil.getCartridgeInfo(
+ connectingCartridgeInstance.getAlias(),
+ connectingCartridgeInstance.getSubscriber().getTenantDomain());
+
+ } catch (NotSubscribedException e) {
+ // This cannot happen here.
+ }
+ if (cartridge != null) {
+ if (!cartridge.getStatus().equals("ACTIVE")) {
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException ignore) {
+ }
+ } else {
+ connectionProperties.setProperty("MYSQL_HOST", cartridge.getIp());
+ connectionProperties.setProperty("MYSQL_USER", cartridge.getDbUserName());
+ connectionProperties.setProperty("MYSQL_PASSWORD", cartridge.getPassword());
+ log.info("Connection information retrieved for " + cartridgeInstance + " and " +
+ connectingCartridgeInstance);
+ break;
+ }
+ }
+
+ if(attempts == maxAttempts) {
+ String errorMsg = "Failed to connect " + cartridgeInstance + " and " + connectingCartridgeInstance;
+ log.error(errorMsg);
+ throw new ADCException(errorMsg);
+ }
+ }
+
+ return connectionProperties;
+ }
+
+ @Override
+ public Properties teminateConnection(CartridgeInstance cartridgeInstance,
+ CartridgeInstance connectedCartridgeInstance) throws ADCException {
+ return 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/dao/CartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/CartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/CartridgeSubscription.java
index 666dc00..be17cd7 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/CartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/CartridgeSubscription.java
@@ -19,6 +19,8 @@
package org.apache.stratos.adc.mgt.dao;
+import org.apache.stratos.adc.mgt.repository.Repository;
+
import java.util.List;
public class CartridgeSubscription {
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/dao/Repository.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Repository.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Repository.java
deleted file mode 100644
index 8f7adc9..0000000
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Repository.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.adc.mgt.dao;
-
-public class Repository {
- private int repoId;
- private String repoName;
- private String repoUserName;
- private String repoUserPassword;
-
- public int getRepoId() {
- return repoId;
- }
-
- public void setRepoId(int repoId) {
- this.repoId = repoId;
- }
-
- public String getRepoName() {
- return repoName;
- }
-
- public void setRepoName(String repoName) {
- this.repoName = repoName;
- }
-
- public String getRepoUserName() {
- return repoUserName;
- }
-
- public void setRepoUserName(String repoUserName) {
- this.repoUserName=repoUserName;
- }
-
- public String getRepoUserPassword() {
- return repoUserPassword;
- }
-
- public void setRepoUserPassword(String repoUserPassword) {
- this.repoUserPassword=repoUserPassword;
- }
-}
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/instance/CartridgeInstance.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/CartridgeInstance.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/CartridgeInstance.java
new file mode 100644
index 0000000..0d0c7d6
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/CartridgeInstance.java
@@ -0,0 +1,405 @@
+/*
+ * 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.instance;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.custom.domain.RegistryManager;
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.dns.DNSManager;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.internal.DataHolder;
+import org.apache.stratos.adc.mgt.payload.Payload;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.service.RepositoryInfoBean;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.utils.*;
+import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+public abstract class CartridgeInstance {
+
+ private static Log log = LogFactory.getLog(CartridgeInstance.class);
+
+ private String type;
+ private String alias;
+ private String clusterDomain;
+ private String clusterSubDomain;
+ private String mgtClusterDomain;
+ private String mgtClusterSubDomain;
+ private String hostName;
+ private Policy autoscalingPolicy;
+ private Subscriber subscriber;
+ private Repository repository;
+ private CartridgeInfo cartridgeInfo;
+ private Payload payload;
+ private String mappedDomain;
+ private List<String> connectedCartridgeAliases;
+ //TODO:fixme : to be removed after designing the new DB schema
+ private int subscriptionId;
+
+ /**
+ * Constructor
+ *
+ * @param cartridgeInfo CartridgeInfo instance
+ */
+ public CartridgeInstance (CartridgeInfo cartridgeInfo) {
+
+ this.setCartridgeInfo(cartridgeInfo);
+ this.setType(cartridgeInfo.getType());
+ this.setClusterDomain("");
+ this.setClusterSubDomain(CartridgeConstants.DEFAULT_SUBDOMAIN);
+ this.setMgtClusterDomain("");
+ this.setMgtClusterSubDomain(CartridgeConstants.DEFAULT_MGT_SUBDOMAIN);
+ this.setHostName(cartridgeInfo.getHostName());
+ this.connectedCartridgeAliases = new ArrayList<String>();
+ }
+
+ /**
+ * Subscribes to this cartridge instance
+ *
+ * @param subscriber Subscriber instance
+ * @param alias Alias of the cartridge instance
+ * @param autoscalingPolicy Auto scaling policy
+ * @param repository Relevenat Repository instance
+ *
+ * @throws ADCException
+ * @throws PolicyException
+ * @throws UnregisteredCartridgeException
+ * @throws InvalidCartridgeAliasException
+ * @throws DuplicateCartridgeAliasException
+ * @throws RepositoryRequiredException
+ * @throws AlreadySubscribedException
+ * @throws RepositoryCredentialsRequiredException
+ * @throws InvalidRepositoryException
+ * @throws RepositoryTransportException
+ */
+ public void subscribe (Subscriber subscriber, String alias, Policy autoscalingPolicy,
+ Repository repository)
+ throws ADCException, PolicyException, UnregisteredCartridgeException, InvalidCartridgeAliasException,
+ DuplicateCartridgeAliasException, RepositoryRequiredException, AlreadySubscribedException,
+ RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
+
+ setSubscriber(subscriber);
+ setAlias(alias);
+ setAutoscalingPolicy(autoscalingPolicy);
+ setRepository(repository);
+ }
+
+ /**
+ * Unsubscribe from this cartridge instance
+ *
+ * @throws ADCException
+ * @throws NotSubscribedException
+ */
+ public abstract void unsubscribe () throws ADCException, NotSubscribedException;
+
+ /**
+ * Registers the subscription
+ *
+ * @param properties Any additional properties needed
+ *
+ * @return CartridgeSubscription instance populated with relevant data
+ * @throws ADCException
+ * @throws UnregisteredCartridgeException
+ */
+ public abstract CartridgeSubscription registerSubscription(Properties properties)
+ throws ADCException, UnregisteredCartridgeException;
+
+ /**
+ * Connect cartridges
+ *
+ * @param connectingCartridgeAlias Alias of connecting cartridge
+ */
+ public void connect (String connectingCartridgeAlias) {
+ connectedCartridgeAliases.add(connectingCartridgeAlias);
+ }
+
+ /**
+ * Disconnect from the cartridge instance given by disconnectingCartridgeAlias
+ *
+ * @param disconnectingCartridgeAlias Alias of the cartridge instance to disconnect
+ */
+ public void disconnect (String disconnectingCartridgeAlias) {
+ connectedCartridgeAliases.remove(disconnectingCartridgeAlias);
+ }
+
+ /**
+ * Creates the relevant payload parameters for this cartridge instance
+ *
+ * @return PayloadArg instance
+ * @throws ADCException in an errpr
+ */
+ public PayloadArg createPayloadParameters() throws ADCException {
+
+ PayloadArg payloadArg = new PayloadArg();
+ payloadArg.setCartridgeInfo(getCartridgeInfo());
+ payloadArg.setPolicy(getAutoscalingPolicy());
+ payloadArg.setMultitenant(getCartridgeInfo().getMultiTenant());
+ payloadArg.setTenantId(getSubscriber().getTenantId());
+ payloadArg.setTenantDomain(getSubscriber().getTenantDomain());
+ payloadArg.setCartridgeAlias(getAlias());
+ payloadArg.setServiceName(getCartridgeInfo().getType());
+
+ return payloadArg;
+ }
+
+ /**
+ * Manages the repository for the cartridge instance
+ *
+ * @param repoURL Repository URL
+ * @param repoUserName Repository Username
+ * @param repoUserPassword Repository password
+ * @param privateRepo public/private repository
+ * @param cartridgeAlias Alias of the cartridge instance
+ * @param cartridgeInfo CartridgeInfo instance
+ * @param tenantDomain Domain of the tenant
+ *
+ * @return Repository populated with relevant information or null of not repository is relevant to this cartridge
+ * instance
+ * @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(hostName);
+
+ try {
+ new RegistryManager().removeDomainMappingFromRegistry(hostName);
+
+ } 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, clusterDomain, clusterSubDomain);
+ try {
+ PersistenceManager.updateInstanceState("INACTIVE", ips, clusterDomain, clusterSubDomain, type);
+
+ } catch (Exception e) {
+ String errorMsg = "Error in updating state to INACTIVE";
+ log.error(errorMsg, e);
+ }
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public Subscriber getSubscriber() {
+ return subscriber;
+ }
+
+ public Repository getRepository() {
+ return repository;
+ }
+
+ public List<String> getConnectedCartridgeAliases () {
+ return connectedCartridgeAliases;
+ }
+
+ public CartridgeInfo getCartridgeInfo() {
+ return cartridgeInfo;
+ }
+
+ public String getHostName() {
+ return hostName;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ public String getClusterDomain() {
+ return clusterDomain;
+ }
+
+ public void setClusterDomain(String clusterDomain) {
+ this.clusterDomain = clusterDomain;
+ }
+
+ public String getClusterSubDomain() {
+ return clusterSubDomain;
+ }
+
+ public void setClusterSubDomain(String clusterSubDomain) {
+ this.clusterSubDomain = clusterSubDomain;
+ }
+
+ public String getMgtClusterDomain() {
+ return mgtClusterDomain;
+ }
+
+ public void setMgtClusterDomain(String mgtClusterDomain) {
+ this.mgtClusterDomain = mgtClusterDomain;
+ }
+
+ public String getMgtClusterSubDomain() {
+ return mgtClusterSubDomain;
+ }
+
+ public void setMgtClusterSubDomain(String mgtClusterSubDomain) {
+ this.mgtClusterSubDomain = mgtClusterSubDomain;
+ }
+
+ public void setHostName(String hostName) {
+ this.hostName = hostName;
+ }
+
+ public Policy getAutoscalingPolicy() {
+ return autoscalingPolicy;
+ }
+
+ public void setAutoscalingPolicy(Policy autoscalingPolicy) {
+ this.autoscalingPolicy = autoscalingPolicy;
+ }
+
+ public void setSubscriber(Subscriber subscriber) {
+ this.subscriber = subscriber;
+ }
+
+ public void setRepository(Repository repository) {
+ this.repository = repository;
+ }
+
+ public void setCartridgeInfo(CartridgeInfo cartridgeInfo) {
+ this.cartridgeInfo = cartridgeInfo;
+ }
+
+ public Payload getPayload() {
+ return payload;
+ }
+
+ public void setPayload(Payload payload) {
+ this.payload = payload;
+ }
+
+ public int getSubscriptionId() {
+ return subscriptionId;
+ }
+
+ public void setSubscriptionId(int subscriptionId) {
+ this.subscriptionId = subscriptionId;
+ }
+
+ public String getMappedDomain() {
+ return mappedDomain;
+ }
+
+ public void setMappedDomain(String mappedDomain) {
+ this.mappedDomain = mappedDomain;
+ }
+}
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/instance/DataCartridgeInstance.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/DataCartridgeInstance.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/DataCartridgeInstance.java
new file mode 100644
index 0000000..f441de4
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/DataCartridgeInstance.java
@@ -0,0 +1,110 @@
+/*
+ * 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.instance;
+
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.dao.DataCartridge;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+
+import java.util.Properties;
+
+public class DataCartridgeInstance extends SingleTenantCartridgeInstance {
+
+ protected String host;
+ protected String username;
+ protected String password;
+
+ public DataCartridgeInstance(CartridgeInfo cartridgeInfo) {
+
+ super(cartridgeInfo);
+ this.host = "localhost";
+ this.username = CartridgeConstants.MYSQL_DEFAULT_USER;
+ this.password = ApplicationManagementUtil.generatePassword();
+ }
+
+ @Override
+ public void subscribe(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
+
+ throws InvalidCartridgeAliasException,
+ DuplicateCartridgeAliasException, ADCException, RepositoryCredentialsRequiredException,
+ RepositoryTransportException, UnregisteredCartridgeException, AlreadySubscribedException,
+ RepositoryRequiredException, InvalidRepositoryException, PolicyException {
+
+ super.subscribe(subscriber, alias, autoscalingPolicy, repository);
+ }
+
+ public Repository manageRepository (String repoURL, String repoUserName, String repoUserPassword,
+ boolean privateRepo, String cartridgeAlias, CartridgeInfo cartridgeInfo,
+ String tenantDomain) {
+
+ //no repository for data cartridge instances
+ return null;
+ }
+
+ public PayloadArg createPayloadParameters() throws ADCException {
+
+ PayloadArg payloadArg = super.createPayloadParameters();
+ payloadArg.setDataCartridgeHost(this.getHost());
+ payloadArg.setDataCartridgeAdminUser(username);
+ payloadArg.setDataCartridgeAdminPassword(password);
+
+ return payloadArg;
+ }
+
+ public CartridgeSubscription registerSubscription(Properties payloadProperties)
+ throws ADCException, UnregisteredCartridgeException {
+
+ ApplicationManagementUtil.registerService(getType(),
+ getClusterDomain(),
+ getClusterSubDomain(),
+ getPayload().createPayload(),
+ getPayload().getPayloadArg().getTenantRange(),
+ getHostName(),
+ ApplicationManagementUtil.setRegisterServiceProperties(getAutoscalingPolicy(),
+ getSubscriber().getTenantId(), getAlias()));
+
+ getPayload().delete();
+
+ DataCartridge dataCartridge = new DataCartridge();
+ dataCartridge.setUserName(username);
+ dataCartridge.setPassword(password);
+ dataCartridge.setDataCartridgeType(getType());
+
+ return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+ getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+ getRepository(), getHostName(), getClusterDomain(), getClusterSubDomain(),
+ getMgtClusterDomain(), getMgtClusterSubDomain(), dataCartridge, "PENDING");
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public void setHost(String host) {
+ this.host = host;
+ }
+}
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/instance/MultiTenantCartridgeInstance.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/MultiTenantCartridgeInstance.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/MultiTenantCartridgeInstance.java
new file mode 100644
index 0000000..b4a51b0
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/MultiTenantCartridgeInstance.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.instance;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.internal.DataHolder;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.adc.mgt.utils.PersistenceManager;
+import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.adc.topology.mgt.serviceobjects.DomainContext;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+
+import java.util.Properties;
+
+public class MultiTenantCartridgeInstance extends CartridgeInstance {
+
+ private static Log log = LogFactory.getLog(MultiTenantCartridgeInstance.class);
+
+ public MultiTenantCartridgeInstance(CartridgeInfo cartridgeInfo) {
+ super(cartridgeInfo);
+ }
+
+ @Override
+ public void subscribe(Subscriber subscriber, String alias, Policy autoscalingPolicy, Repository repository)
+
+ throws InvalidCartridgeAliasException,
+ DuplicateCartridgeAliasException, ADCException, AlreadySubscribedException,
+ RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
+ InvalidRepositoryException, RepositoryRequiredException, PolicyException {
+
+ super.subscribe(subscriber, alias, autoscalingPolicy, repository);
+
+ boolean allowMultipleSubscription = Boolean.
+ valueOf(System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
+
+ if (!allowMultipleSubscription) {
+ // If the cartridge is multi-tenant. We should not let users subscribe twice.
+ boolean subscribed;
+ try {
+ subscribed = PersistenceManager.isAlreadySubscribed(getType(), subscriber.getTenantId());
+ } catch (Exception e) {
+ String msg = "Error checking whether the cartridge type " + getType()
+ + " is already subscribed";
+ log.error(msg, e);
+ throw new ADCException(msg, e);
+ }
+
+ if (subscribed) {
+ String msg = "Already subscribed to " + getType()
+ + ". This multi-tenant cartridge will not be available to subscribe";
+ if (log.isDebugEnabled()) {
+ log.debug(msg);
+ }
+ throw new AlreadySubscribedException(msg, getType());
+ }
+ }
+
+ TopologyManagementService topologyService = DataHolder.getTopologyMgtService();
+ DomainContext[] domainContexts = topologyService.getDomainsAndSubdomains(getType(), subscriber.getTenantId());
+ log.info("Retrieved " + domainContexts.length + " domain and corresponding subdomain pairs");
+
+ if (domainContexts.length > 0) {
+ if(domainContexts.length > 2) {
+ if(log.isDebugEnabled())
+ log.debug("Too many domain sub domain pairs");
+ }
+
+ for (DomainContext domainContext : domainContexts) {
+ if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
+ setMgtClusterDomain(domainContext.getDomain());
+ setMgtClusterSubDomain(domainContext.getSubDomain());
+ } else {
+ setClusterDomain(domainContext.getDomain());
+ setClusterSubDomain(domainContext.getSubDomain());
+ }
+ }
+ } else {
+ String msg = "Domain contexts not found for " + getType() + " and tenant id " + subscriber.getTenantId();
+ log.warn(msg);
+ throw new ADCException(msg);
+ }
+ }
+
+ @Override
+ public void unsubscribe() throws ADCException, NotSubscribedException {
+
+ log.info("Cartridge with alias " + getAlias() + ", and type " + getType() +
+ " is a multi-tenant cartridge and therefore will not terminate all instances and " +
+ "unregister services");
+
+ super.cleanupSubscription();
+ }
+
+ @Override
+ public CartridgeSubscription registerSubscription(Properties properties) {
+
+ return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+ getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+ getRepository(), getHostName(), getClusterDomain(), getClusterSubDomain(),
+ getMgtClusterDomain(), getMgtClusterSubDomain(), null, "PENDING");
+ }
+
+ @Override
+ public PayloadArg createPayloadParameters() {
+
+ return 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/instance/SingleTenantCartridgeInstance.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/SingleTenantCartridgeInstance.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/SingleTenantCartridgeInstance.java
new file mode 100644
index 0000000..8b27657
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/SingleTenantCartridgeInstance.java
@@ -0,0 +1,138 @@
+/*
+ * 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.instance;
+
+import org.apache.axis2.AxisFault;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
+import org.apache.stratos.adc.mgt.dao.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.*;
+import org.apache.stratos.adc.mgt.payload.PayloadArg;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+
+import java.util.Properties;
+
+public class SingleTenantCartridgeInstance extends CartridgeInstance {
+
+ private static Log log = LogFactory.getLog(SingleTenantCartridgeInstance.class);
+
+
+ public SingleTenantCartridgeInstance(CartridgeInfo cartridgeInfo) {
+ super(cartridgeInfo);
+ }
+
+ @Override
+ public void subscribe(Subscriber subscriber, String alias, Policy autoscalingPolicy,
+ Repository repository) throws
+ InvalidCartridgeAliasException, DuplicateCartridgeAliasException, ADCException,
+ RepositoryCredentialsRequiredException, RepositoryTransportException, UnregisteredCartridgeException,
+ AlreadySubscribedException, RepositoryRequiredException, InvalidRepositoryException, PolicyException {
+
+ super.subscribe(subscriber, alias, autoscalingPolicy, repository);
+ setClusterDomain(alias + "." + getHostName() + "." + getType() + ".domain");
+ setHostName(alias + "." + getHostName());
+ }
+
+ @Override
+ public CartridgeSubscription registerSubscription(Properties payloadProperties)
+ throws ADCException, UnregisteredCartridgeException {
+
+ ApplicationManagementUtil.registerService(getType(),
+ getClusterDomain(),
+ getClusterSubDomain(),
+ getPayload().createPayload(),
+ getPayload().getPayloadArg().getTenantRange(),
+ getHostName(),
+ null);
+
+ getPayload().delete();
+
+ return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
+ getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
+ getRepository(), getHostName(), getClusterDomain(), getClusterSubDomain(),
+ getMgtClusterDomain(), getMgtClusterSubDomain(), null, "PENDING");
+ }
+
+ @Override
+ public void unsubscribe() throws ADCException, NotSubscribedException {
+
+ try {
+ CloudControllerServiceClient.getServiceClient().terminateAllInstances(getClusterDomain(),
+ getClusterSubDomain());
+
+ } catch (AxisFault e) {
+ String errorMsg = "Error in terminating cartridge instance, alias " + getAlias();
+ log.error(errorMsg);
+ throw new ADCException(errorMsg, e);
+
+ } catch (Exception e) {
+ String errorMsg = "Error in terminating cartridge instance, alias " + getAlias();
+ log.error(errorMsg);
+ throw new ADCException(errorMsg, e);
+ }
+
+ log.info("Terminated all instances of " + getClusterDomain() + " " + getClusterSubDomain());
+
+ try {
+ CloudControllerServiceClient.getServiceClient().unregisterService(getClusterDomain(),
+ getClusterSubDomain());
+
+ } catch (Exception e) {
+ String errorMsg = "Error in unregistering service cluster with domain " + getClusterDomain() +
+ ", sub domain " + getClusterSubDomain();
+ log.error(errorMsg);
+ throw new ADCException(errorMsg, e);
+ }
+
+ log.info("Unregistered service cluster, domain " + getClusterDomain() + ", sub domain " +
+ getClusterSubDomain());
+
+ cleanupSubscription();
+ }
+
+ @Override
+ public PayloadArg createPayloadParameters()
+ throws ADCException {
+
+ PayloadArg payloadArg = super.createPayloadParameters();
+ if(getRepository() != null) {
+ payloadArg.setRepoURL(getRepository().getUrl());
+ }
+ payloadArg.setHostName(getHostName());
+ payloadArg.setServiceDomain(getClusterDomain());
+ payloadArg.setServiceSubDomain(getMgtClusterSubDomain());
+ payloadArg.setMgtServiceDomain(getMgtClusterDomain());
+ payloadArg.setMgtServiceSubDomain(getMgtClusterSubDomain());
+ if(getCartridgeInfo().getProvider().equals(CartridgeConstants.PROVIDER_NAME_WSO2)) {
+ payloadArg.setTenantRange(Integer.toString(getSubscriber().getTenantId()));
+ }
+ else {
+ payloadArg.setTenantRange("*");
+ }
+
+ return payloadArg;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fce0c67d/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/cache/CartridgeInstanceCache.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/cache/CartridgeInstanceCache.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/cache/CartridgeInstanceCache.java
new file mode 100644
index 0000000..f9a4cdb
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/cache/CartridgeInstanceCache.java
@@ -0,0 +1,119 @@
+/*
+ * 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.instance.cache;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.instance.CartridgeInstance;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class CartridgeInstanceCache {
+
+ private static final Log log = LogFactory.getLog(CartridgeInstanceCache.class);
+
+ private Map<CartridgeInstanceCacheKey, CartridgeInstance> cartridgeInstanceKeyToCartridgeInstance;
+ private final Map<Integer, List<CartridgeInstance>> tenantIdToCartridgeInstance;
+
+ private static CartridgeInstanceCache cartridgeInstanceCache;
+
+ private CartridgeInstanceCache() {
+ cartridgeInstanceKeyToCartridgeInstance = new ConcurrentHashMap<CartridgeInstanceCacheKey,
+ CartridgeInstance>();
+ tenantIdToCartridgeInstance = new ConcurrentHashMap<Integer, List<CartridgeInstance>>();
+ }
+
+ public static CartridgeInstanceCache getCartridgeInstanceCache() {
+
+ if (cartridgeInstanceCache == null) {
+ synchronized(CartridgeInstanceCache.class) {
+ if (cartridgeInstanceCache == null) {
+ cartridgeInstanceCache = new CartridgeInstanceCache();
+ }
+ }
+ }
+ return cartridgeInstanceCache;
+ }
+
+ public void addCartridgeInstances (int tenantId, List<CartridgeInstance> cartridgeInstances) {
+
+ //tenantIdToCartridgeInstance.put(tenantId, cartridgeInstances);
+ for(CartridgeInstance cartridgeInstance : cartridgeInstances) {
+ addCartridgeInstance(new CartridgeInstanceCacheKey(tenantId, cartridgeInstance.getAlias()),
+ cartridgeInstance);
+ }
+ }
+
+ public void addCartridgeInstance(CartridgeInstanceCacheKey cartridgeInstanceCacheKey,
+ CartridgeInstance cartridgeInstance) {
+
+ cartridgeInstanceKeyToCartridgeInstance.put(cartridgeInstanceCacheKey, cartridgeInstance);
+
+ List<CartridgeInstance> cartridgeInstances = tenantIdToCartridgeInstance.get(cartridgeInstanceCacheKey.
+ getTenantId());
+ if(cartridgeInstances != null) {
+ cartridgeInstances.add(cartridgeInstance);
+ }
+ else {
+ cartridgeInstances = new Vector<CartridgeInstance>();
+ cartridgeInstances.add(cartridgeInstance);
+ tenantIdToCartridgeInstance.put(cartridgeInstanceCacheKey.getTenantId(), cartridgeInstances);
+ }
+
+ log.info("Added tenant " + cartridgeInstanceCacheKey.getTenantId() + "'s cartridge instance with alias " +
+ cartridgeInstanceCacheKey.getCartridgeInstanceAlias() + " to the cache");
+ }
+
+ public CartridgeInstance getCartridgeInstance (CartridgeInstanceCacheKey cartridgeInstanceCacheKey) {
+
+ return cartridgeInstanceKeyToCartridgeInstance.get(cartridgeInstanceCacheKey);
+ }
+
+ public List<CartridgeInstance> getCartridgeInstances (int tenantId) {
+
+ return tenantIdToCartridgeInstance.get(tenantId);
+ }
+
+ public boolean alreadyExists (CartridgeInstanceCacheKey cartridgeInstanceCacheKey) {
+
+ return cartridgeInstanceKeyToCartridgeInstance.containsKey(cartridgeInstanceCacheKey);
+ }
+
+ public void removeCartridgeInstances (int tenantId) {
+
+ List<CartridgeInstance> cartridgeInstances = tenantIdToCartridgeInstance.get(tenantId);
+ for (CartridgeInstance cartridgeInstance : cartridgeInstances) {
+ removeCartridgeInstance(new CartridgeInstanceCacheKey(tenantId, cartridgeInstance.getAlias()));
+ }
+ }
+
+ public void removeCartridgeInstance (CartridgeInstanceCacheKey cartridgeInstanceCacheKey) {
+
+ if (cartridgeInstanceKeyToCartridgeInstance.remove(cartridgeInstanceCacheKey) != null &&
+ tenantIdToCartridgeInstance.remove(cartridgeInstanceCacheKey.getTenantId()) != null) {
+
+ log.info("Removed tenant " + cartridgeInstanceCacheKey.getTenantId() + "'s cartridge instance with alias " +
+ cartridgeInstanceCacheKey.getCartridgeInstanceAlias() + " from the cache");
+ }
+ }
+}
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/instance/cache/CartridgeInstanceCacheKey.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/cache/CartridgeInstanceCacheKey.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/cache/CartridgeInstanceCacheKey.java
new file mode 100644
index 0000000..480db2c
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/cache/CartridgeInstanceCacheKey.java
@@ -0,0 +1,59 @@
+/*
+ * 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.instance.cache;
+
+public class CartridgeInstanceCacheKey {
+
+ private int tenantId;
+ private String cartridgeAlias;
+
+ public CartridgeInstanceCacheKey (int tenantId, String cartridgeAlias) {
+
+ this.tenantId = tenantId;
+ this.cartridgeAlias = cartridgeAlias;
+ }
+
+ public int getTenantId() {
+ return tenantId;
+ }
+
+ public String getCartridgeInstanceAlias() {
+ return cartridgeAlias;
+ }
+
+ public boolean equals (Object object) {
+
+ if(object == this) {
+ return true;
+ }
+ else if (object == null || !(object instanceof CartridgeInstanceCacheKey)) {
+ return false;
+ }
+
+ CartridgeInstanceCacheKey subscriptionKey = (CartridgeInstanceCacheKey)object;
+ return this.getCartridgeInstanceAlias().equals(subscriptionKey.getCartridgeInstanceAlias()) &&
+ this.getTenantId() == subscriptionKey.getTenantId();
+ }
+
+ public int hashCode () {
+
+ return getCartridgeInstanceAlias().hashCode() + Integer.toString(getTenantId()).hashCode();
+ }
+}
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/instance/factory/CartridgeInstanceFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/factory/CartridgeInstanceFactory.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/factory/CartridgeInstanceFactory.java
new file mode 100644
index 0000000..c4ab89a
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/factory/CartridgeInstanceFactory.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.adc.mgt.instance.factory;
+
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.instance.CartridgeInstance;
+import org.apache.stratos.adc.mgt.instance.DataCartridgeInstance;
+import org.apache.stratos.adc.mgt.instance.MultiTenantCartridgeInstance;
+import org.apache.stratos.adc.mgt.instance.SingleTenantCartridgeInstance;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+
+public class CartridgeInstanceFactory {
+
+ /**
+ * Returns the relevant CartridgeInstance object for the given criteria
+ *
+ * @param cartridgeInfo CartridgeInfo instance
+ * @return CartridgeInstance instance
+ * @throws ADCException if no matching criteria is there to create a CartridgeInstance object
+ */
+ public static CartridgeInstance getCartridgeInstance (CartridgeInfo cartridgeInfo)
+ throws ADCException {
+
+ CartridgeInstance cartridgeInstance = null;
+ if(cartridgeInfo.getMultiTenant()) {
+ cartridgeInstance = new MultiTenantCartridgeInstance(cartridgeInfo);
+
+ } else {
+ if(cartridgeInfo.getType().equals(CartridgeConstants.MYSQL_CARTRIDGE_NAME)) {
+ cartridgeInstance = new DataCartridgeInstance(cartridgeInfo);
+ }
+ else if (cartridgeInfo.getType().equals(CartridgeConstants.PHP_CARTRIDGE_NAME)) {
+ cartridgeInstance = new SingleTenantCartridgeInstance(cartridgeInfo);
+ }
+ else if (cartridgeInfo.getType().equals(CartridgeConstants.TOMCAT_CARTRIDGE_NAME)) {
+ cartridgeInstance = new SingleTenantCartridgeInstance(cartridgeInfo);
+ }
+ }
+
+ if(cartridgeInstance == null) {
+ throw new ADCException("Unable to find matching CartridgeInstance for "
+ + cartridgeInfo);
+ }
+
+ 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/instance/utils/CartridgeInstanceUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/utils/CartridgeInstanceUtils.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/utils/CartridgeInstanceUtils.java
new file mode 100644
index 0000000..40f151f
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/instance/utils/CartridgeInstanceUtils.java
@@ -0,0 +1,240 @@
+/*
+ * 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.instance.utils;
+
+public class CartridgeInstanceUtils {
+ /*
+ private static Log log = LogFactory.getLog(CartridgeInstanceUtils.class);
+
+ 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])*)+";
+ Pattern pattern = Pattern.compile(patternString);
+
+ if (!pattern.matcher(alias).matches()) {
+ String msg = "The alias " + alias + " can contain only alpha-numeric lowercase characters. Please enter a valid alias.";
+ log.error(msg);
+ throw new InvalidCartridgeAliasException(msg, cartridgeType, alias);
+ }
+
+ boolean isAliasTaken = false;
+ try {
+ isAliasTaken = PersistenceManager.isAliasAlreadyTaken(alias, cartridgeType);
+ } catch (Exception e) {
+ String msg = "Exception : " + e.getMessage();
+ log.error(msg, e);
+ throw new ADCException("Error when checking alias is already taken", e);
+ }
+
+ if (isAliasTaken) {
+ String msg = "The alias " + alias + " is already taken. Please try again with a different alias.";
+ log.error(msg);
+ throw new DuplicateCartridgeAliasException(msg, cartridgeType, alias);
+ }
+ }
+
+ public static String generatePassword() {
+
+ final int PASSWORD_LENGTH = 8;
+ StringBuffer sb = new StringBuffer();
+ for (int x = 0; x < PASSWORD_LENGTH; x++) {
+ sb.append((char) ((int) (Math.random() * 26) + 97));
+ }
+ return sb.toString();
+
+ }
+
+ public static CartridgeSubscription createCartridgeSubscription(CartridgeInfo cartridgeInfo,
+ Policy policy,
+ String cartridgeType,
+ String cartridgeAlias,
+ int tenantId,
+ String tenantDomain,
+ Repository repository,
+ String clusterDomain,
+ String clusterSubDomain,
+ String hostName,
+ String mgtClusterDomain,
+ String mgtClusterSubDomain,
+ DataCartridge dataCartridge) {
+
+ CartridgeSubscription cartridgeSubscription = new CartridgeSubscription();
+ cartridgeSubscription.setCartridge(cartridgeType);
+ cartridgeSubscription.setAlias(cartridgeAlias);
+ cartridgeSubscription.setClusterDomain(clusterDomain);
+ cartridgeSubscription.setClusterSubdomain(clusterSubDomain);
+ cartridgeSubscription.setMgtClusterDomain(mgtClusterDomain);
+ cartridgeSubscription.setMgtClusterSubDomain(mgtClusterSubDomain);
+ cartridgeSubscription.setHostName(hostName);
+ cartridgeSubscription.setPolicy(policy.getName());
+ cartridgeSubscription.setRepository(repository);
+ cartridgeSubscription.setPortMappings(createPortMappings(cartridgeInfo));
+ cartridgeSubscription.setProvider(cartridgeInfo.getProvider());
+ cartridgeSubscription.setDataCartridge(dataCartridge);
+ cartridgeSubscription.setTenantId(tenantId);
+ cartridgeSubscription.setTenantDomain(tenantDomain);
+ cartridgeSubscription.setBaseDirectory(cartridgeInfo.getBaseDir());
+ cartridgeSubscription.setState("PENDING");
+
+ return cartridgeSubscription;
+ }
+
+ private static List<PortMapping> createPortMappings(CartridgeInfo cartridgeInfo) {
+ List<PortMapping> portMappings = new ArrayList<PortMapping>();
+
+ if (cartridgeInfo.getPortMappings() != null) {
+ for (org.apache.stratos.cloud.controller.util.xsd.PortMapping portMapping : cartridgeInfo.getPortMappings()) {
+ PortMapping portMap = new PortMapping();
+ portMap.setPrimaryPort(portMapping.getPort());
+ portMap.setProxyPort(portMapping.getProxyPort());
+ portMap.setType(portMapping.getProtocol());
+ portMappings.add(portMap);
+ }
+ }
+ return portMappings;
+ }
+
+ public static void addDNSEntry(String alias, String cartridgeType) {
+ new DNSManager().addNewSubDomain(alias + "." + cartridgeType, System.getProperty(CartridgeConstants.ELB_IP));
+ }
+
+ public static SubscriptionInfo createSubscriptionResponse(CartridgeSubscription cartridgeSubscription, Repository repository) {
+ SubscriptionInfo subscriptionInfo = new SubscriptionInfo();
+
+ if (repository != null && repository.getUrl() != null) {
+ subscriptionInfo.setRepositoryURL(convertRepoURL(repository.getUrl()));
+ }
+ subscriptionInfo.setHostname(cartridgeSubscription.getHostName());
+
+ return subscriptionInfo;
+ }
+
+ private static String convertRepoURL(String gitURL) {
+ String convertedHttpURL = null;
+ if (gitURL != null && gitURL.startsWith("git@")) {
+ StringBuilder httpRepoUrl = new StringBuilder();
+ httpRepoUrl.append("http://");
+ String[] urls = gitURL.split(":");
+ String[] hostNameArray = urls[0].split("@");
+ String hostName = hostNameArray[1];
+ httpRepoUrl.append(hostName).append("/").append(urls[1]);
+ convertedHttpURL = httpRepoUrl.toString();
+ } else if (gitURL != null && gitURL.startsWith("http")) {
+ convertedHttpURL = gitURL;
+ }
+ return convertedHttpURL;
+ }
+
+ public static RepositoryInformation validateRepository(String repoURL, String repoUsername, String repoPassword,
+ boolean privateRepo, boolean testConnection)
+
+ throws RepositoryRequiredException, ADCException,
+ RepositoryCredentialsRequiredException, InvalidRepositoryException, RepositoryTransportException {
+
+ RepositoryInformation repositoryInformation = new RepositoryInformation();
+ repositoryInformation.setRepoURL(repoURL);
+ if (log.isDebugEnabled()) {
+ log.debug("Validating Git Repository");
+ }
+
+ if (repoURL == null || repoURL.trim().length() == 0) {
+ throw new RepositoryRequiredException("External repository required for subscription");
+ }
+
+ if (repoURL != null && repoURL.trim().length() > 0 && privateRepo) {
+ if (log.isDebugEnabled()) {
+ log.debug("External repo validation is a private repo: " + repoURL);
+ }
+ if (repoUsername == null || repoUsername.trim().length() == 0 || repoPassword == null
+ || repoPassword.trim().length() == 0) {
+ throw new RepositoryCredentialsRequiredException(
+ "Username and Password are required for private repository");
+ }
+ }
+
+ if (!testConnection) {
+ if (log.isDebugEnabled()) {
+ log.debug("External repo validation is not enabled");
+ }
+ return repositoryInformation;
+ }
+
+ if (repoURL == null || repoURL.trim().length() == 0) {
+ // This means, no repo to validate.
+ return repositoryInformation;
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("External repo validation enabled");
+ }
+
+ // This assumes running on Linux.
+ String parentDirName = "/tmp/" + UUID.randomUUID().toString();
+ CredentialsProvider credentialsProvider = null;
+ if (repoUsername != null && repoUsername.trim().length() > 0 && repoPassword != null
+ && repoPassword.trim().length() > 0) {
+ if (log.isDebugEnabled()) {
+ log.debug("External repo credentails are passed: " + repoUsername);
+ }
+ credentialsProvider = new UsernamePasswordCredentialsProvider(repoUsername, repoPassword.toCharArray());
+ }
+
+ // Initialize temp local file repo
+ FileRepository localRepo = null;
+ try {
+ File f = new File(parentDirName + "/.git");
+ localRepo = new FileRepository(f);
+ if (log.isDebugEnabled()) {
+ log.debug("Local File Repo: " + f.getAbsoluteFile());
+ }
+ } catch (IOException e) {
+ throw new ADCException("Error creating local file repo", e);
+ }
+
+ Git git = new Git(localRepo);
+ LsRemoteCommand cmd = git.lsRemote().setRemote(repoURL);
+ if (credentialsProvider != null) {
+ cmd.setCredentialsProvider(credentialsProvider);
+ }
+ try {
+ Collection<Ref> collection = cmd.call();
+ List<String> refNames = new ArrayList<String>();
+ if (collection != null) {
+ for (Ref ref : collection) {
+ if (log.isDebugEnabled()) {
+ log.debug(repoURL + ": " + ref.getName());
+ }
+ refNames.add(ref.getName());
+ }
+ }
+ repositoryInformation.setRefName(refNames.toArray(new String[refNames.size()]));
+ } catch (InvalidRemoteException e) {
+ throw new InvalidRepositoryException("Provided repository url is not valid", e);
+ } catch (TransportException e) {
+ throw new RepositoryTransportException("Transport error when checking remote repository", e);
+ } catch (GitAPIException e) {
+ throw new ADCException("Git API error when checking remote repository", e);
+ }
+ return repositoryInformation;
+ }*/
+}