/******************************************************************************* * Copyright (c) 2014 MEDEVIT. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * T. Huster - initial API and implementation *******************************************************************************/ package at.medevit.elexis.inbox.model; import at.medevit.elexis.inbox.model.IInboxElementService.State; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.data.Kontakt; import ch.elexis.data.Mandant; import ch.elexis.data.Patient; import ch.elexis.data.PersistentObject; import ch.rgw.tools.JdbcLink; import ch.rgw.tools.VersionInfo; public class InboxElement extends PersistentObject { public static final String TABLENAME = "at_medevit_elexis_inbox"; //$NON-NLS-1$ public static final String VERSION = "1.0.0"; //$NON-NLS-1$ public static final String VERSIONID = "VERSION"; //$NON-NLS-1$ public static final String FLD_PATIENT = "patient"; //$NON-NLS-1$ public static final String FLD_MANDANT = "mandant"; //$NON-NLS-1$ public static final String FLD_STATE = "state"; //$NON-NLS-1$ public static final String FLD_OBJECT = "object"; //$NON-NLS-1$ public static String getStateLabel(State state){ switch (state) { case NEW: return "Neu"; case SEEN: return "Gesehen"; default: return "???"; } } // @formatter:off static final String create = "CREATE TABLE " + TABLENAME + " (" + //$NON-NLS-1$ "ID VARCHAR(25) primary key, " + //$NON-NLS-1$ "lastupdate BIGINT," + "deleted CHAR(1) default '0'," + //$NON-NLS-1$ "patient VARCHAR(128)," + //$NON-NLS-1$ "mandant VARCHAR(128)," + //$NON-NLS-1$ "state VARCHAR(1)," + //$NON-NLS-1$ "object VARCHAR(128)" + //$NON-NLS-1$ ");" + //$NON-NLS-1$ "CREATE INDEX inbox1 ON " + TABLENAME + " (" + FLD_PATIENT + ");" + //$NON-NLS-1$ "CREATE INDEX inbox2 ON " + TABLENAME + " (" + FLD_MANDANT + ");" + //$NON-NLS-1$ "INSERT INTO " + TABLENAME + " (ID," + FLD_PATIENT + ") VALUES (" + JdbcLink.wrap(VERSIONID) + "," + JdbcLink.wrap(VERSION) + ");"; //$NON-NLS-1$ // @formatter:on static { addMapping(TABLENAME, FLD_PATIENT, FLD_MANDANT, FLD_STATE, FLD_OBJECT); if (!tableExists(TABLENAME)) { createOrModifyTable(create); } else { InboxElement version = load(VERSIONID); VersionInfo vi = new VersionInfo(version.get(FLD_PATIENT)); if (vi.isOlder(VERSION)) { // we should update eg. with createOrModifyTable(update.sql); // And then set the new version version.set(FLD_PATIENT, VERSION); } } } public InboxElement(String id){ super(id); } public InboxElement(Patient patient, Kontakt mandant, PersistentObject object){ create(null); set(FLD_PATIENT, patient != null ? patient.getId() : ""); set(FLD_MANDANT, mandant.getId()); set(FLD_OBJECT, object.storeToString()); set(FLD_STATE, Integer.toString(State.NEW.ordinal())); } public InboxElement(){ // TODO Auto-generated constructor stub } public static InboxElement load(final String id){ return new InboxElement(id); } @Override public String getLabel(){ PersistentObject object = CoreHub.poFactory.createFromString(get(FLD_OBJECT)); if (object != null && object.exists()) { return object.getLabel(); } else { return "InboxElement " + this.getId() + " with no object."; } } /** * Loads the PersistentObject and returns it, if it exists in the db. Else null is returned. * * @return */ public Object getObject(){ PersistentObject object = CoreHub.poFactory.createFromString(get(FLD_OBJECT)); if (object != null && object.exists()) { return object; } else { return null; } } @Override protected String getTableName(){ return TABLENAME; } public State getState(){ String stateStr = checkNull(get(FLD_STATE)); if (stateStr.isEmpty()) { return State.NEW; } else { return State.values()[Integer.parseInt(stateStr.trim())]; } } public void setState(State state){ set(FLD_STATE, Integer.toString(state.ordinal())); } public Patient getPatient(){ Patient ret = Patient.load(checkNull(get(FLD_PATIENT))); if (ret.exists()) { return ret; } return null; } public Mandant getMandant(){ Mandant ret = Mandant.load(checkNull(get(FLD_MANDANT))); if (ret.exists()) { return ret; } return null; } public void setMandant(Mandant mandant){ set(FLD_MANDANT, mandant.getId()); } }