Java tutorial
/******************************************************************************* * Copyright (c) 2007-2009, 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 implementation * *******************************************************************************/ package ch.elexis.core.ui.contacts.views; import java.text.MessageFormat; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import ch.elexis.admin.AccessControlDefaults; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.data.util.Extensions; import ch.elexis.core.ui.Hub; import ch.elexis.core.ui.actions.RestrictedAction; import ch.elexis.core.ui.constants.ExtensionPointConstantsUi; import ch.elexis.core.ui.dialogs.AssignStickerDialog; import ch.elexis.core.ui.exchange.IDataSender; import ch.elexis.core.ui.exchange.XChangeException; import ch.elexis.core.ui.locks.LockRequestingRestrictedAction; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.core.ui.util.ViewMenus.IMenuPopulator; import ch.elexis.core.ui.views.Messages; import ch.elexis.data.Patient; import ch.rgw.tools.ExHandler; public class PatientMenuPopulator implements IMenuPopulator, IMenuListener { IAction exportKGAction, stickerAction; RestrictedAction delPatAction; PatientenListeView mine; public IAction[] fillMenu() { LinkedList<IAction> ret = new LinkedList<IAction>(); ret.add(stickerAction); ret.add(delPatAction); if (CoreHub.acl.request(AccessControlDefaults.KONTAKT_EXPORT)) { ret.add(exportKGAction); } delPatAction.reflectRight(); exportKGAction.setEnabled(CoreHub.acl.request(AccessControlDefaults.KONTAKT_EXPORT)); return ret.toArray(new IAction[0]); } PatientMenuPopulator(PatientenListeView plv, final StructuredViewer structuredViewer) { mine = plv; stickerAction = new RestrictedAction(AccessControlDefaults.KONTAKT_ETIKETTE, Messages.PatientMenuPopulator_StickerAction) { // $NON-NLS-1$ { setToolTipText(Messages.PatientMenuPopulator_StickerToolTip); // $NON-NLS-1$ } @Override public void doRun() { Patient p = mine.getSelectedPatient(); AssignStickerDialog aed = new AssignStickerDialog(Hub.getActiveShell(), p); aed.open(); } }; delPatAction = new LockRequestingRestrictedAction<Patient>(AccessControlDefaults.KONTAKT_DELETE, Messages.PatientMenuPopulator_DeletePatientAction) { @Override public void doRun(Patient p) { if (MessageDialog.openConfirm(mine.getViewSite().getShell(), Messages.PatientMenuPopulator_DeletePatientConfirm, p.getLabel()) == true) { if (p.delete(false) == false) { SWTHelper.alert(Messages.PatientMenuPopulator_DeletePatientRejectCaption, Messages.PatientMenuPopulator_DeletePatientRejectBody); } else { mine.reload(); } } } @Override public Patient getTargetedObject() { StructuredSelection selection = (StructuredSelection) structuredViewer.getSelection(); if (selection != null) { return (Patient) selection.getFirstElement(); } return null; } }; exportKGAction = new Action(Messages.PatientMenuPopulator_ExportEMRAction, Action.AS_DROP_DOWN_MENU) { // $NON-NLS-1$ Menu menu = null; { setToolTipText(Messages.PatientMenuPopulator_ExportEMRToolTip); // $NON-NLS-1$ setMenuCreator(new IMenuCreator() { public void dispose() { if (menu != null) { menu.dispose(); menu = null; } } public Menu getMenu(Control parent) { menu = new Menu(parent); createMenu(); return menu; } public Menu getMenu(Menu parent) { menu = new Menu(parent); createMenu(); return menu; } }); } void createMenu() { Patient p = mine.getSelectedPatient(); if (p != null) { List<IConfigurationElement> list = Extensions .getExtensions(ExtensionPointConstantsUi.TRANSPORTER); // $NON-NLS-1$ for (final IConfigurationElement ic : list) { // TODO "Acceptable Types" is not part of // ch.elexis.Transporter // never was?! Should we remove this code? - mde String handler = ic.getAttribute("AcceptableTypes"); //$NON-NLS-1$ if (handler == null) { continue; } if (handler.contains("ch.elexis.data.Patient") //$NON-NLS-1$ || (handler.contains("ch.elexis.data.*"))) { //$NON-NLS-1$ MenuItem it = new MenuItem(menu, SWT.NONE); it.setText(ic.getAttribute("name")); //$NON-NLS-1$ it.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Patient pat = mine.getSelectedPatient(); try { IDataSender sender = (IDataSender) ic .createExecutableExtension("ExporterClass"); //$NON-NLS-1$ sender.store(pat); sender.finalizeExport(); SWTHelper.showInfo(Messages.PatientMenuPopulator_EMRExported, // $NON-NLS-1$ MessageFormat.format(Messages.PatientMenuPopulator_ExportEmrSuccess, // $NON-NLS-1$ pat.getLabel())); } catch (CoreException e1) { ExHandler.handle(e1); } catch (XChangeException xx) { SWTHelper.showError(Messages.PatientMenuPopulator_ErrorCaption, // $NON-NLS-1$ MessageFormat.format(Messages.PatientMenuPopulator_ExportEmrFailure, // $NON-NLS-1$ pat.getLabel())); } } }); } } } } }; } @Override public void menuAboutToShow(IMenuManager manager) { delPatAction.setEnabled(delPatAction.isEnabled()); manager.update(true); } }