package ch.elexis.connector.medicosearch; import java.io.File; import java.io.IOException; import java.net.URL; import java.text.MessageFormat; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.MessageDialog; import org.osgi.framework.Bundle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.elexis.connector.medicosearch.ui.MedicosearchPreferences; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.ui.UiDesk; public class MedicosearchUtil { private static final Logger log = LoggerFactory.getLogger(MedicosearchUtil.class); private static final String BUNDLE_NAME = "ch.elexis.connector.medicosearch"; //$NON-NLS-1$ private static final String JAR_FILE = "lib/net.medshare.connector.medicosearch_2.1.6.20120925.jar"; private static final String CONFIG_FILE = "conf/connector.properties"; private static MedicosearchUtil instance = null; private static File bundleDir; private static File cfgFile; private static File jarFile; private MedicosearchUtil(){ initLocations(); } public static MedicosearchUtil getInstance(){ if (instance == null) { instance = new MedicosearchUtil(); } return instance; } private void initLocations(){ Bundle bundle = Platform.getBundle(BUNDLE_NAME); // resolve needed files and dir cfgFile = resolveByFileURL(CONFIG_FILE, bundle); jarFile = resolveByFileURL(JAR_FILE, bundle); if (cfgFile != null) { bundleDir = cfgFile.getParentFile().getParentFile(); updatePreferenceSettingsIfNeeded(); } if (cfgFile == null || jarFile == null) { showWarningMessage(); } } private void updatePreferenceSettingsIfNeeded(){ String cfgSetting = CoreHub.globalCfg.get(MedicosearchPreferences.CFG_MEDICOSEARCH_CONFIG, null); if (cfgSetting == null || !cfgSetting.equals(cfgFile.getAbsolutePath())) { CoreHub.globalCfg.set(MedicosearchPreferences.CFG_MEDICOSEARCH_CONFIG, cfgFile.getAbsolutePath()); CoreHub.globalCfg.flush(); } } private File resolveByFileURL(String filePath, Bundle bundle){ try { URL url = FileLocator.find(bundle, new Path(filePath), null); if (url != null) { File file = new File(FileLocator.toFileURL(url).getFile()); if (file != null && file.exists()) { return file; } } } catch (IOException e) { log.error("Error resolving file location [" + filePath + "]", e); } log.warn("Medicosearch file [" + filePath + "] not found"); return null; } private void showWarningMessage(){ StringBuilder sb = new StringBuilder(); if (cfgFile == null) { sb.append(MessageFormat.format(Messages.ConfigFile, CONFIG_FILE)); } if (jarFile == null) { sb.append(MessageFormat.format(Messages.MedicosearchJar, JAR_FILE)); } MessageDialog.openWarning(UiDesk.getTopShell(), Messages.Warn_FilesMissing, MessageFormat.format(Messages.Warn_FilesMissingMsg, sb.toString())); } public String getConfigurationFilePath(){ if (cfgFile == null) { return ""; } return cfgFile.getAbsolutePath(); } public String getMedicosearchJarPath(){ if (jarFile == null) { return ""; } return jarFile.getAbsolutePath(); } public File getBundleDirectory(){ return bundleDir; } }