127472a97219128a504b7adb31fe2334e1f2c734
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / 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.ui.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.store.StoreUtil;
30 import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
31 import eu.etaxonomy.taxeditor.ui.forms.ImageElement;
32 import eu.etaxonomy.taxeditor.ui.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 label_pageNumber.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false));
89
90 button_next = getWizard().getFormFactory().createButton(buttonContainer, "Next", SWT.PUSH);
91 button_next.addSelectionListener(this);
92 button_next.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM, true, false));
93
94 scrolledForm.getBody().setLayoutData(CdmFormFactory.FILL());
95
96 rootElement = new RootElement(getWizard().getFormFactory(), scrolledForm.getBody());
97
98 imageElement = getWizard().getFormFactory().createImageElement(rootElement, null, SWT.BORDER);
99
100 setControl(container);
101 }
102
103 public OpenUrlSelectorWizard getWizard(){
104 return (OpenUrlSelectorWizard) super.getWizard();
105 }
106
107 /**
108 * @param jpegImage
109 */
110 public void displayImage() {
111 URI imageUri = getWizard().getOpenUrlReferenceImageUri();
112 imageElement.setImageUri(imageUri);
113
114 IRunnableWithProgress runnable = imageElement.getLoadImageRunnable(new Runnable(){
115 /* (non-Javadoc)
116 * @see java.lang.Runnable#run()
117 */
118 @Override
119 public void run() {
120 container.layout();
121
122 configurePageBar();
123 }
124 });
125
126 try {
127 getWizard().getContainer().run(true, false, runnable);
128 } catch (Exception e) {
129 StoreUtil.errorDialog("Could not load image", getClass(), e.getMessage() + ": " + imageUri , e);
130 }
131 }
132
133 /**
134 *
135 */
136 private void configurePageBar() {
137 setTitle(getWizard().getOpenUrlReference().getTitleCache());
138 String pageNumber = getWizard().getOpenUrlReference().getPages();
139 label_pageNumber.setText(pageNumber);
140 button_previous.setEnabled(canPage(PREVIOUS));
141 button_next.setEnabled(canPage(NEXT));
142 }
143
144 /* (non-Javadoc)
145 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
146 */
147 @Override
148 public void widgetSelected(SelectionEvent e) {
149 if(e.getSource() == button_next){
150 pageResult(NEXT);
151 }else{
152 pageResult(PREVIOUS);
153 }
154 }
155
156 private void pageResult(int direction){
157 try {
158 List<OpenUrlReference> referenceList = getWizard().getOpenUrlServiceWrapper().doPage(getWizard().getOpenUrlReference(), direction);
159 OpenUrlReference openUrlReference = referenceList.iterator().next();
160 getWizard().setOpenUrlReference(openUrlReference);
161 displayImage();
162 setErrorMessage(null);
163 } catch (IllegalArgumentException e) {
164 setErrorMessage(String.format("Could not page: %s", e.getLocalizedMessage()));
165 } catch (Exception e) {
166 StoreUtil.error(getClass(), e);
167 }
168 }
169
170 private boolean canPage(int direction){
171 try{
172 getWizard().getOpenUrlServiceWrapper().doPage(getWizard().getOpenUrlReference(), direction);
173 }catch (IllegalArgumentException e) {
174 return false;
175 }
176 return true;
177 }
178
179 /* (non-Javadoc)
180 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
181 */
182 @Override
183 public void widgetDefaultSelected(SelectionEvent e) {}
184 }