You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/01/10 21:34:05 UTC

[1/2] stratos git commit: Implementing domain mappings rest api methods

Repository: stratos
Updated Branches:
  refs/heads/master 4a724b159 -> c1517c504


Implementing domain mappings rest api methods


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

Branch: refs/heads/master
Commit: 2c4d8b96ba19bfc90c30b44c749abb4d1afe8e5e
Parents: 4a724b1
Author: Imesh Gunaratne <im...@apache.org>
Authored: Sun Jan 11 01:43:11 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Sun Jan 11 01:43:11 2015 +0530

----------------------------------------------------------------------
 .../mapping/ApplicationDomainMappingsBean.java  | 49 ++++++++++
 .../domain/mapping/DomainMappingBean.java       | 57 ++++++++++++
 .../client/StratosManagerServiceClient.java     | 14 +++
 .../rest/endpoint/api/StratosApiV41.java        | 36 ++++++++
 .../rest/endpoint/api/StratosApiV41Utils.java   | 97 ++++++++++++++++++++
 .../util/converter/ObjectConverter.java         | 16 ++++
 6 files changed, 269 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/2c4d8b96/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/application/domain/mapping/ApplicationDomainMappingsBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/application/domain/mapping/ApplicationDomainMappingsBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/application/domain/mapping/ApplicationDomainMappingsBean.java
new file mode 100644
index 0000000..de536f5
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/application/domain/mapping/ApplicationDomainMappingsBean.java
@@ -0,0 +1,49 @@
+/*
+ * 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.common.beans.application.domain.mapping;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+import java.util.List;
+
+@XmlRootElement(name="applicationDomainMappings")
+public class ApplicationDomainMappingsBean implements Serializable {
+
+    private static final long serialVersionUID = 8896916017135654616L;
+
+    private String applicationId;
+    private List<DomainMappingBean> domainMappings;
+
+    public String getApplicationId() {
+        return applicationId;
+    }
+
+    public void setApplicationId(String applicationId) {
+        this.applicationId = applicationId;
+    }
+
+    public List<DomainMappingBean> getDomainMappings() {
+        return domainMappings;
+    }
+
+    public void setDomainMappings(List<DomainMappingBean> domainMappings) {
+        this.domainMappings = domainMappings;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/2c4d8b96/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/application/domain/mapping/DomainMappingBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/application/domain/mapping/DomainMappingBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/application/domain/mapping/DomainMappingBean.java
new file mode 100644
index 0000000..78039af
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/application/domain/mapping/DomainMappingBean.java
@@ -0,0 +1,57 @@
+/*
+ * 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.common.beans.application.domain.mapping;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+
+@XmlRootElement(name="domainMapping")
+public class DomainMappingBean implements Serializable {
+
+    private static final long serialVersionUID = -9070100712931939993L;
+
+    private String cartridgeAlias;
+    private String domainName;
+    private String contextPath;
+
+    public String getCartridgeAlias() {
+        return cartridgeAlias;
+    }
+
+    public void setCartridgeAlias(String cartridgeAlias) {
+        this.cartridgeAlias = cartridgeAlias;
+    }
+
+    public String getDomainName() {
+        return domainName;
+    }
+
+    public void setDomainName(String domainName) {
+        this.domainName = domainName;
+    }
+
+    public String getContextPath() {
+        return contextPath;
+    }
+
+    public void setContextPath(String contextPath) {
+        this.contextPath = contextPath;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/2c4d8b96/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java
index d8c4a9a..b5767df 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java
@@ -27,8 +27,10 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.manager.service.stub.StratosManagerServiceApplicationSignUpExceptionException;
 import org.apache.stratos.manager.service.stub.StratosManagerServiceArtifactDistributionCoordinatorExceptionException;
+import org.apache.stratos.manager.service.stub.StratosManagerServiceDomainMappingExceptionException;
 import org.apache.stratos.manager.service.stub.StratosManagerServiceStub;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp;
+import org.apache.stratos.manager.service.stub.domain.domain.mapping.DomainMapping;
 
 import java.rmi.RemoteException;
 
@@ -141,4 +143,16 @@ public class StratosManagerServiceClient {
     public void notifyArtifactUpdatedEventForRepository(String repoUrl) throws StratosManagerServiceArtifactDistributionCoordinatorExceptionException, RemoteException {
         stub.notifyArtifactUpdatedEventForRepository(repoUrl);
     }
+
+    public void addDomainMapping(DomainMapping domainMapping) throws RemoteException, StratosManagerServiceDomainMappingExceptionException {
+        stub.addDomainMapping(domainMapping);
+    }
+
+    public void removeDomainMapping(String applicationId, int tenantId, String domainName) throws RemoteException, StratosManagerServiceDomainMappingExceptionException {
+        stub.removeDomainMapping(applicationId, tenantId, domainName);
+    }
+
+    public DomainMapping[] getDomainMappings(String applicationId, int tenantId) throws RemoteException, StratosManagerServiceDomainMappingExceptionException {
+        return stub.getDomainMappings(applicationId, tenantId);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/2c4d8b96/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 54b90fb..bddba05 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -23,6 +23,8 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.common.beans.*;
 import org.apache.stratos.common.beans.application.ApplicationBean;
 import org.apache.stratos.common.beans.application.GroupBean;
+import org.apache.stratos.common.beans.application.domain.mapping.ApplicationDomainMappingsBean;
+import org.apache.stratos.common.beans.application.domain.mapping.DomainMappingBean;
 import org.apache.stratos.common.beans.application.signup.ApplicationSignUpBean;
 import org.apache.stratos.common.beans.policy.autoscale.AutoscalePolicyBean;
 import org.apache.stratos.common.beans.policy.deployment.DeploymentPolicyBean;
@@ -450,6 +452,40 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().build();
     }
 
+    @POST
+    @Path("/applications/{applicationId}/domainMappings")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    public Response addDomainMappings(@PathParam("applicationId") String applicationId,
+                                         ApplicationDomainMappingsBean domainMapppingsBean) throws RestAPIException {
+        StratosApiV41Utils.addApplicationDomainMappings(applicationId, domainMapppingsBean);
+        return Response.ok().build();
+    }
+
+    @DELETE
+    @Path("/applications/{applicationId}/domainMappings")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    public Response removeDomainMappings(@PathParam("applicationId") String applicationId,
+                                     ApplicationDomainMappingsBean domainMapppingsBean) throws RestAPIException {
+        StratosApiV41Utils.removeApplicationDomainMappings(applicationId, domainMapppingsBean);
+        return Response.ok().build();
+    }
+
+    @GET
+    @Path("/applications/{applicationId}/domainMappings")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    public Response getDomainMappings(@PathParam("applicationId") String applicationId) throws RestAPIException {
+        List<DomainMappingBean> domainMappingsBeanList = StratosApiV41Utils.getApplicationDomainMappings(applicationId);
+        DomainMappingBean[] domainMappingsBeans = domainMappingsBeanList.toArray(
+                new DomainMappingBean[domainMappingsBeanList.size()]);
+        return Response.ok(domainMappingsBeans).build();
+    }
+
     /**
      * Undeploy application.
      *

http://git-wip-us.apache.org/repos/asf/stratos/blob/2c4d8b96/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index cc3ed64..5e44d0e 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -36,6 +36,8 @@ import org.apache.stratos.cloud.controller.stub.domain.Volume;
 import org.apache.stratos.common.beans.PropertyBean;
 import org.apache.stratos.common.beans.application.ApplicationBean;
 import org.apache.stratos.common.beans.application.GroupBean;
+import org.apache.stratos.common.beans.application.domain.mapping.ApplicationDomainMappingsBean;
+import org.apache.stratos.common.beans.application.domain.mapping.DomainMappingBean;
 import org.apache.stratos.common.beans.application.signup.ApplicationSignUpBean;
 import org.apache.stratos.common.beans.artifact.repository.GitNotificationPayloadBean;
 import org.apache.stratos.common.beans.cartridge.CartridgeBean;
@@ -56,6 +58,7 @@ import org.apache.stratos.common.client.StratosManagerServiceClient;
 import org.apache.stratos.common.util.CommonUtil;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ArtifactRepository;
+import org.apache.stratos.manager.service.stub.domain.domain.mapping.DomainMapping;
 import org.apache.stratos.manager.utils.ApplicationManagementUtil;
 import org.apache.stratos.manager.utils.CartridgeConstants;
 import org.apache.stratos.messaging.domain.application.Application;
@@ -1513,4 +1516,98 @@ public class StratosApiV41Utils {
             throw new RestAPIException(message, e);
         }
     }
+
+    public static void addApplicationDomainMappings(String applicationId,
+                                                    ApplicationDomainMappingsBean domainMapppingsBean) throws RestAPIException {
+
+        try {
+            int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
+            StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
+            if(domainMapppingsBean.getDomainMappings() != null) {
+
+                for(DomainMappingBean domainMappingBean : domainMapppingsBean.getDomainMappings()) {
+                    ClusterDataHolder clusterDataHolder = findClusterDataHolder(applicationId, domainMappingBean.getCartridgeAlias());
+
+                    DomainMapping domainMapping = ObjectConverter.convertDomainMappingBeanToStubDomainMapping(domainMappingBean);
+                    domainMapping.setApplicationId(applicationId);
+                    domainMapping.setTenantId(tenantId);
+                    domainMapping.setServiceName(clusterDataHolder.getServiceType());
+                    domainMapping.setClusterId(clusterDataHolder.getClusterId());
+                    serviceClient.addDomainMapping(domainMapping);
+
+                    if(log.isInfoEnabled()) {
+                        log.info(String.format("Domain mapping added: [application-id] %s [tenant-id] %d " +
+                                "[domain-name] %s [context-path] %s", applicationId, tenantId,
+                                domainMapping.getDomainName(), domainMapping.getContextPath()));
+                    }
+                }
+            }
+        } catch (Exception e) {
+            String message = "Could not add domain mappings: [application-id] " + applicationId;
+            log.error(message, e);
+            throw new RestAPIException(message, e);
+        }
+    }
+
+    private static ClusterDataHolder findClusterDataHolder(String applicationId, String cartridgeAlias) {
+        Application application = ApplicationManager.getApplications().getApplication(applicationId);
+        if(application == null) {
+            throw new RuntimeException(String.format("Application not found: [application-id] %s", applicationId));
+        }
+
+        ClusterDataHolder clusterDataHolder = application.getClusterData(cartridgeAlias);
+        if(clusterDataHolder == null) {
+            throw new RuntimeException(String.format("Cluster data not found for cartridge alias: [application-id] %s " +
+                    "[cartridge-alias] %s", applicationId, cartridgeAlias));
+        }
+        return clusterDataHolder;
+    }
+
+    public static void removeApplicationDomainMappings(String applicationId,
+                                                       ApplicationDomainMappingsBean domainMapppingsBean)
+            throws RestAPIException {
+
+        try {
+            int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
+            StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
+            if(domainMapppingsBean.getDomainMappings() != null) {
+
+                for(DomainMappingBean domainMappingBean : domainMapppingsBean.getDomainMappings()) {
+                    serviceClient.removeDomainMapping(applicationId, tenantId, domainMappingBean.getDomainName());
+
+                    if(log.isInfoEnabled()) {
+                        log.info(String.format("Domain mapping removed: [application-id] %s [tenant-id] %d " +
+                                        "[domain-name] %s", applicationId, tenantId,
+                                domainMappingBean.getDomainName()));
+                    }
+                }
+            }
+        } catch (Exception e) {
+            String message = "Could not remove domain mappings: [application-id] " + applicationId;
+            log.error(message, e);
+            throw new RestAPIException(message, e);
+        }
+    }
+
+    public static List<DomainMappingBean> getApplicationDomainMappings(String applicationId) throws RestAPIException {
+        try {
+            int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
+            List<DomainMappingBean> domainMappingsBeans = new ArrayList<DomainMappingBean>();
+            StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
+            DomainMapping[] domainMappings = serviceClient.getDomainMappings(applicationId, tenantId);
+            if(domainMappings != null) {
+                for(DomainMapping domainMapping : domainMappings) {
+                    if(domainMapping != null) {
+                        DomainMappingBean domainMappingBean = ObjectConverter.convertStubDomainMappingToDomainMappingBean(domainMapping);
+                        domainMappingsBeans.add(domainMappingBean);
+                    }
+                }
+            }
+            return domainMappingsBeans;
+        } catch (Exception e) {
+            String message = "Could not get domain mappings: [application-id] " + applicationId;
+            log.error(message, e);
+            throw new RestAPIException(message, e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/2c4d8b96/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
index 7ef13f7..de0c1db 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
@@ -30,6 +30,7 @@ import org.apache.stratos.cloud.controller.stub.domain.*;
 import org.apache.stratos.common.Properties;
 import org.apache.stratos.common.Property;
 import org.apache.stratos.common.beans.application.*;
+import org.apache.stratos.common.beans.application.domain.mapping.DomainMappingBean;
 import org.apache.stratos.common.beans.application.signup.ApplicationSignUpBean;
 import org.apache.stratos.common.beans.artifact.repository.ArtifactRepositoryBean;
 import org.apache.stratos.common.beans.cartridge.*;
@@ -49,6 +50,7 @@ import org.apache.stratos.common.beans.topology.*;
 import org.apache.stratos.common.util.CommonUtil;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ArtifactRepository;
+import org.apache.stratos.manager.service.stub.domain.domain.mapping.DomainMapping;
 import org.apache.stratos.messaging.domain.application.Application;
 import org.apache.stratos.messaging.domain.application.Group;
 import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
@@ -1682,4 +1684,18 @@ public class ObjectConverter {
         }
         return applicationSignUpBean;
     }
+
+    public static DomainMapping convertDomainMappingBeanToStubDomainMapping(DomainMappingBean domainMappingBean) {
+        DomainMapping domainMapping = new DomainMapping();
+        domainMapping.setDomainName(domainMappingBean.getDomainName());
+        domainMapping.setContextPath(domainMappingBean.getContextPath());
+        return domainMapping;
+    }
+
+    public static DomainMappingBean convertStubDomainMappingToDomainMappingBean(DomainMapping domainMapping) {
+        DomainMappingBean domainMappingBean = new DomainMappingBean();
+        domainMappingBean.setDomainName(domainMapping.getDomainName());
+        domainMappingBean.setContextPath(domainMapping.getContextPath());
+        return domainMappingBean;
+    }
 }


[2/2] stratos git commit: Fixing NPE issue in domain mapping handler

Posted by im...@apache.org.
Fixing NPE issue in domain mapping handler


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

Branch: refs/heads/master
Commit: c1517c50402f23246cc37c9b9d78710116a35a49
Parents: 2c4d8b9
Author: Imesh Gunaratne <im...@apache.org>
Authored: Sun Jan 11 01:51:43 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Sun Jan 11 01:51:43 2015 +0530

----------------------------------------------------------------------
 .../apache/stratos/manager/components/DomainMappingHandler.java | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c1517c50/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java
index 3aaf014..75b31a8 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java
@@ -123,7 +123,10 @@ public class DomainMappingHandler {
     public DomainMapping[] getDomainMappings(String applicationId, int tenantId) throws DomainMappingException {
         try {
             ApplicationSignUp applicationSignUp = applicationSignUpHandler.getApplicationSignUp(applicationId, tenantId);
-            return applicationSignUp.getDomainMappings();
+            if(applicationSignUp != null) {
+                return applicationSignUp.getDomainMappings();
+            }
+            return null;
         } catch (Exception e) {
             String message = String.format("Could not get domain mappings: [application-id] %s [tenant-id] %d",
                     applicationId, tenantId);