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;
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;
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>
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.)");
- 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() {
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{
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();
}
}
button_local.setSelection(false);
button_remote.setSelection(true);
- label_serviceUrl.setEnabled(true);
text_serviceUrl.setEnabled(true);
setConfigurator(PublishConfigurator.NewRemoteInstance());
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();
}
/*
*/
/** {@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;
}
/*
/** {@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";
+ }
+
}
}