had to rename the packages to make them compliant with buckminster
[taxeditor.git] / eu.etaxonomy.taxeditor.printpublisher / src / main / java / eu / etaxonomy / taxeditor / printpublisher / wizard / SelectTaxaWizardPage.java
diff --git a/eu.etaxonomy.taxeditor.printpublisher/src/main/java/eu/etaxonomy/taxeditor/printpublisher/wizard/SelectTaxaWizardPage.java b/eu.etaxonomy.taxeditor.printpublisher/src/main/java/eu/etaxonomy/taxeditor/printpublisher/wizard/SelectTaxaWizardPage.java
new file mode 100644 (file)
index 0000000..3f1ac59
--- /dev/null
@@ -0,0 +1,204 @@
+// $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;
+       }
+}