/*******************************************************************************
* Copyright (c) 2015, Daniel Ludin
* 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:
* Daniel Ludin (ludin@hispeed.ch) - initial implementation
*******************************************************************************/
package ch.gpb.elexis.cst.view;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.SashForm;
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.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.part.ViewPart;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEvent;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.data.events.ElexisEventListener;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.actions.GlobalEventDispatcher;
import ch.elexis.core.ui.actions.IActivationListener;
import ch.elexis.core.ui.events.ElexisUiEventListenerImpl;
import ch.elexis.core.ui.util.Log;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Mandant;
import ch.elexis.data.Patient;
import ch.gpb.elexis.cst.Activator;
import ch.gpb.elexis.cst.data.CstGastroColo;
import ch.gpb.elexis.cst.data.CstGroup;
import ch.gpb.elexis.cst.data.CstProfile;
import ch.gpb.elexis.cst.data.CstProimmun;
import ch.gpb.elexis.cst.dialog.CstCopyProfileDialog;
import ch.gpb.elexis.cst.dialog.CstGroupSelectionDialog;
import ch.gpb.elexis.cst.dialog.CstNewProfileDialog;
import ch.gpb.elexis.cst.dialog.ProfileDetailDialog;
import ch.gpb.elexis.cst.preferences.Messages;
import ch.gpb.elexis.cst.service.CstService;
import ch.gpb.elexis.cst.view.profileeditor.AnzeigeOptionsComposite;
import ch.gpb.elexis.cst.view.profileeditor.BefundSelectionComposite;
import ch.gpb.elexis.cst.view.profileeditor.CstDocumentsComposite;
import ch.gpb.elexis.cst.view.profileeditor.DateRangeComposite;
import ch.gpb.elexis.cst.view.profileeditor.GastroComposite;
import ch.gpb.elexis.cst.view.profileeditor.HilfeComposite;
import ch.gpb.elexis.cst.view.profileeditor.ProImmunComposite;
import ch.gpb.elexis.cst.view.profileeditor.RemindersComposite;
import ch.gpb.elexis.cst.view.profileeditor.TemplateComposite;
import ch.gpb.elexis.cst.view.profileeditor.TherapieVorschlagComposite;
//import ch.gpb.elexis.cst.widget.ResultatPartEffektiv;
//import ch.gpb.elexis.cst.widget.ResultatPartMinimax;
/**
*
* @author daniel
* created: 11.01.2015
*
* GUI class for administration of CST Profiles
*
*/
public class CstProfileEditor extends ViewPart implements IActivationListener {
/**
* The ID of the view as specified by the extension.
*/
public static final String ID = "ch.gpb.elexis.cst.views.cstprofileeditor";
private CheckboxTableViewer tableViewerProfiles;
private CheckboxTableViewer tableViewerCstGroups;
private Action actionCreateProfile;
private Action actionDeleteProfile;
private Action actionRemoveCstGroup;
private Action actionAddCstGroup;
private Action actionCopyProfile;
private Action doubleClickAction;
private Table tableProfile;
private Table tableCstGroup;
private int sortColumn = 0;
private boolean sortReverse = false;
//private Color myColorRed;
private List<CstProfile> cstProfiles;
private List<CstGroup> cstGroups = new ArrayList<CstGroup>();
private List<CstGroup> dialogCstGroups = new ArrayList<CstGroup>();
static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static Random rnd = new Random();
Patient patient;
Label labelLeft;
Label lblCrawlback;
Label lblCrawlbackDate;
DateRangeComposite dateRangeComposite;
CstDocumentsComposite docComposite;
ProImmunComposite proImmunComposite;
GastroComposite gastroComposite;
TherapieVorschlagComposite therapieComposite;
AnzeigeOptionsComposite aoComposite;
TemplateComposite templateComposite;
RemindersComposite stateComposite;
//private Map<String, String> hash;
private CTabFolder ctabs;
private ScrolledForm scrolledForm;
Map<Object, Object> itemRanking = null;
CstCopyProfileDialog dialog = null;
private Logger log = LoggerFactory.getLogger(CstProfileEditor.class.getName());
private boolean isRepeatedDialog;
@Override
public void init(IViewSite site) throws PartInitException {
super.init(site);
}
@Override
public void dispose() {
super.dispose();
GlobalEventDispatcher.removeActivationListener(this, this);
}
public enum GroupTokens {
GASTRO_MAKRO, GASTRO_HISTO, COLO_MAKRO,
COLO_HISTO
};
private ElexisEventListener eeli_pat = new ElexisUiEventListenerImpl(Patient.class) {
public void runInUi(final ElexisEvent ev) {
if (ev.getType() == ElexisEvent.EVENT_SELECTED) {
if ((patient == null) || (!patient.getId().equals(((Patient) ev.getObject()).getId()))) {
patient = (Patient) ev.getObject();
if (patient != null) {
log.debug("Cst receives event with patient:" + patient.getName());
labelLeft.setText(Messages.Cst_Text_Profile_fuer + " " + patient.getName() + " "
+ patient.getVorname());
labelLeft.redraw();
loadProfileData();
selectFirstRow();
tableProfile.setFocus();
}
}
}
}
};
/**
* The constructor.
*/
public CstProfileEditor() {
}
/**
* This is a callback that will allow us to create the viewer and initialize
* it.
*/
@SuppressWarnings("unchecked")
public void createPartControl(Composite parent) {
patient = ElexisEventDispatcher.getSelectedPatient();
Canvas baseCanvas = new Canvas(parent, SWT.FILL);
baseCanvas.setBackground(new Color(Display.getDefault(), 239, 239, 239));
FillLayout glBase = new FillLayout();
glBase.type = SWT.VERTICAL;
GridData gdBase = new GridData();
gdBase.horizontalAlignment = SWT.FILL;
gdBase.grabExcessHorizontalSpace = true;
baseCanvas.setLayout(glBase);
Canvas profileParameterCanvas = new Canvas(baseCanvas, SWT.FILL);
GridLayout profileGridLayout = new GridLayout(1, true);
profileParameterCanvas.setBackground(new Color(Display.getDefault(), 239, 239, 239));
profileParameterCanvas.setLayout(profileGridLayout);
GridData gd = new GridData();
gd.grabExcessVerticalSpace = false;
gd.grabExcessHorizontalSpace = false;
profileParameterCanvas.setLayoutData(gd);
profileParameterCanvas.setSize(400, 400);
scrolledForm = UiDesk.getToolkit().createScrolledForm(profileParameterCanvas);
scrolledForm.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
Composite body = scrolledForm.getBody();
body.setLayout(new FillLayout());
ctabs = new CTabFolder(body, SWT.NONE);
ctabs.setLayout(new FillLayout());
Canvas buttonCanvas = new Canvas(profileParameterCanvas, SWT.NONE);
GridLayout glButtonCanvas = new GridLayout();
GridData gdButtonCanvas = new GridData();
gdButtonCanvas.horizontalAlignment = SWT.CENTER;
gdButtonCanvas.verticalAlignment = SWT.BEGINNING;
glButtonCanvas.numColumns = 3;
buttonCanvas.setSize(SWT.DEFAULT, 40);
buttonCanvas.setLayoutData(gdButtonCanvas);
buttonCanvas.setLayout(glButtonCanvas);
Button btnSaveCstProfile = new Button(buttonCanvas, SWT.BORDER);
btnSaveCstProfile.setText(Messages.CstProfileEditor_SaveProfile);
btnSaveCstProfile.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
saveCstProfile();
break;
}
}
});
Button btnShowResult = new Button(buttonCanvas, SWT.BORDER);
btnShowResult.setText(Messages.CstProfileEditor_AuswertungAnzeigen);
btnShowResult.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
showResultPage();
break;
}
}
});
CTabItem ciTmp = new CTabItem(ctabs, SWT.NONE);
ciTmp.setText(Messages.CstProfileEditor_Anzeige);
aoComposite = new AnzeigeOptionsComposite(ctabs);
ciTmp.setControl(aoComposite);
// Tab Auswahl Befunde
BefundSelectionComposite befundSelectionComposite = new BefundSelectionComposite(ctabs);
CTabItem ciBsc = new CTabItem(ctabs, SWT.NONE);
ciBsc.setText(Messages.CstProfileEditor_Auswahlbefunde);
ciBsc.setControl(befundSelectionComposite);
// Tab Therapievorschlag
CTabItem ci4 = new CTabItem(ctabs, SWT.NONE);
ci4.setText(Messages.CstProfileEditor_Therapievorschlag);
therapieComposite = new TherapieVorschlagComposite(ctabs);
ci4.setControl(therapieComposite);
// Tabitem Cst Documents
CTabItem ci8 = new CTabItem(ctabs, SWT.NONE);
ci8.setText(Messages.Cst_Text_cst_documents);
docComposite = new CstDocumentsComposite(ctabs, getViewSite());
ci8.setControl(docComposite);
// Tabitem Pro Immun
CTabItem ci9 = new CTabItem(ctabs, SWT.NONE);
ci9.setText(Messages.CstProfileEditor_Proimmun);
proImmunComposite = new ProImmunComposite(ctabs);
ci9.setControl(proImmunComposite);
// Tabitem Gastro
CTabItem ci10 = new CTabItem(ctabs, SWT.NONE);
ci10.setText(Messages.CstProfileEditor_GastroColo);
gastroComposite = new GastroComposite(ctabs);
ci10.setControl(gastroComposite);
// Tabitem TEmplate
CTabItem ci12 = new CTabItem(ctabs, SWT.NONE);
ci12.setText(Messages.TemplateComposite_template_title);
TemplateComposite templateComposite = new TemplateComposite(ctabs);
ci12.setControl(templateComposite);
// Tabitem REminders
/*
CTabItem ci13 = new CTabItem(ctabs, SWT.NONE);
ci13.setText("Reminders");
stateComposite = new RemindersComposite(ctabs);
ci13.setControl(stateComposite);
*/
// Tabitem Hilfe
CTabItem ci11 = new CTabItem(ctabs, SWT.NONE);
ci11.setText(Messages.HilfeComposite_hilfe_text);
HilfeComposite hilfeComposite = new HilfeComposite(ctabs);
ci11.setControl(hilfeComposite);
// **** Tables with Profiles and Groups *********
//
SashForm sashform = new SashForm(baseCanvas, SWT.FILL);
GridData gdSash = new GridData();
gdSash.heightHint = 400;
gdSash.horizontalAlignment = SWT.FILL;
sashform.setLayoutData(gdSash);
sashform.setLayout(new GridLayout());
sashform.setSashWidth(2);
// Composite Left Side
Composite child1 = new Composite(sashform, SWT.FILL);
GridLayout gridLayoutLeft = new GridLayout();
gridLayoutLeft.numColumns = 1;
child1.setLayout(gridLayoutLeft);
// Composite Right Side
Composite child2 = new Composite(sashform, SWT.FILL);
GridLayout gridLayoutRight = new GridLayout();
gridLayoutRight.numColumns = 1;
child2.setLayout(gridLayoutRight);
sashform.setWeights(new int[] { 200, 300 });
// Label and Table Left Side
labelLeft = new Label(child1, SWT.BORDER | SWT.CENTER);
if (patient == null) {
labelLeft.setText(Messages.CstCategory_nopatientselected);
} else {
labelLeft.setText(Messages.Cst_Text_Profile_fuer + " " + patient.getName() + " " + patient.getVorname());
}
labelLeft.setSize(100, 20);
labelLeft.setFont(createBoldFont(labelLeft.getFont()));
labelLeft.setForeground(UiDesk.getColor(UiDesk.COL_BLUE));
labelLeft.setBackground(new Color(Display.getDefault(), 251, 247, 247));
GridData gridDataLabelLeft = new GridData();
gridDataLabelLeft.horizontalAlignment = GridData.FILL;
gridDataLabelLeft.grabExcessHorizontalSpace = true;
labelLeft.setLayoutData(gridDataLabelLeft);
tableProfile = new Table(child1, SWT.CHECK | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
GridData gridDataTableLeft = new GridData();
gridDataTableLeft.horizontalAlignment = GridData.FILL;
gridDataTableLeft.verticalAlignment = GridData.FILL;
gridDataTableLeft.grabExcessHorizontalSpace = true;
gridDataTableLeft.grabExcessVerticalSpace = true;
gridDataTableLeft.minimumHeight = 200;
gridDataTableLeft.heightHint = 200;
tableProfile.setLayoutData(gridDataTableLeft);
// Label and Table Right Side
Label labelRight = new Label(child2, SWT.BORDER | SWT.CENTER);
labelRight.setText("Profile Items (CST Groups)");
labelRight.setSize(100, 20);
labelRight.setFont(createBoldFont(labelRight.getFont()));
labelRight.setBackground(new Color(Display.getDefault(), 251, 247, 247));
GridData gridDataLabelRight = new GridData();
gridDataLabelRight.horizontalAlignment = GridData.FILL;
gridDataLabelRight.grabExcessHorizontalSpace = true;
labelRight.setLayoutData(gridDataLabelRight);
tableCstGroup = new Table(child2, SWT.CHECK | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
GridData gridDataTableRight = new GridData();
gridDataTableRight.horizontalAlignment = GridData.FILL;
gridDataTableRight.verticalAlignment = GridData.FILL;
gridDataTableRight.grabExcessHorizontalSpace = true;
gridDataTableRight.grabExcessVerticalSpace = true;
gridDataTableRight.minimumHeight = 200;
gridDataTableRight.heightHint = 200;
tableCstGroup.setLayoutData(gridDataTableRight);
Composite movebuttonDummyCompo = new Composite(child1, SWT.NONE);
GridData gdDummyMovebutton = new GridData();
movebuttonDummyCompo.setLayoutData(gdDummyMovebutton);
gdDummyMovebutton.heightHint = 30;
Composite movebuttonCompo = new Composite(child2, SWT.NONE);
GridLayout movebuttonGridLayout = new GridLayout(2, true);
movebuttonCompo.setLayout(movebuttonGridLayout);
movebuttonCompo.setSize(400, 30);
GridData gdButtonCompo = new GridData(GridData.HORIZONTAL_ALIGN_END);
gdButtonCompo.minimumHeight = 30;
gdButtonCompo.heightHint = 30;
gdButtonCompo.horizontalAlignment = SWT.CENTER;
gdButtonCompo.verticalAlignment = SWT.BEGINNING;
movebuttonCompo.setLayoutData(gdButtonCompo);
Image imgArrowUp = UiDesk.getImage(Activator.IMG_ARROW_UP_NAME);
Image imgArrowDown = UiDesk.getImage(Activator.IMG_ARROW_DOWN_NAME);
Button btnArrowUp = new Button(movebuttonCompo, SWT.BORDER);
Button btnArrowDown = new Button(movebuttonCompo, SWT.BORDER);
btnArrowDown.setText(Messages.Button_MoveDown);
btnArrowUp.setText(Messages.Button_MoveUp);
btnArrowUp.setImage(imgArrowUp);
btnArrowDown.setImage(imgArrowDown);
GridData gdArrowUp = new GridData(GridData.HORIZONTAL_ALIGN_END);
GridData gdArrowDown = new GridData(GridData.HORIZONTAL_ALIGN_END);
btnArrowUp.setLayoutData(gdArrowUp);
btnArrowDown.setLayoutData(gdArrowDown);
btnArrowUp.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
moveItemUp();
;
}
});
btnArrowDown.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
moveItemDown();
;
}
});
cstProfiles = new ArrayList<CstProfile>();
String[] colLabels = getCategoryColumnLabels();
int columnWidth[] = getProfileColumnWidth();
ProfileSortListener categorySortListener = new ProfileSortListener();
TableColumn[] cols = new TableColumn[colLabels.length];
for (int i = 0; i < colLabels.length; i++) {
cols[i] = new TableColumn(tableProfile, SWT.NONE);
cols[i].setWidth(columnWidth[i]);
cols[i].setText(colLabels[i]);
cols[i].setData(new Integer(i));
cols[i].addSelectionListener(categorySortListener);
}
tableProfile.setHeaderVisible(true);
tableProfile.setLinesVisible(true);
String[] colLabels2 = getCstGroupColumnLabels();
int columnWidth2[] = getCstGroupColumnWidth();
TableColumn[] cols2 = new TableColumn[colLabels.length];
for (int i = 0; i < colLabels2.length; i++) {
cols2[i] = new TableColumn(tableCstGroup, SWT.NONE);
cols2[i].setWidth(columnWidth2[i]);
cols2[i].setText(colLabels2[i]);
cols2[i].setData(new Integer(i));
}
tableCstGroup.setHeaderVisible(true);
tableCstGroup.setLinesVisible(true);
tableViewerProfiles = new CheckboxTableViewer(tableProfile);
tableViewerProfiles.setContentProvider(new ProfileContentProvider());
tableViewerProfiles.setLabelProvider(new ProfileLabelProvider());
tableViewerProfiles.setSorter(new ProfileSorter());
tableViewerProfiles.setInput(getViewSite());
if (tableProfile.getItems().length > 0) {
tableProfile.select(0);
}
tableViewerProfiles.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) tableViewerProfiles.getSelection();
// on selecting a new Category, fetch its LabItems
CstProfile selProfile = (CstProfile) selection.getFirstElement();
if (selProfile != null) {
itemRanking = selProfile.getMap(CstGroup.ITEMRANKING);
cstGroups = selProfile.getCstGroups();
// if null, initialize the ranking with the current sequence
if (itemRanking == null || itemRanking.size() == 0) {
Hashtable<Object, Object> ranking = new Hashtable<Object, Object>();
int i = 1;
for (CstGroup item : cstGroups) {
ranking.put(item.getId(), i++);
}
itemRanking = (Map<Object, Object>) ranking.clone();
selProfile.setMap(CstGroup.ITEMRANKING, ranking);
}
loadCstProfile(selProfile);
tableViewerCstGroups.refresh();
}
}
});
tableViewerCstGroups = new CheckboxTableViewer(tableCstGroup);
tableViewerCstGroups.setContentProvider(new CstGroupContentProvider());
tableViewerCstGroups.setLabelProvider(new CstGroupLabelProvider());
tableViewerCstGroups.setSorter(new CstGroupSorter());
tableViewerCstGroups.setInput(getViewSite());
// Create the help context id for the viewer's control
ctabs.setSelection(ctabs.getItem(0));
PlatformUI.getWorkbench().getHelpSystem().setHelp(tableViewerProfiles.getControl(), "ch.gpb.elexis.cst.viewer");
makeActions();
hookContextMenuCategory();
hookContextMenuLabItem();
hookDoubleClickAction();
contributeToActionBars();
GlobalEventDispatcher.addActivationListener(this, this);
}
private void moveItemUp() {
IStructuredSelection selection2 = (IStructuredSelection) tableViewerProfiles.getSelection();
CstProfile selProfile = (CstProfile) selection2.getFirstElement();
try {
IStructuredSelection selection = (IStructuredSelection) tableViewerCstGroups.getSelection();
CstGroup selItem = (CstGroup) selection.getFirstElement();
if (selItem == null) {
return;
}
int selIndex = tableViewerCstGroups.getTable().getSelectionIndex();
if (selIndex < 1) {
return;
}
TableItem tableItem = tableViewerCstGroups.getTable().getItem(selIndex - 1);
CstGroup aboveItem = (CstGroup) tableItem.getData();
int rank1 = (int) itemRanking.get(selItem.getId());
int rank2 = (int) itemRanking.get(aboveItem.getId());
itemRanking.put(selItem.getId(), rank1 - 1);
itemRanking.put(aboveItem.getId(), rank2 + 1);
selProfile.setMap(CstProfile.ITEMRANKING, itemRanking);
tableViewerCstGroups.refresh();
} catch (Exception e) {
log.error(e.toString());
showMessage("Fehler: die Reihenfolge der CST Gruppen muss neu initialisiert werden.");
reinitRanking(selProfile);
}
}
private void moveItemDown() {
IStructuredSelection selection2 = (IStructuredSelection) tableViewerProfiles.getSelection();
CstProfile selProfile = (CstProfile) selection2.getFirstElement();
try {
IStructuredSelection selection = (IStructuredSelection) tableViewerCstGroups.getSelection();
CstGroup selItem = (CstGroup) selection.getFirstElement();
if (selItem == null) {
return;
}
int selIndex = tableViewerCstGroups.getTable().getSelectionIndex();
if (selIndex + 1 >= tableViewerCstGroups.getTable().getItemCount()) {
return;
}
TableItem tableItem = tableViewerCstGroups.getTable().getItem(selIndex + 1);
CstGroup belowItem = (CstGroup) tableItem.getData();
int rank1 = (int) itemRanking.get(selItem.getId());
int rank2 = (int) itemRanking.get(belowItem.getId());
itemRanking.put(selItem.getId(), rank1 + 1);
itemRanking.put(belowItem.getId(), rank2 - 1);
selProfile.setMap(CstProfile.ITEMRANKING, itemRanking);
tableViewerCstGroups.refresh();
} catch (Exception e) {
log.error(e.toString());
showMessage("Fehler: die Reihenfolge der CST Gruppen muss neu initialisiert werden.");
reinitRanking(selProfile);
}
}
/*
private void showResultPageNew() {
// TODO create Constants for the view IDs
TableItem[] selItemC = tableProfile.getSelection();
if (selItemC.length == 0) {
showMessage(Messages.Cst_Text_Bitte_Profil_auswaehlen);
return;
}
CstProfile selProfile = (CstProfile) selItemC[0].getData();
if (selProfile.getCstGroups().size() == 0) {
MessageBox dialog =
new MessageBox(UiDesk.getTopShell(), SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
dialog.setText(Messages.Cst_Text_profil_unvollstaendig);
dialog.setMessage(Messages.Cst_Text_profil_hat_keine_gruppen);
// open dialog and await user selection
int returnCode = dialog.open();
if (returnCode == SWT.CANCEL) {
return;
}
}
try {
if (selProfile.getAnzeigeTyp().equals(CstProfile.ANZEIGETYP_EFFEKTIV)) {
ResultatPartEffektiv viewer = (ResultatPartEffektiv) PlatformUI.getWorkbench()
.getActiveWorkbenchWindow()
.getActivePage().findView("ch.gpb.elexis.cst.resultateffektiv");
if (viewer == null) {
viewer = (ResultatPartEffektiv) PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage()
.showView("ch.gpb.elexis.cst.resultateffektiv");
}
viewer.setProfile(selProfile);
viewer = (ResultatPartEffektiv) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.showView("ch.gpb.elexis.cst.resultateffektiv");
}
if (selProfile.getAnzeigeTyp().equals(CstProfile.ANZEIGETYP_MINIMAX)) {
ResultatPartMinimax viewer = (ResultatPartMinimax) PlatformUI.getWorkbench()
.getActiveWorkbenchWindow()
.getActivePage().findView("ch.gpb.elexis.cst.resultatminimax");
if (viewer == null) {
viewer = (ResultatPartMinimax) PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage()
.showView("ch.gpb.elexis.cst.resultatminimax");
}
viewer.setProfile(selProfile);
viewer = (ResultatPartMinimax) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.showView("ch.gpb.elexis.cst.resultatminimax");
}
} catch (PartInitException e) {
log.info("Error opening result view: " + e.getMessage(), Log.INFOS);
}
}*/
private void showResultPage() {
// TODO create Constants for the view IDs
TableItem[] selItemC = tableProfile.getSelection();
if (selItemC.length == 0) {
showMessage(Messages.Cst_Text_Bitte_Profil_auswaehlen);
return;
}
CstProfile selProfile = (CstProfile) selItemC[0].getData();
if (selProfile.getCstGroups().size() == 0) {
MessageBox dialog =
new MessageBox(UiDesk.getTopShell(), SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
dialog.setText(Messages.Cst_Text_profil_unvollstaendig);
dialog.setMessage(Messages.Cst_Text_profil_hat_keine_gruppen);
// open dialog and await user selection
int returnCode = dialog.open();
if (returnCode == SWT.CANCEL) {
return;
}
}
try {
if (selProfile.getAnzeigeTyp().equals(CstProfile.ANZEIGETYP_EFFEKTIV)) {
CstResultEffektiv viewer = (CstResultEffektiv) PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage().findView("ch.gpb.elexis.cst.cstresulteffektiv");
if (viewer == null) {
viewer = (CstResultEffektiv) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.showView("ch.gpb.elexis.cst.cstresulteffektiv");
}
viewer.setProfile(selProfile);
viewer = (CstResultEffektiv) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.showView("ch.gpb.elexis.cst.cstresulteffektiv");
}
if (selProfile.getAnzeigeTyp().equals(CstProfile.ANZEIGETYP_MINIMAX)) {
CstResultMiniMax viewer = (CstResultMiniMax) PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage().findView("ch.gpb.elexis.cst.cstresultminimax");
if (viewer == null) {
viewer = (CstResultMiniMax) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.showView("ch.gpb.elexis.cst.cstresultminimax");
}
viewer.setProfile(selProfile);
viewer = (CstResultMiniMax) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.showView("ch.gpb.elexis.cst.cstresultminimax");
}
} catch (PartInitException e) {
log.info("Error opening result view: " + e.getMessage(), Log.INFOS);
}
}
private CTabItem getTabitemByName(CTabFolder cTabFolder, String title) {
CTabItem[] items = cTabFolder.getItems();
for (CTabItem item : items) {
if (item.getText().equals(title)) {
return item;
}
}
return null;
}
/**
* pick up all values from the gui to save them in DB
*/
@SuppressWarnings("unchecked")
private void saveCstProfile() {
int saveSelIdx = tableProfile.getSelectionIndex();
TableItem[] selItemC = tableProfile.getSelection();
CstProfile selProfile = (CstProfile) selItemC[0].getData();
Map<Object, Object> mAuswahl = selProfile.getMap(CstProfile.KEY_AUSWAHLBEFUNDE);
if (mAuswahl == null) {
showMessage("Map Auswahl lacks in profile. Create?");
Hashtable<Object, Object> map = new Hashtable<Object, Object>();
selProfile.setMap(CstProfile.KEY_AUSWAHLBEFUNDE, map);
}
CTabItem ciBefundauswahl = getTabitemByName(ctabs, Messages.CstProfileEditor_Auswahlbefunde);
BefundSelectionComposite befundSelectionComposite = (BefundSelectionComposite) ciBefundauswahl.getControl();
selProfile.setMap(CstProfile.KEY_AUSWAHLBEFUNDE, befundSelectionComposite.getSelection(mAuswahl));
CTabItem ci = getTabitemByName(ctabs, Messages.CstProfileEditor_Therapievorschlag);
TherapieVorschlagComposite ca2 = (TherapieVorschlagComposite) ci.getControl();
selProfile.setTherapievorschlag(ca2.getTextTherapie());
selProfile.setDiagnose(ca2.getTextDiagnose());
ci = getTabitemByName(ctabs, Messages.TemplateComposite_template_title);
TemplateComposite templateComposite = (TemplateComposite) ci.getControl();
selProfile.setTemplate(templateComposite.isTemplate() ? "1" : "0");
selProfile.setOutputHeader(templateComposite.getOutputHeader());
ci = getTabitemByName(ctabs, Messages.CstProfileEditor_Anzeige);
AnzeigeOptionsComposite aoComposite = (AnzeigeOptionsComposite) ci.getControl();
selProfile.setPeriod1DateStart(aoComposite.getPeriod1StartDate());
selProfile.setPeriod1DateEnd(aoComposite.getPeriod1EndDate());
selProfile.setPeriod2DateStart(aoComposite.getPeriod2StartDate());
selProfile.setPeriod2DateEnd(aoComposite.getPeriod1StartDate());
selProfile.setPeriod3DateStart(aoComposite.getPeriod3StartDate());
selProfile.setPeriod3DateEnd(aoComposite.getPeriod3EndDate());
selProfile.setCrawlBack(aoComposite.getCrawlback());
selProfile.setAnzeigeTyp(aoComposite.getAnzeigeTyp());
selProfile.setAusgabeRichtung(aoComposite.getAusgabeRichtung());
CstProimmun cstProImmun = CstProimmun.getByProfileId(selProfile.getId());
if (cstProImmun == null) {
cstProImmun = new CstProimmun();
}
cstProImmun.setDatum(proImmunComposite.getDate());
cstProImmun.setText1(proImmunComposite.getReaktionsStaerke1());
cstProImmun.setText2(proImmunComposite.getReaktionsStaerke2());
cstProImmun.setText3(proImmunComposite.getReaktionsStaerke3());
cstProImmun.setText4(proImmunComposite.getReaktionsStaerke4());
cstProImmun.setTested(proImmunComposite.getTested());
cstProImmun.setToBeTested(proImmunComposite.getToBeTested());
ci = getTabitemByName(ctabs, Messages.CstProfileEditor_GastroColo);
GastroComposite gastroComposite = (GastroComposite) ci.getControl();
CstGastroColo dbObjGastro = CstGastroColo.getByProfileId(selProfile.getId());
if (dbObjGastro == null) {
dbObjGastro = new CstGastroColo();
dbObjGastro.setDatumColo(CstService.getCompactFromDate(new Date()));
dbObjGastro.setDatumGastro(CstService.getCompactFromDate(new Date()));
}
dbObjGastro.setDatumGastro(gastroComposite.getGastroDatum());
dbObjGastro.setDatumColo(gastroComposite.getColoDatum());
dbObjGastro.setText1(gastroComposite.getTxtGastroMakro());
dbObjGastro.setText2(gastroComposite.getTxtGastroHisto());
dbObjGastro.setText3(gastroComposite.getTxtColoMakro());
dbObjGastro.setText4(gastroComposite.getTxtColoHisto());
dbObjGastro.setGastroMakroBefund(gastroComposite.getBefundGastroMakro());
dbObjGastro.setGastroHistoBefund(gastroComposite.getBefundGastroHisto());
dbObjGastro.setColoMakroBefund(gastroComposite.getBefundColoMakro());
dbObjGastro.setColoHistoBefund(gastroComposite.getBefundColoHisto());
loadProfileData();
loadCstProfile(selProfile);
tableProfile.setSelection(saveSelIdx);
}
/**
* populate the GUI with profile data from DB
*
* @param selProfile the profile to get data from
*/
@SuppressWarnings("unchecked")
private void loadCstProfile(CstProfile selProfile) {
// Befundparaameter auswahl
Map<String, Object> mapAuswahl = selProfile.getMap(CstProfile.KEY_AUSWAHLBEFUNDE);
for (CTabItem item : this.ctabs.getItems()) {
if (item.getText().startsWith(Messages.CstProfileEditor_Auswahlbefunde)) {
BefundSelectionComposite befundSelectionComposite = (BefundSelectionComposite) item.getControl();
befundSelectionComposite.setSelection(mapAuswahl);
}
if (item.getText().startsWith(Messages.CstProfileEditor_Anzeige)) {
AnzeigeOptionsComposite aoComposite = (AnzeigeOptionsComposite) item.getControl();
aoComposite.setCrawlback(selProfile.getCrawlBack());
aoComposite.setPeriod1StartDate(selProfile.getPeriod1DateStart());
aoComposite.setPeriod1EndDate(selProfile.getPeriod1DateEnd());
aoComposite.setPeriod2StartDate(selProfile.getPeriod2DateStart());
aoComposite.setPeriod2EndDate(selProfile.getPeriod2DateEnd());
aoComposite.setPeriod3StartDate(selProfile.getPeriod3DateStart());
aoComposite.setPeriod3EndDate(selProfile.getPeriod3DateEnd());
aoComposite.setAnzeigeTyp(selProfile.getAnzeigeTyp());
aoComposite.setAusgabeRichtung(selProfile.getAusgabeRichtung());
}
if (item.getText().startsWith(Messages.Cst_Text_cst_documents)) {
CstDocumentsComposite docComposite = (CstDocumentsComposite) item.getControl();
docComposite.clear();
}
if (item.getText().startsWith("Reminders")) {
RemindersComposite composite = (RemindersComposite) item.getControl();
composite.setProfile(selProfile);
}
if (item.getText().startsWith(Messages.TemplateComposite_template_title)) {
TemplateComposite templateComposite = (TemplateComposite) item.getControl();
templateComposite.setTemplate(selProfile.getTemplate().equals("1") ? true : false);
templateComposite.setOutputHeader(selProfile.getOutputHeader());
//templateComposite.clear();
}
if (item.getText().startsWith(Messages.CstProfileEditor_Therapievorschlag)) {
TherapieVorschlagComposite therapieComposite = (TherapieVorschlagComposite) item.getControl();
therapieComposite.setTextTherapie(selProfile.getTherapievorschlag());
therapieComposite.setTextDiagnose(selProfile.getDiagnose());
}
if (item.getText().startsWith(Messages.CstProfileEditor_Proimmun)) {
ProImmunComposite proimmunCompo = (ProImmunComposite) item.getControl();
CstProimmun cstProImmun = CstProimmun.getByProfileId(selProfile.getId());
if (cstProImmun == null) {
cstProImmun = new CstProimmun(selProfile.getId(), CstService.getCompactFromDate(new Date()));
}
proimmunCompo.setDate(cstProImmun.getDatum());
proimmunCompo.setTested(cstProImmun.getTested());
// TODO: new DB field
proimmunCompo.setToBeTested(cstProImmun.getToBeTested());
proimmunCompo.setReaktionsStaerke1(cstProImmun.getText1());
proimmunCompo.setReaktionsStaerke2(cstProImmun.getText2());
proimmunCompo.setReaktionsStaerke3(cstProImmun.getText3());
proimmunCompo.setReaktionsStaerke4(cstProImmun.getText4());
}
if (item.getText().startsWith(Messages.CstProfileEditor_GastroColo)) {
GastroComposite gastroCompo = (GastroComposite) item.getControl();
gastroCompo.clear();
CstGastroColo dbObj = CstGastroColo.getByProfileId(selProfile.getId());
if (dbObj == null) {
dbObj = new CstGastroColo(selProfile.getId(), CstService.getCompactFromDate(new Date()),
CstService.getCompactFromDate(new Date()));
}
gastroCompo.setGastroDatum(dbObj.getDatumGastro());
gastroCompo.setColoDatum(dbObj.getDatumColo());
gastroCompo.setBefundColoHisto(dbObj.getColoHistoBefund());
gastroCompo.setBefundColoMakro(dbObj.getColoMakroBefund());
gastroCompo.setBefundGastroMakro(dbObj.getGastroMakroBefund());
gastroCompo.setBefundGastroHisto(dbObj.getGastroHistoBefund());
gastroCompo.setTxtGastroMakro(dbObj.getText1());
gastroCompo.setTxtGastroHisto(dbObj.getText2());
gastroCompo.setTxtColoMakro(dbObj.getText3());
gastroCompo.setTxtColoHisto(dbObj.getText4());
}
}
}
private void loadProfileData() {
Mandant m = CoreHub.actMandant;
log.info("load CST Profiles for mandant: " + m.getId() + " " + m.getName(), Log.INFOS);
log.info("and patient: " + patient.getId() + " " + patient.getName(), Log.INFOS);
cstProfiles = CstProfile.getCstGroups(patient, m.getId());
tableViewerProfiles.refresh();
if (!cstProfiles.isEmpty()) {
tableViewerProfiles.setSelection(new StructuredSelection(tableViewerProfiles.getElementAt(0)), true);
} else {
therapieComposite.clear();
docComposite.clear();
cstGroups.clear();
gastroComposite.clear();
aoComposite.initDates();
}
if (tableViewerProfiles != null) {
tableViewerProfiles.refresh();
tableProfile.setFocus();
}
if (tableViewerCstGroups != null) {
tableViewerCstGroups.refresh();
}
}
private void selectFirstRow() {
if (tableViewerProfiles != null) {
Object obj = tableViewerProfiles.getElementAt(0);
if (!cstProfiles.isEmpty() && obj != null) {
tableViewerProfiles.setSelection(new StructuredSelection(tableViewerProfiles.getElementAt(0)), true);
}
}
}
private void selectRow(int row) {
if (tableViewerProfiles != null) {
Object obj = tableViewerProfiles.getElementAt(row);
if (!cstProfiles.isEmpty() && obj != null) {
tableViewerProfiles.setSelection(new StructuredSelection(tableViewerProfiles.getElementAt(row)), true);
}
}
}
private Font createBoldFont(Font baseFont) {
FontData fd = baseFont.getFontData()[0];
Font font = new Font(baseFont.getDevice(), fd.getName(), 10, fd.getStyle() | SWT.BOLD);
return font;
}
private String[] getCategoryColumnLabels() {
String columnLabels[] = { Messages.CstCategory_name,
Messages.CstCategory_description, Messages.Cst_Text_anzeigen_ab };
return columnLabels;
}
private String[] getCstGroupColumnLabels() {
String columnLabels[] = { Messages.CstLaborPrefs_type, Messages.CstCategory_description,
Messages.CstProfile_Ranking };
return columnLabels;
}
private int[] getProfileColumnWidth() {
int columnWidth[] = { 120, 50, 100 };
return columnWidth;
}
private int[] getCstGroupColumnWidth() {
int columnWidth[] = { 120, 150, 200 };
return columnWidth;
}
private void hookContextMenuCategory() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
CstProfileEditor.this.fillContextMenuCategory(manager);
}
});
Menu menu = menuMgr.createContextMenu(tableViewerProfiles.getControl());
tableViewerProfiles.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, tableViewerProfiles);
}
private void hookContextMenuLabItem() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
CstProfileEditor.this.fillContextMenuLabItem(manager);
}
});
Menu menu = menuMgr.createContextMenu(tableViewerCstGroups.getControl());
tableViewerCstGroups.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, tableViewerCstGroups);
}
private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
fillLocalPullDown(bars.getMenuManager());
fillLocalToolBar(bars.getToolBarManager());
}
private void fillLocalPullDown(IMenuManager manager) {
manager.add(actionCreateProfile);
manager.add(new Separator());
manager.add(actionDeleteProfile);
}
private void fillContextMenuCategory(IMenuManager manager) {
manager.add(actionCreateProfile);
manager.add(actionDeleteProfile);
manager.add(actionCopyProfile);
// Other plug-ins can contribute there actions here
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
private void fillContextMenuLabItem(IMenuManager manager) {
manager.add(actionRemoveCstGroup);
manager.add(actionAddCstGroup);
// Other plug-ins can contribute there actions here
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
private void fillLocalToolBar(IToolBarManager manager) {
manager.add(actionCreateProfile);
manager.add(actionDeleteProfile);
manager.add(actionCopyProfile);
}
private void makeActions() {
actionCreateProfile = new Action() {
public void run() {
CstNewProfileDialog dialog = new CstNewProfileDialog(tableViewerProfiles.getControl().getShell(),
CoreHub.actMandant);
dialog.create();
// flag f�r den rekursiven Dialog Aufruf
if (isRepeatedDialog) {
dialog.setErrorMessage(Messages.Cst_Text_cstprofile_exists);
}
isRepeatedDialog = false;
if (dialog.open() == Window.OK) {
if (dialog.getGroupName().length() < 1) {
return;
}
} else {
return;
}
try {
Mandant m = CoreHub.actMandant;
if (m != null) {
if (patient != null) {
Calendar now = Calendar.getInstance();
now.add(Calendar.YEAR, -2);
CstProfile target = new CstProfile(
dialog.getGroupName(),
dialog.getGroupDescription(),
null,
patient.getId(),
m.getId(),
CstService.getCompactFromDate(now.getTime()),
CstService.getCompactFromDate(new Date()),
"1");
CstProfile profileTemplate = dialog.getProfileToCopyFrom();
// was a profile selected as template to copy from?
if (profileTemplate != null) {
log.debug("Selected a profile to copy from: " + profileTemplate.getName());
CstService.copyProfile(profileTemplate, target);
} else {
// initialize Auswahl Befunde
Hashtable<Object, Object> auswahlBefunde = new Hashtable<Object, Object>();
target.setMap(CstProfile.KEY_AUSWAHLBEFUNDE, auswahlBefunde);
target.setAnzeigeTyp(CstProfile.ANZEIGETYP_EFFEKTIV);
target.setPeriod1DateStart(CstService.getCompactFromDate(CstService
.getDateByAddingDays(
now.getTime(), -365)));
target.setPeriod1DateEnd(CstService.getCompactFromDate(now.getTime()));
target.setPeriod2DateStart(CstService.getCompactFromDate(CstService
.getDateByAddingDays(
now.getTime(), -365)));
target.setPeriod2DateEnd(CstService.getCompactFromDate(CstService.getDateByAddingDays(
now.getTime(), -730)));
target.setPeriod3DateStart(CstService.getCompactFromDate(CstService
.getDateByAddingDays(
now.getTime(), -730)));
target.setPeriod3DateEnd(CstService.getCompactFromDate(CstService.getDateByAddingDays(
now.getTime(), -1095)));
TableItem[] selItem = tableProfile.getSelection();
if (selItem.length != 0) {
CstProfile selProfile = (CstProfile) selItem[0].getData();
CstProimmun cstProImmun = CstProimmun.getByProfileId(selProfile.getId());
if (cstProImmun != null) {
CstProimmun newCstProImmun = new CstProimmun(target.getId(),
cstProImmun.getDatum());
newCstProImmun.setProfileId(target.getId());
newCstProImmun.setTested(cstProImmun.getTested());
newCstProImmun.setToBeTested(cstProImmun.getToBeTested());
newCstProImmun.setText1(cstProImmun.getText1());
newCstProImmun.setText2(cstProImmun.getText2());
newCstProImmun.setText3(cstProImmun.getText3());
newCstProImmun.setText4(cstProImmun.getText4());
}
}
}
loadProfileData();
// select newly created Item
TableItem[] items = tableProfile.getItems();
for (int i = 0; i < items.length; i++) {
TableItem item = items[i];
CstProfile g = (CstProfile) item.getData();
if (g.getId().equals(target.getId())) {
selectRow(i);
break;
}
}
tableViewerProfiles.refresh(true);
tableProfile.setFocus();
}
} else {
log.info("Error no mandant available ", Log.INFOS);
}
} catch (Exception e) {
log.info("CST Category already exists: " + e.getMessage(), Log.INFOS);
isRepeatedDialog = true;
actionCreateProfile.run();
}
}
};
actionCreateProfile.setText(Messages.Cst_Text_create_cstprofile);
actionCreateProfile
.setToolTipText(Messages.Cst_Text_create_cstprofile_tooltip);
actionCreateProfile.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
.getImageDescriptor(ISharedImages.IMG_OBJ_ADD));
actionDeleteProfile = new Action() {
public void run() {
TableItem[] selItem = tableProfile.getSelection();
if (selItem.length == 0) {
return;
}
CstProfile selProfile = (CstProfile) selItem[0].getData();
String sMsg = String.format(Messages.Cst_Text_confirm_delete_profile,
selProfile.getName());
//showMessage(sMsg);
MessageBox dialog =
new MessageBox(UiDesk.getTopShell(), SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
dialog.setText("Delete Profile");
dialog.setMessage(sMsg);
// open dialog and await user selection
int returnCode = dialog.open();
if (returnCode == SWT.CANCEL) {
return;
}
// delete the dependent records in other tables
CstGastroColo.getByProfileId(selProfile.getId()).delete();
CstProimmun.getByProfileId(selProfile.getId()).delete();
//CstGroup.getCstGroups(patient, mandantId)
// Deletes also the entries in the N:N table to CstGroups (cstgroup_profile_joint)
selProfile.delete();
loadProfileData();
tableViewerProfiles.refresh();
selectFirstRow();
tableProfile.setFocus();
}
};
actionDeleteProfile.setText(Messages.Cst_Text_delete_profile);
actionDeleteProfile
.setToolTipText(Messages.Cst_Text_delete_profile_tooltip);
actionDeleteProfile.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
.getImageDescriptor(ISharedImages.IMG_ETOOL_DELETE));
actionCopyProfile = new Action() {
public void run() {
/*
* TODO: Denkfehler: asyncExec bringt gar nix mit einem blockenden Dialog!!
*
*/
UiDesk.asyncExec(new Runnable() {
public void run() {
IProgressMonitor monitor = new NullProgressMonitor();
String msg = "Patienten-Liste erstellen";
showBusy(true);
monitor.beginTask(msg, 7);
monitor.subTask("Einlesen der Aktualisierungsdaten");
monitor.worked(1);
TableItem[] selItem = tableProfile.getSelection();
if (selItem.length == 0) {
return;
}
CstProfile selProfile = (CstProfile) selItem[0].getData();
dialog = new CstCopyProfileDialog(tableViewerProfiles.getControl().getShell());
dialog.create();
monitor.worked(1);
if (dialog.open() == Window.OK) {
List<Patient> selPatient = dialog.getSelItems();
if (selPatient.size() == 0) {
return;
}
Mandant m = CoreHub.actMandant;
if (m != null) {
CstService service = new CstService();
service.copyProfile(selProfile, selPatient, m);
}
}
loadProfileData();
tableViewerProfiles.refresh();
selectFirstRow();
tableProfile.setFocus();
showBusy(false);
monitor.worked(1);
monitor.done();
}
});
}
};
actionCopyProfile.setText(Messages.Cst_Text_copy_profile);
actionCopyProfile
.setToolTipText(Messages.Cst_Text_copy_profile_tooltip);
actionCopyProfile.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
.getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
actionRemoveCstGroup = new Action() {
public void run() {
TableItem[] selItems = tableProfile.getSelection();
TableItem[] selItemC = tableProfile.getSelection();
CstProfile selGroup = (CstProfile) selItemC[0].getData();
TableItem[] selItem = tableCstGroup.getSelection();
if (selItem.length == 0) {
return;
}
CstGroup labItem = (CstGroup) selItem[0].getData();
selGroup.removeCstGroup(labItem);
loadProfileData();
tableProfile.setSelection(selItems[0]);
tableViewerProfiles.refresh();
tableViewerCstGroups.refresh();
reinitRanking(selGroup);
tableProfile.setFocus();
}
};
actionRemoveCstGroup
.setText(Messages.Cst_Text_delete_cstgroup_from_profile);
actionRemoveCstGroup
.setToolTipText(Messages.Cst_Text_delete_cstgroup_from_profile_tooltip);
actionRemoveCstGroup.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
.getImageDescriptor(ISharedImages.IMG_ETOOL_DELETE));
actionAddCstGroup = new Action() {
public void run() {
TableItem[] selItems = tableProfile.getSelection();
List<CstGroup> itemsToAdd;
dialogCstGroups = CstGroup.getCstGroups();
CstGroupSelectionDialog dialog = new CstGroupSelectionDialog(
tableViewerCstGroups.getControl().getShell(), dialogCstGroups);
dialog.create();
if (dialog.open() == Window.OK) {
itemsToAdd = dialog.getSelItems();
} else {
return;
}
TableItem[] selItemC = tableProfile.getSelection();
if (selItemC == null || selItemC.length < 1) {
return;
}
CstProfile selProfile = (CstProfile) selItemC[0].getData();
if (selProfile == null) {
return;
}
try {
selProfile.addItems(itemsToAdd);
} catch (Exception e) {
showMessage(Messages.Cst_Text_cstgroup_exists_in_profile);
}
loadProfileData();
tableProfile.setSelection(selItems[0]);
tableViewerProfiles.refresh();
tableViewerCstGroups.refresh();
reinitRanking(selProfile);
tableProfile.setFocus();
}
};
actionAddCstGroup.setText(Messages.Cst_Text_add_cstgroup_to_profile);
actionAddCstGroup
.setToolTipText(Messages.Cst_Text_add_cstgroup_to_profile);
actionAddCstGroup.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
.getImageDescriptor(ISharedImages.IMG_OBJ_ADD));
doubleClickAction = new Action() {
public void run() {
ISelection selection = tableViewerProfiles.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
CstProfile profile = (CstProfile) obj;
ProfileDetailDialog dialog = new ProfileDetailDialog(tableViewerProfiles.getControl().getShell());
dialog.create();
dialog.setName(profile.getName());
dialog.setDescription(profile.getDescription());
dialog.setValidFrom(profile.getValidFrom());
// dialog.setValidTo(profile.getValidTo());
if (dialog.open() == Window.OK) {
//CstProfile.getByNameAndPatientAndMandant(dialog.getName(), kontaktId, mandantId)
/*
CstProfile existProf = CstProfile.getByNameAndPatientAndMandant(dialog.getName(), patient.getId(),
CoreHub.actMandant.getId());
//if (existProf != null && !profile.getId().equals(existProf.getId())) {
if (existProf != null) {
showMessage(Messages.Cst_Text_cstprofile_exists);
return;
}*/
profile.setName(dialog.getName());
profile.setDescription(dialog.getDescription());
profile.setValidFrom(dialog.getValidFrom());
// profile.setValidTo(dialog.getValidTo());
loadProfileData();
tableViewerProfiles.setSelection(selection);
}
}
};
}
private CstProfile getSelectedProfile() {
TableItem[] selItem = tableProfile.getSelection();
if (selItem.length == 0) {
return null;
} else {
CstProfile selProf = (CstProfile) selItem[0].getData();
return selProf;
}
}
/**
*
* TODO: does not work all the time!!! there are sometimes null values in
* the table
*/
@SuppressWarnings("unchecked")
private void reinitRanking(CstProfile selGroup) {
cstGroups = selGroup.getCstGroups();
Hashtable<Object, Object> ranking = new Hashtable<Object, Object>();
int x = 1;
for (CstGroup item : cstGroups) {
ranking.put(item.getId(), x++);
}
itemRanking = (Map<Object, Object>) ranking.clone();
selGroup.setMap(CstProfile.ITEMRANKING, ranking);
//tableViewerCstGroups.refresh();
}
private void hookDoubleClickAction() {
tableViewerProfiles.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
doubleClickAction.run();
}
});
}
private void showMessage(String message) {
MessageDialog.openInformation(tableViewerProfiles.getControl().getShell(), "CST View", message);
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
tableViewerProfiles.getControl().setFocus();
Patient prevPatient = patient;
patient = ElexisEventDispatcher.getSelectedPatient();
if (patient == null) {
log.info("kein patient ausgew�hlt", Log.INFOS);
/*
* MessageEvent.fireError("Kein Patient ausgew�hlt",
* "Bitte w�hlen Sie zuerst einen Patienten aus");
*/
} else {
log.info("patient ausgew�hlt" + patient.getName(), Log.INFOS);
labelLeft.setText(Messages.Cst_Text_Profile_fuer + " " + patient.getName() + " " + patient.getVorname());
if (prevPatient != null && !prevPatient.getId().toString().equals(patient.getId().toString())) {
loadProfileData();
}
}
}
/*
* The content provider class is responsible for providing objects to the
* view. It can wrap existing objects in adapters or simply return objects
* as-is. These objects may be sensitive to the current input of the view,
* or ignore it and always show the same content (like Task List, for
* example).
*/
class ProfileContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {
return cstProfiles.toArray();
}
}
class ProfileLabelProvider extends LabelProvider implements ITableLabelProvider, ITableFontProvider,
IColorProvider {
public String getColumnText(Object obj, int index) {
CstProfile cstProfile = (CstProfile) obj;
switch (index) {
case 0:
return cstProfile.getName();
case 1:
return cstProfile.getDescription();
case 2:
return CstService.parseCompactDate(cstProfile.getValidFrom());
case 3:
return CstService.parseCompactDate(cstProfile.getValidTo());
default:
return "";
}
}
public Image getColumnImage(Object obj, int index) {
return null;
}
public Font getFont(Object element, int columnIndex) {
Font font = null;
return font;
}
@Override
public Color getForeground(Object element) {
CstProfile cstProfile = (CstProfile) element;
if (cstProfile.getTemplate().equals("1")) {
return UiDesk.getColorFromRGB("ff0000");
}
return null;
}
@Override
public Color getBackground(Object element) {
return null;
}
}
class ProfileSortListener 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;
}
tableViewerProfiles.refresh();
}
}
}
class ProfileSorter extends ViewerSorter {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
if ((e1 instanceof CstProfile) && (e2 instanceof CstProfile)) {
CstProfile d1 = (CstProfile) e1;
CstProfile d2 = (CstProfile) e2;
String c1 = "";
String c2 = "";
switch (sortColumn) {
case 0:
c1 = d1.getName();
c2 = d2.getName();
break;
case 1:
c1 = d1.getDescription();
c2 = d2.getDescription();
break;
case 2:
c1 = d1.getValidFrom();
c2 = d2.getValidFrom();
break;
}
if (sortReverse) {
return c1.compareTo(c2);
} else {
return c2.compareTo(c1);
}
}
return 0;
}
}
class CstGroupContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {
TableItem[] selItem = tableProfile.getSelection();
if (selItem.length == 0) {
return cstGroups.toArray();
} else {
CstProfile selProf = (CstProfile) selItem[0].getData();
return selProf.getCstGroups().toArray();
}
}
}
class CstGroupLabelProvider extends LabelProvider implements ITableLabelProvider, ITableFontProvider,
IColorProvider {
public String getColumnText(Object obj, int index) {
CstGroup labItem = (CstGroup) obj;
switch (index) {
case 0:
return labItem.getName();
case 1:
return labItem.getDescription();
case 2:
Object ranking = itemRanking.get(labItem.getId());
if (ranking == null) {
//showMessage("Error with Ranking. Reinitializing...");
reinitRanking(getSelectedProfile());
}
return String.valueOf(itemRanking.get(labItem.getId()));
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 font = null;
return font;
}
@Override
public Color getForeground(Object element) {
return null;
}
@Override
public Color getBackground(Object element) {
return null;
}
}
class CstGroupSorter extends ViewerSorter {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
if ((e1 instanceof CstGroup) && (e2 instanceof CstGroup)) {
CstGroup d1 = (CstGroup) e1;
CstGroup d2 = (CstGroup) e2;
/* for debugging, there were records that did not point to an
* existing cstgroup in cstgroup_profile_joint
*
if (d1.getName() == null || d2.getName() == null) {
System.out.println("d1: " + d1.getId());
System.out.println("d2: " + d2.getId());
}*/
Integer r1 = (Integer) itemRanking.get(d1.getId());
Integer r2 = (Integer) itemRanking.get(d2.getId());
if (r1 == null || r2 == null) {
return 0;
}
return r1.compareTo(r2);
}
return 0;
}
}
@Override
public void activation(boolean mode) {
// TODO Auto-generated method stub
}
@Override
public void visible(boolean mode) {
if (mode) {
ElexisEventDispatcher.getInstance().addListeners(eeli_pat);
eeli_pat.catchElexisEvent(new ElexisEvent(ElexisEventDispatcher.getSelectedPatient(), null,
ElexisEvent.EVENT_SELECTED));
//stateComposite.add
//CoreHub.heart.addListener(stateComposite);
//System.out.println("Hearbeat Listener added");
//stateComposite.heartbeat();
} else {
ElexisEventDispatcher.getInstance().removeListeners(eeli_pat);
//CoreHub.heart.removeListener(stateComposite);
//System.out.println("Hearbeat Listener removed");
}
}
}