Merge branch 'hotfix/5.18.2'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / e4 / container / ConceptContainerE4.java
1 /**
2 * Copyright (C) 2007 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
10 package eu.etaxonomy.taxeditor.editor.name.e4.container;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import org.eclipse.swt.graphics.Font;
16
17 import eu.etaxonomy.cdm.format.taxon.TaxonRelationshipFormatter;
18 import eu.etaxonomy.cdm.model.common.Language;
19 import eu.etaxonomy.cdm.model.taxon.Taxon;
20 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
21 import eu.etaxonomy.cdm.strategy.cache.TaggedCacheHelper;
22 import eu.etaxonomy.cdm.strategy.cache.TaggedText;
23 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
24 import eu.etaxonomy.taxeditor.editor.name.container.EditorAnnotation;
25 import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
26 import eu.etaxonomy.taxeditor.editor.name.e4.container.MisappliedGroupE4.ConceptType;
27 import eu.etaxonomy.taxeditor.model.AbstractUtility;
28 import eu.etaxonomy.taxeditor.model.NameHelper;
29 import eu.etaxonomy.taxeditor.preference.Resources;
30 import eu.etaxonomy.taxeditor.store.CdmStore;
31
32 /**
33 * @author pplitzner
34 * @date Aug 24, 2017
35 */
36 public class ConceptContainerE4 extends AbstractGroupedContainerE4<Taxon> {
37 TaxonRelationship relationship;
38 TaxonRelationshipFormatter misappliedFormatter;
39 ConceptType conceptType;
40
41 public ConceptContainerE4(AbstractGroupE4 group, Taxon misappliedName, ConceptType conceptType) {
42 super(group, misappliedName);
43 this.conceptType = conceptType;
44 misappliedFormatter = new TaxonRelationshipFormatter();
45 }
46
47 @Override
48 protected void initializeComposite() {
49 setIsDraggable(true);
50 setFont(getViewerFont());
51 TaxonNameEditorE4 editor = getEditor();
52 Taxon taxon = editor.getTaxon();
53 for (TaxonRelationship rel: taxon.getTaxonRelations(getMisappliedName())){
54 if (rel.getType().isAnyMisappliedName() && this.conceptType.equals(ConceptType.Misapplication)){
55 relationship = rel;
56 break;
57 }else if (rel.getType().isAnySynonym() && this.conceptType.equals(ConceptType.Synonym)){
58 relationship = rel;
59 break;
60 }
61 }
62 showSec();
63 initTextViewer();
64 }
65
66 @Override
67 protected void updateIcon() {
68 if (relationship.getType().isAnyMisappliedName() ){
69 setIcon(MISAPPLIEDNAME_ICON);
70 }else if (relationship.getType().isProParte()){
71 setIcon(PRO_PARTE_SYNONYM_ICON);
72 }else if (relationship.getType().isAnySynonym()){
73 setIcon(PARTIAL_SYNONYM_ICON);
74 }
75 }
76
77 private void showSec() {
78 if (getMisappliedName() == null) {
79 return;
80 }
81 List<Language> languages = new ArrayList<>();
82 languages.add(CdmStore.getDefaultLanguage());
83 List<TaggedText> taggedText = misappliedFormatter.getTaggedText(relationship, true, languages, true);
84
85 if (taggedText != null){
86 String title = TaggedCacheHelper.createString(taggedText);
87 title = title.replace("&", "&&");
88 setNonEditableInfo(title, false);
89 }
90
91 }
92
93 public Taxon getMisappliedName() {
94 return getTaxonBase();
95 }
96
97 @Override
98 protected Font getViewerFont() {
99 return AbstractUtility.getFont(Resources.MISAPPLIEDNAME_FONT);
100 }
101
102 @Override
103 public void showAnnotations() {
104 if(getData().getSec() == null){
105 getNameViewer().addAnnotation(
106 new EditorAnnotation(0, Messages.MisapplicationContainer_SEC_REF_REQUIRED));
107 }
108 super.showAnnotations();
109 }
110
111 @Override
112 protected void updateNonEditableInfo() {
113 showSec();
114 }
115
116 @Override
117 protected void updateIndent() {
118 setIndent(MISAPPLIEDNAME_INDENT);
119 }
120
121 @Override
122 protected void initTextViewer() {
123 updateIndent();
124
125 updateIcon();
126 String text;
127 if (!conceptType.equals(ConceptType.Synonym) ){
128 text = NameHelper.getDisplayNameCache(getData());
129 }else{
130 text = NameHelper.getDisplayName(getData());
131 }
132
133 if (text.length() == 0) {
134 initEmptyText();
135 } else {
136 getNameViewer().setText(text);
137 placeCursor();
138 }
139 calculateAnnotations();
140 }
141
142 @Override
143 public void refresh() {
144 // showNameRelations();
145 if (relationship.getType().isAnyMisappliedName()){
146 conceptType = ConceptType.Misapplication;
147 }else /*if (relationship.getType().isAnySynonym())*/{
148 conceptType = ConceptType.Synonym;
149 }
150
151 String text;
152 if (!conceptType.equals(ConceptType.Synonym) ){
153 text = NameHelper.getDisplayNameCache(getData());
154 }else{
155 text = NameHelper.getDisplayName(getData());
156 }
157
158
159 if (getNameViewer().getTextWidget() == null) {
160 // we might get here via dnd. Look slike it can be ignored
161 return;
162 }
163
164 if (text.length() == 0) {
165 initEmptyText();
166 } else if (!getNameViewer().getTextWidget().getText().equals(text)) {
167 removeListener();
168 getNameViewer().getTextWidget().setText(text);
169 addListener();
170 }
171
172 updateNonEditableInfo();
173
174 updateIcon();
175 // placeCursor();
176 updateIndent();
177 setDelayedSelection();
178
179 enableFreeText();
180 }
181 }