Merge branch 'release/5.18.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / dialog / selection / ExtReferenceSelectionDialog.java
1 /**
2 * Copyright (C) 2017 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.ui.dialog.selection;
10
11 import java.util.UUID;
12
13 import org.eclipse.swt.widgets.Shell;
14
15 import eu.etaxonomy.cdm.api.service.IReferenceService;
16 import eu.etaxonomy.cdm.config.ICdmSource;
17 import eu.etaxonomy.cdm.model.agent.Person;
18 import eu.etaxonomy.cdm.model.agent.Team;
19 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
20 import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
21 import eu.etaxonomy.cdm.model.reference.Reference;
22 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
23 import eu.etaxonomy.taxeditor.newWizard.NewReferenceWizard;
24 import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfo;
25 import eu.etaxonomy.taxeditor.store.CdmStore;
26
27 /**
28 * @author k.luther
29 * @date 02.05.2017
30 */
31 public class ExtReferenceSelectionDialog extends
32 AbstractFilteredCdmResourceSelectionDialog<Reference> {
33
34 protected static boolean isInReference = false;
35 private Reference currentReference;
36 private ICdmSource remoteSource ;
37 private Reference remoteSourceRef;
38 private IReferenceService service = null;
39
40 /**
41 * <p>select</p>
42 *
43 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
44 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
45 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
46 * @return a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
47 */
48 public static Reference select(Shell shell, //ConversationHolder conversation,
49 Reference reference, boolean isInReference) {
50 ExtReferenceSelectionDialog dialog = new ExtReferenceSelectionDialog(shell, //conversation,
51 "Choose a reference", false, reference, isInReference);
52 return getSelectionFromDialog(dialog);
53 }
54
55 /**
56 * <p>select</p>
57 *
58 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
59 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
60 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
61 * @return a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
62 */
63 public static Reference select(Shell shell, //ConversationHolder conversation,
64 Reference reference) {
65 ExtReferenceSelectionDialog dialog = new ExtReferenceSelectionDialog(shell, //conversation,
66 "Choose a reference", false, reference);
67 return getSelectionFromDialog(dialog);
68 }
69
70 /**
71 * <p>Constructor for FilteredReferenceSelectionDialog.</p>
72 *
73 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
74 * @param title a {@link java.lang.String} object.
75 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
76 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
77 * @param multi a boolean.
78 */
79 protected ExtReferenceSelectionDialog(Shell shell, //ConversationHolder conversation,
80 String title, boolean multi, Reference reference) {
81 super(shell, //conversation,
82 title, multi, ExtReferenceSelectionDialog.class.getCanonicalName());
83 this.currentReference = reference;
84 // controller = CdmStore.getCurrentApplicationConfiguration();
85 remoteSource = CdmServerInfo.getDevServerRemoteSource();
86 remoteSourceRef = ReferenceFactory.newDatabase();
87 remoteSourceRef.setTitle(remoteSource.getName());
88 }
89
90 /**
91 * <p>Constructor for FilteredReferenceSelectionDialog.</p>
92 *
93 * @param shell a {@link org.eclipse.swt.widgets.Shell} object.
94 * @param title a {@link java.lang.String} object.
95 * @param reference a {@link eu.etaxonomy.cdm.model.reference.ReferenceBase} object.
96 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
97 * @param multi a boolean.
98 */
99 protected ExtReferenceSelectionDialog(Shell shell, //ConversationHolder conversation,
100 String title, boolean multi, Reference reference, boolean isInReference) {
101 super(shell, //conversation,
102 title, multi, ExtReferenceSelectionDialog.class.getCanonicalName());
103 ExtReferenceSelectionDialog.isInReference = isInReference;
104 this.currentReference = reference;
105
106 // controller = CdmStore.getCurrentApplicationConfiguration();
107 // CdmServerInfoConfig parameterObject = new CdmServerInfoConfig("localhost", "localhost", 8080, "cdmserver/", true);
108 // CdmServerInfo selectedCsii = new CdmServerInfo(parameterObject);
109 // CdmInstanceInfo selectedCdmInstance = selectedCsii.getInstanceFromName("local-cuba") ;
110 // Integer port;
111 // remoteSource = selectedCsii.getCdmRemoteSource(selectedCdmInstance, 80);
112 }
113
114 @Override
115 protected Reference getPersistentObject(UUID cdmUuid) {
116 Reference extRef = service.load(cdmUuid);
117
118 Reference newRef = ReferenceFactory.newReference( extRef.getType());
119 if (extRef.getTitle() != null){
120 newRef.setTitle(extRef.getTitle());
121 }else{
122 newRef.setTitleCache(extRef.getTitleCache(), true);
123 }
124 if (extRef.getAbbrevTitle() != null){
125 newRef.setAbbrevTitle(extRef.getAbbrevTitle());
126 }else{
127 newRef.setAbbrevTitleCache(extRef.getAbbrevTitleCache(), true);
128 }
129
130 if (extRef.getInReference() != null){
131 Reference inRef = extRef.getInReference();
132 Reference newRefInRef = ReferenceFactory.newReference( extRef.getInBook().getType());
133 if (inRef.getTitle() != null){
134 newRefInRef.setTitle(inRef.getTitle());
135 }else{
136 newRefInRef.setTitleCache(inRef.getTitleCache(), true);
137 }
138 if (inRef.getAbbrevTitle() != null){
139 newRefInRef.setAbbrevTitle(inRef.getAbbrevTitle());
140 }else{
141 newRefInRef.setAbbrevTitleCache(inRef.getAbbrevTitleCache(), true);
142 }
143 newRefInRef.addSource(OriginalSourceType.Other, String.valueOf(newRefInRef.getId()), "Reference", remoteSourceRef, null);
144 newRef.setInReference(newRefInRef);
145 newRef.setProtectedTitleCache(false);
146 newRef.setProtectedAbbrevTitleCache(false);
147 newRef.addSource(OriginalSourceType.Other, String.valueOf(newRef.getId()), "Reference", remoteSourceRef, null);
148 }
149 TeamOrPersonBase<?> author;
150 if (extRef.getAuthorship() != null){
151 if (extRef.getAuthorship() instanceof Person){
152 author = Person.NewTitledInstance(extRef.getAuthorship().getTitleCache());
153 author.setProtectedTitleCache(true);
154 }else{
155 author = Team.NewInstance();
156 Person newMember;
157
158 for (Person member:((Team)extRef.getAuthorship()).getTeamMembers()){
159 newMember = Person.NewTitledInstance(member.getTitleCache());
160 ((Team)author).addTeamMember(newMember);
161 }
162 }
163 newRef.setAuthorship(author);
164 }
165 newRef = CdmStore.getService(IReferenceService.class).save(newRef);
166 return newRef;
167 }
168
169 @Override
170 protected void callService(String pattern) {
171
172 if (remoteSource != null){
173 // if (service == null){
174 // service = CdmApplicationRemoteConfiguration.getExtReferenceService(remoteSource);
175 // }
176 if (pattern.equals("?")){ //$NON-NLS-1$
177 if (isInReference && currentReference != null){
178 model = service.getUuidAndTitleCache(null, null, currentReference.getType());
179 }else{
180 model = service.getUuidAndTitleCache(null, null);
181 }
182 }else{
183 if (isInReference && currentReference != null){
184 model = service.getUuidAndTitleCache(limitOfInitialElements, pattern, currentReference.getType());
185 }else{
186 model = service.getUuidAndTitleCache(limitOfInitialElements,pattern);
187 }
188 }
189 }
190 }
191
192 @Override
193 protected String getTitle(Reference cdmObject) {
194 if(cdmObject == null){
195 return "";
196 }else{
197 return super.getTitle(cdmObject);
198 }
199 // }else{
200 // return DefaultReferenceCacheStrategy.putAuthorToEndOfString(cdmObject.getTitleCache(), cdmObject.getAuthorship().getTitleCache());
201 // }
202 }
203
204 @Override
205 protected NewReferenceWizard getNewEntityWizard(String parameter) {
206 return new NewReferenceWizard(null);
207 }
208
209 @Override
210 protected String[] getNewWizardText() {
211 return new String[]{"Reference "};
212 }
213 }