9b1bd8e1a2e138203586149baa1c831532b031b6
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / forms / openurl / OpenUrlReferencePage.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.taxeditor.forms.openurl;
12
13 import java.net.URI;
14 import java.util.List;
15
16 import org.eclipse.jface.operation.IRunnableWithProgress;
17 import org.eclipse.jface.wizard.WizardPage;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.events.SelectionEvent;
20 import org.eclipse.swt.events.SelectionListener;
21 import org.eclipse.swt.layout.GridData;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Button;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Label;
26 import org.eclipse.ui.forms.widgets.ScrolledForm;
27
28 import eu.etaxonomy.cdm.ext.openurl.OpenUrlReference;
29 import eu.etaxonomy.taxeditor.editor.EditorUtil;
30 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
31 import eu.etaxonomy.taxeditor.forms.ImageElement;
32 import eu.etaxonomy.taxeditor.forms.RootElement;
33
34 /**
35 * @author n.hoffmann
36 * @created Jan 31, 2011
37 * @version 1.0
38 */
39 public class OpenUrlReferencePage extends WizardPage implements SelectionListener {
40
41 public static final String NAME = "OpenUrlReferencePage";
42
43 private static final int NEXT = 1;
44 private static final int PREVIOUS = -1;
45
46 private ImageElement imageElement;
47 private RootElement rootElement;
48 private ScrolledForm scrolledForm;
49 private Button button_next;
50 private Button button_previous;
51
52 private OpenUrlReference reference;
53
54 private Composite container;
55
56 private Label label_pageNumber;
57
58 /**
59 * @param pageName
60 */
61 protected OpenUrlReferencePage() {
62 super(NAME);
63 }
64
65 /* (non-Javadoc)
66 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
67 */
68 @Override
69 public void createControl(Composite parent) {
70 container = getWizard().getFormFactory().createComposite(parent, SWT.NULL);
71
72 container.setLayout(new GridLayout());
73 container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
74
75 scrolledForm = getWizard().getFormFactory().createScrolledForm(container);
76 scrolledForm.getBody().setLayout(CdmFormFactory.LAYOUT(3, false));
77 scrolledForm.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
78
79 Composite buttonContainer = getWizard().getFormFactory().createComposite(container);
80 buttonContainer.setLayout(new GridLayout(3, true));
81 buttonContainer.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, false));
82
83 button_previous = getWizard().getFormFactory().createButton(buttonContainer, "Previous", SWT.PUSH);
84 button_previous.addSelectionListener(this);
85 button_previous.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, true, false));
86
87 label_pageNumber = getWizard().getFormFactory().createLabel(buttonContainer, " ");
88
89 button_next = getWizard().getFormFactory().createButton(buttonContainer, "Next", SWT.PUSH);
90 button_next.addSelectionListener(this);
91 button_next.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM, true, false));
92
93 scrolledForm.getBody().setLayoutData(CdmFormFactory.FILL());
94
95 rootElement = new RootElement(getWizard().getFormFactory(), scrolledForm.getBody());
96
97 imageElement = getWizard().getFormFactory().createImageElement(rootElement, null, SWT.BORDER);
98
99 setControl(container);
100 }
101
102 public OpenUrlSelectorWizard getWizard(){
103 return (OpenUrlSelectorWizard) super.getWizard();
104 }
105
106 /**
107 * @param jpegImage
108 */
109 public void displayImage() {
110 URI imageUri = getWizard().getOpenUrlReferenceImageUri();
111 imageElement.setImageUri(imageUri);
112
113 IRunnableWithProgress runnable = imageElement.getLoadImageRunnable(new Runnable(){
114 /* (non-Javadoc)
115 * @see java.lang.Runnable#run()
116 */
117 @Override
118 public void run() {
119 container.layout();
120
121 configurePageBar();
122 }
123 });
124
125 try {
126 getWizard().getContainer().run(true, false, runnable);
127 } catch (Exception e) {
128 EditorUtil.errorDialog("Could not load image", getClass(), e.getMessage() + ": " + imageUri , e);
129 }
130 }
131
132 /**
133 *
134 */
135 private void configurePageBar() {
136 setTitle(getWizard().getOpenUrlReference().getTitleCache());
137 String pageNumber = getWizard().getOpenUrlReference().getPages();
138 label_pageNumber.setText(pageNumber);
139 button_previous.setEnabled(canPage(PREVIOUS));
140 button_next.setEnabled(canPage(NEXT));
141 }
142
143 /* (non-Javadoc)
144 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
145 */
146 @Override
147 public void widgetSelected(SelectionEvent e) {
148 if(e.getSource() == button_next){
149 pageResult(NEXT);
150 }else{
151 pageResult(PREVIOUS);
152 }
153 }
154
155 private void pageResult(int direction){
156 try {
157 List<OpenUrlReference> referenceList = getWizard().getOpenUrlServiceWrapper().doPage(getWizard().getOpenUrlReference(), direction);
158 OpenUrlReference openUrlReference = referenceList.iterator().next();
159 getWizard().setOpenUrlReference(openUrlReference);
160 displayImage();
161 setErrorMessage(null);
162 } catch (IllegalArgumentException e) {
163 setErrorMessage(String.format("Could not page: %s", e.getLocalizedMessage()));
164 } catch (Exception e) {
165 EditorUtil.error(getClass(), e);
166 }
167 }
168
169 private boolean canPage(int direction){
170 try{
171 getWizard().getOpenUrlServiceWrapper().doPage(getWizard().getOpenUrlReference(), direction);
172 }catch (IllegalArgumentException e) {
173 return false;
174 }
175 return true;
176 }
177
178 /* (non-Javadoc)
179 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
180 */
181 @Override
182 public void widgetDefaultSelected(SelectionEvent e) {}
183 }