package com.hilotec.elexis.kgview.data; import java.util.List; import ch.elexis.data.Artikel; import ch.elexis.data.PersistentObject; import ch.elexis.data.Query; public class FavMedikament extends PersistentObject { public static final String VERSION = "2"; public static final String PLUGIN_ID = "com.hilotec.elexis.kgview"; private static final String TABLENAME = "COM_HILOTEC_ELEXIS_KGVIEW_FAVMEDIKAMENT"; public static final String FLD_BEZEICHNUNG = "Bezeichnung"; public static final String FLD_ZWECK = "Zweck"; public static final String FLD_EINHEIT = "Einheit"; public static final String FLD_ORDNUNGSZAHL = "Ordnungszahl"; static { addMapping(TABLENAME, "Bezeichnung", "Zweck", "Einheit", "Ordnungszahl"); checkTable(); } private static final String create = "CREATE TABLE " + TABLENAME + " (" + " ID VARCHAR(25) PRIMARY KEY, " + " lastupdate BIGINT, " + " deleted CHAR(1) DEFAULT '0', " + " Artikel VARCHAR(25), " + " Ordnungszahl INT DEFAULT 0, " + " Bezeichnung TEXT, " + " Zweck TEXT, " + " Einheit TEXT " + ");" + "INSERT INTO " + TABLENAME + " (ID, Bezeichnung) VALUES " + " ('VERSION', '" + VERSION + "');"; private static final String up_1to2 = "ALTER TABLE " + TABLENAME + " ADD Ordnungszahl INT DEFAULT 0 AFTER Artikel;" + "UPDATE " + TABLENAME + " SET Bezeichnung = '2' WHERE" + " ID LIKE 'VERSION';"; private static void checkTable(){ String fm = null; try { fm = getConnection().queryString( "SELECT Bezeichnung FROM " + TABLENAME + " WHERE ID='VERSION';"); } catch (Exception e) {} if (fm == null) { createOrModifyTable(create); } else { if (fm.equals("1")) createOrModifyTable(up_1to2); } } public FavMedikament(Artikel a, int o, String b, String z, String e){ super(a.getId()); if (!exists()) { create(a.getId()); } setOrdnungszahl(o); setBezeichnung(b); setZweck(z); setEinheit(e); } public static FavMedikament load(final String id){ // FIXME: Dirty hack um zu pruefen ob ein Medikament schon // existiert, damit nicht versehentlich leere angelegt // werden. String fm = getConnection().queryString( "SELECT Bezeichnung FROM " + TABLENAME + " WHERE ID='" + id + "';"); if (fm == null) return null; return new FavMedikament(id); } public static FavMedikament load(Artikel art){ if (art == null) { return null; } return load(art.getId()); } public static List<FavMedikament> getAll(){ Query<FavMedikament> q = new Query<FavMedikament>(FavMedikament.class); List<FavMedikament> fm = q.execute(); for (FavMedikament f : fm) { if (f.getId().equals("VERSION")) { fm.remove(f); break; } } return fm; } protected FavMedikament(){} protected FavMedikament(final String id){ super(id); } @Override protected String getTableName(){ return TABLENAME; } @Override public String getLabel(){ return getBezeichnung(); } public Artikel getArtikel(){ return Artikel.load(getId()); } public int getOrdnungszahl(){ return getInt(FLD_ORDNUNGSZAHL); } public String getBezeichnung(){ return get(FLD_BEZEICHNUNG); } public String getZweck(){ return get(FLD_ZWECK); } public String getEinheit(){ return get(FLD_EINHEIT); } public void setOrdnungszahl(int ord){ setInt(FLD_ORDNUNGSZAHL, ord); } public void setBezeichnung(String txt){ set(FLD_BEZEICHNUNG, txt); } public void setZweck(String txt){ set(FLD_ZWECK, txt); } public void setEinheit(String txt){ set(FLD_EINHEIT, txt); } /** * Erstellt neues FM mit selben Eigenschaften aber neuem verknuepftem Artikel, das original FM * wird geloescht. */ public FavMedikament relinkTo(Artikel a){ FavMedikament fm = new FavMedikament(a, getOrdnungszahl(), getBezeichnung(), getZweck(), getEinheit()); delete(); return fm; } }