package com.hilotec.elexis.stickerprefix; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.part.ViewPart; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.data.Patient; import ch.elexis.data.Query; import ch.elexis.data.Sticker; public class StickerPrefixView extends ViewPart { private List<Patient> patients; private List<Patient> selectedPatients; private List<Sticker> stickers; private List<Sticker> selectedStickers; private Table patientList; private Table stickerList; private Button addPrefix; private Button removePrefix; private final String PREFIX = "zzzz_"; @Override public void createPartControl(Composite parent) { initializeLayout(parent); initializeLists(); initializeListeners(); refresh(); } public void refresh() { patientList.removeAll(); for (Patient pat : selectedPatients) { addPatientToList(pat); } } private void initializeLayout(Composite par) { patients = new ArrayList<Patient>(); selectedPatients = new ArrayList<Patient>(); stickers = new ArrayList<Sticker>(); selectedStickers = new ArrayList<Sticker>(); Composite parent = new Composite(par, 0); GridLayout gl = new GridLayout(2,true); parent.setLayout(gl); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1); stickerList = new Table(parent, SWT.MULTI); stickerList.setLayoutData(gd); gd = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); patientList = new Table(parent, SWT.HIDE_SELECTION); patientList.setLayoutData(gd); gd = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1); addPrefix = new Button(parent, 0); addPrefix.setText("Präfix hinzufügen"); addPrefix.setLayoutData(gd); gd = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1); removePrefix = new Button(parent, 0); removePrefix.setText("Präfix löschen"); removePrefix.setLayoutData(gd); } /* * Only helper class. Use class variable! */ private ArrayList<Sticker> getSelectedStickersHelper() { ArrayList<Sticker> selected = new ArrayList<Sticker>(); for (TableItem item : stickerList.getSelection()) { if (item.getData() != null) { selected.add((Sticker)item.getData()); } } return selected; } private void initializeListeners() { addPrefix.addSelectionListener(new SelectionAdapter() { public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { if (selectedPatients.size() == 0) { SWTHelper.alert("Kein Patient", "Es gibt keine Patienten mit den ausgewählten Stickern."); } else if (SWTHelper.askYesNo("Präfix hinzufügen", "Wollen sie die Präfixe wirklich hinzufügen?")) { for (Patient patient : selectedPatients) { if (!patient.getName().startsWith(PREFIX)) { patient.set(Patient.FLD_NAME, PREFIX+patient.getName()); } } refresh(); } } }); removePrefix.addSelectionListener(new SelectionAdapter() { public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { if (selectedPatients.size() == 0) { SWTHelper.alert("Kein Patient", "Es gibt keine Patienten mit den ausgewählten Stickern."); } else if (SWTHelper.askYesNo("Präfix löschen", "Wollen sie die Präfixe wirklich löschen?")) { for (Patient patient : selectedPatients) { if (patient.getName().startsWith(PREFIX)) { patient.set(Patient.FLD_NAME, patient.getName().substring(PREFIX.length())); } } refresh(); } } }); stickerList.addSelectionListener(new SelectionAdapter() { public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { selectedPatients.clear(); selectedStickers = getSelectedStickersHelper(); for (Patient pat : patients) { boolean pass = true; if (selectedStickers.size() >= 0) { for (Sticker sticker : selectedStickers) { if (!pat.getStickers().contains(sticker)) { pass = false; } } } if (!pass) { continue; } selectedPatients.add(pat); } refresh(); } }); } private void addPatientToList(Patient patient) { TableItem item = new TableItem(patientList, 0); item.setData(patient); item.setText(0, patient.getName()+" "+patient.getVorname()+" "+patient.getGeburtsdatum().toString()); } /* * Queries the database for patients and stickers */ private void initializeLists() { Query<Patient> pq = new Query<Patient>(Patient.class); patients = pq.execute(); Query<Sticker> sq = new Query<Sticker>(Sticker.class); stickers = sq.execute(); for (Patient pat : patients) { addPatientToList(pat); } TableItem item = new TableItem(stickerList, 0); item.setData(null); item.setText("Alle Sticker"); for (Sticker sticker : stickers) { item = new TableItem(stickerList, 0); item.setData(sticker); item.setText(sticker.getLabel()); } } @Override public void setFocus() { } }