package ch.gpb.elexis.cst.dialog;
import java.util.ArrayList;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.StatusDialog;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.data.Kontakt;
import ch.gpb.elexis.cst.data.CstProfile;
public class ProfileOverview extends StatusDialog {
//List list;
private Table table;
java.util.List<CstProfile> profiles;
private int sortColumn = 0;
private boolean sortReverse = false;
TableViewer tableViewer;
private java.util.List<String[]> lProf = new ArrayList<String[]>();
// TODO: text localisations missing
public ProfileOverview(Shell parent) {
super(parent);
setShellStyle(SWT.BORDER | SWT.RESIZE);
}
@Override
protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
if (id == IDialogConstants.CANCEL_ID)
return null;
return super.createButton(parent, id, label, defaultButton);
}
@Override
protected Control createDialogArea(Composite parent) {
// TODO Auto-generated method stub
Composite base = (Composite) super.createDialogArea(parent);
Label lblNewLabel = new Label(base, SWT.NONE);
lblNewLabel.setText("Welches Profil ist bei welchem Patienten?");
tableViewer = new TableViewer(base, SWT.BORDER | SWT.FULL_SELECTION);
table = tableViewer.getTable();
GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gd_table.widthHint = 400;
gd_table.minimumWidth = 400;
table.setLayoutData(gd_table);
table.setHeaderVisible(true);
table.setLinesVisible(true);
java.util.List<CstProfile> p = CstProfile.getAllProfiles(CoreHub.actMandant.getId());
for (CstProfile cstProfile : p) {
Kontakt k = Kontakt.load(cstProfile.getKontaktId());
String[] sProf = new String[4];
sProf[0] = cstProfile.getName();
sProf[1] = k.getLabel();
sProf[2] = cstProfile.getTemplate();
sProf[3] = k.getKuerzel();
lProf.add(sProf);
}
profiles = CstProfile.getAllProfiles(CoreHub.actMandant.getId());
String[] colLabels = getColumnLabels();
int columnWidth[] = getColumnWidth();
SortListener sortListener = new SortListener();
TableColumn[] cols = new TableColumn[colLabels.length];
for (int i = 0; i < colLabels.length; i++) {
cols[i] = new TableColumn(table, SWT.NONE);
cols[i].setWidth(columnWidth[i]);
cols[i].setText(colLabels[i]);
cols[i].setData(new Integer(i));
cols[i].addSelectionListener(sortListener);
}
tableViewer.setContentProvider(new ViewContentProvider());
tableViewer.setLabelProvider(new ViewLabelProvider());
tableViewer.setInput(this);
tableViewer.setSorter(new Sorter());
/*
*/
return base;
}
private String[] getColumnLabels() {
String columnLabels[] = { "Profile", "Patient", "Template", "Patienten-Nr" };
return columnLabels;
}
private int[] getColumnWidth() {
int columnWidth[] = { 150, 150, 50, 100 };
return columnWidth;
}
class ViewContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {
return lProf.toArray();
}
}
class ViewLabelProvider extends LabelProvider implements
ITableLabelProvider, ITableFontProvider, IColorProvider {
public String getColumnText(Object obj, int index) {
String[] tableLine = (String[]) obj;
switch (index) {
case 0:
return tableLine[0];
case 1:
return tableLine[1];
case 2:
if (tableLine[2].equals("1")) {
return "ja";
}
return "nein";
case 3:
return tableLine[3];
default:
return "?";
}
}
public Image getColumnImage(Object obj, int index) {
return null;
}
public Image getImage(Object obj) {
return PlatformUI.getWorkbench().getSharedImages()
.getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
public Font getFont(Object element, int columnIndex) {
Font fontNormal = UiDesk.getFont("Helvetica", 8, SWT.NORMAL); //$NON-NLS-1$
return fontNormal;
}
@Override
public Color getForeground(Object element) {
return null;
}
@Override
public Color getBackground(Object element) {
String[] tableLine = (String[]) element;
if (tableLine[2].equals("1")) {
return UiDesk.getColorFromRGB("FF1188");
}
return null;
}
}
class SortListener extends SelectionAdapter {
@Override
public void widgetSelected(SelectionEvent e) {
TableColumn col = (TableColumn) e.getSource();
Integer colNo = (Integer) col.getData();
if (colNo != null) {
if (colNo == sortColumn) {
sortReverse = !sortReverse;
} else {
sortReverse = false;
sortColumn = colNo;
}
tableViewer.refresh();
}
}
}
class Sorter extends ViewerSorter {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
if ((e1 instanceof String[]) && (e2 instanceof String[])) {
String[] d1 = (String[]) e1;
String[] d2 = (String[]) e2;
String c1 = "";
String c2 = "";
switch (sortColumn) {
case 0:
c1 = d1[0];
c2 = d2[0];
break;
case 1:
c1 = d1[1];
c2 = d2[1];
break;
case 2:
c1 = d1[2];
c2 = d2[2];
break;
case 3:
c1 = d1[3];
c2 = d2[3];
break;
}
if (sortReverse) {
return c1.compareTo(c2);
} else {
return c2.compareTo(c1);
}
}
return 0;
}
}
}