including changes from cdmlib-print
[taxeditor.git] / taxeditor-navigation / src / main / java / eu / etaxonomy / taxeditor / wizard / NewTaxonNodeWizard.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.wizard;
5
6 import org.eclipse.jface.viewers.IStructuredSelection;
7 import org.eclipse.jface.viewers.StructuredSelection;
8 import org.eclipse.jface.wizard.Wizard;
9 import org.eclipse.ui.INewWizard;
10 import org.eclipse.ui.IWorkbench;
11
12 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
13 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
14 import eu.etaxonomy.cdm.api.service.IClassificationService;
15 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
16 import eu.etaxonomy.cdm.model.common.CdmBase;
17 import eu.etaxonomy.cdm.model.taxon.Classification;
18 import eu.etaxonomy.cdm.model.taxon.ITreeNode;
19 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
20 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
21 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
22 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
23 import eu.etaxonomy.taxeditor.navigation.operation.CreateTaxonNode;
24 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
25 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
26 import eu.etaxonomy.taxeditor.store.CdmStore;
27
28 /**
29 * <p>NewTaxonNodeWizard class.</p>
30 *
31 * @author n.hoffmann
32 * @created Sep 15, 2009
33 * @version 1.0
34 */
35 public class NewTaxonNodeWizard extends Wizard implements INewWizard, IPostOperationEnabled, IConversationEnabled {
36
37 private NewTaxonNodeWizardPage page;
38
39 private IStructuredSelection selection;
40
41 private TaxonNode generatedTaxonNode;
42
43 private boolean openEmptyEditor = false;
44
45 private ConversationHolder conversation;
46
47 /**
48 * <p>Constructor for NewTaxonNodeWizard.</p>
49 */
50 public NewTaxonNodeWizard() {
51 this.setWindowTitle("New Entity");
52 conversation = CdmStore.createConversation();
53 selection = getNavigatorSelection();
54 }
55
56 /**
57 * Retrieve the current selection from taxon navigator
58 *
59 * @return
60 */
61 private IStructuredSelection getNavigatorSelection() {
62 StructuredSelection selection = null;
63 TaxonNavigator navigator = NavigationUtil.getNavigator(false);
64
65 if(navigator != null){
66 selection = (StructuredSelection) navigator.getCommonViewer().getSelection();
67 }
68
69 return selection;
70 }
71
72 private ITreeNode getSelectedTreeNode(){
73 if(selection != null){
74 Object selectedObject = selection.getFirstElement();
75 if(selectedObject instanceof ITreeNode){
76 ITreeNode treeNode = (ITreeNode) selectedObject;
77
78 if(treeNode instanceof Classification){
79 return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
80 }
81 else if(treeNode instanceof TaxonNode){
82 return CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
83 }
84 }
85 }
86 return null;
87 }
88
89
90 /** {@inheritDoc} */
91 @Override
92 public boolean performFinish() {
93 if(page.getTaxon() == null || page.getTaxon().getName().getFullTitleCache().length() == 0){
94 openEmptyEditor = true;
95 }else{
96 AbstractPostOperation operation = new CreateTaxonNode("Create Taxon",
97 NavigationUtil.getUndoContext(), page.getParentTreeNode(), page.getTaxon(), this, this);
98 NavigationUtil.executeOperation(operation);
99 }
100 return true;
101 }
102
103 /* (non-Javadoc)
104 * @see org.eclipse.jface.wizard.Wizard#addPages()
105 */
106 /** {@inheritDoc} */
107 @Override
108 public void addPages() {
109 super.addPages();
110
111 page = new NewTaxonNodeWizardPage(getConversationHolder(), getSelectedTreeNode());
112
113 addPage(page);
114 }
115
116 /** {@inheritDoc} */
117 public void init(IWorkbench workbench, IStructuredSelection selection) {
118 // workbench is not used at the moment
119 this.selection = selection;
120 }
121
122 /**
123 * <p>openInEditor</p>
124 *
125 * @return a boolean.
126 */
127 public boolean openInEditor(){
128 return page.openInEditor();
129 }
130
131 /**
132 * <p>openEmpty</p>
133 *
134 * @return a boolean.
135 */
136 public boolean openEmpty(){
137 return openInEditor() && openEmptyEditor;
138 }
139
140 /**
141 * <p>getTaxonNode</p>
142 *
143 * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
144 */
145 public TaxonNode getTaxonNode(){
146 return generatedTaxonNode;
147 }
148
149 /**
150 * <p>getParent</p>
151 *
152 * @return a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
153 */
154 public ITreeNode getParent(){
155 return page.getParentTreeNode();
156 }
157
158 /* (non-Javadoc)
159 * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
160 */
161 /** {@inheritDoc} */
162 public boolean postOperation(CdmBase objectAffectedByOperation) {
163 generatedTaxonNode = (TaxonNode) objectAffectedByOperation;
164
165 NavigationUtil.selectInNavigator(generatedTaxonNode, generatedTaxonNode.getParent());
166
167 return true;
168 }
169
170 /**
171 * <p>onComplete</p>
172 *
173 * @return a boolean.
174 */
175 public boolean onComplete() {
176 return true;
177 }
178
179 /* (non-Javadoc)
180 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
181 */
182 /** {@inheritDoc} */
183 @Override
184 public void update(CdmDataChangeMap changeEvents) {}
185
186 /* (non-Javadoc)
187 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
188 */
189 /** {@inheritDoc} */
190 @Override
191 public ConversationHolder getConversationHolder() {
192 return conversation;
193 }
194 }