package org.openmrs.module.openhmis.commons.uiframework;
import org.openmrs.util.OpenmrsClassLoader;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Abstract functionality for registering a UIFramework 2.x module. This class will ONLY load modules if UiFramework 2.x
* module is loaded. It replaces use of openmrs annotations which do not check if UiFramework 2.x has been loaded.
*/
public abstract class UiConfigurationFactory implements BeanFactoryPostProcessor {
private static Log log = LogFactory.getLog(UiConfigurationFactory.class);
/**
* Set the module id
*/
public abstract String getModuleId();
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
log.info("Start registering " + getModuleId() + " module");
try {
// load UiFramework's StandardModuleUiConfiguration class
Class cls = OpenmrsClassLoader.getInstance()
.loadClass("org.openmrs.ui.framework.StandardModuleUiConfiguration");
// get spring's bean definition builder
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(cls);
// set the module Id
builder.addPropertyValue("moduleId", getModuleId());
// register bean
((DefaultListableBeanFactory)beanFactory).registerBeanDefinition(
getModuleId() + "StandardModuleUiConfiguration", builder.getBeanDefinition());
log.info(getModuleId() + " successfully registered!");
} catch (ClassNotFoundException ex) {
log.info("StandardModuleUiConfiguration class not found. Unable to register " + getModuleId()
+ " UI 2.x module");
}
}
}