/*******************************************************************************
* 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
*
*******************************************************************************/
package com.hilotec.elexis.pluginstatistiken;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import com.hilotec.elexis.pluginstatistiken.config.Konfiguration;
import com.hilotec.elexis.pluginstatistiken.config.KonfigurationQuery;
import ch.rgw.tools.Log;
import ch.unibe.iam.scg.archie.model.AbstractTimeSeries;
import ch.unibe.iam.scg.archie.ui.widgets.WidgetTypes;
import ch.unibe.iam.scg.archie.annotations.GetProperty;
import ch.unibe.iam.scg.archie.annotations.SetProperty;
/**
* Dataprovider, der Archie mit den gewuenschten Daten versorgt.
*
* @author Antoine Kaufmann
*/
public class PluginDataProvider extends AbstractTimeSeries {
Konfiguration konfig;
KonfigurationQuery query = null;
String currentQuery;
String queries[];
private static final String DATE_PRESCRIPTION_FORMAT = "dd.MM.yyyy";
public PluginDataProvider(){
super("Pluginstatistiken");
konfig = Konfiguration.getInstance();
List<KonfigurationQuery> ql = konfig.getQueries();
queries = new String[ql.size()];
int i = 0;
for (KonfigurationQuery kq : ql) {
queries[i++] = kq.getTitle();
}
}
/**
* Eigentliche Daten fuer die Statistik zusammenstellen
*/
@Override
protected IStatus createContent(IProgressMonitor monitor){
if (query == null) {
return Status.CANCEL_STATUS;
}
final List<Comparable<?>[]> content = new ArrayList<Comparable<?>[]>();
final SimpleDateFormat gerFormat = new SimpleDateFormat(DATE_PRESCRIPTION_FORMAT);
List<Datensatz> data;
try {
data =
query.getDaten(gerFormat.format(this.getStartDate().getTime()),
gerFormat.format(this.getEndDate().getTime()), monitor);
} catch (PluginstatistikException e) {
Log.get("Messwertstatistiken").log(e.getMessage(), Log.ERRORS);
return Status.CANCEL_STATUS;
}
List<String> names = query.getColNames();
for (Datensatz ds : data) {
Comparable<?>[] row = new Comparable<?>[names.size()];
for (int i = 0; i < names.size(); i++) {
row[i] = ds.getFeld(names.get(i));
}
content.add(row);
}
this.dataSet.setContent(content);
monitor.done();
return Status.OK_STATUS;
}
/**
* Spaltenueberschriften zusammensuchen
*/
@Override
protected List<String> createHeadings(){
return query.getColNames();
}
@Override
public String getDescription(){
return "Pluginstatistiken";
}
/**
* Combo-Feld um die zu benutzende Abfrage auszuwaehlen
*/
@GetProperty(name = "Abfrage", index = 0, description = "Zu benutzende Abfrage um die Daten zu sammeln", widgetType = WidgetTypes.VENDOR, vendorClass = OurComboWidget.class)
public String getAbfrage(){
if (query == null) {
return queries[0];
}
return query.getTitle();
}
@SetProperty(name = "Abfrage")
public void setAbfrage(final String q){
List<KonfigurationQuery> queries = konfig.getQueries();
for (int i = 0; i < queries.size(); i++) {
if (queries.get(i).getTitle().equals(q)) {
query = queries.get(i);
break;
}
}
}
}