+// $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.forms.openurl;
+
+import java.net.URI;
+import java.util.List;
+
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+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.ui.forms.widgets.ScrolledForm;
+
+import eu.etaxonomy.cdm.ext.openurl.OpenUrlReference;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.ImageElement;
+import eu.etaxonomy.taxeditor.forms.RootElement;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 31, 2011
+ * @version 1.0
+ */
+public class OpenUrlReferencePage extends WizardPage implements SelectionListener {
+
+ public static final String NAME = "OpenUrlReferencePage";
+
+ private static final int NEXT = 1;
+ private static final int PREVIOUS = -1;
+
+ private ImageElement imageElement;
+ private RootElement rootElement;
+ private ScrolledForm scrolledForm;
+ private Button button_next;
+ private Button button_previous;
+
+ private OpenUrlReference reference;
+
+ private Composite container;
+
+ private Label label_pageNumber;
+
+ /**
+ * @param pageName
+ */
+ protected OpenUrlReferencePage() {
+ super(NAME);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createControl(Composite parent) {
+ container = getWizard().getFormFactory().createComposite(parent, SWT.NULL);
+
+ container.setLayout(new GridLayout());
+ container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ scrolledForm = getWizard().getFormFactory().createScrolledForm(container);
+ scrolledForm.getBody().setLayout(CdmFormFactory.LAYOUT(3, false));
+ scrolledForm.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
+
+ Composite buttonContainer = getWizard().getFormFactory().createComposite(container);
+ buttonContainer.setLayout(new GridLayout(3, true));
+ buttonContainer.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, false));
+
+ button_previous = getWizard().getFormFactory().createButton(buttonContainer, "Previous", SWT.PUSH);
+ button_previous.addSelectionListener(this);
+ button_previous.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, true, false));
+
+ label_pageNumber = getWizard().getFormFactory().createLabel(buttonContainer, " ");
+
+ button_next = getWizard().getFormFactory().createButton(buttonContainer, "Next", SWT.PUSH);
+ button_next.addSelectionListener(this);
+ button_next.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM, true, false));
+
+ scrolledForm.getBody().setLayoutData(CdmFormFactory.FILL());
+
+ rootElement = new RootElement(getWizard().getFormFactory(), scrolledForm.getBody());
+
+ imageElement = getWizard().getFormFactory().createImageElement(rootElement, null, SWT.BORDER);
+
+ setControl(container);
+ }
+
+ public OpenUrlSelectorWizard getWizard(){
+ return (OpenUrlSelectorWizard) super.getWizard();
+ }
+
+ /**
+ * @param jpegImage
+ */
+ public void displayImage() {
+ URI imageUri = getWizard().getOpenUrlReferenceImageUri();
+ imageElement.setImageUri(imageUri);
+
+ IRunnableWithProgress runnable = imageElement.getLoadImageRunnable(new Runnable(){
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ container.layout();
+
+ configurePageBar();
+ }
+ });
+
+ try {
+ getWizard().getContainer().run(true, false, runnable);
+ } catch (Exception e) {
+ EditorUtil.errorDialog("Could not load image", getClass(), e.getMessage() + ": " + imageUri , e);
+ }
+ }
+
+ /**
+ *
+ */
+ private void configurePageBar() {
+ setTitle(getWizard().getOpenUrlReference().getTitleCache());
+ String pageNumber = getWizard().getOpenUrlReference().getPages();
+ label_pageNumber.setText(pageNumber);
+ button_previous.setEnabled(canPage(PREVIOUS));
+ button_next.setEnabled(canPage(NEXT));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if(e.getSource() == button_next){
+ pageResult(NEXT);
+ }else{
+ pageResult(PREVIOUS);
+ }
+ }
+
+ private void pageResult(int direction){
+ try {
+ List<OpenUrlReference> referenceList = getWizard().getOpenUrlServiceWrapper().doPage(getWizard().getOpenUrlReference(), direction);
+ OpenUrlReference openUrlReference = referenceList.iterator().next();
+ getWizard().setOpenUrlReference(openUrlReference);
+ displayImage();
+ setErrorMessage(null);
+ } catch (IllegalArgumentException e) {
+ setErrorMessage(String.format("Could not page: %s", e.getLocalizedMessage()));
+ } catch (Exception e) {
+ EditorUtil.error(getClass(), e);
+ }
+ }
+
+ private boolean canPage(int direction){
+ try{
+ getWizard().getOpenUrlServiceWrapper().doPage(getWizard().getOpenUrlReference(), direction);
+ }catch (IllegalArgumentException e) {
+ return false;
+ }
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {}
+}