Adding ListUsers API method, and changes to existing code

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

Branch: refs/heads/master
Commit: 38d7f7269893166d0ab154e0e5e8b4a399a1a9e3
Parents: d789aa6
Author: lasinducharith <[email protected]>
Authored: Mon Sep 15 19:21:30 2014 +0530
Committer: Nirmal Fernando <[email protected]>
Committed: Wed Sep 24 17:00:43 2014 +0530

----------------------------------------------------------------------
 .../stratos/cli/RestCommandLineService.java     |  82 ++++++
 .../apache/stratos/cli/StratosApplication.java  |   5 +
 .../apache/stratos/cli/beans/UserInfoBean.java  |   3 -
 .../stratos/cli/commands/DeleteUserCommand.java |   6 +-
 .../stratos/cli/commands/ListAllUsers.java      |  65 +++++
 .../apache/stratos/cli/utils/CliConstants.java  |   5 +
 .../internal/ADCManagementServerComponent.java  | 267 ++++++++++---------
 .../manager/listener/TenantUserRoleCreator.java |  42 +--
 .../manager/user/mgt/StratosUserManager.java    |  91 +++++--
 .../manager/utils/CartridgeConstants.java       |  17 --
 .../manager/utils/PermissionConstants.java      |  36 +++
 .../stratos/manager/utils/UserRoleCreator.java  |  46 ++--
 .../rest/endpoint/services/ServiceUtils.java    |  46 +++-
 .../rest/endpoint/services/StratosAdmin.java    |  16 ++
 .../stratos-test/WEB-INF/schemas/schema.xsd     |   6 +-
 .../webapp/stratos/WEB-INF/schemas/schema.xsd   |   6 +-
 16 files changed, 487 insertions(+), 252 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
index 7aa3d90..85ffb05 100644
--- 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
+++ 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
@@ -96,6 +96,7 @@ public class RestCommandLineService {
     private final String deactivateTenantRestEndPoint = 
"/stratos/admin/tenant/deactivate";
     private final String activateTenantRestEndPoint = 
"/stratos/admin/tenant/activate";
     private final String listAllTenantRestEndPoint = 
"/stratos/admin/tenant/list";
+    private final String listAllUserRestEndPoint = "/stratos/admin/user/list";
     private final String getListAvailableCartridgeInfoRestEndPoint = 
"/stratos/admin/cartridge/available/info";
 
 
@@ -1247,6 +1248,71 @@ public class RestCommandLineService {
         }
     }
 
+    // This method helps to list all users
+    public void listAllUsers() throws CommandException {
+        DefaultHttpClient httpClient = new DefaultHttpClient();
+        try {
+            HttpResponse response = restClient.doGet(httpClient, 
restClient.getBaseURL()
+                                                                 + 
listAllUserRestEndPoint);
+
+            String responseCode = "" + 
response.getStatusLine().getStatusCode();
+            String resultString = getHttpResponseString(response);
+
+            GsonBuilder gsonBuilder = new GsonBuilder();
+            Gson gson = gsonBuilder.create();
+
+            if ( ! responseCode.equals(CliConstants.RESPONSE_OK)) {
+                ExceptionMapper exception = gson.fromJson(resultString, 
ExceptionMapper.class);
+                System.out.println(exception);
+                return;
+            }
+
+            if (resultString == null) {
+                System.out.println("Response content is empty");
+                return;
+            }
+
+            UserInfoList userInfoList = gson.fromJson(resultString, 
UserInfoList.class);
+
+            if (userInfoList == null) {
+                System.out.println("User information list is empty");
+                return;
+            }
+
+            RowMapper<UserInfoBean> userInfoMapper = new 
RowMapper<UserInfoBean>() {
+
+                public String[] getData(UserInfoBean userInfo) {
+                    String[] data = new String[2];
+                    data[0] = userInfo.getUserName();
+                    data[1] = userInfo.getRole();
+                    return data;
+                }
+            };
+
+            UserInfoBean[] users = new 
UserInfoBean[userInfoList.getUserInfoBean().size()];
+            users = userInfoList.getUserInfoBean().toArray(users);
+
+            if (users.length == 0) {
+                String message = "Cannot find any User. "
+                                 + "Please create a new user using [" + 
CliConstants.ADD_USER + "] command.";
+                if (logger.isDebugEnabled()) {
+                    logger.debug(message);
+                }
+                System.out.println(message);
+                return;
+            }
+
+            System.out.println("Available Tenants:" );
+            CommandLineUtils.printTable(users, userInfoMapper, "Username", 
"Role");
+            System.out.println();
+
+        } catch (Exception e) {
+            handleException("Exception in listing partitions", e);
+        } finally {
+            httpClient.getConnectionManager().shutdown();
+        }
+    }
+
     // This method helps to unsubscribe cartridges
     public void unsubscribe(String alias) throws CommandException {
         DefaultHttpClient httpClient = new DefaultHttpClient();
@@ -1990,6 +2056,22 @@ public class RestCommandLineService {
         }
     }
 
+    // This class convert JSON string to UserInfoBean object
+    private class UserInfoList {
+        private ArrayList<UserInfoBean> userInfoBean;
+
+        public ArrayList<UserInfoBean> getUserInfoBean() {
+            return userInfoBean;
+        }
+
+        public void setUserInfoBean(ArrayList<UserInfoBean> userInfoBean) {
+            this.userInfoBean = userInfoBean;
+        }
+
+        UserInfoList() {
+            userInfoBean = new ArrayList<UserInfoBean>();
+        }
+    }
     // This class is for convert JSON string to CartridgeList object
     private class CartridgeList  {
         private ArrayList<Cartridge> cartridge;

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
index fae2db5..2ecd891 100644
--- 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
+++ 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
@@ -58,6 +58,7 @@ import 
org.apache.stratos.cli.commands.DescribePartitionCommand;
 import org.apache.stratos.cli.commands.ExitCommand;
 import org.apache.stratos.cli.commands.HelpCommand;
 import org.apache.stratos.cli.commands.ListAllTenants;
+import org.apache.stratos.cli.commands.ListAllUsers;
 import org.apache.stratos.cli.commands.ListCartridgesCommand;
 import org.apache.stratos.cli.commands.ListDeployServiceCommand;
 import org.apache.stratos.cli.commands.ListMemberCommand;
@@ -137,12 +138,16 @@ public class StratosApplication extends 
CommandLineApplication<StratosCommandCon
         command = new AddTenantCommand();
         commands.put(command.getName(), command);
 
+        //Adding User Operations
         command = new AddUserCommand();
         commands.put(command.getName(), command);
 
         command = new DeleteUserCommand();
         commands.put(command.getName(), command);
 
+        command = new ListAllUsers();
+        commands.put(command.getName(), command);
+
         //command = new DeleteTenantCommand();
         //commands.put(command.getName(), command);
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java
 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java
index 9830f2e..9f36223 100644
--- 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java
+++ 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/beans/UserInfoBean.java
@@ -19,9 +19,6 @@
 
 package org.apache.stratos.cli.beans;
 
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement
 public class UserInfoBean {
 
     private String userName;

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
index ab46374..9be1f26 100644
--- 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
+++ 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/DeleteUserCommand.java
@@ -56,11 +56,11 @@ public class DeleteUserCommand implements 
Command<StratosCommandContext> {
                        logger.debug("Executing {} command...", getName());
                }
                if (args != null && args.length == 1) {
-                       String id = args[0];
+                       String username = args[0];
                        if (logger.isDebugEnabled()) {
-                               logger.debug("Getting delete user info {}", id);
+                               logger.debug("Getting delete user info {}", 
username);
                        }
-                       RestCommandLineService.getInstance().deleteUser(id);
+                       
RestCommandLineService.getInstance().deleteUser(username);
                        return CliConstants.SUCCESSFUL_CODE;
                } else {
                        context.getStratosApplication().printUsage(getName());

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAllUsers.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAllUsers.java
 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAllUsers.java
new file mode 100644
index 0000000..bea160e
--- /dev/null
+++ 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/ListAllUsers.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.cli.commands;
+
+import org.apache.commons.cli.Options;
+import org.apache.stratos.cli.Command;
+import org.apache.stratos.cli.RestCommandLineService;
+import org.apache.stratos.cli.StratosCommandContext;
+import org.apache.stratos.cli.exception.CommandException;
+import org.apache.stratos.cli.utils.CliConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ListAllUsers implements Command<StratosCommandContext> {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(ListAllUsers.class);
+
+    public ListAllUsers(){
+    }
+
+    public String getName() {
+        return CliConstants.LIST_USERS;
+    }
+
+    public String getDescription() {
+        return "List available users";
+    }
+
+    public String getArgumentSyntax() {
+        return null;
+    }
+
+    public int execute(StratosCommandContext context, String[] args) throws 
CommandException {
+        if (logger.isDebugEnabled()) {
+            logger.debug("Executing {} command...", getName());
+        }
+        if (args == null || args.length == 0) {
+            RestCommandLineService.getInstance().listAllUsers();
+            return CliConstants.SUCCESSFUL_CODE;
+        } else {
+            context.getStratosApplication().printUsage(getName());
+            return CliConstants.BAD_ARGS_CODE;
+        }
+    }
+
+    public Options getOptions() {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java
 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java
index bda791b..cebed60 100644
--- 
a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java
+++ 
b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java
@@ -110,6 +110,11 @@ public class CliConstants {
     public static final String LIST_TENANTS = "list-tenants";
 
     /**
+     * List tenants
+     */
+    public static final String LIST_USERS = "list-users";
+
+    /**
      * List deployment policies
      */
     public static final String LIST_DEPLOYMENT_POLICIES = 
"list-deployment-policies";

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java
index cc9f34f..38ec2c5 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/ADCManagementServerComponent.java
@@ -1,18 +1,18 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
+ * 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
+ * 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
+ * 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
+ * "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.
  */
@@ -21,23 +21,26 @@ package org.apache.stratos.manager.internal;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.manager.listener.InstanceStatusListener;
+import org.apache.stratos.manager.listener.TenantUserRoleCreator;
 import org.apache.stratos.manager.publisher.TenantEventPublisher;
 import org.apache.stratos.manager.publisher.TenantSynchronizerTaskScheduler;
 import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager;
 import 
org.apache.stratos.manager.topology.receiver.StratosManagerTopologyEventReceiver;
 import org.apache.stratos.manager.utils.CartridgeConfigFileReader;
+import org.apache.stratos.manager.utils.UserRoleCreator;
+import org.apache.stratos.messaging.broker.publish.EventPublisherPool;
 import org.apache.stratos.messaging.broker.subscribe.TopicSubscriber;
 import org.apache.stratos.messaging.util.Constants;
 import org.osgi.service.component.ComponentContext;
 import org.wso2.carbon.ntask.core.service.TaskService;
 import org.wso2.carbon.registry.core.service.RegistryService;
+import org.wso2.carbon.user.api.UserStoreManager;
+import org.wso2.carbon.user.core.UserRealm;
 import org.wso2.carbon.user.core.service.RealmService;
 import org.wso2.carbon.utils.ConfigurationContextService;
 
 /**
- * @scr.component
- *                name=
- *                
"org.wso2.carbon.hosting.mgt.internal.ADCManagementServerComponent"
+ * @scr.component 
name="org.wso2.carbon.hosting.mgt.internal.ADCManagementServerComponent"
  *                immediate="true"
  * @scr.reference name="config.context.service"
  *                interface="org.wso2.carbon.utils.ConfigurationContextService"
@@ -53,141 +56,141 @@ import org.wso2.carbon.utils.ConfigurationContextService;
  *                "org.wso2.carbon.registry.core.service.RegistryService"
  *                cardinality="1..1" policy="dynamic" bind="setRegistryService"
  *                unbind="unsetRegistryService"
- * @scr.reference name="ntask.component"
- *                interface="org.wso2.carbon.ntask.core.service.TaskService"
+ * @scr.reference name="ntask.component" 
interface="org.wso2.carbon.ntask.core.service.TaskService"
  *                cardinality="1..1" policy="dynamic" bind="setTaskService"
  *                unbind="unsetTaskService"
  */
 
 public class ADCManagementServerComponent {
 
-       private static final Log log = 
LogFactory.getLog(ADCManagementServerComponent.class);
-       private StratosManagerTopologyEventReceiver 
stratosManagerTopologyEventReceiver;
+    private static final Log log = 
LogFactory.getLog(ADCManagementServerComponent.class);
+    private StratosManagerTopologyEventReceiver 
stratosManagerTopologyEventReceiver;
 
-       protected void activate(ComponentContext componentContext) throws 
Exception {
+    protected void activate(ComponentContext componentContext) throws 
Exception {
                try {
                        CartridgeConfigFileReader.readProperties();
 
-                       // Schedule complete tenant event synchronizer
-                       if (log.isDebugEnabled()) {
-                               log.debug("Scheduling tenant synchronizer 
task...");
-                       }
-                       
TenantSynchronizerTaskScheduler.schedule(ServiceReferenceHolder.getInstance()
-                                                                               
       .getTaskService());
-
-                       // Register tenant event publisher
-                       if (log.isDebugEnabled()) {
-                               log.debug("Starting tenant event publisher...");
-                       }
-                       TenantEventPublisher tenantEventPublisher = new 
TenantEventPublisher();
-                       componentContext.getBundleContext()
-                                       
.registerService(org.apache.stratos.common.listeners.TenantMgtListener.class.getName(),
-                                                        tenantEventPublisher, 
null);
-
-                       // Start instance status topic subscriber
-                       if (log.isDebugEnabled()) {
-                               log.debug("Starting instance status topic 
subscriber...");
-                       }
-                       TopicSubscriber subscriber = new 
TopicSubscriber(Constants.INSTANCE_STATUS_TOPIC);
-                       subscriber.setMessageListener(new 
InstanceStatusListener());
-                       Thread tsubscriber = new Thread(subscriber);
+            // Schedule complete tenant event synchronizer
+            if(log.isDebugEnabled()) {
+                log.debug("Scheduling tenant synchronizer task...");
+            }
+            
TenantSynchronizerTaskScheduler.schedule(ServiceReferenceHolder.getInstance().getTaskService());
+
+            // Register tenant event publisher
+            if(log.isDebugEnabled()) {
+                log.debug("Starting tenant event publisher...");
+            }
+            TenantEventPublisher tenantEventPublisher = new 
TenantEventPublisher();
+            componentContext.getBundleContext().registerService(
+                    
org.apache.stratos.common.listeners.TenantMgtListener.class.getName(),
+                    tenantEventPublisher, null);
+
+            // Start instance status topic subscriber
+            if(log.isDebugEnabled()) {
+                log.debug("Starting instance status topic subscriber...");
+            }
+            TopicSubscriber subscriber = new 
TopicSubscriber(Constants.INSTANCE_STATUS_TOPIC);
+            subscriber.setMessageListener(new InstanceStatusListener());
+            Thread tsubscriber = new Thread(subscriber);
                        tsubscriber.start();
 
-                       // initializing the topology event subscriber
-                       /*
-                        * TopicSubscriber topologyTopicSubscriber = new
-                        * TopicSubscriber(Constants.TOPOLOGY_TOPIC);
-                        * topologyTopicSubscriber.setMessageListener(new
-                        * TopologyEventListner());
-                        * Thread topologyTopicSubscriberThread = new
-                        * Thread(topologyTopicSubscriber);
-                        * topologyTopicSubscriberThread.start();
-                        * 
-                        * //Starting Topology Receiver
-                        * TopologyReceiver topologyReceiver = new 
TopologyReceiver();
-                        * Thread topologyReceiverThread = new 
Thread(topologyReceiver);
-                        * topologyReceiverThread.start();
-                        */
-
-                       stratosManagerTopologyEventReceiver = new 
StratosManagerTopologyEventReceiver();
-                       Thread topologyReceiverThread = new 
Thread(stratosManagerTopologyEventReceiver);
-                       topologyReceiverThread.start();
-                       log.info("Topology receiver thread started");
-
-                       // retrieve persisted CartridgeSubscriptions
-                       new 
DataInsertionAndRetrievalManager().cachePersistedSubscriptions();
-
-                       // Component activated successfully
-                       log.info("ADC management server component is 
activated");
-
-               } catch (Exception e) {
-                       if (log.isFatalEnabled()) {
-                               log.fatal("Could not activate ADC management 
server component", e);
-                       }
-               }
-       }
-
-       protected void 
setConfigurationContextService(ConfigurationContextService contextService) {
-               
DataHolder.setClientConfigContext(contextService.getClientConfigContext());
-               
DataHolder.setServerConfigContext(contextService.getServerConfigContext());
-
-       }
-
-       protected void 
unsetConfigurationContextService(ConfigurationContextService contextService) {
-               DataHolder.setClientConfigContext(null);
-               DataHolder.setServerConfigContext(null);
-       }
-
-       protected void setRealmService(RealmService realmService) {
-               // keeping the realm service in the DataHolder class
-               DataHolder.setRealmService(realmService);
-       }
-
-       protected void unsetRealmService(RealmService realmService) {
-       }
-
-       protected void setRegistryService(RegistryService registryService) {
-               try {
-                       DataHolder.setRegistryService(registryService);
+            RealmService realmService = DataHolder.getRealmService();
+            UserRealm realm = realmService.getBootstrapRealm();
+            UserStoreManager userStoreManager = realm.getUserStoreManager();
+            //Create a Internal/user Role at server start-up
+            UserRoleCreator.CreateTenantUserRole(userStoreManager);
+
+            TenantUserRoleCreator tenantUserRoleCreator = new 
TenantUserRoleCreator();
+            componentContext.getBundleContext().registerService(
+                    
org.apache.stratos.common.listeners.TenantMgtListener.class.getName(),
+                    tenantUserRoleCreator, null);
+
+            //initializing the topology event subscriber
+            /*TopicSubscriber topologyTopicSubscriber = new 
TopicSubscriber(Constants.TOPOLOGY_TOPIC);
+            topologyTopicSubscriber.setMessageListener(new 
TopologyEventListner());
+            Thread topologyTopicSubscriberThread = new 
Thread(topologyTopicSubscriber);
+            topologyTopicSubscriberThread.start();
+
+            //Starting Topology Receiver
+            TopologyReceiver topologyReceiver = new TopologyReceiver();
+            Thread topologyReceiverThread = new Thread(topologyReceiver);
+            topologyReceiverThread.start();*/
+
+            stratosManagerTopologyEventReceiver = new 
StratosManagerTopologyEventReceiver();
+            Thread topologyReceiverThread = new 
Thread(stratosManagerTopologyEventReceiver);
+            topologyReceiverThread.start();
+            log.info("Topology receiver thread started");
+
+            // retrieve persisted CartridgeSubscriptions
+            new 
DataInsertionAndRetrievalManager().cachePersistedSubscriptions();
+
+            //Component activated successfully
+            log.info("ADC management server component is activated");
+                       
                } catch (Exception e) {
-                       log.error("Cannot retrieve governance registry", e);
+            if(log.isFatalEnabled()) {
+                           log.fatal("Could not activate ADC management server 
component", e);
+            }
                }
        }
 
-       protected void unsetRegistryService(RegistryService registryService) {
-       }
-
-       /*
-        * protected void setTopologyManagementService(TopologyManagementService
-        * topologyMgtService) {
-        * DataHolder.setTopologyMgtService(topologyMgtService);
-        * }
-        * 
-        * protected void 
unsetTopologyManagementService(TopologyManagementService
-        * topologyMgtService) {
-        * }
-        */
-
-       protected void setTaskService(TaskService taskService) {
-               if (log.isDebugEnabled()) {
-                       log.debug("Setting the task service");
-               }
-               
ServiceReferenceHolder.getInstance().setTaskService(taskService);
-       }
-
-       protected void unsetTaskService(TaskService taskService) {
-               if (log.isDebugEnabled()) {
-                       log.debug("Un-setting the task service");
-               }
-               ServiceReferenceHolder.getInstance().setTaskService(null);
-       }
-
-       protected void deactivate(ComponentContext context) {
-               // Close event publisher connections to message broker
-               // EventPublisherPool.close(Constants.INSTANCE_NOTIFIER_TOPIC);
-               // EventPublisherPool.close(Constants.TENANT_TOPIC);
-
-               // terminate Stratos Manager Topology Receiver
-               stratosManagerTopologyEventReceiver.terminate();
-       }
+    protected void setConfigurationContextService(ConfigurationContextService 
contextService) {
+        
DataHolder.setClientConfigContext(contextService.getClientConfigContext());
+        
DataHolder.setServerConfigContext(contextService.getServerConfigContext());
+
+    }
+
+    protected void 
unsetConfigurationContextService(ConfigurationContextService contextService) {
+        DataHolder.setClientConfigContext(null);
+        DataHolder.setServerConfigContext(null);
+    }
+
+    protected void setRealmService(RealmService realmService) {
+        // keeping the realm service in the DataHolder class
+        DataHolder.setRealmService(realmService);
+    }
+
+    protected void unsetRealmService(RealmService realmService) {
+    }
+
+    protected void setRegistryService(RegistryService registryService) {
+        try {
+            DataHolder.setRegistryService(registryService);
+        } catch (Exception e) {
+            log.error("Cannot retrieve governance registry", e);
+        }
+    }
+
+    protected void unsetRegistryService(RegistryService registryService) {
+    }
+
+    /*protected void setTopologyManagementService(TopologyManagementService 
topologyMgtService) {
+        DataHolder.setTopologyMgtService(topologyMgtService);
+    }
+
+    protected void unsetTopologyManagementService(TopologyManagementService 
topologyMgtService) {
+    }*/
+
+    protected void setTaskService(TaskService taskService) {
+        if (log.isDebugEnabled()) {
+            log.debug("Setting the task service");
+        }
+        ServiceReferenceHolder.getInstance().setTaskService(taskService);
+    }
+
+    protected void unsetTaskService(TaskService taskService) {
+        if (log.isDebugEnabled()) {
+            log.debug("Un-setting the task service");
+        }
+        ServiceReferenceHolder.getInstance().setTaskService(null);
+    }
+
+    protected void deactivate(ComponentContext context) {
+        // Close event publisher connections to message broker
+        EventPublisherPool.close(Constants.INSTANCE_NOTIFIER_TOPIC);
+        EventPublisherPool.close(Constants.TENANT_TOPIC);
+
+        //terminate Stratos Manager Topology Receiver
+        stratosManagerTopologyEventReceiver.terminate();
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java
index 50dc6ad..97d42dc 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/TenantUserRoleCreator.java
@@ -25,7 +25,9 @@ import org.apache.stratos.common.beans.TenantInfoBean;
 import org.apache.stratos.common.exception.StratosException;
 import org.apache.stratos.common.listeners.TenantMgtListener;
 import org.apache.stratos.manager.internal.DataHolder;
+import org.apache.stratos.manager.user.mgt.exception.UserManagementException;
 import org.apache.stratos.manager.utils.CartridgeConstants;
+import org.apache.stratos.manager.utils.UserRoleCreator;
 import org.wso2.carbon.context.CarbonContext;
 import org.wso2.carbon.context.PrivilegedCarbonContext;
 import org.wso2.carbon.user.api.Permission;
@@ -39,11 +41,10 @@ import 
org.wso2.carbon.utils.multitenancy.MultitenantConstants;
 public class TenantUserRoleCreator implements TenantMgtListener {
 
     private transient static final Log log = 
LogFactory.getLog(TenantUserRoleCreator.class);
-    private static String role = "Internal/user";
 
     /**
      * Create an 'user' role at tenant creation time
-     * @param tenantInfo
+     * @param tenantInfo TenantInfoBean
      * @throws StratosException
      */
     @Override
@@ -55,37 +56,18 @@ public class TenantUserRoleCreator implements 
TenantMgtListener {
                 PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
                 carbonContext.setTenantDomain(tenantInfo.getTenantDomain());
                 carbonContext.setTenantId(tenantInfo.getTenantId());
-
+                //Get tenant UserRealm & UserStoreManager
                 UserRealm userRealm = 
DataHolder.getRealmService().getTenantUserRealm(tenantInfo.getTenantId());
-                UserStoreManager manager = userRealm.getUserStoreManager();
-
-                if (!manager.isExistingRole(role)) {
-                    if (log.isDebugEnabled()) {
-                        log.debug("Creating new role: " + role);
-                    }
-
-                    Permission[] TenantUserPermissions = new Permission[]{  
new Permission(CartridgeConstants.Permissions.VIEW_AUTOSCALING_POLICY, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.VIEW_DEPLOYMENT_POLICY, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.VIEW_CARTRIDGE, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.VIEW_SERVICE, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.VIEW_SUBSCRIPTION, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.VIEW_DOMAIN, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.VIEW_CLUSTER, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.VIEW_INSTANCE, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.VIEW_KUBERNETES, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.ADD_GIT_SYNC, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.ADD_SUBSCRIPTION, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.ADD_DOMAIN, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                            
new Permission(CartridgeConstants.Permissions.REST_LOGIN, 
UserMgtConstants.EXECUTE_ACTION),
-                    };
-
-                    String[] userList = new String[]{};
-                    manager.addRole(role, userList, TenantUserPermissions);
-                }
+                UserStoreManager userStoreManager = 
userRealm.getUserStoreManager();
+
+                UserRoleCreator.CreateTenantUserRole(userStoreManager);
 
             } catch (UserStoreException e) {
-                log.error("Error while creating the role: " + role + " - " +
-                          e.getMessage());
+                log.error(e.getMessage(), e);
+                throw new StratosException(e.getMessage(), e);
+            } catch (UserManagementException e) {
+                log.error(e.getMessage(), e);
+                throw new StratosException(e.getMessage(), e);
             } finally {
                 PrivilegedCarbonContext.endTenantFlow();
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java
index ae55ad9..75996df 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/user/mgt/StratosUserManager.java
@@ -22,6 +22,7 @@ package org.apache.stratos.manager.user.mgt;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.beans.TenantInfoBean;
 import org.apache.stratos.manager.internal.DataHolder;
 import org.apache.stratos.manager.user.mgt.beans.UserInfoBean;
 import org.apache.stratos.manager.user.mgt.exception.UserManagementException;
@@ -33,18 +34,13 @@ import org.wso2.carbon.user.core.service.RealmService;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 public class StratosUserManager {
 
     private transient static final Log log = 
LogFactory.getLog(StratosUserManager.class);
-    private UserStoreManager userStoreManager;
-
-
-    public StratosUserManager(UserStoreManager userStoreManager) {
-        this.userStoreManager = userStoreManager;
-
-    }
+    private String internalEveryoneRole = "Internal/everyone";
 
     /**
      * Add a user to the user store
@@ -52,7 +48,7 @@ public class StratosUserManager {
      * @param userInfoBean
      * @throws UserStoreException
      */
-    public void addUser(UserInfoBean userInfoBean) throws 
UserManagementException {
+    public void addUser(UserStoreManager userStoreManager, UserInfoBean 
userInfoBean) throws UserManagementException {
 
         try {
 
@@ -61,6 +57,7 @@ public class StratosUserManager {
                     log.debug("Creating new User: " + 
userInfoBean.getUserName());
                 }
             }
+
             String[] roles = new String[1];
             roles[0] = userInfoBean.getRole();
             Map<String, String> claims = new HashMap<String, String>();
@@ -74,16 +71,15 @@ public class StratosUserManager {
             log.error(e.getMessage(), e);
             throw new UserManagementException(e.getMessage(), e);
         }
-
     }
 
     /**
-     * Delete the user with the given user name
+     * Delete the user with the given username
      *
-     * @param userName The user name
+     * @param userName The username
      * @throws UserStoreException
      */
-    public void deleteUser(String userName) throws UserManagementException {
+    public void deleteUser(UserStoreManager userStoreManager, String userName) 
throws UserManagementException {
 
         try {
             userStoreManager.deleteUser(userName);
@@ -99,29 +95,19 @@ public class StratosUserManager {
      *
      * @param userInfoBean
      */
-    public void updateUser(UserInfoBean userInfoBean) throws 
UserManagementException {
+    public void updateUser(UserStoreManager userStoreManager, UserInfoBean 
userInfoBean) throws UserManagementException {
 
         try {
             if (userStoreManager.isExistingUser(userInfoBean.getUserName())) {
                 String[] newRoles = new String[1];
                 newRoles[0] = userInfoBean.getRole();
-
-                //String[] rolesToDelete = new String[1];
-                ArrayList<String> rolesToDelete = new ArrayList<String>();
-                String[] currentRolesList = 
userStoreManager.getRoleListOfUser(userInfoBean.getUserName());
-                for(String role: currentRolesList){
-                    if(!role.equals("Internal/everyone")){
-                        rolesToDelete.add(role);
-                    }
-                }
-                String[] rolesToDeleteArray = new String[rolesToDelete.size()];
                 Map<String, String> claims = new HashMap<String, String>();
 
                 claims.put(UserCoreConstants.ClaimTypeURIs.EMAIL_ADDRESS, 
userInfoBean.getEmail());
                 claims.put(UserCoreConstants.ClaimTypeURIs.GIVEN_NAME, 
userInfoBean.getFirstName());
                 claims.put(UserCoreConstants.ClaimTypeURIs.SURNAME, 
userInfoBean.getLastName());
 
-                
userStoreManager.updateRoleListOfUser(userInfoBean.getUserName(), 
rolesToDelete.toArray(rolesToDeleteArray), newRoles);
+                
userStoreManager.updateRoleListOfUser(userInfoBean.getUserName(), 
getRefinedListOfRolesOfUser(userStoreManager, userInfoBean.getUserName()), 
newRoles);
                 
userStoreManager.setUserClaimValue(userInfoBean.getUserName(),UserCoreConstants.ClaimTypeURIs.EMAIL_ADDRESS,
 userInfoBean.getEmail(),userInfoBean.getProfileName());
                 
userStoreManager.setUserClaimValue(userInfoBean.getUserName(),UserCoreConstants.ClaimTypeURIs.GIVEN_NAME,
 userInfoBean.getFirstName(),userInfoBean.getProfileName());
                 
userStoreManager.setUserClaimValue(userInfoBean.getUserName(),UserCoreConstants.ClaimTypeURIs.SURNAME,
 userInfoBean.getLastName(),userInfoBean.getProfileName());
@@ -135,4 +121,61 @@ public class StratosUserManager {
 
     }
 
+    /**
+     * Get a List of usernames and associated Roles
+     * @return List<UserInfoBean>
+     * @throws UserManagementException
+     */
+    public List<UserInfoBean> getAllUsers(UserStoreManager userStoreManager) 
throws UserManagementException{
+
+        String[] userRoles = null;
+        List<UserInfoBean> userList = new ArrayList<UserInfoBean>();
+
+        try {
+            userRoles = userStoreManager.getRoleNames();
+
+            for(String userRole: userRoles){
+                UserInfoBean userInfoBean = new UserInfoBean();
+                userInfoBean.setUserName(userRole);
+                
userInfoBean.setRole(getRefinedListOfRolesOfUser(userStoreManager, 
userRole)[0]);
+                userList.add(userInfoBean);
+            }
+
+        } catch (UserStoreException e) {
+            log.error(e.getMessage(), e);
+            throw new UserManagementException(e.getMessage(), e);
+        }
+
+        return userList;
+    }
+
+    /**
+     * Get the List of userRoles except the everyone role
+     * @param username
+     * @return
+     * @throws UserManagementException
+     */
+    private String[] getRefinedListOfRolesOfUser(UserStoreManager 
userStoreManager, String username) throws UserManagementException{
+
+        ArrayList<String> rolesWithoutEveryoneRole = new ArrayList<String>();
+
+        try {
+
+            String[] allUserRoles = 
userStoreManager.getRoleListOfUser(username);
+
+            for(String role: allUserRoles){
+                if(!role.equals(internalEveryoneRole)){
+                    rolesWithoutEveryoneRole.add(role);
+                }
+            }
+
+        } catch (UserStoreException e) {
+            log.error(e.getMessage(), e);
+            throw new UserManagementException(e.getMessage(), e);
+        }
+
+        String[] rolesWithoutEveryoneRoleArray = new 
String[rolesWithoutEveryoneRole.size()];
+        return rolesWithoutEveryoneRole.toArray(rolesWithoutEveryoneRoleArray);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java
index fd0597f..2c6014e 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/CartridgeConstants.java
@@ -105,21 +105,4 @@ public class CartridgeConstants {
                public static final String ACTUAL_HOST = "actual.host";
                public static final String HOSTINFO = "hostinfo/";
        }
-
-    public static final class Permissions {
-        public static final String ADD_SUBSCRIPTION = 
"/permission/admin/manage/add/subscription";
-        public static final String REST_LOGIN = "/permission/admin/restlogin";
-        public static final String ADD_GIT_SYNC = 
"/permission/admin/manage/add/sync";
-        public static final String ADD_DOMAIN = 
"/permission/admin/manage/add/domain";
-        public static final String VIEW_AUTOSCALING_POLICY = 
"/permission/admin/manage/view/autoscalingPolicy";
-        public static final String VIEW_DEPLOYMENT_POLICY = 
"/permission/admin/manage/view/deploymentPolicy";
-        public static final String VIEW_SUBSCRIPTION = 
"/permission/admin/manage/view/subscription";
-        public static final String VIEW_CARTRIDGE = 
"/permission/admin/manage/view/cartridge";
-        public static final String VIEW_SERVICE = 
"/permission/admin/manage/view/service";
-        public static final String VIEW_DOMAIN = 
"/permission/admin/manage/view/domain";
-        public static final String VIEW_CLUSTER = 
"/permission/admin/manage/view/cluster";
-        public static final String VIEW_INSTANCE = 
"/permission/admin/manage/view/instance";
-        public static final String VIEW_KUBERNETES = 
"/permission/admin/manage/view/kubernetes";
-        public static final String VIEW_PARTITION = 
"/permission/admin/manage/view/partition";
-    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/PermissionConstants.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/PermissionConstants.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/PermissionConstants.java
new file mode 100644
index 0000000..1235d5e
--- /dev/null
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/PermissionConstants.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.manager.utils;
+
+public class PermissionConstants {
+    public static final String ADD_SUBSCRIPTION = 
"/permission/admin/manage/add/subscription";
+    public static final String REST_LOGIN = "/permission/admin/restlogin";
+    public static final String ADD_GIT_SYNC = 
"/permission/admin/manage/add/sync";
+    public static final String ADD_DOMAIN = 
"/permission/admin/manage/add/domain";
+    public static final String VIEW_AUTOSCALING_POLICY = 
"/permission/admin/manage/view/autoscalingPolicy";
+    public static final String VIEW_DEPLOYMENT_POLICY = 
"/permission/admin/manage/view/deploymentPolicy";
+    public static final String VIEW_SUBSCRIPTION = 
"/permission/admin/manage/view/subscription";
+    public static final String VIEW_CARTRIDGE = 
"/permission/admin/manage/view/cartridge";
+    public static final String VIEW_SERVICE = 
"/permission/admin/manage/view/service";
+    public static final String VIEW_DOMAIN = 
"/permission/admin/manage/view/domain";
+    public static final String VIEW_CLUSTER = 
"/permission/admin/manage/view/cluster";
+    public static final String VIEW_INSTANCE = 
"/permission/admin/manage/view/instance";
+    public static final String VIEW_KUBERNETES = 
"/permission/admin/manage/view/kubernetes";
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java
index a38fe45..1e92359 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/UserRoleCreator.java
@@ -23,6 +23,7 @@ package org.apache.stratos.manager.utils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.manager.internal.DataHolder;
+import org.apache.stratos.manager.user.mgt.exception.UserManagementException;
 import org.wso2.carbon.user.api.Permission;
 import org.wso2.carbon.user.api.UserStoreException;
 import org.wso2.carbon.user.api.UserStoreManager;
@@ -33,45 +34,42 @@ import org.wso2.carbon.user.mgt.UserMgtConstants;
 public class UserRoleCreator {
 
     private transient static final Log log = 
LogFactory.getLog(UserRoleCreator.class);
-    private static String role = "Internal/user";
+    private static String userRole = "Internal/user";
 
     /**
-     * Creating a Tenant User Carbon Role at Server Start-up
+     * Creating a Internal/user Role at Carbon Server Start-up
      */
-    public static void CreateTenantUserRole() {
+    public static void CreateTenantUserRole(UserStoreManager manager) throws 
UserManagementException{
 
         try {
 
-            RealmService realmService = DataHolder.getRealmService();
-            UserRealm realm = realmService.getBootstrapRealm();
-            UserStoreManager manager = realm.getUserStoreManager();
-
-            if (!manager.isExistingRole(role)) {
+            if (!manager.isExistingRole(userRole)) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Creating new role: " + role);
+                    log.debug("Creating new role: " + userRole);
                 }
-                Permission[] TenantUserPermissions = new Permission[]{  new 
Permission(CartridgeConstants.Permissions.VIEW_AUTOSCALING_POLICY, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.VIEW_DEPLOYMENT_POLICY, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.VIEW_CARTRIDGE, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.VIEW_SERVICE, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.VIEW_SUBSCRIPTION, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.VIEW_DOMAIN, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.VIEW_CLUSTER, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.VIEW_INSTANCE, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.VIEW_KUBERNETES, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.ADD_GIT_SYNC, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.ADD_SUBSCRIPTION, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.ADD_DOMAIN, 
UserMgtConstants.EXECUTE_ACTION),
-                                                                        new 
Permission(CartridgeConstants.Permissions.REST_LOGIN, 
UserMgtConstants.EXECUTE_ACTION),
+                Permission[] TenantUserPermissions = new Permission[]{  new 
Permission(PermissionConstants.VIEW_AUTOSCALING_POLICY, 
UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.VIEW_DEPLOYMENT_POLICY, 
UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.VIEW_CARTRIDGE, UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.VIEW_SERVICE, UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.VIEW_SUBSCRIPTION, 
UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.VIEW_DOMAIN, UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.VIEW_CLUSTER, UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.VIEW_INSTANCE, UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.VIEW_KUBERNETES, 
UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.ADD_GIT_SYNC, UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.ADD_SUBSCRIPTION, 
UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.ADD_DOMAIN, UserMgtConstants.EXECUTE_ACTION),
+                                                                        new 
Permission(PermissionConstants.REST_LOGIN, UserMgtConstants.EXECUTE_ACTION),
                 };
 
                 String[] userList = new String[]{};
-                manager.addRole(role, userList, TenantUserPermissions);
+                manager.addRole(userRole, userList, TenantUserPermissions);
             }
 
         } catch (UserStoreException e) {
-            log.error("Error while creating the role: " + role + " - " +
+            log.error("Error while creating the role: " + userRole + " - " +
                       e.getMessage());
+            throw new UserManagementException(e.getMessage(), e);
         }
 
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
index d8fc8ac..a9b1dc7 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
@@ -93,6 +93,7 @@ public class ServiceUtils {
 
     private static Log log = LogFactory.getLog(ServiceUtils.class);
     private static ServiceDeploymentManager serviceDeploymentManager = new 
ServiceDeploymentManager();
+    private static StratosUserManager stratosUserManager = new 
StratosUserManager();
 
     static void deployCartridge(CartridgeDefinitionBean 
cartridgeDefinitionBean, ConfigurationContext ctxt,
                                 String userName, String tenantDomain) throws 
RestAPIException {
@@ -1270,60 +1271,79 @@ public class ServiceUtils {
     public static void addUser(UserInfoBean userInfoBean) throws 
RestAPIException {
 
         try {
-            getStratosUserManager().addUser(userInfoBean);
+
+            stratosUserManager.addUser(getTenantUserStoreManager(), 
userInfoBean);
+
         } catch (UserManagementException e) {
             log.error(e.getMessage(), e);
             throw new RestAPIException(e.getMessage(), e);
         }
-
-        log.info("Successfully added an user with UserName " + 
userInfoBean.getUserName());
+        log.info("Successfully added an user with Username " + 
userInfoBean.getUserName());
     }
 
     public static void updateUser(UserInfoBean userInfoBean) throws 
RestAPIException {
 
         try {
-            getStratosUserManager().updateUser(userInfoBean);
+
+            stratosUserManager.updateUser(getTenantUserStoreManager(), 
userInfoBean);
+
         } catch (UserManagementException e) {
             log.error(e.getMessage(), e);
             throw new RestAPIException(e.getMessage(), e);
         }
-        log.info("Successfully updated an user with UserName " + 
userInfoBean.getUserName());
+        log.info("Successfully updated an user with Username " + 
userInfoBean.getUserName());
     }
 
     public static void deleteUser(String userName) throws RestAPIException {
 
         try {
-            getStratosUserManager().deleteUser(userName);
+
+            stratosUserManager.deleteUser(getTenantUserStoreManager(), 
userName);
+
+        } catch (UserManagementException e) {
+            log.error(e.getMessage(), e);
+            throw new RestAPIException(e.getMessage(), e);
+        }
+        log.info("Successfully deleted an user with Username " + userName);
+    }
+
+    public static List<UserInfoBean> getAllUsers() throws RestAPIException {
+
+        List<UserInfoBean> userList = null;
+
+        try {
+
+            userList = 
stratosUserManager.getAllUsers(getTenantUserStoreManager());
+
         } catch (UserManagementException e) {
             log.error(e.getMessage(), e);
             throw new RestAPIException(e.getMessage(), e);
         }
-        log.info("Successfully deleted an user with UserName " + userName);
+        return userList;
     }
 
     /**
-     * Get Tenant aware UserStore
+     * Get Tenant aware UserStoreManager
      *
      * @return
      * @throws RestAPIException
      */
-    private static StratosUserManager getStratosUserManager() throws 
RestAPIException {
+    private static UserStoreManager getTenantUserStoreManager() throws 
RestAPIException {
 
         CarbonContext carbonContext = 
CarbonContext.getThreadLocalCarbonContext();
         UserRealm userRealm = null;
-        StratosUserManager stratosUserManager = null;
+        UserStoreManager userStoreManager = null;
 
         try {
             userRealm = carbonContext.getUserRealm();
-            UserStoreManager userStoreManager = 
userRealm.getUserStoreManager();
-            stratosUserManager = new StratosUserManager(userStoreManager);
+            userStoreManager = userRealm.getUserStoreManager();
 
         } catch (UserStoreException e) {
             log.error(e.getMessage(), e);
             throw new RestAPIException(e.getMessage(), e);
         }
 
-        return stratosUserManager;
+        return userStoreManager;
     }
 
     public static boolean deployKubernetesGroup(KubernetesGroup 
kubernetesGroupBean) throws RestAPIException {

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
index 1569a53..3f42af2 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
@@ -1179,6 +1179,22 @@ public class StratosAdmin extends AbstractAdmin {
         return Response.created(url).build();
     }
 
+    @GET
+    @Path("/user/list")
+    @Produces("application/json")
+    @AuthorizationAction("/permission/admin/manage/add/users")
+    public UserInfoBean[] retrieveUsers() throws RestAPIException {
+        List<UserInfoBean> userList = null;
+        try {
+            userList = ServiceUtils.getAllUsers();
+        } catch (Exception e) {
+            String msg = "Error in retrieving users";
+            log.error(msg, e);
+            throw new RestAPIException(msg);
+        }
+        return userList.toArray(new UserInfoBean[userList.size()]);
+    }
+
     @POST
     @Path("/kubernetes/deploy/group")
     @Produces("application/json")

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd
 
b/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd
index 0ff4cc8..ff395de 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos-test/WEB-INF/schemas/schema.xsd
@@ -20,9 +20,9 @@
                 <xs:element name="userName" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
                 <xs:element name="credential" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
                 <xs:element name="role" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
-                <xs:element name="firstName" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
-                <xs:element name="lastName" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
-                <xs:element name="email" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
+                <xs:element name="firstName" type="xs:string" minOccurs="0" 
maxOccurs="1" nillable="false"/>
+                <xs:element name="lastName" type="xs:string" minOccurs="0" 
maxOccurs="1" nillable="false"/>
+                <xs:element name="email" type="xs:string" minOccurs="0" 
maxOccurs="1" nillable="false"/>
                 <xs:element name="profileName" type="xs:string" minOccurs="0" 
maxOccurs="1" nillable="false"/>
             </xs:all>
         </xs:complexType>

http://git-wip-us.apache.org/repos/asf/stratos/blob/38d7f726/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd
 
b/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd
index 3d51481..d9e276c 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/webapp/stratos/WEB-INF/schemas/schema.xsd
@@ -20,9 +20,9 @@
                 <xs:element name="userName" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
                 <xs:element name="credential" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
                 <xs:element name="role" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
-                <xs:element name="firstName" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
-                <xs:element name="lastName" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
-                <xs:element name="email" type="xs:string" minOccurs="1" 
maxOccurs="1" nillable="false"/>
+                <xs:element name="firstName" type="xs:string" minOccurs="0" 
maxOccurs="1" nillable="false"/>
+                <xs:element name="lastName" type="xs:string" minOccurs="0" 
maxOccurs="1" nillable="false"/>
+                <xs:element name="email" type="xs:string" minOccurs="0" 
maxOccurs="1" nillable="false"/>
                 <xs:element name="profileName" type="xs:string" minOccurs="0" 
maxOccurs="1" nillable="false"/>
             </xs:all>
         </xs:complexType>

Reply via email to