Merge branch 'release/5.19.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.printpublisher / src / main / java / eu / etaxonomy / taxeditor / printpublisher / wizard / SelectFeatureTreeWizardPage.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.printpublisher.wizard;
10
11 import java.util.ArrayList;
12 import java.util.List;
13 import java.util.UUID;
14
15 import org.eclipse.jface.viewers.ISelectionChangedListener;
16 import org.eclipse.jface.viewers.IStructuredContentProvider;
17 import org.eclipse.jface.viewers.IStructuredSelection;
18 import org.eclipse.jface.viewers.LabelProvider;
19 import org.eclipse.jface.viewers.ListViewer;
20 import org.eclipse.jface.viewers.SelectionChangedEvent;
21 import org.eclipse.jface.viewers.StructuredSelection;
22 import org.eclipse.jface.viewers.Viewer;
23 import org.eclipse.swt.SWT;
24 import org.eclipse.swt.events.SelectionAdapter;
25 import org.eclipse.swt.events.SelectionEvent;
26 import org.eclipse.swt.layout.GridData;
27 import org.eclipse.swt.layout.GridLayout;
28 import org.eclipse.swt.widgets.Button;
29 import org.eclipse.swt.widgets.Composite;
30 import org.jdom.Element;
31
32 import eu.etaxonomy.cdm.print.IXMLEntityFactory;
33 import eu.etaxonomy.cdm.print.XMLHelper;
34
35 /**
36 * <p>SelectFeatureTreeWizardPage class.</p>
37 *
38 * @author n.hoffmann
39 * @created Aug 6, 2010
40 */
41 public class SelectFeatureTreeWizardPage extends AbstractPublishWizardPage
42 implements ISelectionChangedListener, IHasPersistableSettings{
43
44 private static final String DIALOG_SETTING_FEATURE_TREE_UUID = "dialogSettingFeatureTreeUuid";
45 private ListViewer viewer;
46
47 protected SelectFeatureTreeWizardPage(String pageName) {
48 super(pageName);
49 setTitle("Select Feature Tree");
50 }
51
52 @Override
53 public void createControl(Composite parent) {
54 setPageComplete(false);
55
56 Composite composite = new Composite(parent, SWT.NULL);
57 composite.setLayout(new GridLayout());
58
59 viewer = new ListViewer(composite);
60 viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
61 viewer.setContentProvider(new TermTreeContentProvider());
62 viewer.setLabelProvider(new TermTreeLabelProvider());
63
64 viewer.addSelectionChangedListener(this);
65
66 // offer feature tree editor when local
67 if(getConfigurator().isLocal()){
68 final Button button_openFeatureTree = new Button(composite, SWT.PUSH);
69 button_openFeatureTree.setText("Open FeatureTree Editor");
70
71 button_openFeatureTree.addSelectionListener(new SelectionAdapter() {
72 @Override
73 public void widgetSelected(SelectionEvent e) {
74 //FIXME: this wizard page has been removed by implementing #6694
75 //If print publishing is used again the selection has to be re-implemented
76
77 // FeatureTreeEditorWizard featureTreeEditorDialog = new FeatureTreeEditorWizard();
78 // WizardDialog dialog = new WizardDialog(getShell(), featureTreeEditorDialog);
79 //
80 // if(dialog.open() == IStatus.OK){
81 // refresh();
82 // }
83 }
84 });
85 }
86
87 // when using a local factory we can set the input right here
88 if(getConfigurator() != null && getConfigurator().isLocal()){
89 refresh();
90 }
91
92 loadSettings();
93
94 setControl(composite);
95 }
96
97 @Override
98 public void loadSettings() {
99 String featureTreeUuidString = getDialogSettingValue(DIALOG_SETTING_FEATURE_TREE_UUID);
100
101 if(featureTreeUuidString != null){
102 setSelectedFeatureTree(featureTreeUuidString);
103
104 }
105 }
106
107 @Override
108 public void selectionChanged(SelectionChangedEvent event) {
109 IStructuredSelection selection = (IStructuredSelection) event.getSelection();
110
111 if(selection.isEmpty()){
112 return;
113 }
114
115 setPageComplete(true);
116
117 Element featureTreeElement = (Element) selection.getFirstElement();
118
119 UUID featureTreeUuid = XMLHelper.getUuid(featureTreeElement);
120
121 setFeatureTree(featureTreeUuid.toString());
122 }
123
124 private void setSelectedFeatureTree(String featureTreeUuid){
125 List<Element> input = (ArrayList<Element>) viewer.getInput();
126
127 for(Element element : input){
128 UUID uuid = XMLHelper.getUuid(element);
129 if(uuid.toString().equals(featureTreeUuid)){
130 viewer.setSelection(new StructuredSelection(element));
131 break;
132 }
133 }
134 }
135
136 public void setFeatureTree(String featureTreeUuidString){
137 putDialogSettingValue(DIALOG_SETTING_FEATURE_TREE_UUID, featureTreeUuidString);
138 UUID featureTreeUuid = UUID.fromString(featureTreeUuidString);
139 getConfigurator().setFeatureTree(featureTreeUuid);
140 setPageComplete(featureTreeUuid != null);
141 }
142
143 @Override
144 public boolean canFlipToNextPage() {
145 return isPageComplete();
146 }
147
148 /**
149 * Refreshes the input of the viewer
150 */
151 public void refresh() {
152 IXMLEntityFactory factory = getConfigurator().getFactory();
153
154 List<Element> featureTrees = factory.getFeatureTrees();
155 List<Element> realFeatureTrees = new ArrayList<Element>();
156 for(Element featureTree : featureTrees){
157 if(XMLHelper.getClazz(featureTree).equals("FeatureTree")){
158 realFeatureTrees.add(featureTree);
159 }
160 }
161 viewer.setInput(realFeatureTrees);
162 }
163
164 private class TermTreeContentProvider implements IStructuredContentProvider {
165
166 @Override
167 public void dispose() {}
168
169 @Override
170 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
171
172 @Override
173 public Object[] getElements(Object inputElement) {
174 if(inputElement instanceof List){
175 return ((List) inputElement).toArray();
176 }
177 return new Object[0];
178 }
179 }
180
181 private class TermTreeLabelProvider extends LabelProvider {
182
183 @Override
184 public String getText(Object element) {
185 if(element instanceof Element){
186 Element xmlElement = (Element) element;
187 return XMLHelper.getTitleCache(xmlElement);
188 }
189 return "no title cache";
190 }
191 }
192 }