package org.celllife.idart.commonobjects;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Locale;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.celllife.idart.misc.PatientBarcodeParser;
import org.celllife.idart.misc.PropertiesEncrypter;
import org.celllife.idart.misc.iDARTRuntimeException;
/**
*/
public class iDartProperties {
public static final String SWTBOT_KEY = "org.eclipse.swtbot.widget.key";
public static final String FILE = "idart.properties";
public final static String OFFLINE_DOWNREFERRAL_MODE = "offline";
public final static String ONLINE_DOWNREFERRAL_MODE = "online";
public final static String randbDataFolder = "randb";
public static boolean allowMultipleUncollectedPackages = false;
public static String downReferralMode = "offline";
public static boolean showDownReferButton = false;
public static String roundUpForms = "";
public static String hibernateConnectionUrl = "http://localhost:5432/idart";
public static String hibernatePassword = "";
public static String hibernateUsername = "";
public static String hibernateDriver = "org.postgresql.Driver";
public static String hibernateDialect = "org.hibernate.dialect.PostgreSQLDialect";
public static String updateScriptDir = "scripts";
public static String exportDir = "dataExports";
public static boolean patientNameOnDrugLabel = false;
public static boolean patientNameOnReports = false;
public static boolean patientNameOnPackageLabel = false;
public static boolean summaryLabelDefault = true;
public static boolean dispenseDirectlyDefault = true;
public static boolean printSideTreatmentLabels = true;
public static boolean printDrugLabels = true;
public static String timesPerDayLanguage1 = "times per day";
public static String timesPerDayLanguage2 = "ngemini";
public static String timesPerDayLanguage3 = "keur per dag";
public static boolean isEkapaVersion = true;
public static String eKapa_user = "user";
public static String eKapa_password = "pass";
public static String eKapa_dburl = "oracle.cell-life.org";
public static String eKapa_dbport = "1521";
public static String eKapa_dbtype = "oracle";
public static String eKapa_dbname = "idart";
public static String patientBarcodeRegex = "\\w+";
public static int intValueOfAlternativeBarcodeEndChar = -1;
public static boolean accumByDefault = true;
public static int logoutTime = -1;
public static String idartVersionNumber = "@IDART.VERSION.SHORT@";
public static boolean nextAppointmentDateOnLabels = true;
public static boolean showBatchInfoOnSummaryLabels = false;
public static boolean showBatchInfoOnDrugLabels = false;
public static String country = "South Africa";
public static Locale currentLocale = new Locale("en", "ZA");
public static String importDateFormat = "dd/MM/yyyy";
public static boolean enableDrugGroupEditor = true;
public static boolean enableDrugEditor = true;
public static boolean isCidaStudy = false;
public static String illegalPatientIdChars = "'`^";
public static String illegalPatientIdRegex = "["+illegalPatientIdChars+"]+";
/**
*/
public enum LabelType {
EKAPA, IDART
}
public static LabelType labelType = LabelType.IDART;
private static Logger log = null;
private static Properties loadedProperties;
public static String updateUrl = "http://update.cell-life.org/idart/updates.xml";
/**
* private constructor to prevent instantiation
*/
private iDartProperties() {
}
public static void setiDartProperties() {
log = Logger.getLogger(iDartProperties.class);
log.info("Loading Encrypted System Properties");
PropertiesEncrypter pe = new PropertiesEncrypter();
try {
pe.loadPropertiesFromFile(FILE);
} catch (IOException e) {
throw new iDARTRuntimeException("Failed to load properties");
}
pe.decryptProperties();
loadedProperties = pe.getProperties();
setLocale("localeLanguage", "localeCountry");
allowMultipleUncollectedPackages = setBooleanProperty("allowMultipleUncollectedPackages");
downReferralMode = setStringProperty("downReferralMode");
showDownReferButton = setBooleanProperty("showDownReferButton");
summaryLabelDefault = setBooleanProperty("summaryLabelDefault");
dispenseDirectlyDefault = setBooleanProperty("dispenseDirectlyDefault");
printSideTreatmentLabels = setBooleanProperty("printSideTreatmentLabels");
printDrugLabels = setBooleanProperty("printDrugLabels");
patientNameOnDrugLabel = setBooleanProperty("patientNameOnDrugLabel");
patientNameOnReports = setBooleanProperty("patientNameOnReports");
patientNameOnPackageLabel = setBooleanProperty("showPatientNameOnPackageLabel");
isEkapaVersion = setBooleanProperty("isEkapaVersion");
accumByDefault = setBooleanProperty("accumByDefault");
country = setStringProperty("country");
timesPerDayLanguage1 = setStringProperty("timesPerDayLanguage1");
timesPerDayLanguage2 = setStringProperty("timesPerDayLanguage2");
timesPerDayLanguage3 = setStringProperty("timesPerDayLanguage3");
logoutTime = setIntegerProperty("logoutTime");
roundUpForms = setStringProperty("roundUpForms");
nextAppointmentDateOnLabels = setBooleanProperty("nextAppointmentDateOnLabels");
showBatchInfoOnSummaryLabels = setBooleanProperty("showBatchInfoOnSummaryLabels");
showBatchInfoOnDrugLabels = setBooleanProperty("showBatchInfoOnDrugLabels");
enableDrugEditor = setBooleanProperty("enableDrugEditor");
enableDrugGroupEditor = setBooleanProperty("enableDrugGroupEditor");
patientBarcodeRegex = setStringProperty("patientBarcodeRegex");
exportDir = setStringProperty("export_dir");
hibernateConnectionUrl = setStringProperty("encrypted_hibernate_url");
hibernatePassword = setStringProperty("encrypted_hibernate_password");
hibernateUsername = setStringProperty("encrypted_hibernate_username");
updateScriptDir = setStringProperty("update_script_dir");
importDateFormat = setStringProperty("importDateFormat");
updateUrl = setStringProperty("updateUrl");
eKapa_dbname = setStringProperty("eKapa_dbname");
eKapa_dbport = setStringProperty("eKapa_dbport");
eKapa_dburl = setStringProperty("eKapa_dburl");
eKapa_password = setStringProperty("eKapa_password");
eKapa_user = setStringProperty("eKapa_user");
intValueOfAlternativeBarcodeEndChar = setIntegerProperty("intValueOfAlternativeBarcodeEndChar");
isCidaStudy = setBooleanProperty("cidaStudy");
String labelTypeString = setStringProperty("labelType");
// Should paeds labels have quantities blank by default?
if (labelTypeString != null) {
if (labelTypeString.equalsIgnoreCase("idart")) {
labelType = LabelType.IDART;
} else if (labelTypeString.equalsIgnoreCase("ekapa")) {
labelType = LabelType.EKAPA;
}
}
PatientBarcodeParser
.initialisePatientBarcodeParser(patientBarcodeRegex);
}
public static String getPropertiesString() {
StringBuilder sb = new StringBuilder();
sb.append("\n");
sb.append("allowMultipleUncollectedPackages="
+ allowMultipleUncollectedPackages);
sb.append("\n");
sb.append("downReferralMode=" + downReferralMode);
sb.append("\n");
sb.append("showDownReferButton=" + showDownReferButton);
sb.append("\n");
sb.append("summaryLabelDefault=" + summaryLabelDefault);
sb.append("\n");
sb.append("dispenseDirectlyDefault=" + dispenseDirectlyDefault);
sb.append("\n");
sb.append("printSideTreatmentLabels=" + printSideTreatmentLabels);
sb.append("\n");
sb.append("printDrugLabels="+printDrugLabels);
sb.append("\n");
sb.append("patientNameOnDrugLabel="+patientNameOnDrugLabel);
sb.append("\n");
sb.append("patientNameOnReports="+patientNameOnReports);
sb.append("\n");
sb.append("isEkapaVersion="+isEkapaVersion);
sb.append("\n");
sb.append("accumByDefault="+accumByDefault);
sb.append("\n");
sb.append("country="+country);
sb.append("\n");
sb.append("timesPerDayLanguage1="+timesPerDayLanguage1);
sb.append("\n");
sb.append("timesPerDayLanguage2="+timesPerDayLanguage2);
sb.append("\n");
sb.append("timesPerDayLanguage3="+timesPerDayLanguage3);
sb.append("\n");
sb.append("logoutTime="+logoutTime);
sb.append("\n");
sb.append("roundUpForms="+roundUpForms);
sb.append("\n");
sb.append("nextAppointmentDateOnLabels="+nextAppointmentDateOnLabels);
sb.append("\n");
sb.append("enableDrugEditor="+enableDrugEditor);
sb.append("\n");
sb.append("enableDrugGroupEditor="+enableDrugGroupEditor);
sb.append("\n");
sb.append("patientBarcodeRegex="+patientBarcodeRegex);
sb.append("\n");
sb.append("export_dir="+exportDir);
sb.append("\n");
sb.append("encrypted_hibernate_url="+hibernateConnectionUrl);
sb.append("\n");
sb.append("hibernate_dialect="+hibernateDialect);
sb.append("\n");
sb.append("hibernate_driver="+hibernateDriver);
sb.append("\n");
sb.append("encrypted_hibernate_password="+hibernatePassword);
sb.append("\n");
sb.append("encrypted_hibernate_username="+hibernateUsername);
sb.append("\n");
sb.append("update_script_dir="+updateScriptDir);
sb.append("\n");
sb.append("importDateFormat="+importDateFormat);
sb.append("\n");
sb.append("updateUrl="+updateUrl);
sb.append("\n");
sb.append("eKapa_dbname=" + eKapa_dbname);
sb.append("\n");
sb.append("eKapa_dbport=" + eKapa_dbport);
sb.append("\n");
sb.append("eKapa_dburl=" + eKapa_dburl);
sb.append("\n");
sb.append("eKapa_password=" + eKapa_password);
sb.append("\n");
sb.append("eKapa_user=" + eKapa_user);
sb.append("\n");
sb.append("intValueOfAlternativeBarcodeEndChar="
+ intValueOfAlternativeBarcodeEndChar);
sb.append("\n");
sb.append("cidaStudy=" + isCidaStudy);
sb.append("\n");
switch (labelType) {
case EKAPA:
sb.append("labelType=ekapa");
break;
case IDART:
sb.append("labelType=idart");
break;
}
return sb.toString();
}
/**
* Method setIntegerProperty.
*
* @param propertyName
* String
* @return int
*/
private static int setIntegerProperty(String propertyName) {
String theSetting = loadedProperties.getProperty(propertyName);
if (theSetting != null) {
try {
return Integer.parseInt(theSetting);
} catch (NumberFormatException pe) {
log.info("System property " + propertyName
+ " could not be parsed into an integer.");
}
}
return -1;
}
/**
* Method setBooleanProperty.
*
* @param propertyName
* String
* @return boolean
*/
private static boolean setBooleanProperty(String propertyName) {
String theSetting = loadedProperties.getProperty(propertyName);
if (theSetting != null) {
if (theSetting.equalsIgnoreCase("true"))
return true;
}
return false;
}
/**
* Method setStringProperty.
*
* @param propertyName
* String
* @return String
*/
private static String setStringProperty(String propertyName) {
String theSetting = loadedProperties.getProperty(propertyName);
if (theSetting != null)
return theSetting.trim();
else {
log.warn("Property: " + propertyName + " is null");
return "";
}
}
/**
* Set the current locale from the country and language codes
*
* @param propertyNameLanguage
* @param propertyNameCountry
*/
private static void setLocale(String propertyNameLanguage,
String propertyNameCountry) {
String theLanguage = loadedProperties.getProperty(propertyNameLanguage);
if (theLanguage == null) {
log.warn("Property: " + propertyNameLanguage + " is null");
return;
}
String theCountry = loadedProperties.getProperty(propertyNameCountry);
if (theCountry == null) {
log.warn("Property: " + propertyNameCountry + " is null");
return;
}
try {
currentLocale = new Locale(theLanguage, theCountry);
log.info("Locale changed to " + currentLocale.getDisplayName());
} catch (Exception e) {
log.warn("Could not set locale", e);
}
}
/**
* Generates a string of name value pairs for the fields in this class.
*
* @return String listing all the values of the properties in this class.
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static String printProperties() throws IllegalArgumentException,
IllegalAccessException, ClassNotFoundException {
Field[] fields = iDartProperties.class.getDeclaredFields();
StringBuffer props = new StringBuffer();
for (int i = 0; i < fields.length; i++) {
props.append(fields[i].getName());
props.append(" : '");
Object value = fields[i].get(Class.forName(iDartProperties.class
.getName()));
String val = "";
if (value != null) {
val = value.getClass().cast(value).toString();
}
props.append(val);
props.append("'\n");
}
return props.toString();
}
}