/* * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. 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.wso2.carbon.identity.user.account.association.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; import org.wso2.carbon.identity.core.util.IdentityCoreInitializedEvent; import org.wso2.carbon.identity.user.account.association.UserAccountConnector; import org.wso2.carbon.identity.user.account.association.UserAccountConnectorImpl; import org.wso2.carbon.identity.user.account.association.exception.UserAccountAssociationException; import org.wso2.carbon.identity.user.store.configuration.listener.UserStoreConfigListener; import org.wso2.carbon.stratos.common.listeners.TenantMgtListener; import org.wso2.carbon.user.core.listener.UserOperationEventListener; import org.wso2.carbon.user.core.listener.UserStoreManagerListener; import org.wso2.carbon.user.core.service.RealmService; import java.util.Collection; import java.util.Map; import java.util.TreeMap; /** * @scr.component name="identity.user.account.association.component" immediate="true" * @scr.reference name="user.realmservice.default" * interface="org.wso2.carbon.user.core.service.RealmService" * cardinality="1..1" policy="dynamic" bind="setRealmService" * unbind="unsetRealmService" * @scr.reference name="user.store.manager.listener.service" * interface="org.wso2.carbon.user.core.listener.UserStoreManagerListener" * cardinality="0..n" policy="dynamic" * bind="setUserStoreManagerListenerService" * unbind="unsetUserStoreManagerListenerService" * @scr.reference name="identityCoreInitializedEventService" * interface="org.wso2.carbon.identity.core.util.IdentityCoreInitializedEvent" cardinality="1..1" * policy="dynamic" bind="setIdentityCoreInitializedEventService" unbind="unsetIdentityCoreInitializedEventService" * @scr.reference name="user.operation.event.listener.service" * interface="org.wso2.carbon.user.core.listener.UserOperationEventListener" * cardinality="0..n" policy="dynamic" * bind="setUserOperationEventListenerService" * unbind="unsetUserOperationEventListenerService" */ public class IdentityAccountAssociationServiceComponent { private static Log log = LogFactory.getLog(IdentityAccountAssociationServiceComponent.class); protected void activate(ComponentContext context) { try { IdentityAccountAssociationServiceDataHolder.getInstance().setBundleContext(context.getBundleContext()); ServiceRegistration userAccountConnectorSR = IdentityAccountAssociationServiceDataHolder.getInstance().getBundleContext().registerService( UserAccountConnector.class.getName(), UserAccountConnectorImpl.getInstance(), null); if (userAccountConnectorSR != null) { if (log.isDebugEnabled()) { log.debug("Identity user account association service component activated successfully."); } } else { log.error("Identity user account association service component activation failed."); } ServiceRegistration UserOptEventListenerSR = IdentityAccountAssociationServiceDataHolder.getInstance().getBundleContext().registerService( UserOperationEventListener.class.getName(), new UserOperationEventListenerImpl(), null); if (UserOptEventListenerSR != null) { if (log.isDebugEnabled()) { log.debug("Identity user account association - UserOperationEventListener registered."); } } else { log.error("Identity user account association - UserOperationEventListener could not be registered."); } ServiceRegistration tenantMgtListenerSR = IdentityAccountAssociationServiceDataHolder.getInstance().getBundleContext().registerService( TenantMgtListener.class.getName(), new TenantMgtListenerImpl(), null); if (tenantMgtListenerSR != null) { if (log.isDebugEnabled()) { log.debug("Identity user account association - TenantMgtListener registered."); } } else { log.error("Identity user account association - TenantMgtListener could not be registered."); } ServiceRegistration userStoreConfigEventSR = IdentityAccountAssociationServiceDataHolder.getInstance().getBundleContext().registerService( UserStoreConfigListener.class.getName(), new UserStoreConfigListenerImpl(), null); if (userStoreConfigEventSR != null) { if (log.isDebugEnabled()) { log.debug("Identity user account association - UserStoreConfigListener registered."); } } else { log.error("Identity user account association - UserStoreConfigListener could not be registered."); } } catch (Exception e) { log.error("Failed to activate identity account connector service component ", e); } } protected void deactivate(ComponentContext context) { if (log.isDebugEnabled()) { log.debug("Identity account connector service component is deactivated "); } } protected void setRealmService(RealmService realmService) { IdentityAccountAssociationServiceDataHolder.getInstance().setRealmService(realmService); } protected void unsetRealmService(RealmService realmService) { IdentityAccountAssociationServiceDataHolder.getInstance().setRealmService(null); } protected void setUserStoreManagerListenerService( UserStoreManagerListener userStoreManagerListenerService) { IdentityAccountAssociationServiceDataHolder.getInstance().setUserStoreManagerListenerCollection(null); if (IdentityAccountAssociationServiceDataHolder.getInstance().getUserStoreManagerListeners() == null) { IdentityAccountAssociationServiceDataHolder.getInstance().setUserStoreManagerListeners(new TreeMap<Integer, UserStoreManagerListener>()); } IdentityAccountAssociationServiceDataHolder.getInstance().putUserStoreManagerListener(userStoreManagerListenerService.getExecutionOrderId(), userStoreManagerListenerService); } protected void unsetUserStoreManagerListenerService( UserStoreManagerListener userStoreManagerListenerService) { if (userStoreManagerListenerService != null && IdentityAccountAssociationServiceDataHolder.getInstance().getUserStoreManagerListeners() != null) { IdentityAccountAssociationServiceDataHolder.getInstance().removeUserStoreManagerListener(userStoreManagerListenerService.getExecutionOrderId()); IdentityAccountAssociationServiceDataHolder.getInstance().setUserOperationEventListenerCollection(null); } } protected void setUserOperationEventListenerService( UserOperationEventListener userOperationEventListenerService) { IdentityAccountAssociationServiceDataHolder.getInstance().setUserOperationEventListenerCollection(null); if (IdentityAccountAssociationServiceDataHolder.getInstance().getUserOperationEventListeners() == null) { IdentityAccountAssociationServiceDataHolder.getInstance().setUserOperationEventListeners(new TreeMap<Integer, UserOperationEventListener>()); } IdentityAccountAssociationServiceDataHolder.getInstance().putUserOperationEventListener(userOperationEventListenerService.getExecutionOrderId(), userOperationEventListenerService); } protected void unsetUserOperationEventListenerService( UserOperationEventListener userOperationEventListenerService) { if (userOperationEventListenerService != null && IdentityAccountAssociationServiceDataHolder.getInstance().getUserOperationEventListeners() != null) { IdentityAccountAssociationServiceDataHolder.getInstance().removeUserOperationEventListener(userOperationEventListenerService.getExecutionOrderId()); IdentityAccountAssociationServiceDataHolder.getInstance().setUserOperationEventListenerCollection(null); } } public static RealmService getRealmService() throws UserAccountAssociationException { RealmService realmService = IdentityAccountAssociationServiceDataHolder.getInstance().getRealmService(); if (realmService == null) { String msg = "System has not been started properly. Realm Service is null."; log.error(msg); throw new UserAccountAssociationException(msg); } return realmService; } public static Collection<UserStoreManagerListener> getUserStoreManagerListeners() { Map<Integer, UserStoreManagerListener> userStoreManagerListeners = IdentityAccountAssociationServiceDataHolder.getInstance().getUserStoreManagerListeners(); Collection<UserStoreManagerListener> userStoreManagerListenerCollection = IdentityAccountAssociationServiceDataHolder.getInstance().getUserStoreManagerListenerCollection(); if (userStoreManagerListeners == null) { userStoreManagerListeners = new TreeMap<>(); IdentityAccountAssociationServiceDataHolder.getInstance().setUserStoreManagerListeners(userStoreManagerListeners); } if (userStoreManagerListenerCollection == null) { userStoreManagerListenerCollection = userStoreManagerListeners.values(); IdentityAccountAssociationServiceDataHolder.getInstance().setUserStoreManagerListenerCollection(userStoreManagerListenerCollection); } return userStoreManagerListenerCollection; } public static Collection<UserOperationEventListener> getUserOperationEventListeners() { Map<Integer, UserOperationEventListener> userOperationEventListeners = IdentityAccountAssociationServiceDataHolder.getInstance().getUserOperationEventListeners(); Collection<UserOperationEventListener> userOperationEventListenerCollection = IdentityAccountAssociationServiceDataHolder.getInstance().getUserOperationEventListenerCollection(); if (userOperationEventListeners == null) { userOperationEventListeners = new TreeMap<>(); IdentityAccountAssociationServiceDataHolder.getInstance().setUserOperationEventListeners(userOperationEventListeners); } if (userOperationEventListenerCollection == null) { userOperationEventListenerCollection = userOperationEventListeners.values(); IdentityAccountAssociationServiceDataHolder.getInstance().setUserOperationEventListenerCollection(userOperationEventListenerCollection); } return userOperationEventListenerCollection; } protected void unsetIdentityCoreInitializedEventService(IdentityCoreInitializedEvent identityCoreInitializedEvent) { /* reference IdentityCoreInitializedEvent service to guarantee that this component will wait until identity core is started */ } protected void setIdentityCoreInitializedEventService(IdentityCoreInitializedEvent identityCoreInitializedEvent) { /* reference IdentityCoreInitializedEvent service to guarantee that this component will wait until identity core is started */ } }