/*******************************************************************************
* Copyright (c) 2009, A. Kaufmann and Elexis
* 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:
* A. Kaufmann - initial implementation
* P. Chaubert - adapted to Messwerte V2
*
*******************************************************************************/
package com.hilotec.elexis.messwerte.v2.data;
import java.util.LinkedList;
import java.util.List;
import com.hilotec.elexis.pluginstatistiken.schnittstelle.IDatenquelle;
import com.hilotec.elexis.pluginstatistiken.schnittstelle.IDatensatz;
import com.hilotec.elexis.pluginstatistiken.schnittstelle.ITabelle;
/**
* Schnittstelle zu hilotec-Pluginstatistiken. Diese Klasse dient als Datenquelle fuer das Plugin.
* Auf die Messungen kann im Pluginstatistiken-Plugin ueber Messwert:Messungstyp zugegriffen werden.
* Die Spaltennamen werden aus den Feldnamen im Messwertplugin uebernommen. Zusaetzlich sind bei
* jedem Messwert zwei weitere Spalten mit Namen Patient und Datum vorhanden. Ersteres gibt die ID
* des zugehoerigen Patienten zurueck, waehrend zweiters dem Datum der Messung entspricht. Wenn
* gleichbenannte Felder existieren werden diese ignoriert, und die oben angegebenen
* Spezialbedeutungen werden benutzt.
*
* @author Antoine Kaufmann
*/
public class PluginstatistikenDatenquelle implements IDatenquelle {
List<ITabelle> tabellen;
/**
* Einzelne Tabelle in dieser Datenquelle. Diese repraesentiert jeweils einen bestimmten
* Messungstyp.
*
* @author Antoine Kaufmann
*/
private static class MessungTabelle implements ITabelle {
MessungTyp typ;
/**
* Einzelner Datensatz in einer Tabelle, entspricht einer Messung
*
* @author Antoine Kaufmann
*/
private static class MessungDatensatz implements IDatensatz {
Messung messung;
/**
* Neuer Datensatz auf Basis einer Messung erstellen
*
* @param m
* Messung
*/
public MessungDatensatz(Messung m){
messung = m;
}
/*
* (non-Javadoc)
*
* @see
* com.hilotec.elexis.pluginstatistiken.schnittstelle.IDatensatz#getSpalte(java.lang
* .String)
*/
public String getSpalte(String name){
if (name.equals("Patient")) {
return messung.getPatient().getId();
} else if (name.equals("Datum")) {
return messung.getDatum();
}
Messwert mw = messung.getMesswert(name);
if (mw == null) {
return null;
}
return mw.getWert();
}
}
/**
* Konstruktor. Initialisiert eine neue Tabelle auf Basis des uebergebenen Messungstyps.
*
* @param typ
* Typ den diese Tabelle beinhalten soll
*/
public MessungTabelle(MessungTyp typ){
this.typ = typ;
}
/*
* (non-Javadoc)
*
* @see com.hilotec.elexis.pluginstatistiken.schnittstelle.ITabelle#getDatensaetze()
*/
public List<IDatensatz> getDatensaetze(){
List<Messung> messungen = Messung.getMessungen(typ);
List<IDatensatz> datensaetze = new LinkedList<IDatensatz>();
for (Messung m : messungen) {
datensaetze.add(new MessungDatensatz(m));
}
return datensaetze;
}
/*
* (non-Javadoc)
*
* @see com.hilotec.elexis.pluginstatistiken.schnittstelle.ITabelle#getName()
*/
public String getName(){
return typ.getName();
}
}
/**
* Konstruktor. Initialisiert die ganze Datenquelle mit Tabellen und allem.
*/
public PluginstatistikenDatenquelle(){
tabellen = new LinkedList<ITabelle>();
MessungKonfiguration konfig = MessungKonfiguration.getInstance();
for (MessungTyp mt : konfig.getTypes()) {
tabellen.add(new MessungTabelle(mt));
}
}
/*
* (non-Javadoc)
*
* @see com.hilotec.elexis.pluginstatistiken.schnittstelle.IDatenquelle#getName()
*/
public String getName(){
return "Messwert";
}
/*
* (non-Javadoc)
*
* @see com.hilotec.elexis.pluginstatistiken.schnittstelle.IDatenquelle#getTabellen()
*/
public List<ITabelle> getTabellen(){
return tabellen;
}
/*
* (non-Javadoc)
*
* @see
* com.hilotec.elexis.pluginstatistiken.schnittstelle.IDatenquelle#getTabelle(java.lang.String)
*/
public ITabelle getTabelle(String name){
for (ITabelle tab : tabellen) {
if (tab.getName().equals(name)) {
return tab;
}
}
return null;
}
}