Project

General

Profile

« Previous | Next » 

Revision 472739e6

Added by Patrick Plitzner about 5 years ago

  • ID 472739e6c14a0b304b399ee0d1e4056baa6fa28c
  • Parent 65b3a18d

ref #8178 Auto-create presence-absence character

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDropAdapter.java
8 8
*/
9 9
package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.character;
10 10

  
11
import java.util.UUID;
12

  
11 13
import org.eclipse.e4.ui.di.UISynchronize;
12 14
import org.eclipse.jface.viewers.Viewer;
13 15
import org.eclipse.swt.dnd.DropTargetEvent;
14 16
import org.eclipse.swt.dnd.TransferData;
15 17

  
16 18
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
19
import eu.etaxonomy.cdm.api.service.IVocabularyService;
17 20
import eu.etaxonomy.cdm.model.description.Character;
18 21
import eu.etaxonomy.cdm.model.term.FeatureNode;
19 22
import eu.etaxonomy.cdm.model.term.FeatureTree;
23
import eu.etaxonomy.cdm.model.term.TermVocabulary;
20 24
import eu.etaxonomy.taxeditor.featuretree.CharacterTransfer;
21 25
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeDropAdapter;
22 26
import eu.etaxonomy.taxeditor.store.CdmStore;
......
60 64
	            Object object = transferObjects[i];
61 65
	            if(object instanceof Character){
62 66
	                Character character = (Character)object;
67
	                FeatureTree featureTree = (FeatureTree)getViewer().getInput();
63 68
	                if(target==null){
64 69
                        //drop on feature tree
65
                        target = ((FeatureTree)getViewer().getInput()).getRoot();
70
                        target = featureTree.getRoot();
71
                    }
72
                    // check if parent presence/absence character already exists
73
                    FeatureNode presenceAbsenceCharacterNode = CharacterEditor.findPresenceAbsenceNode(featureTree.getRoot(), character.getStructure());
74
                    if(presenceAbsenceCharacterNode==null){
75
                        FeatureNode presenceAbsencePropertyNode = CdmStore.getService(IFeatureNodeService.class).load(UUID.fromString("081f72ee-f59b-4c5f-87ca-74bf800c9c6b"));
76
                        TermVocabulary presenceAbsenceStateVoc = CdmStore.getService(IVocabularyService.class).load(UUID.fromString("5e898886-b1bf-4509-ad78-14cdb5d05f5b"));
77
                        Character presenceAbsenceCharacter = CharacterEditor.createCharacter(character.getStructure(), presenceAbsencePropertyNode);
78
                        presenceAbsenceCharacter.setSupportsCategoricalData(true);
79
                        presenceAbsenceCharacter.addSupportedCategoricalEnumeration(presenceAbsenceStateVoc);
80
                        presenceAbsenceCharacterNode = (FeatureNode)CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(target, presenceAbsenceCharacter, characterEditor.getVocabulary().getUuid()).getCdmEntity();
66 81
                    }
67
	                characterEditor.getVocabulary().addTerm(character);
68
                    CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(target, character);
82
                    CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(presenceAbsenceCharacterNode, character, characterEditor.getVocabulary().getUuid());
69 83
	            }
70 84
	        }
71 85
	        getViewer().refresh();
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterEditor.java
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){

Also available in: Unified diff