/******************************************************************************* * Copyright (c) 2006, 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.util.viewers; import java.util.Collection; import java.util.HashMap; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import ch.elexis.core.ui.actions.BackgroundJob; import ch.elexis.core.ui.actions.BackgroundJob.BackgroundJobListener; import ch.elexis.core.ui.actions.JobPool; import ch.elexis.core.ui.util.Messages; import ch.elexis.core.ui.util.viewers.ViewerConfigurer.ICommonViewerContentProvider; /** * ContentProvider, der einen Tree füllen kann. Datenquelle muss ein TreeLoader sein. * * @author Gerry * */ public class TreeContentProvider implements ITreeContentProvider, BackgroundJobListener, ICommonViewerContentProvider { BackgroundJob job; CommonViewer viewer; public TreeContentProvider(CommonViewer v, BackgroundJob loader){ job = loader; viewer = v; if (JobPool.getJobPool().getJob(job.getJobname()) == null) { JobPool.getJobPool().addJob(job); } job.addListener(this); } @SuppressWarnings("unchecked")//$NON-NLS-1$ public Object[] getChildren(Object element){ if (element instanceof ch.rgw.tools.Tree) { ch.rgw.tools.Tree tr = (ch.rgw.tools.Tree) element; return tr.getChildren().toArray(); } return null; } @SuppressWarnings("unchecked")//$NON-NLS-1$ public Object getParent(Object element){ if (element instanceof ch.rgw.tools.Tree) { ch.rgw.tools.Tree tr = (ch.rgw.tools.Tree) element; return tr.getParent(); } return null; } @SuppressWarnings("unchecked")//$NON-NLS-1$ public boolean hasChildren(Object element){ if (element instanceof ch.rgw.tools.Tree) { ch.rgw.tools.Tree tr = (ch.rgw.tools.Tree) element; return tr.hasChildren(); } return false; } @SuppressWarnings("unchecked")//$NON-NLS-1$ public Object[] getElements(Object inputElement){ ch.rgw.tools.Tree result = (ch.rgw.tools.Tree) job.getData(); if (result == null) { JobPool.getJobPool().activate(job.getJobname(), Job.SHORT); return new String[] { Messages.TreeContentProvider_loadData }; //$NON-NLS-1$ } else { if (viewer.getConfigurer().getControlFieldProvider().isEmpty()) { result.setFilter(null); } else { result.setFilter(((DefaultControlFieldProvider) viewer.getConfigurer() .getControlFieldProvider()).createFilter()); } Collection c = result.getChildren(); return c.toArray(); } } public void startListening(){ viewer.getConfigurer().controlFieldProvider.addChangeListener(this); } public void stopListening(){ viewer.getConfigurer().controlFieldProvider.removeChangeListener(this); } public void dispose(){ job.removeListener(this); } public void inputChanged(Viewer pViewer, Object oldInput, Object newInput){ // TODO Auto-generated method stub } public void jobFinished(BackgroundJob j){ // int size=((Object[])j.getData()).length; viewer.notify(CommonViewer.Message.update); } public void changed(HashMap<String, String> vals){ if (viewer.getConfigurer().getControlFieldProvider().isEmpty()) { viewer.notify(CommonViewer.Message.empty); } else { viewer.notify(CommonViewer.Message.notempty); // viewer.getViewerWidget().addFilter(viewer.getConfigurer().getControlFieldProvider().createFilter()); } job.invalidate(); viewer.notify(CommonViewer.Message.update); } public void reorder(String field){ job.invalidate(); } public void selected(){ // nothing to do } @Override public void init(){ // TODO Auto-generated method stub } }