package at.medevit.elexis.gdt.defaultfilecp.ui; import java.util.UUID; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; 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.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import at.medevit.elexis.gdt.constants.GDTConstants; import at.medevit.elexis.gdt.defaultfilecp.FileCommPartner; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.util.SWTHelper; public class FileCommPartnerComposite extends Composite { private final FileCommPartner fileCommPartner; private final IPreferencePage preferencePage; private final ScrolledComposite scrolledComposite; private Text txtName; private Text txtIdReceiver; private Text txtIdShortReceiver; private Text txtExchangeDir; private Text txtExchangeInDir; private Text txtExchangeOutDir; private Text txtExecutable; private Text txtAdditionalParam; private Button[] btnFileTypes = new Button[2]; public FileCommPartnerComposite(IPreferencePage preferencePage, ScrolledComposite scrolledComposite, Composite editorParent, FileCommPartner fileCommPartner){ super(editorParent, SWT.BORDER); this.preferencePage = preferencePage; this.fileCommPartner = fileCommPartner; createElements(); this.scrolledComposite = scrolledComposite; refreshParent(getParent()); } private void createElements(){ this.setLayoutData(new GridData(SWT.FILL, SWT.BORDER, true, false, 3, 1)); this.setLayout(new GridLayout(3, false)); GridData gridData1Col = SWTHelper.getFillGridData(1, true, 1, false); gridData1Col.widthHint = 120; GridData gridData2Col = SWTHelper.getFillGridData(2, true, 1, false); GridData gridData3Col = SWTHelper.getFillGridData(3, true, 1, false); Label label = new Label(this, SWT.RIGHT); label.setText(""); label.setLayoutData(gridData3Col); label.setBackground(UiDesk.getColor(UiDesk.COL_LIGHTGREY)); new Label(this, SWT.NONE).setText("Gerätename"); txtName = new Text(this, SWT.BORDER); txtName.setLayoutData(gridData2Col); txtName.setText(getValueByConfigKey(fileCommPartner.getFileTransferName())); new Label(this, SWT.NONE).setText("Lange GDT ID Receiver"); txtIdReceiver = new Text(this, SWT.BORDER); txtIdReceiver.setLayoutData(gridData2Col); txtIdReceiver.setText(getValueByConfigKey(fileCommPartner.getFileTransferIdReceiver())); new Label(this, SWT.NONE).setText("Kurze GDT ID Receiver"); txtIdShortReceiver = new Text(this, SWT.BORDER); txtIdShortReceiver.setLayoutData(gridData2Col); txtIdShortReceiver .setText(getValueByConfigKey(fileCommPartner.getFileTransferShortIdReceiver())); new Label(this, SWT.NONE).setText("Standard-Austausch-Verzeichnis"); txtExchangeDir = new Text(this, SWT.BORDER); txtExchangeDir.setLayoutData(gridData1Col); txtExchangeDir.setText(getValueByConfigKey(fileCommPartner.getFileTransferDirectory())); Button btnExchangeDir = new Button(this, SWT.PUSH); btnExchangeDir.setText("Browse..."); btnExchangeDir.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event){ DirectoryDialog dlg = new DirectoryDialog(getShell()); dlg.setFilterPath(txtExchangeDir.getText()); dlg.setText("Ordner suchen"); String dir = dlg.open(); if (dir != null) { txtExchangeDir.setText(dir); } } }); new Label(this, SWT.NONE).setText("Verzeichnis Eingehend"); txtExchangeInDir = new Text(this, SWT.BORDER); txtExchangeInDir.setLayoutData(gridData1Col); txtExchangeInDir.setText(getValueByConfigKey(fileCommPartner.getFileTransferInDirectory())); Button btnExchangeInDir = new Button(this, SWT.PUSH); btnExchangeInDir.setText("Browse..."); btnExchangeInDir.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event){ DirectoryDialog dlg = new DirectoryDialog(getShell()); dlg.setFilterPath(txtExchangeInDir.getText()); dlg.setText("Ordner suchen"); String dir = dlg.open(); if (dir != null) { txtExchangeInDir.setText(dir); } } }); new Label(this, SWT.NONE).setText("Verzeichnis Ausgehend"); txtExchangeOutDir = new Text(this, SWT.BORDER); txtExchangeOutDir.setLayoutData(gridData1Col); txtExchangeOutDir .setText(getValueByConfigKey(fileCommPartner.getFileTransferOutDirectory())); Button btnExchangeOutDir = new Button(this, SWT.PUSH); btnExchangeOutDir.setText("Browse..."); btnExchangeOutDir.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event){ DirectoryDialog dlg = new DirectoryDialog(getShell()); dlg.setFilterPath(txtExchangeOutDir.getText()); dlg.setText("Ordner suchen"); String dir = dlg.open(); if (dir != null) { txtExchangeOutDir.setText(dir); } } }); Group groupFileTypes = new Group(this, SWT.SHADOW_IN); groupFileTypes.setLayoutData(SWTHelper.getFillGridData(3, true, 1, false)); groupFileTypes.setText("Zu verwendender Dateityp"); groupFileTypes.setLayout(new RowLayout(SWT.VERTICAL)); btnFileTypes[0] = new Button(groupFileTypes, SWT.RADIO); btnFileTypes[0].setText("fest"); btnFileTypes[0].setSelection(GDTConstants.GDT_FILETRANSFER_TYP_FEST .equals(getValueByConfigKey(fileCommPartner.getFileTransferUsedType()))); btnFileTypes[1] = new Button(groupFileTypes, SWT.RADIO); btnFileTypes[1].setText("hochzählend"); btnFileTypes[1].setSelection(GDTConstants.GDT_FILETRANSFER_TYPE_HOCHZAEHLEND .equals(getValueByConfigKey(fileCommPartner.getFileTransferUsedType()))); new Label(this, SWT.NONE).setText("Verarbeitungsprogramm"); txtExecutable = new Text(this, SWT.BORDER); txtExecutable.setLayoutData(gridData1Col); txtExecutable.setText(getValueByConfigKey(fileCommPartner.getFileTransferExecuteable())); Button btnExecutable = new Button(this, SWT.PUSH); btnExecutable.setText("Browse..."); btnExecutable.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event){ FileDialog dlg = new FileDialog(getShell()); dlg.setFilterPath(txtExecutable.getText()); dlg.setText("Datei suchen"); String dir = dlg.open(); if (dir != null) { txtExecutable.setText(dir); } } }); new Label(this, SWT.NONE).setText("Zusatzparameter"); txtAdditionalParam = new Text(this, SWT.BORDER); txtAdditionalParam.setLayoutData(gridData2Col); txtAdditionalParam.setText(getValueByConfigKey(fileCommPartner.getFileAdditionalParams())); Label seperator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL); seperator.setLayoutData((new GridData(SWT.FILL, SWT.NONE, true, true, 3, 1))); Label itemText = new Label(this, SWT.NONE); itemText.setText("Gerät"); Composite compositeBtns = new Composite(this, SWT.NONE); compositeBtns.setLayout(new GridLayout(2, false)); compositeBtns.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 2, 1)); Button btnRemove = new Button(compositeBtns, SWT.CENTER); btnRemove.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ remove(); } }); btnRemove.setText("Entfernen"); btnRemove.setEnabled( !FileCommPartner.DEFAULT_COMM_PARTNER_ID.equals(fileCommPartner.getId())); Button btnAdd = new Button(compositeBtns, SWT.CENTER); btnAdd.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ InputDialog inDlg = new InputDialog(getShell(), "Gerät", "Gerät hinzufügen", "", null); //$NON-NLS-1$ if (inDlg.open() == Dialog.OK) { String id = UUID.randomUUID().toString(); if (!add(id, inDlg.getValue())) { MessageDialog.openError(Display.getDefault().getActiveShell(), "Fehler", "Dieses Gerät wird bereits verwendet."); } } } }); btnAdd.setText("Hinzufügen"); } private String getValueByConfigKey(String cfgKey){ return fileCommPartner.getSettings().get(cfgKey, ""); } private boolean add(String id, String name){ if (addFileCommPartner(id)) { ((GDTPreferencePageFileTransfer) preferencePage).createNewFileCommPartnerComposite(id, name, scrolledComposite); return true; } return false; } private boolean addFileCommPartner(String id){ String cfg = getAllFileCommPartners(); if (!cfg.contains(id)) { updateFileCommPartner(cfg + FileCommPartner.COMM_PARTNER_SEPERATOR + id); return true; } return false; } private String getAllFileCommPartners(){ return fileCommPartner.getSettings() .get(FileCommPartner.CFG_GDT_FILETRANSFER_IDS, FileCommPartner.DEFAULT_COMM_PARTNER_ID); } private void removeFileCommPartner(String id){ String cfg = getAllFileCommPartners(); if (cfg.contains(id)) { String newCfg = cfg.replaceFirst(FileCommPartner.COMM_PARTNER_SEPERATOR + id, ""); updateFileCommPartner(newCfg); } } private void updateFileCommPartner(String cfg){ fileCommPartner.getSettings().set(FileCommPartner.CFG_GDT_FILETRANSFER_IDS, cfg); } private void remove(){ removeFileCommPartner(fileCommPartner.getId()); fileCommPartner.getSettings().remove(fileCommPartner.getFileTransferIdReceiver()); fileCommPartner.getSettings() .remove(fileCommPartner.getFileTransferShortIdReceiver()); fileCommPartner.getSettings().remove(fileCommPartner.getFileTransferDirectory()); fileCommPartner.getSettings().remove(fileCommPartner.getFileTransferInDirectory()); fileCommPartner.getSettings().remove(fileCommPartner.getFileTransferOutDirectory()); fileCommPartner.getSettings().remove(fileCommPartner.getFileTransferUsedType()); fileCommPartner.getSettings().remove(fileCommPartner.getFileTransferExecuteable()); fileCommPartner.getSettings().remove(fileCommPartner.getFileAdditionalParams()); fileCommPartner.getSettings().remove(fileCommPartner.getFileTransferName()); Composite parent = getParent(); dispose(); refreshParent(parent); } public void save(){ if (!isDisposed()) { fileCommPartner.getSettings().set( fileCommPartner.getFileTransferIdReceiver(), txtIdReceiver.getText()); fileCommPartner.getSettings().set( fileCommPartner.getFileTransferShortIdReceiver(), txtIdShortReceiver.getText()); fileCommPartner.getSettings().set( fileCommPartner.getFileTransferDirectory(), txtExchangeDir.getText()); fileCommPartner.getSettings().set( fileCommPartner.getFileTransferInDirectory(), txtExchangeInDir.getText()); fileCommPartner.getSettings().set( fileCommPartner.getFileTransferOutDirectory(), txtExchangeOutDir.getText()); fileCommPartner.getSettings().set(fileCommPartner.getFileTransferUsedType(), btnFileTypes[1].getSelection() ? GDTConstants.GDT_FILETRANSFER_TYPE_HOCHZAEHLEND : GDTConstants.GDT_FILETRANSFER_TYP_FEST); fileCommPartner.getSettings().set( fileCommPartner.getFileTransferExecuteable(), txtExecutable.getText()); fileCommPartner.getSettings().set(fileCommPartner.getFileAdditionalParams(), txtAdditionalParam.getText()); fileCommPartner.getSettings().set(fileCommPartner.getFileTransferName(), txtName.getText()); } } private void refreshParent(Composite parent){ if (scrolledComposite != null) { scrolledComposite.setMinSize(parent.getParent().computeSize(SWT.DEFAULT, SWT.DEFAULT)); } parent.layout(); } }