/*
* Copyright (c) 2016, 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.governance.taxonomy.internal;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.ComponentContext;
import org.wso2.carbon.governance.taxonomy.services.ITaxonomyServices;
import org.wso2.carbon.governance.taxonomy.services.TaxonomyManager;
import org.wso2.carbon.governance.taxonomy.services.TaxonomyServicesImpl;
import org.wso2.carbon.governance.taxonomy.services.TenantLoginStorageService;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.registry.core.service.RegistryService;
import org.wso2.carbon.registry.core.service.TenantRegistryLoader;
import org.wso2.carbon.user.api.UserStoreException;
import org.wso2.carbon.user.core.service.RealmService;
import org.wso2.carbon.utils.Axis2ConfigurationContextObserver;
import org.xml.sax.SAXException;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
/**
* @scr.component name="org.wso2.carbon.governance.taxonomy"
* immediate="true"
* @scr.reference name="realm.service"
* interface="org.wso2.carbon.user.core.service.RealmService" cardinality="1..1"
* policy="dynamic" bind="setRealmService" unbind="unsetRealmService"
* @scr.reference name="registry.service"
* interface="org.wso2.carbon.registry.core.service.RegistryService" cardinality="1..1"
* policy="dynamic" bind="setRegistryService" unbind="unsetRegistryService"
* @scr.reference name="registry.core.dscomponent"
* interface="org.wso2.carbon.registry.core.service.RegistryService" cardinality="1..1"
* policy="dynamic" bind="setRegistryService" unbind="unsetRegistryService"
* @scr.reference name="tenant.registryloader" interface="org.wso2.carbon.registry.core.service.TenantRegistryLoader" cardinality="1..1"
* policy="dynamic" bind="setTenantRegistryLoader" unbind="unsetTenantRegistryLoader"
*/
public class TaxonomyServiceComponent {
private static final Log log = LogFactory.getLog(TaxonomyServiceComponent.class);
/**
* Method to activate bundle.
*
* @param context OSGi component context.
*/
protected void activate(ComponentContext context)
throws UserStoreException, RegistryException, ParserConfigurationException, SAXException,
XPathExpressionException, IOException {
BundleContext bundleContext = context.getBundleContext();
TenantLoginStorageService tenantLoginStorageService = new TenantLoginStorageService();
ServiceRegistration tenantMgtListenerSR = bundleContext
.registerService(Axis2ConfigurationContextObserver.class.getName(), tenantLoginStorageService, null);
if (tenantMgtListenerSR != null) {
if (log.isDebugEnabled()) {
log.debug("Governance Taxonomy Management - TenantLoginStorageService registered");
}
} else {
log.error("Governance Taxonomy Management - TenantLoginStorageService could not be registered");
}
BundleContext taxonomyBundleContext = context.getBundleContext();
ServiceRegistration taxonomyManagementService = taxonomyBundleContext
.registerService(ITaxonomyServices.class.getName(), new TaxonomyServicesImpl(), null);
if (taxonomyManagementService != null) {
if (log.isDebugEnabled()) {
log.debug("Governance Taxonomy Management - Manager services registered");
}
} else {
log.error("Governance Taxonomy Management - Manager services could not be registered");
}
if (log.isDebugEnabled()) {
log.debug("Governance Taxonomy Management Service bundle is activated");
}
try {
TaxonomyManager taxonomyManager = new TaxonomyManager();
taxonomyManager.initTaxonomyStorage();
if (log.isDebugEnabled()) {
log.debug("Governance Taxonomy Management map initialization is success");
}
} catch (UserStoreException e) {
log.error("Error occurred while getting RealmConfigurations when activating osgi service", e);
} catch (RegistryException e) {
log.error("Error occurred while getting taxonomy files from registry when activating osgi service", e);
} catch (IOException e) {
log.error("Error occurred while parsing taxonomy xml when activating osgi service", e);
} catch (ParserConfigurationException e) {
log.error("Error occurred while building new document for taxonomy when activating osgi service", e);
} catch (SAXException e) {
log.error("Error occurred parsing taxonomy content stream when activating osgi service", e);
}
}
/**
* Method to deactivate bundle.
*
* @param context OSGi component context.
*/
protected void deactivate(ComponentContext context) {
if (log.isDebugEnabled()) {
log.info("taxonomy bundle is deactivated");
}
}
/**
* Method to set registry service.
*
* @param registryService service to get tenant data.
*/
protected void setRegistryService(RegistryService registryService) {
if (log.isDebugEnabled()) {
log.debug("Setting RegistryService for taxonomy");
}
ServiceHolder.setRegistryService(registryService);
}
/**
* Method to unset registry service.
*
* @param registryService service to get registry data.
*/
protected void unsetRegistryService(RegistryService registryService) {
if (log.isDebugEnabled()) {
log.debug("Unset Registry service");
}
ServiceHolder.setRegistryService(null);
}
/**
* Method to set realm service.
*
* @param realmService service to get tenant data.
*/
protected void setRealmService(RealmService realmService) {
log.debug("Setting RealmService for WSO2 Governance Registry migration");
ServiceHolder.setRealmService(realmService);
}
/**
* Method to unset realm service.
*
* @param realmService service to get tenant data.
*/
protected void unsetRealmService(RealmService realmService) {
if (log.isDebugEnabled()) {
log.debug("Unset Realm service");
}
ServiceHolder.setRealmService(null);
}
/**
* Method to set tenant registry loader
*
* @param tenantRegLoader tenant registry loader
*/
protected void setTenantRegistryLoader(TenantRegistryLoader tenantRegLoader) {
log.debug("Setting TenantRegistryLoader for WSO2 Governance Registry migration");
ServiceHolder.setTenantRegLoader(tenantRegLoader);
}
/**
* Method to unset tenant registry loader
*
* @param tenantRegLoader tenant registry loader
*/
protected void unsetTenantRegistryLoader(TenantRegistryLoader tenantRegLoader) {
log.debug("Unset Tenant Registry Loader");
ServiceHolder.setTenantRegLoader(null);
}
}