reverting cdm application / controller refactoring and simply extending the CdmApplic...
[taxeditor.git] / eu.etaxonomy.taxeditor.printpublisher / src / main / java / eu / etaxonomy / taxeditor / printpublisher / wizard / SelectServiceWizardPage.java
index 542d2e0878c05119486ebf609f051b436ca21b37..b6e69ec3b3a4d3f38fe2c79823f4c331c99d3457 100644 (file)
@@ -12,9 +12,19 @@ package eu.etaxonomy.taxeditor.printpublisher.wizard;
 
 import java.lang.reflect.InvocationTargetException;
 import java.net.MalformedURLException;
+import java.net.URL;
+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.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -24,11 +34,18 @@ 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.Label;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Text;
+import org.jdom.Element;
 
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.print.IXMLEntityFactory;
 import eu.etaxonomy.cdm.print.PublishConfigurator;
+import eu.etaxonomy.cdm.print.XMLHelper;
+import eu.etaxonomy.cdm.print.XMLHelper.EntityType;
 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
+import eu.etaxonomy.taxeditor.printpublisher.PrintUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 
@@ -44,8 +61,9 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
        private Composite composite;
        private Button button_local;
        private Button button_remote;
-       private Label label_serviceUrl;
        private Text text_serviceUrl;
+       
+       private TreeViewer treeViewer;
 
        /**
         * <p>Constructor for SelectServiceWizardPage.</p>
@@ -68,7 +86,11 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
                
                RadioSelectionListener listener = new RadioSelectionListener();
                
-               button_local = new Button(composite, SWT.RADIO);
+               Group radioGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
+               radioGroup.setLayout(new GridLayout());
+               
+               button_local = new Button(radioGroup, SWT.RADIO);
+                               
                button_local.setText("Local (By selecting this option the database you are currently " +
                                "connected to will be used to gather data.)");
                
@@ -76,15 +98,11 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
                
                
                                                
-               button_remote = new Button(composite, SWT.RADIO);
+               button_remote = new Button(radioGroup, SWT.RADIO);
                button_remote.setText("Remote");
                button_remote.addSelectionListener(listener);
                
-               
-               label_serviceUrl = new Label(composite, SWT.NULL);
-               label_serviceUrl.setText("Service URL");
-               
-               text_serviceUrl = new Text(composite, SWT.BORDER);
+               text_serviceUrl = new Text(radioGroup, SWT.BORDER);
                text_serviceUrl.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
                text_serviceUrl.setText("http://");     
                text_serviceUrl.addModifyListener(new ModifyListener() {
@@ -92,22 +110,38 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
                        public void modifyText(ModifyEvent e) {
                                String text = text_serviceUrl.getText();
                                
-                               try {
-                                       getConfigurator().setWebserviceUrl(text);
-                               } catch (MalformedURLException e1) {
-                                       StoreUtil.warn(this.getClass(), "Malformed Url");
+                               if(!text.endsWith("/")){
+                                       SelectServiceWizardPage.this.setErrorMessage("Webservice URL has to end with \"/\"");
+                                       setPageComplete(false);
+                                       return;
                                }
                                
-                               if(isPageComplete()){
-                                       SelectServiceWizardPage.this.setErrorMessage(null);
-                                       setPageComplete(true);
-                               }else{
-                                       SelectServiceWizardPage.this.setErrorMessage("Webservice URL has to end with \"/\"");
+                               URL url = null;
+                               try {
+                                       url = new URL(text);
+                               } catch (MalformedURLException e1) {
+                                       SelectServiceWizardPage.this.setErrorMessage("Webservice URL is malformed.");
                                        setPageComplete(false);
+                                       return;
                                }
+                               
+                               getConfigurator().setWebserviceUrl(url);
+                               
+                               SelectServiceWizardPage.this.setErrorMessage(null);
+                                       
                        }
                });
                
+               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));
+               
+               
                if(CdmStore.isActive()){
                        enableLocal();
                }else{
@@ -122,9 +156,9 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
        private class RadioSelectionListener extends SelectionAdapter{
                @Override
                public void widgetSelected(SelectionEvent e) {
-                       if(e.widget == button_local){
+                       if(button_local.getSelection()){
                                enableLocal();
-                       }else{
+                       }else if(button_remote.getSelection()){
                                enableRemote();
                        }
                }
@@ -134,7 +168,6 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
                button_local.setSelection(false);
                button_remote.setSelection(true);
                
-               label_serviceUrl.setEnabled(true);
                text_serviceUrl.setEnabled(true);
                
                setConfigurator(PublishConfigurator.NewRemoteInstance());
@@ -145,11 +178,11 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
                button_remote.setSelection(false);
                button_local.setSelection(true);
                
-               label_serviceUrl.setEnabled(false);
                text_serviceUrl.setEnabled(false);
                
-               setConfigurator(PublishConfigurator.NewLocalInstance(CdmStore.getCurrentApplicationConfiguration()));
+               setConfigurator(PublishConfigurator.NewLocalInstance((ICdmApplicationConfiguration) CdmStore.getCurrentApplicationConfiguration()));
                getConfigurator().addOutputModule(getOutputModule());
+               refresh();
        }
        
        /*
@@ -158,33 +191,45 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
         */
        /** {@inheritDoc} */
        @Override
-       public boolean canFlipToNextPage() {
-               if(isPageComplete()){
-                       try {
-                               getContainer().run(false, false, new IRunnableWithProgress() {
+       public boolean canFlipToNextPage() {    
+               return isPageComplete();
+       }
+       
+       /**
+        * <p>refresh</p>
+        */
+       public void refresh(){
+               
+               if(getConfigurator() != null){
+               
+                       IRunnableWithProgress runnable = new IRunnableWithProgress(){
+
+                               @Override
+                               public void run(IProgressMonitor monitor) {
+                                       monitor.beginTask("Loading classifications", IProgressMonitor.UNKNOWN);
+                                       IXMLEntityFactory factory = getConfigurator().getFactory();
+                                       final List<Element> classifications = factory.getClassifications();
                                        
-                                       @Override
-                                       public void run(IProgressMonitor monitor) throws InvocationTargetException,
-                                                       InterruptedException {
-                                               getConfigurator().setProgressMonitor(CdmProgressMonitorAdapter.CreateMonitor(monitor));
-                                               
-                                               SelectTaxaWizardPage selectTaxaPage = (SelectTaxaWizardPage) getWizard().getPage(AbstractPublishWizard.PAGE_TAXA);                      
-                                               selectTaxaPage.refresh();
-                                               
-                                               SelectFeatureTreeWizardPage selectFeatureTreePage = (SelectFeatureTreeWizardPage) getWizard().getPage(AbstractPublishWizard.PAGE_FEATURETREE);          
-                                               selectFeatureTreePage.refresh();
+                                       Display.getDefault().asyncExec(new Runnable(){
+
+                                               @Override
+                                               public void run() {
+                                                       treeViewer.setInput(classifications);
+                                               }
                                                
-                                       }
-                               });
+                                       });
+                                       monitor.done();
+                               }
+                               
+                       };
+                       try {
+                               getContainer().run(true, false, runnable);
                        } catch (InvocationTargetException e) {
-                               PrintUtil.error(getClass(), e);
+                               StoreUtil.error(this.getClass(), e);
                        } catch (InterruptedException e) {
-                               PrintUtil.error(getClass(), e);
+                               StoreUtil.error(this.getClass(), e);
                        }
-                       
-                       return true;
                }
-               return false;
        }
                
        /*
@@ -194,15 +239,94 @@ public class SelectServiceWizardPage extends AbstractPublishWizardPage {
        /** {@inheritDoc} */
        @Override
        public boolean isPageComplete() {
+               boolean complete = true;
                if(getConfigurator().isLocal()){
-                       return true;
+                       complete &= true;
                }else if(getConfigurator().isRemote() 
                                && getConfigurator().getWebserviceUrl() != null 
                                && getConfigurator().getWebserviceUrl().toString().endsWith("/")){
-                       return true;
+                       complete &= true;
                }else{
                        return false;
                }
+               
+               List<Element> selectedTaxonNodes = getConfigurator().getSelectedTaxonNodeElements();
+               
+               complete &= !selectedTaxonNodes.isEmpty();
+               
+               return complete;
+       }
+       
+       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";
+               }
+               
        }
        
 }