/*******************************************************************************
* Copyright (c) 2010, G. Weirich 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:
* G. Weirich - initial implementation
*
*******************************************************************************/
package ch.elexis.impfplan.view;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import ch.elexis.core.ui.selectors.DisplayPanel;
import ch.elexis.core.ui.selectors.FieldDescriptor;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.impfplan.model.DiseaseDefinitionModel;
import ch.elexis.impfplan.model.DiseaseDefinitionModel.DiseaseDefinition;
import ch.elexis.impfplan.model.VaccinationType;
@SuppressWarnings("unchecked")
public class EditVaccinationDialog extends TitleAreaDialog {
CheckboxTreeViewer treeViewer;
VaccinationType vt;
FieldDescriptor<VaccinationType>[] fields = new FieldDescriptor[] {
new FieldDescriptor<VaccinationType>(Messages.EditVaccinationDialog_nameOfVaccination,
VaccinationType.NAME, FieldDescriptor.Typ.STRING, null),
new FieldDescriptor<VaccinationType>(Messages.EditVaccinationDialog_vaccinationSubstance,
VaccinationType.PRODUCT, null),
new FieldDescriptor<VaccinationType>(Messages.EditVaccinationDialog_ageFromTo,
VaccinationType.RECOMMENDED_AGE, null),
new FieldDescriptor<VaccinationType>(Messages.EditVaccinationDialog_distance1_2,
VaccinationType.DELAY1TO2, null),
new FieldDescriptor<VaccinationType>(Messages.EditVaccinationDialog_distance2_3,
VaccinationType.DELAY2TO3, null),
new FieldDescriptor<VaccinationType>(Messages.EditVaccinationDialog_distance3_4,
VaccinationType.DELAY3TO4, null),
new FieldDescriptor<VaccinationType>(Messages.EditVaccinationDialog_distanceRappel,
VaccinationType.DELAY_REP, null),
new FieldDescriptor<VaccinationType>(Messages.EditVaccinationDialog_remarks,
VaccinationType.REMARKS, null),
};
public EditVaccinationDialog(Shell shell, VaccinationType vacc){
super(shell);
vt = vacc;
}
@Override
protected Control createDialogArea(Composite parent){
DisplayPanel panel = new DisplayPanel(parent, fields, 2, 2, new IAction[0]);
panel.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
panel.setAutosave(true);
panel.setObject(vt);
Composite treeComposite = new Composite(parent, SWT.NONE);
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.marginLeft = 5;
treeComposite.setLayout(gridLayout);
treeComposite.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
treeViewer =
new CheckboxTreeViewer(treeComposite, SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL);
Tree tree = treeViewer.getTree();
tree.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, true));
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
TreeViewerColumn col = new TreeViewerColumn(treeViewer, SWT.NONE);
col.getColumn().setWidth(225);
col.getColumn().setText("Impfung gegen Krankheit(en)");
treeViewer.setContentProvider(new DiseaseTreeContentProvider());
treeViewer.setLabelProvider(new DiseaseTreeLabelProvider());
treeViewer.setInput(DiseaseDefinitionModel.getDiseaseDefinitions());
treeViewer.setCheckedElements(loadSelected().toArray());
return panel;
}
private List<DiseaseDefinition> loadSelected(){
List<DiseaseDefinition> diseaseDefinitions = DiseaseDefinitionModel.getDiseaseDefinitions();
List<DiseaseDefinition> selected = new ArrayList<DiseaseDefinition>();
for (String code : vt.getVaccAgainstList()) {
for (DiseaseDefinition dd : diseaseDefinitions) {
if (dd.getATCCode().equals(code)) {
selected.add(dd);
}
}
}
return selected;
}
@Override
public void create(){
super.create();
setTitle(Messages.EditVaccinationDialog_enterVaccination);
getShell().setText(Messages.EditVaccinationDialog_defineVaccination);
getShell().setSize(800, 600);
SWTHelper.center(getShell());
}
@Override
protected void okPressed(){
Object[] checkedElements = treeViewer.getCheckedElements();
StringBuilder sb = new StringBuilder();
for (Object element : checkedElements) {
DiseaseDefinition disease = (DiseaseDefinition) element;
sb.append(disease.getATCCode());
sb.append(",");
}
vt.setVaccAgainst(sb.toString());
super.okPressed();
}
private class DiseaseTreeContentProvider implements ITreeContentProvider {
@Override
public void dispose(){}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput){}
@Override
public Object[] getElements(Object inputElement){
return DiseaseDefinitionModel.getDiseaseDefinitions().toArray();
}
@Override
public Object[] getChildren(Object parentElement){
return null;
}
@Override
public Object getParent(Object element){
return (DiseaseDefinition) element;
}
@Override
public boolean hasChildren(Object element){
return false;
}
}
private class DiseaseTreeLabelProvider implements ILabelProvider {
@Override
public void addListener(ILabelProviderListener listener){}
@Override
public void dispose(){}
@Override
public boolean isLabelProperty(Object element, String property){
return false;
}
@Override
public void removeListener(ILabelProviderListener listener){}
@Override
public Image getImage(Object element){
return null;
}
@Override
public String getText(Object element){
return ((DiseaseDefinition) element).getDiseaseLabel();
}
}
}