package at.medevit.elexis.loinc.ui; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.ui.PlatformUI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import at.medevit.elexis.loinc.model.ILoincCodeService; public class LoincServiceComponent { private static Logger logger = LoggerFactory.getLogger(LoincServiceComponent.class); private static ILoincCodeService service; private static boolean updated = false; public static ILoincCodeService getService(){ logger.info("Get updated " + updated + " service " + service); if (!updated) { // The login job final IRunnableWithProgress job = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException{ monitor.setTaskName("Updating LOINC Top 2000"); service.updateTop2000(); } }; PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { @Override public void run(){ try { PlatformUI.getWorkbench().getProgressService().busyCursorWhile(job); } catch (InvocationTargetException e) { throw new IllegalStateException("Update failed." + e); } catch (InterruptedException e) { throw new IllegalStateException("Update failed." + e); } } }); } return service; } // Method will be used by DS to set the quote service public synchronized void setService(ILoincCodeService service){ LoincServiceComponent.service = service; } // Method will be used by DS to unset the quote service public synchronized void unsetService(ILoincCodeService service){ if (LoincServiceComponent.service == service) { LoincServiceComponent.service = null; } } }