You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/19 13:38:23 UTC

[2/2] stratos git commit: adding support to get instances hierarchy

adding support to get instances hierarchy


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

Branch: refs/heads/master
Commit: c666e54af37cd7d53861753282ffd4a580bc547a
Parents: b9ba5ea
Author: reka <rt...@gmail.com>
Authored: Fri Dec 19 13:32:38 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Fri Dec 19 17:45:27 2014 +0530

----------------------------------------------------------------------
 .../common/beans/topology/ApplicationBean.java  |  81 +++++++++++++
 .../beans/topology/ApplicationInstanceBean.java | 102 ++++++++++++++++
 .../beans/topology/ClusterInstanceBean.java     | 114 ++++++++++++++++++
 .../beans/topology/GroupInstanceBean.java       | 102 ++++++++++++++++
 .../rest/endpoint/api/StratosApiV41.java        |  25 +++-
 .../rest/endpoint/api/StratosApiV41Utils.java   |  83 +++++++++++++
 .../util/converter/ObjectConverter.java         | 119 +++++++++++++++++--
 .../src/main/webapp/api/WEB-INF/cxf-servlet.xml |   4 +
 8 files changed, 621 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c666e54a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ApplicationBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ApplicationBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ApplicationBean.java
new file mode 100644
index 0000000..217a588
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ApplicationBean.java
@@ -0,0 +1,81 @@
+package org.apache.stratos.common.beans.topology;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlRootElement(name="applications")
+public class ApplicationBean {
+
+    private String id;
+    private String name;
+    private String description;
+    private String tenantDomain;
+    private String tenantAdminUsername;
+    private List<ApplicationInstanceBean> applicationInstances;
+
+    public ApplicationBean(){
+        applicationInstances = new ArrayList<ApplicationInstanceBean>();
+    }
+
+    public void addGroupInstance(ApplicationInstanceBean groupInstance) {
+        this.getGroups().add(groupInstance);
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public void setTenantDomain(String tenantDomain) {
+        this.tenantDomain = tenantDomain;
+    }
+
+    public void setTenantAdminUsername(String tenantAdminUsername) {
+        this.tenantAdminUsername = tenantAdminUsername;
+    }
+
+    public String getTenantDomain() {
+        return tenantDomain;
+    }
+
+    public String getTenantAdminUsername() {
+        return tenantAdminUsername;
+    }
+
+
+    public void setApplicationInstances(List<ApplicationInstanceBean> instances) {
+		this.applicationInstances = instances;
+	}
+
+    public List<ApplicationInstanceBean> getGroups() {
+        return applicationInstances;
+    }
+
+    public void setGroups(List<ApplicationInstanceBean> groups) {
+        this.applicationInstances = groups;
+    }
+
+    public List<ApplicationInstanceBean> getApplicationInstances() {
+        return applicationInstances;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c666e54a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ApplicationInstanceBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ApplicationInstanceBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ApplicationInstanceBean.java
new file mode 100644
index 0000000..8f72fcc
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ApplicationInstanceBean.java
@@ -0,0 +1,102 @@
+/*
+ * 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.topology;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlRootElement(name="applicationInstances")
+public class ApplicationInstanceBean {
+
+	private String status;
+	private String instanceId;
+    private String parentInstanceId;
+    private String applicationId;
+    private List<GroupInstanceBean> groupInstances;
+    private List<ClusterInstanceBean> clusterInstances;
+
+    public ApplicationInstanceBean() {
+        groupInstances = new ArrayList<GroupInstanceBean>();
+        clusterInstances = new ArrayList<ClusterInstanceBean>();
+    }
+
+    public void addGroupInstance(GroupInstanceBean groupInstance) {
+        this.getGroups().add(groupInstance);
+    }
+
+    public void addClusterInstance(ClusterInstanceBean clusterInstance) {
+        this.getClusterInstances().add(clusterInstance);
+    }
+    public List<ClusterInstanceBean> getClusterInstances() {
+        return clusterInstances;
+    }
+
+    public void setGroupInstances(List<GroupInstanceBean> instances) {
+        this.groupInstances = instances;
+    }
+
+    public List<GroupInstanceBean> getGroups() {
+        return groupInstances;
+    }
+
+    public void setGroups(List<GroupInstanceBean> groups) {
+        this.groupInstances = groups;
+    }
+
+    public List<GroupInstanceBean> getGroupInstances() {
+        return groupInstances;
+    }
+
+    public void setClusters(List<ClusterInstanceBean> clusters) {
+        this.clusterInstances = clusters;
+    }
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getInstanceId() {
+		return instanceId;
+	}
+
+	public void setInstanceId(String instanceId) {
+		this.instanceId = instanceId;
+	}
+
+    public String getParentInstanceId() {
+        return parentInstanceId;
+    }
+
+    public void setParentInstanceId(String parentInstanceId) {
+        this.parentInstanceId = parentInstanceId;
+    }
+
+    public String getApplicationId() {
+        return applicationId;
+    }
+
+    public void setApplicationId(String applicationId) {
+        this.applicationId = applicationId;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c666e54a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ClusterInstanceBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ClusterInstanceBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ClusterInstanceBean.java
new file mode 100644
index 0000000..4746a05
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/ClusterInstanceBean.java
@@ -0,0 +1,114 @@
+/*
+ * 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.topology;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+@XmlRootElement(name="clusterInstance")
+public class ClusterInstanceBean {
+
+	private String status;
+	private String instanceId;
+    private String parentInstanceId;
+    private String alias;
+    private String serviceName;
+    private String clusterId;
+    private List<Member> member;
+    private String tenantRange;
+    private List<String> hostNames;
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getInstanceId() {
+		return instanceId;
+	}
+
+	public void setInstanceId(String instanceId) {
+		this.instanceId = instanceId;
+	}
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public String getClusterId() {
+        return clusterId;
+    }
+
+    public void setClusterId(String clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    public List<Member> getMember() {
+        return member;
+    }
+
+    public void setMember(List<Member> member) {
+        this.member = member;
+    }
+
+    public String getTenantRange() {
+        return tenantRange;
+    }
+
+    public void setTenantRange(String tenantRange) {
+        this.tenantRange = tenantRange;
+    }
+
+    public List<String> getHostNames() {
+        return hostNames;
+    }
+
+    public void setHostNames(List<String> hostNames) {
+        this.hostNames = hostNames;
+    }
+
+    @Override
+    public String toString() {
+        return "Cluster [serviceName=" + getServiceName() + ", clusterId=" + getClusterId() + ", member=" + getMember()
+                + ", tenantRange=" + getTenantRange() + ", hostNames=" + getHostNames();
+    }
+
+    public String getParentInstanceId() {
+        return parentInstanceId;
+    }
+
+    public void setParentInstanceId(String parentInstanceId) {
+        this.parentInstanceId = parentInstanceId;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c666e54a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/GroupInstanceBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/GroupInstanceBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/GroupInstanceBean.java
new file mode 100644
index 0000000..cf489b7
--- /dev/null
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/GroupInstanceBean.java
@@ -0,0 +1,102 @@
+/*
+ * 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.topology;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlRootElement(name="groupInstances")
+public class GroupInstanceBean {
+
+	private String status;
+	private String instanceId;
+    private String parentInstanceId;
+    private String groupId;
+    private List<GroupInstanceBean> groupInstances;
+    private List<ClusterInstanceBean> clusterInstances;
+
+    public GroupInstanceBean() {
+        groupInstances = new ArrayList<GroupInstanceBean>();
+        clusterInstances = new ArrayList<ClusterInstanceBean>();
+    }
+
+    public void addGroupInstance(GroupInstanceBean groupInstance) {
+        this.getGroups().add(groupInstance);
+    }
+
+    public void addClusterInstance(ClusterInstanceBean clusterInstance) {
+        this.getClusterInstances().add(clusterInstance);
+    }
+    public List<ClusterInstanceBean> getClusterInstances() {
+        return clusterInstances;
+    }
+
+    public void setGroupInstances(List<GroupInstanceBean> instances) {
+        this.groupInstances = instances;
+    }
+
+    public List<GroupInstanceBean> getGroups() {
+        return groupInstances;
+    }
+
+    public void setGroups(List<GroupInstanceBean> groups) {
+        this.groupInstances = groups;
+    }
+
+    public List<GroupInstanceBean> getGroupInstances() {
+        return groupInstances;
+    }
+
+    public void setClusters(List<ClusterInstanceBean> clusters) {
+        this.clusterInstances = clusters;
+    }
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getInstanceId() {
+		return instanceId;
+	}
+
+	public void setInstanceId(String instanceId) {
+		this.instanceId = instanceId;
+	}
+
+    public String getParentInstanceId() {
+        return parentInstanceId;
+    }
+
+    public void setParentInstanceId(String parentInstanceId) {
+        this.parentInstanceId = parentInstanceId;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c666e54a/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 2a1f2eb..0a386dd 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
@@ -445,7 +445,7 @@ public class StratosApiV41 extends AbstractApi {
      * @return Json representing the application details with 200 as HTTP status. HTTP 404 is returned when there is
      * no application with given Id.
      * @throws RestAPIException is thrown in case of failure occurs.
-     */
+     *//*
     @GET
     @Path("/applications/{applicationId}/runtime")
     @Consumes("application/json")
@@ -457,6 +457,29 @@ public class StratosApiV41 extends AbstractApi {
         } else {
             return Response.ok().entity(applicationRuntime).build();
         }
+    }*/
+
+    /**
+     * This API resource provides information about the application denoted by the given appId. Details includes,
+     * Application details, top level cluster details, details of the group and sub groups.
+     *
+     * @param applicationId Id of the application.
+     * @return Json representing the application details with 200 as HTTP status. HTTP 404 is returned when there is
+     * no application with given Id.
+     * @throws RestAPIException is thrown in case of failure occurs.
+     */
+    @GET
+    @Path("/applications/{applicationId}/runtime")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    public Response getApplicationRuntime(@PathParam("applicationId") String applicationId) throws RestAPIException {
+        org.apache.stratos.common.beans.topology.ApplicationBean applicationRuntime = StratosApiV41Utils.
+                                            getApplicationInstanceRuntime(applicationId);
+        if (applicationRuntime == null) {
+            return Response.status(Response.Status.NOT_FOUND).build();
+        } else {
+            return Response.ok().entity(applicationRuntime).build();
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/stratos/blob/c666e54a/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 ad7cbff..e2028b2 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
@@ -31,6 +31,8 @@ import org.apache.stratos.cloud.controller.stub.domain.CartridgeConfig;
 import org.apache.stratos.cloud.controller.stub.domain.CartridgeInfo;
 import org.apache.stratos.cloud.controller.stub.domain.Persistence;
 import org.apache.stratos.cloud.controller.stub.domain.Volume;
+import org.apache.stratos.common.beans.topology.ApplicationInstanceBean;
+import org.apache.stratos.common.beans.topology.GroupInstanceBean;
 import org.apache.stratos.manager.client.AutoscalerServiceClient;
 import org.apache.stratos.manager.client.CloudControllerServiceClient;
 import org.apache.stratos.manager.composite.application.beans.ApplicationDefinition;
@@ -1114,6 +1116,26 @@ public class StratosApiV41Utils {
         return applicationBean;
     }
 
+    public static org.apache.stratos.common.beans.topology.ApplicationBean getApplicationInstanceRuntime(String applicationId) {
+        org.apache.stratos.common.beans.topology.ApplicationBean applicationBean = null;
+        try {
+            ApplicationManager.acquireReadLockForApplication(applicationId);
+            Application application = ApplicationManager.getApplications().getApplication(applicationId);
+            if (application == null) {
+                return null;
+            }
+            applicationBean = ObjectConverter.convertApplicationToApplicationInstanceBean(application);
+            for(ApplicationInstanceBean instanceBean : applicationBean.getApplicationInstances()) {
+                addClustersInstancesToApplicationInstanceBean(instanceBean, application);
+                addGroupsInstancesToApplicationInstanceBean(instanceBean, application);
+            }
+
+        } finally {
+            ApplicationManager.releaseReadLockForApplication(applicationId);
+        }
+        return applicationBean;
+    }
+
     private static void addGroupsToApplicationBean(ApplicationBean applicationBean, Application application) {
         Collection<Group> groups = application.getGroups();
         for (Group group : groups) {
@@ -1123,6 +1145,19 @@ public class StratosApiV41Utils {
         }
     }
 
+    private static void addGroupsInstancesToApplicationInstanceBean(ApplicationInstanceBean applicationInstanceBean,
+                                                                    Application application) {
+        Collection<Group> groups = application.getGroups();
+        for (Group group : groups) {
+            List<GroupInstanceBean> groupInstanceBeans = ObjectConverter.convertGroupToGroupInstancesBean(
+                                                applicationInstanceBean.getInstanceId(), group);
+            for(GroupInstanceBean groupInstanceBean : groupInstanceBeans) {
+                setSubGroupInstances(group, groupInstanceBean);
+                applicationInstanceBean.addGroupInstance(groupInstanceBean);
+            }
+        }
+    }
+
     private static void addClustersToApplicationBean(ApplicationBean applicationBean, Application application) {
         Map<String, ClusterDataHolder> topLevelClusterDataMap = application.getClusterDataMap();
         for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
@@ -1135,6 +1170,39 @@ public class StratosApiV41Utils {
         }
     }
 
+    private static void addClustersInstancesToApplicationInstanceBean(
+            ApplicationInstanceBean applicationInstanceBean,
+            Application application) {
+        Map<String, ClusterDataHolder> topLevelClusterDataMap = application.getClusterDataMap();
+        for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
+            ClusterDataHolder clusterDataHolder = entry.getValue();
+            String clusterId = clusterDataHolder.getClusterId();
+            String serviceType = clusterDataHolder.getServiceType();
+            TopologyManager.acquireReadLockForCluster(serviceType, clusterId);
+            Cluster topLevelCluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId);
+            applicationInstanceBean.getClusterInstances().add(ObjectConverter.
+                    convertClusterToClusterInstanceBean(applicationInstanceBean.getInstanceId(),
+                            topLevelCluster, entry.getKey()));
+        }
+    }
+
+    private static void addClustersInstancesToGroupInstanceBean(
+            GroupInstanceBean groupInstanceBean,
+            Group group) {
+        Map<String, ClusterDataHolder> topLevelClusterDataMap = group.getClusterDataMap();
+        for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
+            ClusterDataHolder clusterDataHolder = entry.getValue();
+            String clusterId = clusterDataHolder.getClusterId();
+            String serviceType = clusterDataHolder.getServiceType();
+            TopologyManager.acquireReadLockForCluster(serviceType, clusterId);
+            Cluster topLevelCluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId);
+            groupInstanceBean.getClusterInstances().add(ObjectConverter.
+                    convertClusterToClusterInstanceBean(groupInstanceBean.getInstanceId(),
+                            topLevelCluster, entry.getKey()));
+        }
+    }
+
+
     private static void setSubGroups(Group group, GroupBean groupBean) {
         Collection<Group> subgroups = group.getGroups();
         addClustersToGroupBean(group, groupBean);
@@ -1146,6 +1214,21 @@ public class StratosApiV41Utils {
         }
     }
 
+    private static void setSubGroupInstances(Group group, GroupInstanceBean groupInstanceBean) {
+        Collection<Group> subgroups = group.getGroups();
+        addClustersInstancesToGroupInstanceBean(groupInstanceBean, group);
+        for (Group subGroup : subgroups) {
+            List<GroupInstanceBean> groupInstanceBeans = ObjectConverter.
+                    convertGroupToGroupInstancesBean(groupInstanceBean.getInstanceId(),
+                    subGroup);
+            for(GroupInstanceBean groupInstanceBean1 : groupInstanceBeans) {
+                setSubGroupInstances(subGroup, groupInstanceBean1);
+                groupInstanceBean.addGroupInstance(groupInstanceBean1);
+            }
+
+        }
+    }
+
     private static void addClustersToGroupBean(Group group, GroupBean groupBean) {
         Map<String, ClusterDataHolder> clustersDatamap = group.getClusterDataMap();
         for (Map.Entry<String, ClusterDataHolder> x : clustersDatamap.entrySet()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c666e54a/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 b5a7d5d..d173201 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
@@ -41,8 +41,8 @@ import org.apache.stratos.common.beans.kubernetes.KubernetesHost;
 import org.apache.stratos.common.beans.kubernetes.KubernetesMaster;
 import org.apache.stratos.common.beans.kubernetes.PortRange;
 import org.apache.stratos.common.beans.subscription.domain.SubscriptionDomainBean;
+import org.apache.stratos.common.beans.topology.*;
 import org.apache.stratos.common.beans.topology.Instance;
-import org.apache.stratos.common.beans.topology.Member;
 import org.apache.stratos.common.util.CommonUtil;
 import org.apache.stratos.manager.composite.application.beans.*;
 import org.apache.stratos.manager.deploy.service.Service;
@@ -50,9 +50,7 @@ import org.apache.stratos.manager.grouping.definitions.DependencyDefinitions;
 import org.apache.stratos.manager.subscription.SubscriptionDomain;
 import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.Group;
-import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
-import org.apache.stratos.messaging.domain.instance.ClusterInstance;
-import org.apache.stratos.messaging.domain.instance.GroupInstance;
+import org.apache.stratos.messaging.domain.instance.*;
 import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.wso2.carbon.stratos.common.beans.TenantInfoBean;
 
@@ -647,6 +645,54 @@ public class ObjectConverter {
         return clusterBean;
     }
 
+    public static ClusterInstanceBean convertClusterToClusterInstanceBean(String instanceId,
+                                                                          Cluster cluster, String alias) {
+        ClusterInstanceBean clusterInstanceBean = new ClusterInstanceBean();
+        clusterInstanceBean.setAlias(alias);
+        clusterInstanceBean.setServiceName(cluster.getServiceName());
+        clusterInstanceBean.setClusterId(cluster.getClusterId());
+        clusterInstanceBean.setInstanceId(instanceId);
+        clusterInstanceBean.setParentInstanceId(instanceId);
+        if(cluster.getInstanceContexts(instanceId) != null) {
+            clusterInstanceBean.setStatus(cluster.getInstanceContexts(instanceId).
+                    getStatus().toString());
+        }
+        clusterInstanceBean.setTenantRange(cluster.getTenantRange());
+        clusterInstanceBean.setMember(new ArrayList<Member>());
+        clusterInstanceBean.setHostNames(new ArrayList<String>());
+
+        for (org.apache.stratos.messaging.domain.topology.Member member : cluster.getMembers()) {
+            if(member.getInstanceId().equals(instanceId)) {
+                Member memberBean = new Member();
+                memberBean.setClusterId(member.getClusterId());
+                memberBean.setLbClusterId(member.getLbClusterId());
+                memberBean.setNetworkPartitionId(member.getNetworkPartitionId());
+                memberBean.setPartitionId(member.getPartitionId());
+                memberBean.setMemberId(member.getMemberId());
+                if (member.getMemberIp() == null) {
+                    memberBean.setMemberIp("NULL");
+                } else {
+                    memberBean.setMemberIp(member.getMemberIp());
+                }
+                if (member.getMemberPublicIp() == null) {
+                    memberBean.setMemberPublicIp("NULL");
+                } else {
+                    memberBean.setMemberPublicIp(member.getMemberPublicIp());
+                }
+                memberBean.setServiceName(member.getServiceName());
+                memberBean.setStatus(member.getStatus().toString());
+                memberBean.setProperty(convertJavaUtilPropertiesToPropertyBeans(member.getProperties()));
+                clusterInstanceBean.getMember().add(memberBean);
+            }
+
+        }
+
+        for (String hostname : cluster.getHostNames()) {
+            clusterInstanceBean.getHostNames().add(hostname);
+        }
+        return clusterInstanceBean;
+    }
+
     private static org.apache.stratos.autoscaler.stub.deployment.partition.Partition[] convertToCCPartitionPojos
             (List<Partition> partitionList) {
 
@@ -1336,20 +1382,38 @@ public class ObjectConverter {
         applicationBean.setDescription(application.getDescription());
         applicationBean.setTenantDomain(application.getTenantDomain());
         applicationBean.setTenantAdminUsername(application.getTenantAdminUserName());
-        applicationBean.setInstances(convertApplicationInstancesToInstances(application));
+        //applicationBean.set(convertApplicationToApplicationInstanceBean(application));
+        return applicationBean;
+    }
+
+    public static org.apache.stratos.common.beans.topology.ApplicationBean convertApplicationToApplicationInstanceBean(Application application) {
+        if (application == null) {
+            return null;
+        }
+
+        org.apache.stratos.common.beans.topology.ApplicationBean applicationBean = new
+                org.apache.stratos.common.beans.topology.ApplicationBean();
+        applicationBean.setId(application.getUniqueIdentifier());
+        applicationBean.setName(application.getName());
+        applicationBean.setDescription(application.getDescription());
+        applicationBean.setTenantDomain(application.getTenantDomain());
+        applicationBean.setTenantAdminUsername(application.getTenantAdminUserName());
+        applicationBean.setApplicationInstances(convertApplicationInstancesToApplicationInstances(application));
         return applicationBean;
     }
 
-    private static List<Instance> convertApplicationInstancesToInstances(
+    private static List<ApplicationInstanceBean> convertApplicationInstancesToApplicationInstances(
             Application application) {
-    	List<Instance> applicationInstanceList = new ArrayList<Instance>();
+    	List<ApplicationInstanceBean> applicationInstanceList = new ArrayList<ApplicationInstanceBean>();
     	Collection<ApplicationInstance> applicationInstancesInTopology = 
     			application.getInstanceIdToInstanceContextMap().values();
     	
     	if(applicationInstancesInTopology != null) {
     		for (ApplicationInstance applicationInstance : applicationInstancesInTopology) {
-    			Instance instance = new Instance();
+                ApplicationInstanceBean instance = new ApplicationInstanceBean();
     			instance.setInstanceId(applicationInstance.getInstanceId());
+                instance.setApplicationId(application.getUniqueIdentifier());
+                instance.setParentInstanceId(applicationInstance.getParentId());
     			instance.setStatus(applicationInstance.getStatus().toString());
     			applicationInstanceList.add(instance);
             }
@@ -1369,6 +1433,45 @@ public class ObjectConverter {
         return groupBean;
     }
 
+    public static List<GroupInstanceBean> convertGroupToGroupInstancesBean(String instanceId, Group group) {
+        if (group == null) {
+            return null;
+        }
+
+        List<GroupInstanceBean> groupInstanceBeans = new ArrayList<GroupInstanceBean>();
+        if(group.getInstanceContexts(instanceId) != null) {
+            GroupInstance groupInstance = group.getInstanceContexts(instanceId);
+            GroupInstanceBean groupInstanceBean = new GroupInstanceBean();
+            groupInstanceBean.setParentInstanceId(instanceId);
+            groupInstanceBean.setInstanceId(groupInstance.getInstanceId());
+            groupInstanceBean.setStatus(groupInstance.getStatus().toString());
+            groupInstanceBean.setGroupId(group.getUniqueIdentifier());
+            /*for(Group group1 : group.getGroups()) {
+                groupInstanceBean.setGroupInstances(convertGroupToGroupInstancesBean(
+                        groupInstance.getInstanceId(), group1));
+            }*/
+            groupInstanceBeans.add(groupInstanceBean);
+
+        } else {
+            List<org.apache.stratos.messaging.domain.instance.Instance> groupInstances =
+                    group.getInstanceContextsWithParentId(instanceId);
+            for(org.apache.stratos.messaging.domain.instance.Instance groupInstance : groupInstances) {
+                GroupInstanceBean groupInstanceBean = new GroupInstanceBean();
+                groupInstanceBean.setParentInstanceId(instanceId);
+                groupInstanceBean.setInstanceId(groupInstance.getInstanceId());
+                groupInstanceBean.setStatus(((GroupInstance)groupInstance).getStatus().toString());
+                groupInstanceBean.setGroupId(group.getUniqueIdentifier());
+                /*for(Group group1 : group.getGroups()) {
+                    groupInstanceBean.setGroupInstances(convertGroupToGroupInstancesBean(
+                            groupInstance.getInstanceId(), group1));
+                }*/
+                groupInstanceBeans.add(groupInstanceBean);
+            }
+        }
+
+        return groupInstanceBeans;
+    }
+
 	private static List<Instance> convertGroupInstancesToInstances(Group group) {
 	    List<Instance> instanceList = new ArrayList<Instance>();
 	    Collection<GroupInstance> instancesInTopology = group.getInstanceIdToInstanceContextMap().values();

http://git-wip-us.apache.org/repos/asf/stratos/blob/c666e54a/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml b/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml
index a487594..ad9602f 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml
+++ b/components/org.apache.stratos.rest.endpoint/src/main/webapp/api/WEB-INF/cxf-servlet.xml
@@ -130,6 +130,10 @@
                 <value>partitions</value>
                 <value>instances</value>
                 <value>dependencyAliases</value>
+                <value>groupInstances</value>
+                <value>clusterInstances</value>
+                <value>applicationInstances</value>
+
             </list>
         </property>
     </bean>