package ch.elexis.icpc.fire.model; import static ch.elexis.core.constants.XidConstants.DOMAIN_EAN; import java.math.BigInteger; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.model.IPersistentObject; import ch.elexis.data.Mandant; import ch.elexis.data.Patient; import ch.elexis.data.Xid; import ch.elexis.icpc.fire.ui.Preferences; public class FireConfig { public static String XID_FIRE_PATID = "http://elexis.ch/icpc/fire/patid"; private String bdSystTab, bdDiastTab, pulseTab, heightTab, weightTab, waistTab; private ObjectFactory factory; public FireConfig(){ factory = new ObjectFactory(); Xid.localRegisterXIDDomainIfNotExists(XID_FIRE_PATID, "IcpcFirePatId", Xid.ASSIGNMENT_LOCAL); } public BigInteger getPatId(Patient patient){ try { Thread.sleep(10); } catch (InterruptedException e) { // ignore } String existingPatId = patient.getXid(FireConfig.XID_FIRE_PATID); if (existingPatId == null || existingPatId.isEmpty()) { // create a new pat id long currentMs = System.currentTimeMillis(); BigInteger patId = new BigInteger(Long.toString(currentMs)); // make sure no collision happens IPersistentObject existingPat = Xid.findObject(FireConfig.XID_FIRE_PATID, patId.toString()); while (existingPat != null) { patId.add(BigInteger.ONE); existingPat = Xid.findObject(FireConfig.XID_FIRE_PATID, patId.toString()); } // set the new id patient.addXid(FireConfig.XID_FIRE_PATID, patId.toString(), true); return patId; } else { return new BigInteger(existingPatId); } } public BigInteger getDocId(Mandant mandant) throws IllegalStateException{ String ean = mandant.getXid(DOMAIN_EAN); if (ean != null && !ean.isEmpty()) { return new BigInteger(ean); } throw new IllegalStateException("Mandant " + mandant.getLabel() + " has no EAN specified."); } private boolean readVitalSignsConfig(){ bdSystTab = getOrFail(Preferences.CFG_BD_SYST); if (bdSystTab != null) { bdDiastTab = getOrFail(Preferences.CFG_BD_DIAST); if (bdDiastTab != null) { pulseTab = getOrFail(Preferences.CFG_PULS); if (pulseTab != null) { heightTab = getOrFail(Preferences.CFG_HEIGHT); if (heightTab != null) { weightTab = getOrFail(Preferences.CFG_WEIGHT); if (weightTab != null) { waistTab = getOrFail(Preferences.CFG_BU); if (waistTab != null) { return true; } } } } } } return false; } private String getOrFail(String prefs){ String ret = CoreHub.globalCfg.get(prefs, null); return ret; } public ObjectFactory getFactory(){ return factory; } public boolean isValid(){ return readVitalSignsConfig(); } public String getWaistTab(){ return waistTab; } public String getBdSystTab(){ return bdSystTab; } public String getBdDiastTab(){ return bdDiastTab; } public String getWeightTab(){ return weightTab; } public String getHeightTab(){ return heightTab; } public String getPulseTab(){ return pulseTab; } }