3527fe5edae30a358c3304dc47172eb03968da75
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateViewEditorInput.java
1 // $Id$
2 /**
3 * Copyright (C) 2013 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 package eu.etaxonomy.taxeditor.editor.view.derivate;
11
12 import java.util.HashSet;
13 import java.util.Set;
14 import java.util.UUID;
15
16 import org.eclipse.jface.resource.ImageDescriptor;
17 import org.eclipse.ui.IEditorInput;
18 import org.eclipse.ui.IPersistableElement;
19
20 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
21 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
22 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
23 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
24 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
25 import eu.etaxonomy.taxeditor.editor.EditorUtil;
26 import eu.etaxonomy.taxeditor.editor.Messages;
27 import eu.etaxonomy.taxeditor.model.MessagingUtils;
28 import eu.etaxonomy.taxeditor.store.CdmStore;
29 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
30
31 /**
32 * Editor input for the {@link DerivateView} which holds the currently selected derivate for which
33 * the derivate hierarchy should be shown in the DerivateView.<br>
34 * It also holds a {@link SpecimenOrObservationBase} which is the root of the hierarchy. (both may be the same object)
35 * @author pplitzner
36 * @date 25.11.2013
37 *
38 */
39 public class DerivateViewEditorInput implements IEditorInput{
40
41 /**
42 * The selected derivate {@link UUID}s
43 */
44 private final Set<UUID> derivateUUIDs;
45 /**
46 * List of the {@link UUID}s of the root elements of the hierarchy (may be the same objects as the derivates)
47 */
48 private Set<UUID> rootUUIDs;
49
50 private final ConversationHolder conversationHolder;
51
52 /**
53 * Creates an editor input for the {@link DerivateView} with the currently selected derivates and the
54 * corresponding {@link FieldUnit}s (both may be the same object).
55 * @param derivateUuids the {@link UUID}s of the derivates for which the derivate hierarchy should be shown
56 * @param rootUUIDs the root of the hierarchy
57 */
58 public DerivateViewEditorInput(Set<UUID> derivateUuids) {
59 super();
60 this.conversationHolder = CdmStore.createConversation();
61 this.derivateUUIDs = derivateUuids;
62 this.rootUUIDs = new HashSet<UUID>();
63 for (UUID uuid : derivateUuids) {
64 SpecimenOrObservationBase<?> derivate = CdmStore.getService(IOccurrenceService.class).load(uuid);
65 if(derivate instanceof FieldUnit){
66 rootUUIDs.add(uuid);
67 }
68 else if(derivate instanceof DerivedUnit){
69 SpecimenOrObservationBase<?> topMostDerivate = EditorUtil.getTopMostDerivate(derivate);
70 if(topMostDerivate!=null){
71 rootUUIDs.add(topMostDerivate.getUuid());
72 }
73 }
74 }
75 if(rootUUIDs.isEmpty()){
76 rootUUIDs = derivateUUIDs;
77 }
78 if(rootUUIDs.isEmpty()){
79 MessagingUtils.messageDialog(Messages.DerivateViewEditorInput_FAIL_INIT, DerivateViewEditorInput.class, Messages.DerivateViewEditorInput_NO_ROOT);
80 }
81 }
82
83 /* (non-Javadoc)
84 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
85 */
86 @Override
87 public Object getAdapter(Class adapter) {
88 // TODO Auto-generated method stub
89 return null;
90 }
91
92 /* (non-Javadoc)
93 * @see org.eclipse.ui.IEditorInput#exists()
94 */
95 @Override
96 public boolean exists() {
97 return false;
98 }
99
100 /* (non-Javadoc)
101 * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
102 */
103 @Override
104 public ImageDescriptor getImageDescriptor() {
105 // TODO Auto-generated method stub
106 return null;
107 }
108
109 /* (non-Javadoc)
110 * @see org.eclipse.ui.IEditorInput#getName()
111 */
112 @Override
113 public String getName() {
114 return getEditorName();
115 }
116
117 /* (non-Javadoc)
118 * @see org.eclipse.ui.IEditorInput#getPersistable()
119 */
120 @Override
121 public IPersistableElement getPersistable() {
122 return null;
123 }
124
125 /* (non-Javadoc)
126 * @see org.eclipse.ui.IEditorInput#getToolTipText()
127 */
128 @Override
129 public String getToolTipText() {
130 return getEditorName();
131 }
132
133 private String getEditorName() {
134 String name = null;
135 for(UUID uuid:rootUUIDs){
136 SpecimenOrObservationBase<?> specimen = CdmStore.getService(IOccurrenceService.class).load(uuid);
137 if(specimen!=null){
138 if(name==null){
139 name = DerivateLabelProvider.getDerivateText(specimen, conversationHolder);
140 }
141 else{
142 name += " + "+DerivateLabelProvider.getDerivateText(specimen, conversationHolder); //$NON-NLS-1$
143 }
144 }
145 }
146 return name;
147 }
148
149 public Set<UUID> getRootUUIDs() {
150 return rootUUIDs;
151 }
152
153 public Set<UUID> getDerivateUUIDs() {
154 return derivateUUIDs;
155 }
156
157 public void addRootUuid(UUID root){
158 rootUUIDs.add(root);
159 }
160
161
162 public ConversationHolder getConversationHolder() {
163 return conversationHolder;
164 }
165
166 /* (non-Javadoc)
167 * @see java.lang.Object#hashCode()
168 */
169 @Override
170 public int hashCode() {
171 final int prime = 31;
172 int result = 1;
173 result = prime * result + ((rootUUIDs == null) ? 0 : rootUUIDs.hashCode());
174 return result;
175 }
176
177 /* (non-Javadoc)
178 * @see java.lang.Object#equals(java.lang.Object)
179 */
180 @Override
181 public boolean equals(Object obj) {
182 if (this == obj) {
183 return true;
184 }
185 if (obj == null) {
186 return false;
187 }
188 if (getClass() != obj.getClass()) {
189 return false;
190 }
191 DerivateViewEditorInput other = (DerivateViewEditorInput) obj;
192 if (rootUUIDs == null) {
193 if (other.rootUUIDs != null) {
194 return false;
195 }
196 } else if (!rootUUIDs.equals(other.rootUUIDs)) {
197 return false;
198 }
199 return true;
200 }
201
202
203 }