/*
* Copyright (c) 2006-2012 Massachusetts General Hospital
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the i2b2 Software License v1.0
* which accompanies this distribution.
*
* Contributors:
* Rajesh Kuttan
*/
package edu.harvard.i2b2.fr.util;
import java.io.IOException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.harvard.i2b2.common.exception.I2B2Exception;
import edu.harvard.i2b2.common.util.ServiceLocator;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.core.io.FileSystemResource;
/**
* This is the CRC application's main utility class This utility class provides
* support for fetching resources like datasouce, to read application
* properties, to get ejb home,etc. $Id: CRCLoaderUtil.java,v 1.7
* 2007/04/25 15:05:11 rk903 Exp $
*
* @author rkuttan
*/
public class FRUtil {
/** log **/
protected final static Log log = LogFactory.getLog(FRUtil.class);
/** property file name which holds application directory name **/
public static final String APPLICATION_DIRECTORY_PROPERTIES_FILENAME = "fr_application_directory.properties";
/** application directory property name **/
public static final String APPLICATIONDIR_PROPERTIES = "edu.harvard.i2b2.fr.applicationdir";
/** application property filename* */
public static final String APPLICATION_PROPERTIES_FILENAME = "edu.harvard.i2b2.fr.properties";
/** property name for datasource present in app property file* */
//private static final String DATASOURCE_JNDI_PROPERTIES = "queryprocessor.jndi.datasource_name";
/** property name for metadata schema name* */
private static final String PMCELL_WS_URL_PROPERTIES = "edu.harvard.i2b2.fr.ws.pm.url";
/** property name for metadata schema name* */
private static final String PMCELL_BYPASS_FLAG_PROPERTIES = "edu.harvard.i2b2.fr.ws.pm.bypass";
/** property name for metadata schema name* */
private static final String PMCELL_BYPASS_ROLE_PROPERTIES = "edu.harvard.i2b2.fr.ws.pm.bypass.role";
private static final String PM_WS_EPR = "fr.ws.pm.url";
/** property name for PM webservice method **/
private static final String PM_WS_METHOD = "edu.harvard.i2b2.fr.ws.pm.webServiceMethod";
/** class instance field* */
private static FRUtil thisInstance = null;
/** service locator field* */
private static ServiceLocator serviceLocator = null;
/** field to store application properties * */
private static Properties appProperties = null;
private static Properties loadProperties = null;
/** field to store app datasource* */
private DataSource dataSource = null;
/**
* Private constructor to make the class singleton
*/
private FRUtil() {
}
/**
* Return this class instance
* @return QueryProcessorUtil
*/
public static FRUtil getInstance() {
if (thisInstance == null) {
thisInstance = new FRUtil();
serviceLocator = ServiceLocator.getInstance();
}
return thisInstance;
}
/**
* Get Project managment cell's service url
* @return
* @throws I2B2Exception
*/
public String getProjectManagementCellUrl() throws I2B2Exception {
return getPropertyValue(PMCELL_WS_URL_PROPERTIES);
}
/**
* Get Project management bypass flag
* @return
* @throws I2B2Exception
*/
public boolean getProjectManagementByPassFlag() throws I2B2Exception {
String pmByPassFlag = getPropertyValue(PMCELL_BYPASS_FLAG_PROPERTIES);
if (pmByPassFlag == null) {
return false;
}
else if (pmByPassFlag.trim().equalsIgnoreCase("true")) {
return true;
}
else {
return false;
}
}
/**
* Get Project management bypass flag
* @return
* @throws I2B2Exception
*/
public String getProjectManagementByPassRole() throws I2B2Exception {
return getPropertyValue(PMCELL_BYPASS_ROLE_PROPERTIES );
}
// ---------------------
// private methods here
// ---------------------
/**
* Load application property file into memory
*/
private String getPropertyValue(String propertyName) throws I2B2Exception {
if (appProperties == null) {
//read application directory property file
loadProperties = ServiceLocator.getProperties(APPLICATION_DIRECTORY_PROPERTIES_FILENAME);
//read application directory property
String appDir = loadProperties.getProperty(APPLICATIONDIR_PROPERTIES);
if (appDir == null) {
throw new I2B2Exception("Could not find " + APPLICATIONDIR_PROPERTIES + "from " + APPLICATION_DIRECTORY_PROPERTIES_FILENAME);
}
String appPropertyFile = appDir+"/"+APPLICATION_PROPERTIES_FILENAME;
try {
FileSystemResource fileSystemResource = new FileSystemResource(appPropertyFile);
PropertiesFactoryBean pfb = new PropertiesFactoryBean();
pfb.setLocation(fileSystemResource);
pfb.afterPropertiesSet();
appProperties = (Properties) pfb.getObject();
} catch (IOException e) {
throw new I2B2Exception(
"Application property file("+appPropertyFile+") missing entries or not loaded properly");
}
if (appProperties == null) {
throw new I2B2Exception(
"Application property file("+appPropertyFile+") missing entries or not loaded properly");
}
}
String propertyValue = appProperties.getProperty(propertyName);
if ((propertyValue != null) && (propertyValue.trim().length() > 0)) {
;
} else {
throw new I2B2Exception(
"Application property file("+APPLICATION_PROPERTIES_FILENAME+") missing "
+ propertyName + " entry");
}
return propertyValue;
}
public String getPmEndpointReference() throws I2B2Exception {
return getPropertyValue(PMCELL_WS_URL_PROPERTIES).trim();
}
public String getPmWebServiceMethod() throws I2B2Exception {
return getPropertyValue(PM_WS_METHOD).trim();
}
}