2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.preference
;
13 import java
.io
.FileInputStream
;
14 import java
.io
.FileOutputStream
;
15 import java
.io
.IOException
;
16 import java
.lang
.reflect
.Field
;
18 import java
.net
.URISyntaxException
;
19 import java
.util
.ArrayList
;
20 import java
.util
.Arrays
;
21 import java
.util
.Collections
;
22 import java
.util
.HashMap
;
23 import java
.util
.List
;
25 import java
.util
.Properties
;
27 import java
.util
.StringTokenizer
;
28 import java
.util
.UUID
;
30 import org
.apache
.commons
.lang
.StringUtils
;
31 import org
.apache
.log4j
.Logger
;
32 import org
.eclipse
.core
.runtime
.preferences
.ConfigurationScope
;
33 import org
.eclipse
.core
.runtime
.preferences
.IEclipsePreferences
;
34 import org
.eclipse
.equinox
.internal
.p2
.ui
.model
.MetadataRepositoryElement
;
35 import org
.eclipse
.jface
.preference
.IPreferenceStore
;
36 import org
.eclipse
.jface
.window
.Window
;
37 import org
.eclipse
.swt
.widgets
.Composite
;
38 import org
.eclipse
.swt
.widgets
.Control
;
39 import org
.eclipse
.swt
.widgets
.Shell
;
40 import org
.eclipse
.ui
.PlatformUI
;
41 import org
.osgi
.service
.prefs
.BackingStoreException
;
42 import org
.osgi
.service
.prefs
.Preferences
;
44 import eu
.etaxonomy
.cdm
.api
.application
.ICdmRepository
;
45 import eu
.etaxonomy
.cdm
.api
.facade
.DerivedUnitFacadeConfigurator
;
46 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
47 import eu
.etaxonomy
.cdm
.api
.service
.ITermTreeService
;
48 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
49 import eu
.etaxonomy
.cdm
.api
.service
.config
.FindTaxaAndNamesConfiguratorImpl
;
50 import eu
.etaxonomy
.cdm
.api
.service
.config
.IFindTaxaAndNamesConfigurator
;
51 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
52 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
53 import eu
.etaxonomy
.cdm
.io
.specimen
.abcd206
.in
.Abcd206ImportConfigurator
;
54 import eu
.etaxonomy
.cdm
.model
.common
.ICdmBase
;
55 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
56 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
57 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
58 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
;
59 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
.PrefKey
;
60 import eu
.etaxonomy
.cdm
.model
.metadata
.IPreferencePredicate
;
61 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferencePredicate
;
62 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferenceSubject
;
63 import eu
.etaxonomy
.cdm
.model
.metadata
.TermDisplayEnum
;
64 import eu
.etaxonomy
.cdm
.model
.metadata
.TermOrder
;
65 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalCode
;
66 import eu
.etaxonomy
.cdm
.model
.term
.IDefinedTerm
;
67 import eu
.etaxonomy
.cdm
.model
.term
.ISimpleTerm
;
68 import eu
.etaxonomy
.cdm
.model
.term
.TermBase
;
69 import eu
.etaxonomy
.cdm
.model
.term
.TermTree
;
70 import eu
.etaxonomy
.cdm
.model
.term
.TermType
;
71 import eu
.etaxonomy
.cdm
.model
.term
.TermVocabulary
;
72 import eu
.etaxonomy
.cdm
.model
.term
.VocabularyEnum
;
73 import eu
.etaxonomy
.cdm
.strategy
.match
.DefaultMatchStrategy
;
74 import eu
.etaxonomy
.cdm
.strategy
.match
.FieldMatcher
;
75 import eu
.etaxonomy
.cdm
.strategy
.match
.IMatchStrategy
;
76 import eu
.etaxonomy
.cdm
.strategy
.match
.MatchException
;
77 import eu
.etaxonomy
.cdm
.strategy
.match
.MatchMode
;
78 import eu
.etaxonomy
.taxeditor
.editor
.definedterm
.input
.TermEditorInput
;
79 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
80 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
81 import eu
.etaxonomy
.taxeditor
.model
.NomenclaturalCodeHelper
;
82 import eu
.etaxonomy
.taxeditor
.remoting
.source
.CdmRemoteSource
;
83 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
84 import eu
.etaxonomy
.taxeditor
.store
.TermStore
;
85 import eu
.etaxonomy
.taxeditor
.store
.internal
.TaxeditorStorePlugin
;
86 import eu
.etaxonomy
.taxeditor
.ui
.dialog
.DefaultLanguageDialog
;
90 * PreferencesUtil class.
97 public class PreferencesUtil
implements IPreferenceKeys
{
98 private final static String EDITOR_PREFERENCES_NODE
= "eu.etaxonomy.taxeditor";
100 public static final String PREFERRED_TERMS_CHANGE
= "preferred_terms";
102 public static final String P2_REPOSITORIES_DELIM
= ",";
103 public static final String P2_REPOSITORY_FIELDS_DELIM
= ";";
104 public static final String SUBJECT_DELIM
= "/";
106 private static TermTree
<Feature
> preferredNameFeatureTree
;
108 private static TermTree
<Feature
> preferredTaxonFeatureTree
;
110 private final static Logger logger
= Logger
.getLogger(PreferencesUtil
.class);
112 public static IPreferenceStore
getPreferenceStore() {
113 return TaxeditorStorePlugin
.getDefault().getPreferenceStore();
116 public static String
[] extractSubjectParts(String subject
){
117 String
[] result
= subject
.split("/");
121 public static IEclipsePreferences
getEditorPreferences(){
122 return ConfigurationScope
.INSTANCE
.getNode(EDITOR_PREFERENCES_NODE
);
125 public static String
getPreferenceValue(PrefKey prefKey
){
127 if(getEditorPreferences().nodeExists(prefKey
.getPredicate())){
128 Preferences predicateNode
= getEditorPreferences().node(prefKey
.getPredicate());
129 String
[] splittedSubject
= extractSubjectParts(prefKey
.getSubject());
130 String value
= predicateNode
.get(splittedSubject
[splittedSubject
.length
-1], PreferencePredicate
.getByKey(prefKey
.getPredicate()).getDefaultValue() != null? PreferencePredicate
.getByKey(prefKey
.getPredicate()).getDefaultValue().toString(): "");
131 int index
= splittedSubject
.length
-2;
132 while (value
!= null && index
>= 0){
133 value
= predicateNode
.get(splittedSubject
[index
], prefKey
.getPredicate());
139 } catch (BackingStoreException e
) {
140 // TODO Auto-generated catch block
146 public static List
<CdmPreference
> getPreference(PreferencePredicate prefPredicate
){
148 List
<CdmPreference
> prefs
= new ArrayList();
150 PreferenceSubject subject
;
151 if(getEditorPreferences().nodeExists(prefPredicate
.getKey())){
152 Preferences predicateNode
= getEditorPreferences().node(prefPredicate
.getKey());
153 for (String childName
: predicateNode
.childrenNames()){
154 Preferences child
= predicateNode
.node(childName
);
155 String subjectString
= "";
156 subjectString
= createSubjectStringForChildNodes(childName
, child
);
157 String value
= child
.get(subjectString
, "");
158 subject
= PreferenceSubject
.NewInstance(subjectString
);
159 pref
= CdmPreference
.NewInstance(subject
, prefPredicate
, value
);
165 } catch (BackingStoreException e
) {
166 // TODO Auto-generated catch block
176 private static String
createSubjectStringForChildNodes(String subject
, Preferences parent
) {
178 for (String childName
: parent
.childrenNames()){
179 subject
= childName
+SUBJECT_DELIM
+subject
;
180 Preferences child
= parent
.node(childName
);
181 createSubjectStringForChildNodes(subject
, child
);
183 } catch (BackingStoreException e
) {
184 // TODO Auto-generated catch block
191 private static String
prefKey(String name
) {
192 return name
+ "_"+ ((CdmRemoteSource
)CdmStore
.getActiveCdmSource()).toString();
195 public static String
prefOverrideKey(String name
) {
196 return name
+ "_OVERRIDE_";
199 public static void setStringValue(String name
, String value
) {
201 getPreferenceStore().setValue(prefKey(name
), value
);
203 getPreferenceStore().setToDefault(prefKey(name
));
207 public static void setIntValue(String name
, int value
) {
208 getPreferenceStore().setValue(prefKey(name
), value
);
211 public static void setBooleanValue(String name
, boolean value
) {
212 getPreferenceStore().setValue(prefKey(name
), value
);
215 public static void setDoubleValue(String name
, double value
) {
216 getPreferenceStore().setValue(prefKey(name
), value
);
219 public static void setFloatValue(String name
, float value
) {
220 getPreferenceStore().setValue(prefKey(name
), value
);
223 public static void setLongValue(String name
, long value
) {
224 getPreferenceStore().setValue(prefKey(name
), value
);
227 public static String
getStringValue(String name
, boolean local
) {
229 CdmPreference pref
= getDBPreferenceValue(name
);
230 String prefValue
= null;
231 String overrideKey
= createPreferenceString(createOverridePreferenceString(name
));
232 boolean override
= getPreferenceStore().getBoolean(overrideKey
);
235 if (local
|| (pref
== null && override
)|| (pref
!= null && pref
.isAllowOverride() && override
)){
237 String dbSpecific
= prefKey(name
);
238 if (getPreferenceStore().contains(dbSpecific
)){
239 return getPreferenceStore().getString(dbSpecific
);
241 }else if (pref
!= null){
243 if (pref
.getValue() == null){
244 Object result
= PreferencePredicate
.getByKey(pref
.getPredicate()).getDefaultValue();
245 if (result
instanceof String
){
246 return (String
)result
;
248 return result
.toString();
251 return pref
.getValue();
253 //no override but default value
254 IPreferencePredicate pred
= PreferencePredicate
.getByKey(name
);
256 if (pred
.getDefaultValue() instanceof String
){
257 return (String
)pred
.getDefaultValue();
258 }else if (pred
.getDefaultValue() != null){
259 return pred
.getDefaultValue().toString();
264 // if (local || (pref == null && override) || (pref != null && pref.isAllowOverride() && override)){
265 // String dbSpecific = prefKey(name);
266 // if (getPreferenceStore().contains(dbSpecific)){
267 // prefValue = getPreferenceStore().getString(dbSpecific);
269 // prefValue = getPreferenceStore().
272 // if (StringUtils.isBlank(prefValue) || (pref == null && !override)){
273 // IPreferencePredicate pred = PreferencePredicate.getByKey(name);
274 // if (pred != null){
275 // if (pred.getDefaultValue() instanceof String){
276 // return (String)pred.getDefaultValue();
277 // }else if (pred.getDefaultValue() != null){
278 // return pred.getDefaultValue().toString();
284 // }else if (pref != null){
285 // if (pref.getValue() == null){
286 // Object result = PreferencePredicate.getByKey(pref.getPredicate()).getDefaultValue();
287 // if (result instanceof String){
288 // return (String)result;
290 // if (result == null){
293 // if (result instanceof IKeyLabel){
294 // return ((IKeyLabel)result).getKey();
296 // return result.toString();
299 // prefValue = pref.getValue();
305 public static String
getStringValue(String name
){
306 return getStringValue(name
, false);
309 private static CdmPreference
getDBPreferenceValue(String name
) {
310 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
311 CdmPreference pref
= null;
313 pref
= cache
.get(name
);
314 // if (pref == null ){
315 // //get default value for Predicate
316 // IPreferencePredicate pred = PreferencePredicate.getByKey(name);
317 // if (pred != null){
318 // if (pred.getDefaultValue() != null){
319 // pref = CdmPreference.NewTaxEditorInstance(pred, pred.getDefaultValue().toString());
321 // pref = CdmPreference.NewTaxEditorInstance(pred, null);
323 // pref.setAllowOverride(true);
329 public static int getIntValue(String name
, boolean local
) {
330 CdmPreference pref
= getDBPreferenceValue(name
);
331 String prefValue
= null;
333 prefValue
= pref
.getValue();
335 Integer result
= null;
337 result
= Integer
.parseInt(prefValue
);
338 }catch(NumberFormatException e
){
339 logger
.debug("Preference value of " + name
+ " is not a number");
342 String overrideKey
= createPreferenceString(createOverridePreferenceString(name
));
343 boolean override
= getPreferenceStore().getBoolean(overrideKey
);
344 if (local
|| (pref
== null && override
) || (pref
!= null && pref
.isAllowOverride() && override
)){
345 String dbSpecific
= prefKey(name
);
346 if (getPreferenceStore().contains(dbSpecific
)){
347 result
= getPreferenceStore().getInt(dbSpecific
);
351 IPreferencePredicate pred
= PreferencePredicate
.getByKey(name
);
353 if (pred
.getDefaultValue() instanceof Integer
){
354 result
= (Integer
)pred
.getDefaultValue();
355 }else if (pred
.getDefaultValue() != null){
357 result
= Integer
.valueOf(pred
.getDefaultValue().toString());
358 }catch(NumberFormatException e
){
359 logger
.debug("Preference value of " + name
+ " is not a number");
364 //if no default value available
374 public static boolean getBooleanValue(String name
) {
375 Boolean result
= getBooleanValue(name
, false);
384 public static Boolean
getBooleanValue(String name
, boolean local
) {
385 if (CdmStore
.isActive()){
386 CdmPreference pref
= getDBPreferenceValue(name
);
387 String overrideKey
= createPreferenceString(createOverridePreferenceString(name
));
388 boolean override
= getPreferenceStore().getBoolean(overrideKey
);
390 if (local
|| (pref
== null && override
)|| (pref
!= null && pref
.isAllowOverride() && override
)){
392 String dbSpecific
= prefKey(name
);
393 // if (getPreferenceStore().contains(dbSpecific)){
394 return getPreferenceStore().getBoolean(dbSpecific
);
396 }else if (pref
!= null){
398 if (pref
.getValue() == null){
399 Object result
= PreferencePredicate
.getByKey(pref
.getPredicate()).getDefaultValue();
400 if (result
instanceof Boolean
){
401 return (Boolean
)result
;
403 return Boolean
.valueOf(result
.toString());
406 return Boolean
.valueOf(pref
.getValue());
408 //no override but default value
409 IPreferencePredicate pred
= PreferencePredicate
.getByKey(name
);
411 if (pred
.getDefaultValue() instanceof Boolean
){
412 return (Boolean
)pred
.getDefaultValue();
413 }else if (pred
.getDefaultValue() != null){
414 return Boolean
.valueOf(pred
.getDefaultValue().toString());
419 // no connection to db, use local preference
420 return getPreferenceStore().getBoolean(name
);
425 public static double getDoubleValue(String name
) {
426 CdmPreference pref
= getDBPreferenceValue(name
);
427 String prefValue
= null;
429 prefValue
= pref
.getValue();
431 Double result
= null;
433 if (pref
.getValue() == null){
434 Object defaultValue
= PreferencePredicate
.getByKey(pref
.getPredicate()).getDefaultValue();
435 if (defaultValue
instanceof Double
){
436 return (Double
)defaultValue
;
438 return Double
.valueOf(defaultValue
.toString());
442 result
= Double
.parseDouble(prefValue
);
443 }catch(NumberFormatException e
){
444 logger
.debug("Preference value of " + name
+ " is not a number");
447 String dbSpecific
= prefKey(name
);
448 if (getPreferenceStore().contains(dbSpecific
)){
449 result
= getPreferenceStore().getDouble(dbSpecific
);
451 result
= getPreferenceStore().
459 public static float getFloatValue(String name
, boolean local
) {
460 CdmPreference pref
= getDBPreferenceValue(name
);
461 String prefValue
= null;
463 prefValue
= pref
.getValue();
467 if (prefValue
!= null){
468 result
= Float
.parseFloat(prefValue
);
470 }catch(NumberFormatException e
){
471 logger
.debug("Preference value of " + name
+ " is not a number");
473 String overrideKey
= createPreferenceString(createOverridePreferenceString(name
));
474 boolean override
= true;
475 if (getPreferenceStore().contains(overrideKey
)){
476 override
= getPreferenceStore().getBoolean(overrideKey
);
478 if (local
|| pref
== null || (pref
!= null && pref
.isAllowOverride() && override
)){
479 String dbSpecific
= prefKey(name
);
480 if (getPreferenceStore().contains(dbSpecific
)){
481 result
= getPreferenceStore().getFloat(dbSpecific
);
483 IPreferencePredicate pred
= PreferencePredicate
.getByKey(name
);
485 if (pred
.getDefaultValue() instanceof Float
){
486 return (float)pred
.getDefaultValue();
487 }else if (pred
.getDefaultValue() != null){
488 return Float
.valueOf(pred
.getDefaultValue().toString());
498 public static long getLongValue(String name
) {
499 CdmPreference pref
= getDBPreferenceValue(name
);
500 String prefValue
= null;
502 prefValue
= pref
.getValue();
506 result
= Long
.parseLong(prefValue
);
507 }catch(NumberFormatException e
){
508 logger
.debug("Preference value of " + name
+ " is not a number");
511 String dbSpecific
= prefKey(name
);
512 if (getPreferenceStore().contains(dbSpecific
)){
513 result
= getPreferenceStore().getLong(dbSpecific
);
515 result
= getPreferenceStore().
522 public static CdmPreference
setPreferredNomenclaturalCode(
523 String preferenceValue
, boolean local
) {
525 setStringValue(PreferencePredicate
.NomenclaturalCode
.getKey(),
529 ICdmRepository controller
;
530 controller
= CdmStore
.getCurrentApplicationConfiguration();
531 if (controller
== null){
536 key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
);
537 }catch (Exception e
){
538 System
.out
.println(e
.getStackTrace());
540 CdmPreference preference
= null;
542 if (preferenceValue
== null){
543 preference
= controller
.getPreferenceService().find(key
);
544 if (preference
== null){
547 setStringValue(PreferencePredicate
.NomenclaturalCode
.getKey(),
548 preference
.getValue());
553 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
, preferenceValue
);
554 controller
.getPreferenceService().set(preference
);
564 public static void setPreferredNomenclaturalCode(
565 CdmPreference preference
) {
567 ICdmRepository controller
;
568 controller
= CdmStore
.getCurrentApplicationConfiguration();
569 if (controller
== null){
573 if (preference
== null){
576 key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
);
577 }catch (Exception e
){
578 System
.out
.println(e
.getStackTrace());
580 controller
.getPreferenceService().remove(key
);
582 controller
.getPreferenceService().set(preference
);
587 public static NomenclaturalCode
getPreferredNomenclaturalCode() {
589 CdmPreference pref
= getPreferenceFromDB(PreferencePredicate
.NomenclaturalCode
);
592 String preferredCode
;
593 if(pref
== null || (pref
.isAllowOverride() && getBooleanValue(prefOverrideKey(PreferencePredicate
.NomenclaturalCode
.getKey())))){
594 preferredCode
= getStringValue(
595 PreferencePredicate
.NomenclaturalCode
.getKey());
598 preferredCode
= pref
.getValue();
600 if (StringUtils
.isBlank(preferredCode
)){
601 preferredCode
= getPreferenceKey((NomenclaturalCode
)PreferencePredicate
.NomenclaturalCode
.getDefaultValue());
604 return getPreferredNomenclaturalCode(preferredCode
);
608 public static NomenclaturalCode
getPreferredNomenclaturalCode(String preferenceKeyNomenclaturalCode
) {
610 for (NomenclaturalCode code
: NomenclaturalCodeHelper
.getAllCodes()) {
611 if (getPreferenceKey(code
).equals(preferenceKeyNomenclaturalCode
) || code
.getKey().equals(preferenceKeyNomenclaturalCode
)) {
618 public static boolean isShowTaxonAssociations(){
619 boolean result
= getBooleanValue(PreferencePredicate
.ShowTaxonAssociations
.getKey());
623 public static boolean isShowLifeForm(){
624 boolean result
= getBooleanValue(PreferencePredicate
.ShowLifeForm
.getKey());
628 public static boolean isDeterminationOnlyForFieldUnits(){
629 boolean result
= getBooleanValue(PreferencePredicate
.DeterminationOnlyForFieldUnits
.getKey());
633 public static boolean isCollectingAreaInGeneralSection(){
634 boolean result
= getBooleanValue(PreferencePredicate
.ShowCollectingAreasInGeneralSection
.getKey());
638 public static CdmPreference
getPreferenceFromDB(IPreferencePredicate predicate
){
639 ICdmRepository controller
;
640 CdmPreference pref
= null;
643 if(CdmStore
.isActive()){
644 controller
= CdmStore
.getCurrentApplicationConfiguration();
645 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), predicate
);
646 pref
= controller
.getPreferenceService().find(key
);
656 public static List
<CdmPreference
> getPreferencesFromDB(IPreferencePredicate predicate
){
657 ICdmRepository controller
;
658 List
<CdmPreference
> prefs
= null;
661 if(CdmStore
.isActive()){
662 controller
= CdmStore
.getCurrentApplicationConfiguration();
663 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), predicate
);
664 prefs
= controller
.getPreferenceService().list(predicate
);
674 public static void setPreferencesToDB(CdmPreference preference
, boolean setDefault
){
675 ICdmRepository controller
;
677 if(CdmStore
.isActive()){
678 controller
= CdmStore
.getCurrentApplicationConfiguration();
681 controller
.getPreferenceService().remove(preference
.getKey());
683 controller
.getPreferenceService().set(preference
);
694 public static CdmPreference
getPreferenceFromDB(PrefKey key
){
695 ICdmRepository controller
;
696 CdmPreference pref
= null;
699 if(CdmStore
.isActive()){
700 controller
= CdmStore
.getCurrentApplicationConfiguration();
701 pref
= controller
.getPreferenceService().find(key
);
711 public static void setPreferenceToDB(CdmPreference preference
){
712 ICdmRepository controller
;
714 if(CdmStore
.isActive()){
715 controller
= CdmStore
.getCurrentApplicationConfiguration();
716 if (preference
.getValue() == null && preference
.isAllowOverride()){
717 controller
.getPreferenceService().remove(preference
.getKey());
719 controller
.getPreferenceService().set(preference
);
721 CdmPreferenceCache
.instance().put(preference
);
729 public static String
getPreferredDefaultLangugae(){
730 String preferredLanguage
= getStringValue(DEFAULT_LANGUAGE_EDITOR
);
731 if(StringUtils
.isNotEmpty(preferredLanguage
) && StringUtils
.isNotBlank(preferredLanguage
)){
732 return preferredLanguage
;
737 public static boolean isShowMediaPreview(){
738 boolean isShowMediaPreview
= getBooleanValue(SHOW_MEDIA_PREVIEW
);
739 return isShowMediaPreview
;
743 * Get the match strategy for the given class that was stored in preferences
744 * or the default strategy if it was not stored in preferences
747 * a {@link java.lang.Class} object.
748 * @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
750 public static IMatchStrategy
getMatchStrategy(Class
<?
> clazz
) {
751 String className
= clazz
.getName();
752 if (getBooleanValue(MATCH_STRATEGY_PREFIX
+ className
)) {
753 IMatchStrategy matchStrategy
= getDefaultMatchStrategy(clazz
);
755 //TODO CacheMatchers (or multiple field matchers in future) are missing here
756 for (FieldMatcher fieldMatcher
: matchStrategy
.getMatching().getFieldMatchers(false)) {
757 String fieldName
= fieldMatcher
.getPropertyName();
758 String matchModeName
= getStringValue(
759 getMatchStrategyFieldName(className
, fieldName
));
760 MatchMode matchMode
= MatchMode
.valueOf(matchModeName
);
762 matchStrategy
.setMatchMode(fieldName
, matchMode
);
763 } catch (MatchException e
) {
764 MessagingUtils
.error(PreferencesUtil
.class, e
);
765 throw new RuntimeException(e
);
769 return matchStrategy
;
771 return getDefaultMatchStrategy(clazz
);
775 * Stores a matchStrategy into the preference store.
777 * @param matchStrategy
778 * a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy}
781 public static void setMatchStrategy(IMatchStrategy matchStrategy
) {
782 String className
= "ANY class"; //FIXME was: matchStrategy.getMatchClass().getName(); seems currently not in use
783 setBooleanValue(MATCH_STRATEGY_PREFIX
+ className
, true);
785 List
<FieldMatcher
> fieldMatchers
= matchStrategy
.getMatching().getFieldMatchers(false);
787 for (FieldMatcher fieldMatcher
: fieldMatchers
) {
788 String fieldName
= fieldMatcher
.getPropertyName();
790 getMatchStrategyFieldName(className
, fieldName
),
791 fieldMatcher
.getMatchMode().name());
796 * Helper method to create the preference property for a match field.
802 private static String
getMatchStrategyFieldName(String className
,
804 return MATCH_STRATEGY_PREFIX
+ className
+ "." + fieldName
;
808 * Returns the default match strategy for a given class.
811 * a {@link java.lang.Class} object.
812 * @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
814 public static IMatchStrategy
getDefaultMatchStrategy(Class clazz
) {
815 return DefaultMatchStrategy
.NewInstance(clazz
);
818 public static String
getDateFormatPattern() {
819 // TODO make this configurable in properties
820 String pattern
= "Y-M-d H:m";
824 public static <T
extends TermBase
> void addTermToPreferredTerms(T term
) {
826 // VocabularyEnum vocabulary =
827 // VocabularyEnum.getVocabularyEnum(term.getClass());
829 // getPreferenceStore().setValue(getPreferenceKey(term),
830 // VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
832 // firePreferencesChanged(term.getClass());
836 * Construct a unique key using the CdmBase object's uuid
841 private static String
getPreferenceKey(ICdmBase cdmBase
) {
842 cdmBase
= HibernateProxyHelper
.deproxy(cdmBase
);
844 String key
= cdmBase
.getClass().getName().concat(".")
845 .concat(cdmBase
.getUuid().toString());
846 if (key
.contains("javassist")) {
847 MessagingUtils
.info("proxy");
853 * Construct a unique key using the CdmBase object's uuid
858 public static String
getPreferenceKey(ISimpleTerm simpleTerm
) {
859 simpleTerm
= HibernateProxyHelper
.deproxy(simpleTerm
);
860 String key
= simpleTerm
.getClass().getName().concat(".")
861 .concat(simpleTerm
.getUuid().toString());
862 if (key
.contains("javassist")) {
863 MessagingUtils
.warn(PreferencesUtil
.class,
864 "Trying to persist a preference based on a proxy class.");
872 * Construct a unique key using the CdmBase object's uuid
877 public static String
getPreferenceKey(IDefinedTerm definedTerm
) {
878 definedTerm
= HibernateProxyHelper
.deproxy(definedTerm
);
879 String key
= definedTerm
.getClass().getName().concat(".")
880 .concat(definedTerm
.getUuid().toString());
881 if (key
.contains("javassist")) {
882 MessagingUtils
.warn(PreferencesUtil
.class,
883 "Trying to persist a preference based on a proxy class.");
889 * Retrieves search preferences from the preference store
891 * @return an {@link ITaxonServiceConfigurator} to pass to search methods
893 public static IFindTaxaAndNamesConfigurator
getSearchConfigurator() {
894 IFindTaxaAndNamesConfigurator configurator
= initializeSearchConfigurator();
896 configurator
.setDoTaxa(PreferencesUtil
.getPreferenceStore().contains(IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_TAXA
)? PreferencesUtil
.getPreferenceStore().getBoolean(
897 IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_TAXA
): true);
898 configurator
.setDoSynonyms(PreferencesUtil
.getPreferenceStore().contains(IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_SYNONYMS
)? PreferencesUtil
.getPreferenceStore().getBoolean(
899 IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_SYNONYMS
): true);
900 configurator
.setDoNamesWithoutTaxa(PreferencesUtil
.getPreferenceStore().contains(IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_NAMES
)? PreferencesUtil
.getPreferenceStore().getBoolean(
901 IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_NAMES
): true);
902 configurator
.setDoTaxaByCommonNames(PreferencesUtil
.getPreferenceStore().contains(IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
)? PreferencesUtil
.getPreferenceStore().getBoolean(
903 IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
): true);
904 //configurator.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.valueOf(getStringValue(TAXON_SERVICE_CONFIGURATOR_MATCH_MODE)));
910 * create new preferences, setting all search options to true
913 * {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
916 public static IFindTaxaAndNamesConfigurator
initializeSearchConfigurator() {
917 IFindTaxaAndNamesConfigurator configurator
= FindTaxaAndNamesConfiguratorImpl
.NewInstance();
919 configurator
.setDoTaxa(true);
920 configurator
.setDoSynonyms(true);
921 configurator
.setDoNamesWithoutTaxa(true);
922 configurator
.setDoTaxaByCommonNames(true);
924 configurator
.setTaxonPropertyPath(Arrays
.asList("$", "titleCache",
925 "name", "name.$", "relationsFromThisTaxon.$"));
927 configurator
.setSynonymPropertyPath(Arrays
.asList("$", "titleCache",
928 "name", "name.$", "synonyms.relatedTo.*"));
931 // match mode is a simple like, actually all other match modes are kind
934 .setMatchMode(eu
.etaxonomy
.cdm
.persistence
.query
.MatchMode
.ANYWHERE
);
935 // we set page number and size here as this should always be unlimited
936 configurator
.setPageNumber(0);
937 // TODO currently limit results to 10000
938 configurator
.setPageSize(10000);
939 //setSearchConfigurator(configurator) ;
944 * Store search preferences
946 * @param configurator
948 * {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
951 public static void setSearchConfigurator(
952 IFindTaxaAndNamesConfigurator configurator
) {
953 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_TAXA
,
954 configurator
.isDoTaxa());
955 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_SYNONYMS
,
956 configurator
.isDoSynonyms());
957 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_NAMES
,
958 configurator
.isDoNamesWithoutTaxa());
959 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
,
960 configurator
.isDoTaxaByCommonNames());
963 public static void firePreferencesChanged(Class clazz
) {
964 getPreferenceStore().firePropertyChangeEvent(PREFERRED_TERMS_CHANGE
,
969 public static String
createPreferenceString(String property
){
970 return prefKey(property
);
973 public static String
createOverridePreferenceString(String property
){
974 return prefOverrideKey(property
);
979 * Set default values for preferences
981 public static void setDefaults() {
983 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.EditMapServiceAccessPoint
.getKey()),
984 "http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php");
985 //FIXME : changed default for SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
986 getPreferenceStore().setDefault(createPreferenceString(SHOULD_CONNECT_AT_STARTUP
), false);
987 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.MobotOpenUrlServiceAccessPoint
.getKey()),
988 "http://www.biodiversitylibrary.org/openurl");
989 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.MobotOpenUrlServiceMaxWidth
.getKey()), "1000");
990 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.MobotOpenUrlServiceMaxHeight
.getKey()), "1000");
991 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_TAXA
, true);
992 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_SYNONYMS
, true);
993 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_NAMES
, true);
994 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
, true);
998 // getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.NameDetailsView.getKey()), new NameDetailsConfigurator(false).toString());
1000 //Navigator preferences
1001 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.TaxonNodeOrder
.getKey()), NavigatorOrderEnum
.RankAndNameOrder
.getKey());
1003 //getPreferenceStore().setDefault(createPreferenceString(Prefe), true);
1005 getPreferenceStore().setDefault(createPreferenceString(SHOW_ADVANCED_MEDIA_SECTION
), false);
1007 getPreferenceStore().setDefault(createPreferenceString(SHOW_MEDIA_PREVIEW
), false);
1008 //override db preferences
1009 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.AbcdImportConfig
.getKey())), false);
1010 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.NameDetailsView
.getKey())), false);
1011 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.CommonNameAreaVocabularies
.getKey())), false);
1012 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.CommonNameReferencesWithMarker
.getKey()), false);
1013 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowTaxonNodeWizard
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowTaxonNodeWizard
.getDefaultValue().toString()));
1014 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowNamespaceInSource
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowNamespaceInSource
.getDefaultValue().toString()));
1015 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowIdInSource
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowIdInSource
.getDefaultValue().toString()));
1016 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.DisableMultiClassification
.getKey()), Boolean
.valueOf(PreferencePredicate
.DisableMultiClassification
.getDefaultValue().toString()));
1017 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowImportExportMenu
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowImportExportMenu
.getDefaultValue().toString()));
1018 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowSpecimen
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowSpecimen
.getDefaultValue().toString()));
1019 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.SearchForIdentifierAndTitleCache
.getKey()), Boolean
.valueOf(PreferencePredicate
.SearchForIdentifierAndTitleCache
.getDefaultValue().toString()));
1020 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.SearchForIdentifierAndTitleCache
.getKey())), false);
1021 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.SearchForIdentifierAsDefault
.getKey()), Boolean
.valueOf(PreferencePredicate
.SearchForIdentifierAsDefault
.getDefaultValue().toString()));
1022 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.SearchForIdentifierAsDefault
.getKey())), false);
1023 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.ShowModifierFreeText
.getKey())), false);
1024 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.ShowModifier
.getKey())), false);
1025 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.DistributionEditorActivated
.getKey())), false);
1029 public static void checkNomenclaturalCode() {
1030 // First time Editor is opened, no nomenclatural code has been set
1031 if (PreferencesUtil
.getPreferredNomenclaturalCode() == null) {
1032 PreferencesUtil
.setPreferredNomenclaturalCode(getPreferenceKey(NomenclaturalCode
.ICNAFP
), true);
1038 public static void setNomenclaturalCodePreferences(){
1039 ICdmRepository controller
;
1040 controller
= CdmStore
.getCurrentApplicationConfiguration();
1041 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
);
1042 CdmPreference preference
= null;
1043 if (controller
== null){
1046 preference
= controller
.getPreferenceService().find(key
);
1047 if (preference
== null){
1050 // setBooleanValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY, preference.isAllowOverride());
1052 int index
= StringUtils
.lastIndexOf(preference
.getValue(), ".");
1053 UUID uuid
= UUID
.fromString(preference
.getValue().substring(index
+1, preference
.getValue().length()));
1054 NomenclaturalCode preferredCode
= NomenclaturalCode
.getByUuid(uuid
);
1056 setStringValue(PreferencePredicate
.NomenclaturalCode
.getKey(),
1057 getPreferenceKey(preferredCode
));
1061 public static void checkDefaultLanguage(){
1062 if(PreferencesUtil
.getPreferredDefaultLangugae() == null){
1063 Shell shell
= AbstractUtility
.getShell();
1064 int open
= new DefaultLanguageDialog(shell
).open();
1065 if(open
== Window
.OK
){
1066 PlatformUI
.getWorkbench().restart();
1069 //TODO:In case of a reinstall, the config.ini will be overwritten
1070 // here you create config.ini with the stored key from preferences
1074 public static String
getMapServiceAccessPoint() {
1075 return getStringValue(PreferencePredicate
.EditMapServiceAccessPoint
.getKey());
1078 public static boolean shouldConnectAtStartUp() {
1079 //FIXME : force SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
1080 //return getBooleanValue(SHOULD_CONNECT_AT_STARTUP);
1084 public static TermTree
getDefaultFeatureTreeForTextualDescription() {
1085 String uuidString
= getStringValue(
1086 FEATURE_TREE_DEFAULT_TEXT
);
1087 if (StringUtils
.isBlank(uuidString
)) {
1090 TermTree tree
= CdmStore
.getService(
1091 ITermTreeService
.class).load(UUID
.fromString(uuidString
));
1093 if (tree
== null || tree
.getId() == 0) {
1099 public static TermTree
getDefaultFeatureTreeForStructuredDescription() {
1100 String uuidString
= getStringValue(
1101 FEATURE_TREE_DEFAULT_STRUCTURE
);
1102 return StringUtils
.isBlank(uuidString
) ?
null : CdmStore
.getService(
1103 ITermTreeService
.class).load(UUID
.fromString(uuidString
));
1106 public static void setSortRanksHierarchichally(boolean selection
) {
1107 setBooleanValue(PreferencePredicate
.SortRanksHierarchichally
.getKey(), selection
);
1110 public static boolean getSortRanksHierarchichally() {
1111 return getBooleanValue(PreferencePredicate
.SortRanksHierarchichally
.getKey());
1114 public static boolean isMultilanguageTextEditingCapability() {
1115 return getBooleanValue(
1116 PreferencePredicate
.MultiLanguageTextEditing
.getKey());
1119 public static Language
getGlobalLanguage() {
1122 String languageUuidString
= getStringValue(
1123 GLOBAL_LANGUAGE_UUID
);
1125 if(!CdmStore
.isActive()) {
1126 MessagingUtils
.noDataSourceWarningDialog(languageUuidString
);
1130 if (CdmUtils
.isBlank(languageUuidString
)) {
1131 return Language
.getDefaultLanguage();
1134 UUID languageUuid
= UUID
.fromString(languageUuidString
);
1135 return (Language
) CdmStore
.getService(ITermService
.class).load(
1139 public static void setGlobalLanguage(Language language
) {
1140 if(language
!= null) {
1141 setStringValue(GLOBAL_LANGUAGE_UUID
,language
.getUuid().toString());
1142 CdmStore
.setDefaultLanguage(language
);
1147 public static Map
<MarkerType
, Boolean
> getEditMarkerTypePreferences() {
1148 List
<MarkerType
> markerTypes
= CdmStore
.getTermManager()
1149 .getPreferredTerms(MarkerType
.class);
1151 Map
<MarkerType
, Boolean
> result
= new HashMap
<MarkerType
, Boolean
>();
1153 for (MarkerType markerType
: markerTypes
) {
1154 String name
= getMarkerTypeEditingPreferenceKey(markerType
);
1155 Boolean value
= getBooleanValue(name
);
1157 result
.put(markerType
, value
);
1163 public static void setEditMarkerTypePreferences(
1164 Map
<MarkerType
, Boolean
> markerTypeEditingMap
) {
1165 for (MarkerType markerType
: markerTypeEditingMap
.keySet()) {
1166 String name
= getMarkerTypeEditingPreferenceKey(markerType
);
1167 setBooleanValue(name
,
1168 markerTypeEditingMap
.get(markerType
));
1173 private static String
getMarkerTypeEditingPreferenceKey(
1174 MarkerType markerType
) {
1175 markerType
= HibernateProxyHelper
.deproxy(markerType
);
1176 return markerType
.getClass().getName() + EDIT_MARKER_TYPE_PREFIX
;
1179 public static void setEditMarkerTypePreference(MarkerType markerType
,
1182 getMarkerTypeEditingPreferenceKey(markerType
), edit
);
1185 public static DerivedUnitFacadeConfigurator
getDerivedUnitConfigurator() {
1186 DerivedUnitFacadeConfigurator configurator
= DerivedUnitFacadeConfigurator
1188 configurator
.setMoveDerivedUnitMediaToGallery(true);
1189 configurator
.setMoveFieldObjectMediaToGallery(true);
1190 return configurator
;
1194 * This method will write language properties to the config.ini located in the configuration folder
1195 * of the Taxonomic Ediitor. <b>This method is only used to set the default language for Taxonomic Editor.</b>
1197 * @param setLanguage 0 is for german and 1 for english.
1198 * @throws IOException
1200 public void writePropertyToConfigFile(int setLanguage
) throws IOException
{
1201 File file
= org
.eclipse
.core
.runtime
.preferences
.ConfigurationScope
.INSTANCE
.getLocation().toFile();
1202 //give warning to user if the directory has no write access
1204 throw new IOException();
1206 Properties properties
= load(file
.getAbsolutePath()+"/config.ini");
1207 switch(setLanguage
){
1209 properties
.setProperty("osgi.nl", "de");
1210 setStringValue(IPreferenceKeys
.DEFAULT_LANGUAGE_EDITOR
, "de");
1213 properties
.setProperty("osgi.nl", "en");
1214 setStringValue(IPreferenceKeys
.DEFAULT_LANGUAGE_EDITOR
, "en");
1219 save(file
+"/config.ini", properties
);
1223 * This method loads a property from a given file and returns it.
1227 * @throws IOException
1229 private Properties
load(String filename
) throws IOException
{
1230 FileInputStream in
= new FileInputStream(filename
);
1231 Properties prop
= new Properties();
1238 * This method saves a property to the specified file.
1242 * @throws IOException
1244 private void save(String filename
, Properties properties
) throws IOException
{
1245 FileOutputStream fos
= new FileOutputStream(filename
);
1246 properties
.store(fos
, "");
1251 * Saves a list of P2 Metadata Repositories as string with specified delimiters
1255 public static void setP2Repositories(List
<MetadataRepositoryElement
> p2Repos
) {
1256 StringBuilder sb
= new StringBuilder();
1257 for(MetadataRepositoryElement p2Repo
: p2Repos
) {
1258 sb
.append(P2_REPOSITORIES_DELIM
);
1259 if(p2Repo
.getName() == null || p2Repo
.getName().isEmpty()) {
1262 sb
.append(p2Repo
.getName());
1264 sb
.append(P2_REPOSITORY_FIELDS_DELIM
);
1265 sb
.append(p2Repo
.getLocation().toString());
1266 sb
.append(P2_REPOSITORY_FIELDS_DELIM
);
1267 sb
.append(String
.valueOf(p2Repo
.isEnabled()));
1269 getPreferenceStore().setValue(P2_REPOSITORY_LIST
, sb
.toString());
1274 * Retrieves a list of previously saved P2 repositories
1278 public static List
<MetadataRepositoryElement
> getP2Repositories() {
1279 List
<MetadataRepositoryElement
> p2Repos
= new ArrayList
<MetadataRepositoryElement
>();
1280 String p2ReposPref
= getStringValue(P2_REPOSITORY_LIST
);
1281 if(p2ReposPref
!= null && !p2ReposPref
.isEmpty()) {
1282 StringTokenizer p2ReposPrefST
= new StringTokenizer(p2ReposPref
,P2_REPOSITORIES_DELIM
);
1284 while(p2ReposPrefST
.hasMoreTokens()) {
1285 String p2RepoStr
= p2ReposPrefST
.nextToken();
1286 StringTokenizer p2ReposStrST
= new StringTokenizer(p2RepoStr
,P2_REPOSITORY_FIELDS_DELIM
);
1287 if(p2ReposStrST
.countTokens()==3) {
1288 String nickname
= p2ReposStrST
.nextToken();
1291 uri
= new URI(p2ReposStrST
.nextToken());
1292 } catch (URISyntaxException e
) {
1295 boolean enabled
= Boolean
.parseBoolean(p2ReposStrST
.nextToken());
1296 MetadataRepositoryElement mre
= new MetadataRepositoryElement(null, uri
, true);
1297 mre
.setNickname(nickname
);
1298 mre
.setEnabled(enabled
);
1308 * enables/disables nested composite. <br>
1310 * @param ctrl - Composite to be en-/disabeld
1311 * @param enabled - boolean
1313 public static void recursiveSetEnabled(Control ctrl
, boolean enabled
) {
1314 if (ctrl
instanceof Composite
) {
1315 Composite comp
= (Composite
) ctrl
;
1316 for (Control c
: comp
.getChildren()) {
1317 recursiveSetEnabled(c
, enabled
);
1320 ctrl
.setEnabled(enabled
);
1324 public static void setSortNodes(NavigatorOrderEnum nodesOrder
) {
1325 if (nodesOrder
== null){
1326 setStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey(), null);
1328 setStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey(), nodesOrder
.key
);
1333 public static NavigatorOrderEnum
getSortNodes() {
1334 return NavigatorOrderEnum
.valueOf(getStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey()));
1338 public static boolean isNodesSortedNaturally() {
1339 NavigatorOrderEnum value
= NavigatorOrderEnum
.valueOf(getStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey()));
1340 return value
.equals(NavigatorOrderEnum
.NaturalOrder
);
1344 public static boolean isNodesSortedByName() {
1345 NavigatorOrderEnum value
= NavigatorOrderEnum
.valueOf(getStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey()));
1346 return value
.equals(NavigatorOrderEnum
.AlphabeticalOrder
);
1350 public static boolean isNodesSortedByNameAndRank() {
1351 NavigatorOrderEnum value
= NavigatorOrderEnum
.valueOf(getStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey()));
1352 return value
.equals(NavigatorOrderEnum
.RankAndNameOrder
);
1356 public static boolean isStoreNavigatorState() {
1357 return getBooleanValue(RESTORE_NAVIGATOR_STATE
);
1361 public static void setStoreNavigatorState(boolean selection
) {
1362 setBooleanValue(RESTORE_NAVIGATOR_STATE
, selection
);
1366 public static boolean isShowUpWidgetIsDisposedMessages() {
1367 return getBooleanValue(IS_SHOW_UP_WIDGET_IS_DISPOSED
);
1369 public static void setShowUpWidgetIsDisposedMessages(boolean selection
) {
1370 setBooleanValue(IS_SHOW_UP_WIDGET_IS_DISPOSED
, selection
);
1373 public static boolean isShowIdInVocabularyInChecklistEditor() {
1374 String area_display
= getStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey());
1375 if (area_display
.equals(TermDisplayEnum
.IdInVocabulary
.getKey())) {
1381 public static boolean isShowSymbol1InChecklistEditor() {
1382 String area_display
= getStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey());
1383 if (area_display
.equals(TermDisplayEnum
.Symbol1
.getKey())) {
1389 public static boolean isShowSymbol2InChecklistEditor() {
1390 String area_display
= getStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey());
1391 if (area_display
.equals(TermDisplayEnum
.Symbol2
.getKey())) {
1397 public static void setAreaDisplayInChecklistEditor(String selection
) {
1398 setStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey(), selection
);
1401 public static void setOwnDescriptionForChecklistEditor(boolean selection
) {
1402 setBooleanValue(PreferencePredicate
.OwnDescriptionForDistributionEditor
.getKey(), selection
);
1405 public static boolean isOwnDescriptionForChecklistEditor() {
1406 return getBooleanValue(PreferencePredicate
.OwnDescriptionForDistributionEditor
.getKey());
1409 public static TermDisplayEnum
displayAreaInChecklistEditor() {
1410 TermDisplayEnum result
;
1412 result
= TermDisplayEnum
.byKey(getStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey()));
1413 }catch (IllegalArgumentException e
){
1414 result
= ((TermDisplayEnum
) PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getDefaultValue());
1419 public static TermDisplayEnum
displayStatusInChecklistEditor() {
1420 TermDisplayEnum result
;
1422 result
= TermDisplayEnum
.byKey(getStringValue(PreferencePredicate
.DisplayOfStatus
.getKey()));
1423 }catch (IllegalArgumentException e
){
1424 result
= ((TermDisplayEnum
) PreferencePredicate
.DisplayOfStatus
.getDefaultValue());
1428 public static void setDisplayStatusInChecklistEditor(String selection
) {
1429 setStringValue(PreferencePredicate
.DisplayOfStatus
.getKey(), selection
);
1433 public static boolean isShowRankInChecklistEditor() {
1434 return getBooleanValue(PreferencePredicate
.ShowRankInDistributionEditor
.getKey());
1436 public static void setShowRankInChecklistEditor(boolean selection
) {
1437 setBooleanValue(PreferencePredicate
.ShowRankInDistributionEditor
.getKey(), selection
);
1440 public static NameDetailsConfigurator
getPreferredNameDetailsConfiguration( boolean local
) {
1441 NameDetailsConfigurator config
= new NameDetailsConfigurator();
1442 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1443 CdmPreference preference
= null;
1446 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.NameDetailsView
);
1447 preference
= getPreferenceFromDB(PreferencePredicate
.NameDetailsView
);
1448 if (preference
== null){
1452 // setBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS, preference.isAllowOverride());
1453 value
= preference
.getValue();
1454 config
.setAllowOverride(preference
.isAllowOverride());
1455 //the preference value is build like this:
1456 //<section1>:true;<section2>:false....
1458 value
= getStringValue(PreferencePredicate
.NameDetailsView
.getKey(), local
);
1461 fillNameDetailsConfigurator(config
, value
);
1470 public static void fillNameDetailsConfigurator(NameDetailsConfigurator config
, String value
) {
1471 String
[] sections
= value
.split(";");
1472 Map
<String
, Boolean
> sectionMap
= new HashMap
<>();
1473 String
[] sectionValues
;
1474 for (String sectionValue
: sections
){
1475 if (sectionValue
.contains(":")){
1476 sectionValues
= sectionValue
.split(":");
1477 sectionMap
.put(sectionValues
[0], Boolean
.valueOf(sectionValues
[1]));
1480 for (Field field
: config
.getClass().getDeclaredFields()){
1482 config
.getClass().getDeclaredField(field
.getName()).set(config
, getValue(sectionMap
, field
.getName()));
1483 } catch (IllegalArgumentException
| IllegalAccessException
| NoSuchFieldException
1484 | SecurityException e
) {
1485 logger
.debug(e
.getMessage());
1490 public static NameDetailsConfigurator
getPreferredNameDetailsConfiguration() {
1491 NameDetailsConfigurator config
= new NameDetailsConfigurator();
1495 value
= getStringValue(PreferencePredicate
.NameDetailsView
.getKey(), false);
1497 fillNameDetailsConfigurator(config
, value
);
1504 public static void setPreferredNameDetailsConfiguration(NameDetailsConfigurator config
, boolean local
) {
1505 CdmPreference preference
= null;
1508 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.NameDetailsView
, config
.toString());
1510 setPreferenceToDB(preference
);
1513 setStringValue(PreferencePredicate
.NameDetailsView
.getKey(), config
.toString());
1519 private static Boolean
getValue(Map
<String
, Boolean
> sectionMap
, String string
) {
1520 if (sectionMap
.containsKey(string
)){
1521 return sectionMap
.get(string
);
1528 public static Abcd206ImportConfigurator
getDBAbcdImportConfigurationPreference() {
1530 Abcd206ImportConfigurator config
= Abcd206ImportConfigurator
.NewInstance(null,null);
1531 ICdmRepository controller
;
1532 controller
= CdmStore
.getCurrentApplicationConfiguration();
1533 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AbcdImportConfig
);
1534 CdmPreference preference
= null;
1535 if (controller
== null){
1538 preference
= controller
.getPreferenceService().find(key
);
1539 if (preference
== null){
1542 String configString
= preference
.getValue();
1543 extractAbcdConfiguratorFromPreferenceString(config
, configString
);
1548 public static void extractAbcdConfiguratorFromPreferenceString(Abcd206ImportConfigurator config
,
1549 String configString
) {
1550 if(configString
!= null){
1551 String
[] configArray
= configString
.split(";");
1553 for (String configItem
: configArray
){
1554 String
[] keyValue
= configItem
.split(":");
1555 String keyString
= keyValue
[0];
1556 String valueString
= null;
1557 if (keyValue
.length
>1){
1558 valueString
= keyValue
[1];
1559 if (keyValue
.length
>2){
1561 for (int index
= 2; index
< keyValue
.length
; index
++){
1562 valueString
+= ":"+ keyValue
[index
];
1566 if (keyString
.equals("ignoreImportOfExistingSpecimen")){
1567 config
.setIgnoreImportOfExistingSpecimen(Boolean
.valueOf(valueString
));
1568 }else if (keyString
.equals("addIndividualsAssociationsSuchAsSpecimenAndObservations")){
1569 config
.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(Boolean
.valueOf(valueString
));
1570 }else if (keyString
.equals("reuseExistingTaxaWhenPossible")){
1571 config
.setReuseExistingTaxaWhenPossible(Boolean
.valueOf(valueString
));
1572 }else if (keyString
.equals("ignoreAuthorship")){
1573 config
.setIgnoreAuthorship(Boolean
.valueOf(valueString
));
1574 }else if (keyString
.equals("addMediaAsMediaSpecimen")){
1575 config
.setAddMediaAsMediaSpecimen(Boolean
.valueOf(valueString
));
1576 }else if (keyString
.equals("reuseExistingMetaData")){
1577 config
.setReuseExistingMetaData(Boolean
.valueOf(valueString
));
1578 }else if (keyString
.equals("reuseExistingDescriptiveGroups")){
1579 config
.setReuseExistingDescriptiveGroups(Boolean
.valueOf(valueString
));
1580 }else if (keyString
.equals("allowReuseOtherClassifications")){
1581 config
.setAllowReuseOtherClassifications(Boolean
.valueOf(valueString
));
1582 }else if (keyString
.equals("deduplicateReferences")){
1583 config
.setDeduplicateReferences(Boolean
.valueOf(valueString
));
1584 }else if (keyString
.equals("deduplicateClassifications")){
1585 config
.setDeduplicateClassifications(Boolean
.valueOf(valueString
));
1586 }else if (keyString
.equals("moveNewTaxaToDefaultClassification")){
1587 config
.setMoveNewTaxaToDefaultClassification(Boolean
.valueOf(valueString
));
1588 }else if (keyString
.equals("mapUnitIdToCatalogNumber")){
1589 config
.setMapUnitIdToCatalogNumber(Boolean
.valueOf(valueString
));
1590 }else if (keyString
.equals("mapUnitIdToAccessionNumber")){
1591 config
.setMapUnitIdToAccessionNumber(Boolean
.valueOf(valueString
));
1592 }else if (keyString
.equals("mapUnitIdToBarcode")){
1593 config
.setMapUnitIdToBarcode(Boolean
.valueOf(valueString
));
1594 }else if (keyString
.equals("overwriteExistingSpecimens")){
1595 config
.setOverwriteExistingSpecimens(Boolean
.valueOf(valueString
));
1596 }else if (keyString
.equals("nomenclaturalCode")){
1597 config
.setNomenclaturalCode(NomenclaturalCode
.fromString(valueString
));
1598 }else if (keyString
.equals("removeCountryFromLocalityText")){
1599 config
.setRemoveCountryFromLocalityText(Boolean
.valueOf(valueString
));
1600 }else if (keyString
.equals("getSiblings")){
1601 config
.setGetSiblings(Boolean
.valueOf(valueString
));
1602 }else if (keyString
.equals("dnaSource")){
1604 config
.setDnaSoure(URI
.create(valueString
));
1605 }catch(Exception e
){
1606 config
.setDnaSoure(null);
1609 logger
.debug("This key of the abcd configurator needs to be added to the transformer: " + keyString
);
1616 public static Abcd206ImportConfigurator
getLocalAbcdImportConfigurator(){
1617 return getLocalAbcdImportConfigurator(true);
1619 public static Abcd206ImportConfigurator
getLocalAbcdImportConfigurator(boolean skipCheckOverride
){
1620 Abcd206ImportConfigurator config
= Abcd206ImportConfigurator
.NewInstance(null,null);
1621 CdmPreference pref
= CdmPreferenceCache
.instance().get(PreferencePredicate
.AbcdImportConfig
.getKey());
1622 if (pref
== null || pref
.isAllowOverride()){
1623 String configString
= PreferencesUtil
.getStringValue(PreferencePredicate
.AbcdImportConfig
.getKey());
1624 if (StringUtils
.isBlank(configString
)){
1625 configString
= getStringValue(PreferencePredicate
.AbcdImportConfig
.getKey(), skipCheckOverride
);
1626 extractAbcdConfiguratorFromPreferenceString(config
, configString
);
1627 if (config
.getNomenclaturalCode() == null){
1628 config
.setNomenclaturalCode(getPreferredNomenclaturalCode());
1631 config
= Abcd206ImportConfigurator
.NewInstance(null, null);
1632 PreferencesUtil
.extractAbcdConfiguratorFromPreferenceString(config
, configString
);
1635 extractAbcdConfiguratorFromPreferenceString(config
, pref
.getValue());
1642 public static Abcd206ImportConfigurator
getLastUsedAbcdImportConfigurator(){
1643 Abcd206ImportConfigurator config
= Abcd206ImportConfigurator
.NewInstance(null,null);
1645 String configString
= PreferencesUtil
.getStringValue(IPreferenceKeys
.LAST_USED_ABCD_CONFIG
, true);
1646 if (configString
!= null){
1647 extractAbcdConfiguratorFromPreferenceString(config
, configString
);
1648 if (config
!= null){
1649 if (config
.getNomenclaturalCode() == null){
1650 config
.setNomenclaturalCode(getPreferredNomenclaturalCode());
1654 config
= PreferencesUtil
.getLocalAbcdImportConfigurator(false);
1661 public static void updateAbcdImportConfigurationPreference() {
1662 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1664 CdmPreference pref
= cache
.findBestMatching(CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AbcdImportConfig
));
1666 if (!getBooleanValue(prefOverrideKey(PreferencePredicate
.AbcdImportConfig
.getKey())) || !pref
.isAllowOverride()){
1667 resetToDBPreferenceAbcdCOnfigurator();
1672 public static void resetToDBPreferenceAbcdCOnfigurator(){
1673 Abcd206ImportConfigurator config
= getDBAbcdImportConfigurationPreference();
1674 setStringValue(PreferencePredicate
.AbcdImportConfig
.getKey(), config
.toString());
1678 public static boolean isSortTaxaByRankAndName() {
1680 return getBooleanValue(PreferencePredicate
.SortTaxaByRankAndName
.getKey());
1683 public static TermOrder
getSortNamedAreasInDistributionEditor() {
1686 result
= TermOrder
.valueOf(getStringValue(PreferencePredicate
.AreasSortedInDistributionEditor
.getKey()));
1687 }catch (IllegalArgumentException e
){
1688 result
= (TermOrder
)PreferencePredicate
.AreasSortedInDistributionEditor
.getDefaultValue();
1693 public static void setSortNamedAreasInDistributionEditor(String isSortByVocabularyOrder
) {
1694 setStringValue(PreferencePredicate
.AreasSortedInDistributionEditor
.getKey(), isSortByVocabularyOrder
);
1698 public static void setLastSelectedReference(
1699 List
<String
> lastSelectedReferences
) {
1701 setStringValue(PreferencesUtil
.LAST_SELECTED_REFERENCES
, lastSelectedReferences
.toString());
1704 public static List
<String
> getLastSelectedReferences() {
1706 //IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1707 String lastSelected
= getStringValue(PreferencesUtil
.LAST_SELECTED_REFERENCES
, true);
1708 List
<String
> result
= new ArrayList
<>();
1709 if (!StringUtils
.isBlank(lastSelected
)){
1710 Collections
.addAll(result
, lastSelected
.substring(1,lastSelected
.length()-1).split(", "));
1715 public static void setPreferredNamedAreasForDistributionEditor(
1716 String saveCheckedElements
, String saveGrayedElements
, boolean local
) {
1718 setStringValue(PreferencePredicate
.AvailableDistributionAreaTerms
.getKey(), saveCheckedElements
);
1722 CdmPreference preference
= null;
1724 if (saveCheckedElements
== null){
1725 preference
= getPreferenceFromDB(PreferencePredicate
.AvailableDistributionAreaTerms
);
1727 if (preference
== null){
1730 setStringValue(PreferencePredicate
.AvailableDistributionAreaTerms
.getKey(),
1731 saveCheckedElements
);
1732 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionAreaTerms
, saveCheckedElements
);
1733 setPreferenceToDB(preference
);
1737 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionAreaTerms
, saveCheckedElements
);
1738 setPreferenceToDB(preference
);
1739 setStringValue(PreferencePredicate
.AvailableDistributionAreaTerms
.getKey(),
1740 saveCheckedElements
);
1747 public static void setPreferredVocabulariesForDistributionEditor(String saveCheckedElements
,
1748 boolean local
, boolean isOverride
) {
1750 setStringValue(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey(), saveCheckedElements
);
1751 setBooleanValue(prefOverrideKey(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey()), isOverride
);
1754 ICdmRepository controller
;
1755 CdmPreference preference
= null;
1757 if (saveCheckedElements
== null){
1758 preference
= getPreferenceFromDB(PreferencePredicate
.AvailableDistributionAreaVocabularies
);
1760 if (preference
== null){
1763 setStringValue(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey(),
1764 saveCheckedElements
);
1765 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionAreaVocabularies
, saveCheckedElements
);
1766 preference
.setAllowOverride(isOverride
);
1767 setPreferenceToDB(preference
);
1770 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionAreaVocabularies
, saveCheckedElements
);
1771 preference
.setAllowOverride(isOverride
);
1772 setPreferenceToDB(preference
);
1773 setStringValue(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey(),
1774 saveCheckedElements
);
1780 public static String
getPreferredVocabulariesForDistributionEditor(boolean local
) {
1783 String pref
= getStringValue(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey(), local
);
1787 CdmPreference preference
= null;
1788 preference
= getPreferenceFromDB(PreferencePredicate
.AvailableDistributionAreaVocabularies
);
1789 if (preference
== null){
1792 return preference
.getValue();
1798 public static List
<UUID
> createUUIDListFromStringPref(String prefKey
, boolean local
) {
1799 if (prefKey
== null){
1802 String prefValue
= PreferencesUtil
.getStringValue(prefKey
, local
);
1803 if (prefValue
== null){
1806 List
<UUID
> uuidList
= createUuidList(prefValue
);
1810 public static List
<UUID
> createUuidList(String prefValue
) {
1811 String
[] stringArray
= prefValue
.split(";");
1812 List
<UUID
> uuidList
= new ArrayList();
1813 for (String uuid
: stringArray
){
1814 if (!StringUtils
.isBlank(uuid
)){
1815 uuidList
.add(UUID
.fromString(uuid
));
1821 public static boolean getFilterCommonNameReferences(){
1822 Boolean result
= getBooleanValue(PreferencesUtil
.FILTER_COMMON_NAME_REFERENCES
);
1823 if (result
== null){
1829 public static void updateDBPreferences() {
1832 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1833 cache
.getAllTaxEditorDBPreferences();
1837 //updateAbcdImportConfigurationPreference();
1840 NameDetailsConfigurator config
= getPreferredNameDetailsConfiguration(false);
1841 // if (config != null ){
1842 // if (!getBooleanValue(OVERRIDE_NAME_DETAILS) || !getBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS)){
1843 // setPreferredNameDetailsConfiguration(config, false);
1849 public static void setPreferencesToDB(List
<CdmPreference
> preferences
) {
1851 ICdmRepository controller
;
1853 if(CdmStore
.isActive()){
1854 controller
= CdmStore
.getCurrentApplicationConfiguration();
1855 for (CdmPreference preference
: preferences
){
1856 if (preference
.getValue() == null && preference
.isAllowOverride()){
1857 controller
.getPreferenceService().remove(preference
.getKey());
1860 controller
.getPreferenceService().set(preference
);
1865 CdmPreferenceCache
.instance().getAllTaxEditorDBPreferences();
1868 /*}catch(Exception e){
1869 e.printStackTrace();
1874 * Returns whether the named preference is known.
1875 * @param prefKey the key of the preference
1876 * @return <code>true</code> if the preference is known, <code>false</code> otherwise
1878 public static boolean contains(String prefKey
){
1879 return getPreferenceStore().contains(prefKey(prefKey
));
1885 public static TermTree
getPreferredFeatureTreeForNameDescription(boolean createNew
) {
1886 if(preferredNameFeatureTree
!= null && !createNew
){
1887 return preferredNameFeatureTree
;
1889 createPreferredFeatureTreeForNameDescription();
1890 return preferredNameFeatureTree
;
1894 public static void createPreferredFeatureTreeForNameDescription() {
1896 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1897 CdmPreference pref
= cache
.get(PreferencePredicate
.NameFeatures
.getKey());
1898 List
<Feature
> terms
= new ArrayList();
1899 boolean override
= PreferencesUtil
.getBooleanValue(PreferencesUtil
.createOverridePreferenceString(PreferencePredicate
.NameFeatures
.getKey()));
1901 List
<UUID
> uuids
= PreferencesUtil
.createUUIDListFromStringPref(PreferencePredicate
.NameFeatures
.getKey(), false);
1902 if (uuids
!= null && !uuids
.isEmpty()){
1903 terms
= CdmStore
.getTermManager().getTerms(uuids
, Feature
.class);
1909 if (terms
.isEmpty()){
1910 terms
.addAll(TermStore
.getTerms(CdmStore
.getService(IVocabularyService
.class).load(VocabularyEnum
.NameFeature
.getUuid()), null));
1913 terms
.remove(Feature
.PROTOLOGUE());
1914 if (terms
.isEmpty()){
1915 preferredNameFeatureTree
= TermEditorInput
.getDefaultNameFeatureTree();
1917 preferredNameFeatureTree
= TermTree
.NewInstance(terms
);
1924 * @param prefsToDelete
1926 public static void removeFromDB(List
<CdmPreference
> prefsToDelete
) {
1927 ICdmRepository controller
;
1929 if(CdmStore
.isActive()){
1930 controller
= CdmStore
.getCurrentApplicationConfiguration();
1931 for (CdmPreference preference
: prefsToDelete
){
1932 controller
.getPreferenceService().remove(preference
.getKey());
1934 CdmPreferenceCache
.instance().getAllTaxEditorDBPreferences();
1940 public static void removeFromDB(CdmPreference prefToDelete
) {
1941 ICdmRepository controller
;
1943 if(CdmStore
.isActive()){
1944 controller
= CdmStore
.getCurrentApplicationConfiguration();
1945 controller
.getPreferenceService().remove(prefToDelete
.getKey());
1947 CdmPreferenceCache
.instance().getAllTaxEditorDBPreferences();
1954 public static TermTree
<?
> getPreferredFeatureTreeForTaxonDescription(boolean createNew
) {
1955 if(preferredTaxonFeatureTree
!= null && !createNew
){
1956 return preferredTaxonFeatureTree
;
1958 createPreferredFeatureTreeForTaxonDescription();
1959 return preferredTaxonFeatureTree
;
1963 public static void createPreferredFeatureTreeForTaxonDescription() {
1965 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1966 CdmPreference pref
= cache
.get(PreferencePredicate
.TaxonFeatures
.getKey());
1967 List
<Feature
> terms
= null;
1968 boolean override
= PreferencesUtil
.getBooleanValue(PreferencesUtil
.createOverridePreferenceString(PreferencePredicate
.TaxonFeatures
.getKey()));
1969 List
<UUID
> uuids
= PreferencesUtil
.createUUIDListFromStringPref(PreferencePredicate
.TaxonFeatures
.getKey(), false);
1970 if (uuids
!= null && !uuids
.isEmpty()){
1971 terms
= CdmStore
.getTermManager().getTerms(uuids
, Feature
.class);
1973 if (terms
== null || terms
.isEmpty()){
1974 terms
= CdmStore
.getTermManager().getPreferredTerms(TermType
.Feature
);
1975 TermVocabulary nameVocabulary
= CdmStore
.getService(IVocabularyService
.class).load(VocabularyEnum
.NameFeature
.getUuid());
1976 Set
<Feature
> nameFeature
= nameVocabulary
.getTerms();
1977 terms
.removeAll(nameFeature
);
1981 if (terms
.isEmpty()){
1982 preferredTaxonFeatureTree
= TermEditorInput
.getDefaultFeatureTree();
1984 preferredTaxonFeatureTree
= TermTree
.NewInstance(terms
);
1991 * @param lastAccessPoint
1993 public static void setLastSelectedBiocaseProvider(String lastAccessPoint
) {
1994 setStringValue(LAST_USED_BIOCASE_PROVIDER
, lastAccessPoint
);