/*******************************************************************************
* Copyright (c) 2007-2011, 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 API and implementation
******************************************************************************/
package ch.elexis.core.ui.contacts.dialogs;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.PlatformUI;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.types.LocalizeUtil;
import ch.elexis.core.types.RelationshipType;
import ch.elexis.core.ui.contacts.views.Patientenblatt2;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.core.ui.views.Messages;
import ch.elexis.data.BezugsKontaktRelation;
import ch.rgw.tools.StringTool;
public class BezugsKontaktAuswahl extends Dialog {
Combo cbBezugSrc;
Combo cbTypeSrc;
Combo cbTypeDest;
Map<String, BezugsKontaktRelation> mapBezugKonktatRelation = new HashMap<>();
BezugsKontaktRelation selectedBezugKontaktRelation = new BezugsKontaktRelation();
String srcLabel;
String destLabel;
Composite dynComposite;
public BezugsKontaktAuswahl(String destLabel, String srcLabel){
super(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
this.srcLabel = srcLabel;
this.destLabel = destLabel;
}
@Override
public void create(){
super.create();
getShell().setText(Messages.Patientenblatt2_kindOfRelation); //$NON-NLS-1$
}
@Override
protected Control createDialogArea(Composite parent){
Composite ret = (Composite) super.createDialogArea(parent);
new Label(ret, SWT.NONE)
.setText(Messages.Patientenblatt2_pleaseEnterKindOfRelationship); //$NON-NLS-1$
new Label(ret, SWT.NONE).setText(srcLabel + " " + Messages.Bezugskontakt_Is); //$NON-NLS-1$
cbBezugSrc = new Combo(ret, SWT.NONE);
cbBezugSrc.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
String bez = CoreHub.globalCfg.get(Patientenblatt2.CFG_BEZUGSKONTAKTTYPEN, ""); //$NON-NLS-1$
String[] items = getBezugKonkaktTypes(bez);
cbBezugSrc.setItems(items);
cbBezugSrc.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
reCalc(true);
}
});
final GridData data = new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1);
Button btn = new Button(ret, SWT.TOGGLE);
btn.setText("+ " + Messages.BezugsKonktat_FormalerReference); //$NON-NLS-1$
btn.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, true, true, 1, 1));
btn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
data.exclude = !data.exclude;
dynComposite.setVisible(!data.exclude);
dynComposite.getShell().pack();
if (dynComposite.isVisible()) {
btn.setText("- " + Messages.BezugsKonktat_FormalerReference);
reCalc(true);
}
else {
btn.setText("+ " + Messages.BezugsKonktat_FormalerReference);
}
}
});
dynComposite = new Composite(ret, SWT.BORDER);
dynComposite.setLayout(new GridLayout());
dynComposite.setLayoutData(data);
dynComposite.setVisible(false);
data.exclude = true;
String[] bezugKontaktTypes = getBezugKontaktTypes();
new Label(dynComposite, SWT.NONE).setText(Messages.Bezugskontakt_RelationFrom + " "); //$NON-NLS-1$
cbTypeDest = new Combo(dynComposite, SWT.READ_ONLY);
cbTypeDest.setEnabled(true);
cbTypeDest.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
cbTypeDest.setItems(bezugKontaktTypes);
new Label(dynComposite, SWT.NONE).setText(Messages.Bezugskontakt_RelationTo + " "); //$NON-NLS-1$
cbTypeSrc = new Combo(dynComposite, SWT.READ_ONLY);
cbTypeSrc.setEnabled(true);
cbTypeSrc.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
cbTypeSrc.setItems(bezugKontaktTypes);
reCalc(true);
return ret;
}
public static String[] getBezugKontaktTypes(){
RelationshipType[] allRelationshipTypes = RelationshipType.values();
String[] displayValues = new String[allRelationshipTypes.length];
int idx = 0;
for (RelationshipType relationshipType : allRelationshipTypes) {
displayValues[idx++] = LocalizeUtil.getLocaleText(relationshipType);
}
return displayValues;
}
private String[] getBezugKonkaktTypes(String cfgBezugKonktaks){
for (String cfgPart : cfgBezugKonktaks.split(Patientenblatt2.SPLITTER)) {
BezugsKontaktRelation bezugsKontaktRelation = new BezugsKontaktRelation();
bezugsKontaktRelation.loadValuesByCfg(cfgPart);
mapBezugKonktatRelation.put(bezugsKontaktRelation.getName(), bezugsKontaktRelation);
}
List<String> keys = new ArrayList<>(mapBezugKonktatRelation.keySet());
Collections.sort(keys);
return keys.toArray(new String[0]);
}
public void reCalc(boolean autoSelect){
BezugsKontaktRelation bezugsKontaktType = mapBezugKonktatRelation.get(cbBezugSrc.getText());
selectedBezugKontaktRelation = bezugsKontaktType;
if (selectedBezugKontaktRelation == null) {
selectedBezugKontaktRelation = new BezugsKontaktRelation(cbBezugSrc.getText(),
RelationshipType.AGENERIC, RelationshipType.AGENERIC);
}
if (selectedBezugKontaktRelation.getDestRelationType() == null) {
selectedBezugKontaktRelation.setDestRelationType(RelationshipType.AGENERIC);
}
if (selectedBezugKontaktRelation.getSrcRelationType() == null) {
selectedBezugKontaktRelation.setSrcRelationType(RelationshipType.AGENERIC);
}
if (autoSelect) {
cbTypeSrc.setText(LocalizeUtil.getLocaleText(selectedBezugKontaktRelation.getSrcRelationType()));
cbTypeDest.setText(
LocalizeUtil.getLocaleText(selectedBezugKontaktRelation.getDestRelationType()));
}
}
@Override
protected void okPressed(){
reCalc(false);
int selIdx = cbTypeDest.getSelectionIndex();
if (selIdx != -1)
{
selectedBezugKontaktRelation.setDestRelationType(RelationshipType.values()[selIdx]);
}
selIdx = cbTypeSrc.getSelectionIndex();
if (selIdx != -1) {
selectedBezugKontaktRelation.setSrcRelationType(RelationshipType.values()[selIdx]);
}
String[] items = cbBezugSrc.getItems();
String nitem = selectedBezugKontaktRelation.getName();
if (StringTool.getIndex(items, nitem) == -1) {
String res = CoreHub.globalCfg.get(Patientenblatt2.CFG_BEZUGSKONTAKTTYPEN, "")
+ Patientenblatt2.SPLITTER + selectedBezugKontaktRelation.getCfgString();
CoreHub.globalCfg.set(Patientenblatt2.CFG_BEZUGSKONTAKTTYPEN, res);
}
super.okPressed();
}
public BezugsKontaktRelation getBezugKonkaktRelation(){
return selectedBezugKontaktRelation;
}
}