/******************************************************************************* * 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.dialogs; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.DialogSettings; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog; import org.eclipse.ui.internal.WorkbenchMessages; import ch.elexis.core.data.interfaces.IDiagnose; import ch.elexis.core.data.util.Extensions; import ch.elexis.core.ui.constants.ExtensionPointConstantsUi; import ch.elexis.core.ui.util.viewers.CommonViewer; import ch.elexis.core.ui.util.viewers.ViewerConfigurer; import ch.elexis.core.ui.views.codesystems.CodeSelectorFactory; import ch.elexis.data.PersistentObject; import ch.elexis.data.PersistentObjectFactory; import ch.elexis.data.Query; import ch.rgw.tools.ExHandler; public class DiagnoseSelektor extends FilteredItemsSelectionDialog { private ArrayList<IDiagnose> diagnoses = new ArrayList<IDiagnose>(); public DiagnoseSelektor(Shell shell){ super(shell); setTitle(Messages.DiagnoseSelektorDialog_Title); // create a list of all diagnoses java.util.List<IConfigurationElement> list = Extensions.getExtensions(ExtensionPointConstantsUi.DIAGNOSECODE); diagnoses.add(new NoDiagnose()); if (list != null) { for (IConfigurationElement ic : list) { try { PersistentObjectFactory po = (PersistentObjectFactory) ic.createExecutableExtension(ExtensionPointConstantsUi.VERRECHNUNGSCODE_ELF); CodeSelectorFactory codeSelectorFactory = (CodeSelectorFactory) ic.createExecutableExtension(ExtensionPointConstantsUi.VERRECHNUNGSCODE_CSF); // get all available diagnoses available (TI can not be Queried as it is // not in the database) if (!(codeSelectorFactory.getCodeSystemName().equalsIgnoreCase("TI-Code"))) { //$NON-NLS-1$ if (IDiagnose.class.isAssignableFrom(codeSelectorFactory.getElementClass())) { Query<IDiagnose> qd = new Query<IDiagnose>(codeSelectorFactory.getElementClass()); diagnoses.addAll(qd.execute()); } } else { // get TI Code via content provider CommonViewer cv = new CommonViewer(); ViewerConfigurer vc = codeSelectorFactory.createViewerConfigurer(new CommonViewer()); cv.create(vc, shell, SWT.NONE, this); ITreeContentProvider tcp = (ITreeContentProvider) vc.getContentProvider(); Object[] roots = tcp.getElements(null); addDiagnoses(tcp, roots); cv.dispose(); } } catch (CoreException ex) { ExHandler.handle(ex); } } } setListLabelProvider(new LabelProvider() { @Override public String getText(Object element){ if (element == null) { return ""; } return ((IDiagnose) element).getLabel(); } }); setDetailsLabelProvider(new LabelProvider() { @Override public String getText(Object element){ if (element == null) { return ""; } return ((IDiagnose) element).getCodeSystemName() + " " + ((IDiagnose) element).getLabel(); } }); } @Override protected Control createDialogArea(Composite parent){ String oldListLabel = WorkbenchMessages.FilteredItemsSelectionDialog_listLabel; setMessage(Messages.DiagnoseSelektorDialog_Message); WorkbenchMessages.FilteredItemsSelectionDialog_listLabel = ""; //$NON-NLS-1$ Control ret = super.createDialogArea(parent); WorkbenchMessages.FilteredItemsSelectionDialog_listLabel = oldListLabel; return ret; } private void addDiagnoses(ITreeContentProvider tcp, Object[] roots){ for (Object object : roots) { if (tcp.hasChildren(object)) { addDiagnoses(tcp, tcp.getChildren(object)); } else { diagnoses.add((IDiagnose) object); } } } @Override protected Control createExtendedContentArea(Composite parent){ // TODO Auto-generated method stub return null; } @Override protected IDialogSettings getDialogSettings(){ return new DialogSettings("diagnoseselektor"); //$NON-NLS-1$ } @Override protected IStatus validateItem(Object item){ return Status.OK_STATUS; } @Override protected ItemsFilter createFilter(){ return new ItemsFilter() { @Override public boolean isConsistentItem(Object item){ return true; } @Override public boolean matchItem(Object item){ IDiagnose diag = (IDiagnose) item; return matches(diag.getLabel()); } }; } @Override protected Comparator getItemsComparator(){ return new Comparator<IDiagnose>() { public int compare(IDiagnose o1, IDiagnose o2){ return o1.getLabel().compareTo(o2.getLabel()); } }; } @Override protected void fillContentProvider(AbstractContentProvider contentProvider, ItemsFilter itemsFilter, IProgressMonitor progressMonitor) throws CoreException{ for (IDiagnose diagnose : diagnoses) { if (progressMonitor.isCanceled()) { return; } contentProvider.add(diagnose, itemsFilter); } } @Override public String getElementName(Object item){ IDiagnose diag = (IDiagnose) item; return diag.getLabel(); } private class NoDiagnose extends PersistentObject implements IDiagnose { @Override public String getCodeSystemName(){ return ""; } @Override public String getCodeSystemCode(){ return ""; } @Override public String getId(){ return ""; } @Override public String getCode(){ return ""; } @Override public String getText(){ return " keine "; } @Override public String getLabel(){ return getText(); } @Override protected String getTableName(){ return ""; } @Override public List<Object> getActions(Object kontext){ // TODO Auto-generated method stub return null; } } }