--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.printpublisher.wizard;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.jdom.Element;
+
+import eu.etaxonomy.cdm.print.IXMLEntityFactory;
+import eu.etaxonomy.cdm.print.XMLHelper;
+import eu.etaxonomy.cdm.print.XMLHelper.EntityType;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * <p>SelectTaxaWizardPage class.</p>
+ *
+ * @author n.hoffmann
+ * @created Apr 6, 2010
+ * @version 1.0
+ */
+public class SelectTaxaWizardPage extends AbstractPublishWizardPage {
+
+ private Composite composite;
+
+ private TreeViewer treeViewer;
+
+ private Button button_refresh;
+
+ /**
+ * <p>Constructor for SelectTaxaWizardPage.</p>
+ *
+ * @param pageName a {@link java.lang.String} object.
+ */
+ public SelectTaxaWizardPage(String pageName) {
+ super(pageName);
+ setTitle("Select Taxa to export.");
+
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ /** {@inheritDoc} */
+ public void createControl(Composite parent) {
+ composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout());
+
+ treeViewer = new TreeViewer(composite);
+
+ treeViewer.setContentProvider(new ContentProvider());
+ treeViewer.setLabelProvider(new LabelProvider());
+
+ treeViewer.addSelectionChangedListener(new SelectionChangedListener());
+
+ treeViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ setControl(composite);
+ }
+
+ /**
+ * <p>refresh</p>
+ */
+ public void refresh(){
+
+ if(getConfigurator() != null){
+
+ IRunnableWithProgress runnable = new IRunnableWithProgress(){
+
+ @Override
+ public void run(IProgressMonitor monitor) {
+ IXMLEntityFactory factory = getConfigurator().getFactory();
+ final List<Element> classifications = factory.getClassifications();
+
+ Display.getDefault().asyncExec(new Runnable(){
+
+ @Override
+ public void run() {
+ treeViewer.setInput(classifications);
+ }
+
+ });
+ }
+
+ };
+ try {
+ getContainer().run(true, false, runnable);
+ } catch (InvocationTargetException e) {
+ StoreUtil.error(this.getClass(), e);
+ } catch (InterruptedException e) {
+ StoreUtil.error(this.getClass(), e);
+ }
+ }
+ }
+
+ private class SelectionChangedListener implements ISelectionChangedListener {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ StructuredSelection selection = (StructuredSelection) treeViewer.getSelection();
+
+ List<Element> selectedElements = selection.toList();
+ if(selectedElements.size() > 0){
+ getConfigurator().setSelectedTaxonNodeElements(selectedElements);
+ setPageComplete(true);
+ }
+ }
+
+ }
+
+ private class ContentProvider implements ITreeContentProvider{
+
+ public Object[] getChildren(Object parentElement) {
+ if(parentElement instanceof List){
+ return ((List)parentElement).toArray();
+ }
+ else if(parentElement instanceof Element){
+ Element element = (Element) parentElement;
+
+ IXMLEntityFactory factory = getConfigurator().getFactory();
+
+ return factory != null ? factory.getChildNodes(element).toArray() : new Object[]{};
+
+ }
+
+ return new Object[]{};
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ }
+
+ }
+
+ private class LabelProvider extends ColumnLabelProvider
+ implements ILabelProvider{
+
+ @Override
+ public String getText(Object element) {
+ if(element instanceof Element){
+ Element xmlElement = (Element) element;
+ EntityType entityType = XMLHelper.getEntityType(xmlElement);
+ if(EntityType.TAXON_NODE.equals(entityType)){
+ xmlElement = getConfigurator().getFactory().getTaxonForTaxonNode(xmlElement);
+ }
+ return XMLHelper.getTitleCache(xmlElement);
+ }
+ return "no title cache";
+ }
+
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean canFlipToNextPage() {
+ return isPageComplete();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean isPageComplete() {
+ return getConfigurator().getSelectedTaxonNodeElements() != null && getConfigurator().getSelectedTaxonNodeElements().size() > 0;
+ }
+}