18 |
18 |
import java.util.List;
|
19 |
19 |
import java.util.Map;
|
20 |
20 |
import java.util.Set;
|
|
21 |
import java.util.UUID;
|
21 |
22 |
|
22 |
23 |
import javax.annotation.PostConstruct;
|
23 |
24 |
import javax.annotation.PreDestroy;
|
... | ... | |
58 |
59 |
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
|
59 |
60 |
import eu.etaxonomy.cdm.api.service.ITermService;
|
60 |
61 |
import eu.etaxonomy.cdm.api.service.IVocabularyService;
|
|
62 |
import eu.etaxonomy.cdm.model.description.Character;
|
61 |
63 |
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
|
|
64 |
import eu.etaxonomy.cdm.model.term.FeatureNode;
|
|
65 |
import eu.etaxonomy.cdm.model.term.FeatureTree;
|
62 |
66 |
import eu.etaxonomy.cdm.model.term.Representation;
|
63 |
67 |
import eu.etaxonomy.cdm.model.term.TermType;
|
64 |
68 |
import eu.etaxonomy.cdm.model.term.TermVocabulary;
|
65 |
69 |
import eu.etaxonomy.cdm.model.term.VocabularyEnum;
|
66 |
|
import eu.etaxonomy.cdm.model.description.Character;
|
67 |
|
import eu.etaxonomy.cdm.model.term.FeatureNode;
|
68 |
|
import eu.etaxonomy.cdm.model.term.FeatureTree;
|
69 |
70 |
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
|
70 |
71 |
import eu.etaxonomy.taxeditor.editor.AppModelId;
|
71 |
72 |
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
|
... | ... | |
229 |
230 |
Collection<Character> characters = createCharacters((TreeSelection)structureTreeSelection, (TreeSelection)propertyTreeSelection);
|
230 |
231 |
for (Character character : characters) {
|
231 |
232 |
//add new Character to feature tree
|
232 |
|
FeatureNode<Character> parent = ((FeatureTree<Character>) characterTreeEditorComposite.getViewer().getInput()).getRoot();
|
233 |
|
vocabulary.addTerm(character);
|
234 |
|
CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(parent, character);
|
|
233 |
FeatureTree<Character> featureTree = (FeatureTree<Character>) characterTreeEditorComposite.getViewer().getInput();
|
|
234 |
FeatureNode<Character> parent = featureTree.getRoot();
|
|
235 |
|
|
236 |
// check if parent presence/absence character already exists
|
|
237 |
FeatureNode presenceAbsenceCharacterNode = findPresenceAbsenceNode(featureTree.getRoot(), character.getStructure());
|
|
238 |
if(presenceAbsenceCharacterNode==null){
|
|
239 |
FeatureNode presenceAbsencePropertyNode = CdmStore.getService(IFeatureNodeService.class).load(UUID.fromString("081f72ee-f59b-4c5f-87ca-74bf800c9c6b"));
|
|
240 |
TermVocabulary presenceAbsenceStateVoc = CdmStore.getService(IVocabularyService.class).load(UUID.fromString("5e898886-b1bf-4509-ad78-14cdb5d05f5b"));
|
|
241 |
Character presenceAbsenceCharacter = CharacterEditor.createCharacter(character.getStructure(), presenceAbsencePropertyNode);
|
|
242 |
presenceAbsenceCharacter.setSupportsCategoricalData(true);
|
|
243 |
presenceAbsenceCharacter.addSupportedCategoricalEnumeration(presenceAbsenceStateVoc);
|
|
244 |
presenceAbsenceCharacterNode = (FeatureNode)CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(parent, presenceAbsenceCharacter, vocabulary.getUuid()).getCdmEntity();
|
|
245 |
}
|
|
246 |
CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(parent, character, vocabulary.getUuid());
|
235 |
247 |
}
|
236 |
248 |
characterTreeEditorComposite.getViewer().refresh();
|
237 |
249 |
}
|
... | ... | |
301 |
313 |
Iterator<FeatureNode<DefinedTermBase>> propertiesIterator = propertyTreeSelection.iterator();
|
302 |
314 |
while(propertiesIterator.hasNext()){
|
303 |
315 |
FeatureNode<DefinedTermBase> propertyNode = propertiesIterator.next();
|
304 |
|
Representation structureRepresentation = structureNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
|
305 |
|
Representation propertyRepresentation = propertyNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
|
306 |
|
String label = null;
|
307 |
|
String abbrevLabel = null;
|
308 |
|
if(structureRepresentation.getLabel()!=null && propertyRepresentation.getLabel()!=null){
|
309 |
|
label = structureRepresentation.getLabel()+" "+propertyRepresentation.getLabel();
|
310 |
|
}
|
311 |
|
if(structureRepresentation.getAbbreviatedLabel()!=null && propertyRepresentation.getAbbreviatedLabel()!=null){
|
312 |
|
abbrevLabel = structureRepresentation.getAbbreviatedLabel()+" "+propertyRepresentation.getAbbreviatedLabel();
|
313 |
|
}
|
314 |
|
//create new Character
|
315 |
|
Character character = Character.NewInstance(structureNode, propertyNode, null, label, abbrevLabel);
|
|
316 |
Character character = createCharacter(structureNode, propertyNode);
|
316 |
317 |
characters.add(character);
|
317 |
318 |
}
|
318 |
319 |
}
|
319 |
320 |
return characters;
|
320 |
321 |
}
|
321 |
322 |
|
|
323 |
public static Character createCharacter(FeatureNode<DefinedTermBase> structureNode, FeatureNode<DefinedTermBase> propertyNode){
|
|
324 |
Representation structureRepresentation = structureNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
|
|
325 |
Representation propertyRepresentation = propertyNode.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
|
|
326 |
String label = null;
|
|
327 |
String abbrevLabel = null;
|
|
328 |
if(structureRepresentation.getLabel()!=null && propertyRepresentation.getLabel()!=null){
|
|
329 |
label = structureRepresentation.getLabel()+" "+propertyRepresentation.getLabel();
|
|
330 |
}
|
|
331 |
if(structureRepresentation.getAbbreviatedLabel()!=null && propertyRepresentation.getAbbreviatedLabel()!=null){
|
|
332 |
abbrevLabel = structureRepresentation.getAbbreviatedLabel()+" "+propertyRepresentation.getAbbreviatedLabel();
|
|
333 |
}
|
|
334 |
//create new Character
|
|
335 |
return Character.NewInstance(structureNode, propertyNode, null, label, abbrevLabel);
|
|
336 |
}
|
|
337 |
|
|
338 |
public static FeatureNode findPresenceAbsenceNode(FeatureNode root, FeatureNode structureNode){
|
|
339 |
FeatureNode presenceAbsenceNode = null;
|
|
340 |
if(root.getTerm() instanceof Character && ((Character) root.getTerm()).getStructure().equals(structureNode)){
|
|
341 |
return root;
|
|
342 |
}
|
|
343 |
else{
|
|
344 |
List<FeatureNode> childNodes = root.getChildNodes();
|
|
345 |
for (FeatureNode featureNode : childNodes) {
|
|
346 |
presenceAbsenceNode = findPresenceAbsenceNode(featureNode, structureNode);
|
|
347 |
if(presenceAbsenceNode!=null){
|
|
348 |
return presenceAbsenceNode;
|
|
349 |
}
|
|
350 |
}
|
|
351 |
}
|
|
352 |
return null;
|
|
353 |
}
|
|
354 |
|
322 |
355 |
@Override
|
323 |
356 |
@Persist
|
324 |
357 |
public void save(IProgressMonitor monitor){
|
ref #8178 Auto-create presence-absence character