edu.harvard.i2b2.im.util.IMUtil.java Source code

Java tutorial

Introduction

Here is the source code for edu.harvard.i2b2.im.util.IMUtil.java

Source

/*
 * Copyright (c) 2006-2007 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:
 *                 Raj Kuttan
 *                 Lori Phillips
 */
package edu.harvard.i2b2.im.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;

import edu.harvard.i2b2.common.exception.I2B2Exception;
import edu.harvard.i2b2.common.util.ServiceLocator;

/**
 * This is the Workplace service's main utility class
 * This utility class provides support for
 * fetching resources like datasouce, to read application
 * properties, to get ejb home,etc.
 * $Id: WorkplaceUtil.java,v 1.5 2008/03/13 14:32:32 lcp5 Exp $
 * @author rkuttan
 */
public class IMUtil {
    /** property file name which holds application directory name **/
    public static final String APPLICATION_DIRECTORY_PROPERTIES_FILENAME = "im_application_directory.properties";

    /** application directory property name **/
    public static final String APPLICATIONDIR_PROPERTIES = "edu.harvard.i2b2.im.applicationdir";

    /** application property filename**/
    public static final String APPLICATION_PROPERTIES_FILENAME = "im.properties";

    /** property name for im schema name**/
    private static final String IM_SCHEMA_NAME_PROPERTIES = "im.bootstrapdb.imschema";

    /** property name for PM endpoint reference **/
    private static final String PM_WS_EPR = "im.ws.pm.url";

    private static String CRC_WS_EPR = "";

    /** property name for PM webserver method **/
    private static final String PM_WS_METHOD = "im.ws.pm.webServiceMethod";

    /** property name for PM bypass **/
    private static final String PM_BYPASS = "im.ws.pm.bypass";

    /** property name for PM bypass project **/
    private static final String PM_BYPASS_PROJECT = "im.ws.pm.bypass.project";

    /** property name for PM bypass role **/
    private static final String PM_BYPASS_ROLE = "im.ws.pm.bypass.role";

    /** property name for EMPI Service **/
    private static final String EMPI_SERVICE = "im.empi.service";

    /** property name for EMPI endpoint reference **/
    private static final String OPENEMPI_WS_EPR = "im.empi.openempi.url";

    /** property name for EMPI username **/
    private static final String OPENEMPI_USERNAME = "im.empi.openempi.username";

    /** property name for EMPI password **/
    private static final String OPENEMPI_PASSWORD = "im.empi.openempi.password";

    /** property name to check if patient is in project  **/
    private static final String CHECK_PATIENT_IN_PROJECT = "im.checkPatientInProject";

    /** class instance field**/
    private static IMUtil thisInstance = null;

    /** service locator field**/
    private static ServiceLocator serviceLocator = null;

    /** field to store application properties **/
    private static Properties appProperties = null;

    /** log **/
    protected final Log log = LogFactory.getLog(getClass());

    /** field to store app datasource**/
    private DataSource dataSource = null;

    /** single instance of spring bean factory**/
    private BeanFactory beanFactory = null;

    /**
     * Private constructor to make the class singleton
     */
    private IMUtil() {
    }

    /**
     * Return this class instance
     * @return OntologyUtil
     */
    public static IMUtil getInstance() {
        if (thisInstance == null) {
            thisInstance = new IMUtil();
        }

        serviceLocator = ServiceLocator.getInstance();

        return thisInstance;
    }

    /**
     * Return the ontology spring config
     * @return
     */
    public BeanFactory getSpringBeanFactory() {
        if (beanFactory == null) {
            String appDir = null;

            try {
                //read application directory property file via classpath
                Properties loadProperties = ServiceLocator.getProperties(APPLICATION_DIRECTORY_PROPERTIES_FILENAME);
                //read directory property
                appDir = loadProperties.getProperty(APPLICATIONDIR_PROPERTIES);
            } catch (I2B2Exception e) {
                log.error(APPLICATION_DIRECTORY_PROPERTIES_FILENAME + "could not be located from classpath ");
            }

            if (appDir != null) {
                FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(
                        "file:" + appDir + "/" + "IMApplicationContext.xml");
                beanFactory = ctx.getBeanFactory();
            } else {
                FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(
                        "classpath:" + "IMApplicationContext.xml");
                beanFactory = ctx.getBeanFactory();
            }
        }

        return beanFactory;
    }

    /**
     * Return im schema name
     * @return
     * @throws I2B2Exception
     */
    public String getIMDataSchemaName() throws I2B2Exception {
        return getPropertyValue(IM_SCHEMA_NAME_PROPERTIES).trim() + ".";
    }

    /**
     * Return PM cell endpoint reference URL
     * @return
     * @throws I2B2Exception
     */
    public String getPmEndpointReference() throws I2B2Exception {
        return getPropertyValue(PM_WS_EPR).trim();
    }

    public void setCRCEndpointReference(String s) {
        CRC_WS_EPR = s;
    }

    public String getCRCUrl() throws I2B2Exception {
        return CRC_WS_EPR;
    }

    /**
     * Return IM EMPI Service
     * @return
     * @throws I2B2Exception
     */
    public String getEMPIService() throws I2B2Exception {
        return getPropertyValue(EMPI_SERVICE).trim();
    }

    public String getOpenEMPIWebService() throws I2B2Exception {
        return getPropertyValue(OPENEMPI_WS_EPR).trim();
    }

    public String getOpenEMPIUsername() throws I2B2Exception {
        return getPropertyValue(OPENEMPI_USERNAME).trim();
    }

    public String getOpenEMPIPassword() throws I2B2Exception {
        return getPropertyValue(OPENEMPI_PASSWORD).trim();
    }

    public boolean checkPatientInProject() throws I2B2Exception {
        return Boolean.parseBoolean(getPropertyValue(CHECK_PATIENT_IN_PROJECT).trim());
    }

    /**
     * Return PM cell web service method
     * @return
     * @throws I2B2Exception
     */
    public String getPmWebServiceMethod() throws I2B2Exception {
        return getPropertyValue(PM_WS_METHOD).trim();
    }

    /**
     * Return PM bypass flag
     * @return
     * @throws I2B2Exception
     */
    public Boolean isPmBypass() throws I2B2Exception {
        return Boolean.valueOf(getPropertyValue(PM_BYPASS).trim());
    }

    /**
     * Return PM bypass project name
     * @return
     * @throws I2B2Exception
     */
    public String getPmBypassProject() throws I2B2Exception {
        return getPropertyValue(PM_BYPASS_PROJECT).trim();
    }

    /**
     * Return PM bypass role assignment
     * @return
     * @throws I2B2Exception
     */
    public String getPmBypassRole() throws I2B2Exception {
        return getPropertyValue(PM_BYPASS_ROLE).trim();
    }

    /**
     * Return app server datasource
     * @return datasource
     * @throws I2B2Exception
     */
    public DataSource getDataSource(String dataSourceName) throws I2B2Exception {
        dataSource = (DataSource) serviceLocator.getAppServerDataSource(dataSourceName);
        return dataSource;

    }

    //---------------------
    // private methods here
    //---------------------

    /**
     * Load application property file into memory
     */
    private String getPropertyValue(String propertyName) throws I2B2Exception {
        if (appProperties == null) {
            //read application directory property file
            Properties 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;
    }
}