/*******************************************************************************
* Copyright (c) 2008 Dennis Schenk, Peter Siska.
* 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:
* Dennis Schenk - initial implementation
* Peter Siska - initial implementation
*******************************************************************************/
package ch.unibe.iam.scg.archie.ui.charts;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.jfree.data.general.DefaultPieDataset;
import ch.elexis.data.Patient;
import ch.elexis.data.Person;
import ch.elexis.data.Query;
/**
* <p>
* Dataset creator for the patients dashboard chart.
* </p>
*
* $Id: PatientDatasetCreator.java 747 2009-07-23 09:14:53Z peschehimself $
*
* @author Peter Siska
* @author Dennis Schenk
* @version $Rev: 747 $
*/
public class PatientDatasetCreator extends AbstractDatasetCreator {
/**
* Creates a CostDatasetCreator
*
* @param jobName
*/
public PatientDatasetCreator(String jobName) {
super(jobName);
}
/**
* (non-Javadoc)
*
* @see ch.elexis.actions.BackgroundJob#execute(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public IStatus createContent(final IProgressMonitor monitor) {
Query<Patient> patientQuery = new Query<Patient>(Patient.class);
HashMap<String, Integer> patientsMap = new HashMap<String, Integer>();
List<Patient> patients = patientQuery.execute();
monitor.beginTask("Querying Database", patients.size());
for (Patient patient : patients) {
// check for cancelation
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
String gender = patient.getGeschlecht();
if (gender.equals(Person.MALE) || gender.equals(Person.FEMALE)) {
if (patientsMap.containsKey(gender)) {
Integer count = patientsMap.get(gender);
patientsMap.put(gender, new Integer(count + 1));
} else {
patientsMap.put(gender, 1);
}
}
monitor.worked(1);
}
// compose dataset
this.dataset = new DefaultPieDataset();
for (Entry<String, Integer> entry : patientsMap.entrySet()) {
// check for cancelation
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
((DefaultPieDataset) this.dataset).setValue(entry.getKey(), entry.getValue());
}
monitor.done();
return Status.OK_STATUS;
}
}