diff --git a/core/org.wso2.carbon.user.api/src/main/java/org/wso2/carbon/user/api/UserStoreManager.java b/core/org.wso2.carbon.user.api/src/main/java/org/wso2/carbon/user/api/UserStoreManager.java index 9e8984aedde..42d7143f9a7 100644 --- a/core/org.wso2.carbon.user.api/src/main/java/org/wso2/carbon/user/api/UserStoreManager.java +++ b/core/org.wso2.carbon.user.api/src/main/java/org/wso2/carbon/user/api/UserStoreManager.java @@ -437,4 +437,14 @@ void deleteUserClaimValues(String userName, String[] claims, String profileName) */ Properties getDefaultUserStoreProperties(); -} \ No newline at end of file + /** + * Get if the user store is a local user store or not. By default, this returns true. + * + * @return boolean - Is user store local or not. + */ + default boolean isLocalUserStore() { + + return true; + } + +} diff --git a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/tracker/UserStoreManagerRegistry.java b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/tracker/UserStoreManagerRegistry.java index fd1bb8e1942..4e7427bb1ec 100644 --- a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/tracker/UserStoreManagerRegistry.java +++ b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/tracker/UserStoreManagerRegistry.java @@ -17,11 +17,13 @@ */ package org.wso2.carbon.user.core.tracker; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.framework.BundleContext; import org.osgi.util.tracker.ServiceTracker; import org.wso2.carbon.user.api.Properties; +import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.user.api.UserStoreManager; import org.wso2.carbon.user.core.internal.UserStoreMgtDSComponent; @@ -111,4 +113,39 @@ public static Properties getUserStoreProperties(String className) { properties = getUserStoreManagers().get(className); return properties; } + + /** + * Get if the user store is local or not. + * + * @param className User store name. + * @return boolean true if user store is a local. + */ + public static boolean isLocalUserStore(String className) throws UserStoreException { + + Object[] userStoreManagers = userStoreManagerTracker.getServices(); + for (Object userStoreManagerObj : userStoreManagers) { + UserStoreManager userStoreManager = (UserStoreManager) userStoreManagerObj; + if (StringUtils.equals(className, userStoreManager.getClass().getName())) { + return userStoreManager.isLocalUserStore(); + } + } + throw new UserStoreException(String.format("User store manager is not found for the given className: %s", + className)); + } + + /** + * Get all the available user store manager names and their type (local user store or not). + * + * @return Map Map of user store manager name and boolean indicating local or not. + */ + public static Map getUserStoreManagersType() { + + Map userStoreManagersType = new HashMap<>(); + Object[] userStoreManagers = userStoreManagerTracker.getServices(); + for (Object userStoreManagerObj : userStoreManagers) { + boolean isLocalUserStore = ((UserStoreManager) userStoreManagerObj).isLocalUserStore(); + userStoreManagersType.put(userStoreManagerObj.getClass().getName(), isLocalUserStore); + } + return userStoreManagersType; + } }