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
.lang3
.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
.ICdmRemoteSource
;
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
);
163 } catch (BackingStoreException e
) {
164 // TODO Auto-generated catch block
170 private static String
createSubjectStringForChildNodes(String subject
, Preferences parent
) {
172 for (String childName
: parent
.childrenNames()){
173 subject
= childName
+SUBJECT_DELIM
+subject
;
174 Preferences child
= parent
.node(childName
);
175 createSubjectStringForChildNodes(subject
, child
);
177 } catch (BackingStoreException e
) {
178 // TODO Auto-generated catch block
185 private static String
prefKey(String name
) {
186 return name
+ "_"+ ((ICdmRemoteSource
)CdmStore
.getActiveCdmSource()).toString();
189 public static String
prefOverrideKey(String name
) {
190 return name
+ "_OVERRIDE_";
193 public static void setStringValue(String name
, String value
) {
195 getPreferenceStore().setValue(prefKey(name
), value
);
197 getPreferenceStore().setToDefault(prefKey(name
));
201 public static void setIntValue(String name
, int value
) {
202 getPreferenceStore().setValue(prefKey(name
), value
);
205 public static void setBooleanValue(String name
, boolean value
) {
206 getPreferenceStore().setValue(prefKey(name
), value
);
209 public static void setDoubleValue(String name
, double value
) {
210 getPreferenceStore().setValue(prefKey(name
), value
);
213 public static void setFloatValue(String name
, float value
) {
214 getPreferenceStore().setValue(prefKey(name
), value
);
217 public static void setLongValue(String name
, long value
) {
218 getPreferenceStore().setValue(prefKey(name
), value
);
221 public static String
getStringValue(String name
, boolean local
) {
223 CdmPreference pref
= getDBPreferenceValue(name
);
225 boolean override
= getOverrideForPreference(name
);
227 if (local
|| (pref
== null && override
)|| (pref
!= null && pref
.isAllowOverride() && override
)){
229 String dbSpecific
= prefKey(name
);
230 if (getPreferenceStore().contains(dbSpecific
)){
231 return getPreferenceStore().getString(dbSpecific
);
233 }else if (pref
!= null){
235 if (pref
.getValue() == null){
236 Object result
= PreferencePredicate
.getByKey(pref
.getPredicate()).getDefaultValue();
237 if (result
instanceof String
){
238 return (String
)result
;
240 return result
.toString();
243 return pref
.getValue();
245 //no override but default value
246 IPreferencePredicate
<?
> pred
= PreferencePredicate
.getByKey(name
);
248 if (pred
.getDefaultValue() instanceof String
){
249 return (String
)pred
.getDefaultValue();
250 }else if (pred
.getDefaultValue() != null){
251 return pred
.getDefaultValue().toString();
257 public static String
getStringValue(String name
){
258 return getStringValue(name
, false);
261 private static CdmPreference
getDBPreferenceValue(String name
) {
262 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
263 CdmPreference pref
= null;
264 pref
= cache
.get(name
);
269 public static int getIntValue(String name
, boolean local
) {
270 CdmPreference pref
= getDBPreferenceValue(name
);
271 String prefValue
= null;
273 prefValue
= pref
.getValue();
275 Integer result
= null;
277 result
= Integer
.parseInt(prefValue
);
278 }catch(NumberFormatException e
){
279 logger
.debug("Preference value of " + name
+ " is not an integer");
282 boolean override
= getOverrideForPreference(name
);
283 if (local
|| (pref
== null && override
) || (pref
!= null && pref
.isAllowOverride() && override
)){
284 String dbSpecific
= prefKey(name
);
285 if (getPreferenceStore().contains(dbSpecific
)){
286 result
= getPreferenceStore().getInt(dbSpecific
);
290 IPreferencePredicate
<?
> pred
= PreferencePredicate
.getByKey(name
);
292 if (pred
.getDefaultValue() instanceof Integer
){
293 result
= (Integer
)pred
.getDefaultValue();
294 }else if (pred
.getDefaultValue() != null){
296 result
= Integer
.valueOf(pred
.getDefaultValue().toString());
297 }catch(NumberFormatException e
){
298 logger
.debug("Preference value of " + name
+ " is not a number");
303 //if no default value available
311 public static boolean getBooleanValue(String name
) {
312 Boolean result
= getBooleanValue(name
, false);
320 public static Boolean
getBooleanValue(String name
, boolean local
) {
321 if (CdmStore
.isActive()){
322 CdmPreference pref
= getDBPreferenceValue(name
);
323 String overrideKey
= createPreferenceString(createOverridePreferenceString(name
));
324 boolean override
= getPreferenceStore().getBoolean(overrideKey
);
325 if (local
|| (pref
== null && override
)|| (pref
!= null && pref
.isAllowOverride() && override
)){
327 String dbSpecific
= prefKey(name
);
328 return getPreferenceStore().getBoolean(dbSpecific
);
330 }else if (pref
!= null){
331 //db preference is available and override == false
332 if (pref
.getValue() == null){
333 Object result
= PreferencePredicate
.getByKey(pref
.getPredicate()).getDefaultValue();
334 if (result
instanceof Boolean
){
335 return (Boolean
)result
;
337 return Boolean
.valueOf(result
.toString());
340 return Boolean
.valueOf(pref
.getValue());
342 //no override but default value
343 IPreferencePredicate
<?
> pred
= PreferencePredicate
.getByKey(name
);
345 if (pred
.getDefaultValue() instanceof Boolean
){
346 return (Boolean
)pred
.getDefaultValue();
347 }else if (pred
.getDefaultValue() != null){
348 return Boolean
.valueOf(pred
.getDefaultValue().toString());
353 // no connection to db, use local preference
354 return getPreferenceStore().getBoolean(name
);
358 public static float getFloatValue(String name
, boolean local
) {
359 CdmPreference pref
= getDBPreferenceValue(name
);
360 String prefValue
= null;
362 prefValue
= pref
.getValue();
366 if (prefValue
!= null){
367 result
= Float
.parseFloat(prefValue
);
369 }catch(NumberFormatException e
){
370 logger
.debug("Preference value of " + name
+ " is not a float");
373 boolean override
= getOverrideForPreference(name
);
375 if (local
|| pref
== null || (pref
.isAllowOverride() && override
)){
376 String dbSpecific
= prefKey(name
);
377 if (getPreferenceStore().contains(dbSpecific
)){
378 result
= getPreferenceStore().getFloat(dbSpecific
);
380 IPreferencePredicate
<?
> pred
= PreferencePredicate
.getByKey(name
);
382 if (pred
.getDefaultValue() instanceof Float
){
383 return (float)pred
.getDefaultValue();
384 }else if (pred
.getDefaultValue() != null){
385 return Float
.valueOf(pred
.getDefaultValue().toString());
394 public static CdmPreference
setPreferredNomenclaturalCode(
395 String preferenceValue
, boolean local
) {
397 setStringValue(PreferencePredicate
.NomenclaturalCode
.getKey(),
401 ICdmRepository controller
;
402 controller
= CdmStore
.getCurrentApplicationConfiguration();
403 if (controller
== null){
408 key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
);
409 }catch (Exception e
){
410 System
.out
.println(e
.getStackTrace());
412 CdmPreference preference
= null;
414 if (preferenceValue
== null){
415 preference
= controller
.getPreferenceService().find(key
);
416 if (preference
== null){
419 setStringValue(PreferencePredicate
.NomenclaturalCode
.getKey(),
420 preference
.getValue());
425 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
, preferenceValue
);
426 controller
.getPreferenceService().set(preference
);
433 public static void setPreferredNomenclaturalCode(
434 CdmPreference preference
) {
436 ICdmRepository controller
;
437 controller
= CdmStore
.getCurrentApplicationConfiguration();
438 if (controller
== null){
442 if (preference
== null){
445 key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
);
446 }catch (Exception e
){
447 System
.out
.println(e
.getStackTrace());
449 controller
.getPreferenceService().remove(key
);
451 controller
.getPreferenceService().set(preference
);
455 public static NomenclaturalCode
getPreferredNomenclaturalCode() {
457 String nomString
= getStringValue(PreferencePredicate
.NomenclaturalCode
.getKey());
458 return getPreferredNomenclaturalCode(nomString
);
461 public static NomenclaturalCode
getPreferredNomenclaturalCode(String preferenceKeyNomenclaturalCode
) {
463 for (NomenclaturalCode code
: NomenclaturalCodeHelper
.getAllCodes()) {
464 if (getPreferenceKey(code
).equals(preferenceKeyNomenclaturalCode
) || code
.getKey().equals(preferenceKeyNomenclaturalCode
)) {
471 public static boolean isShowTaxonAssociations(){
472 boolean result
= getBooleanValue(PreferencePredicate
.ShowTaxonAssociations
.getKey());
476 public static boolean isShowLifeForm(){
477 boolean result
= getBooleanValue(PreferencePredicate
.ShowLifeForm
.getKey());
481 public static boolean isDeterminationOnlyForFieldUnits(){
482 boolean result
= getBooleanValue(PreferencePredicate
.DeterminationOnlyForFieldUnits
.getKey());
486 public static boolean isCollectingAreaInGeneralSection(){
487 boolean result
= getBooleanValue(PreferencePredicate
.ShowCollectingAreasInGeneralSection
.getKey());
491 public static CdmPreference
getPreferenceFromDB(IPreferencePredicate
<?
> predicate
){
492 ICdmRepository controller
;
493 CdmPreference pref
= null;
496 if(CdmStore
.isActive()){
497 controller
= CdmStore
.getCurrentApplicationConfiguration();
498 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), predicate
);
499 pref
= controller
.getPreferenceService().find(key
);
508 public static List
<CdmPreference
> getPreferencesFromDB(IPreferencePredicate
<?
> predicate
){
509 ICdmRepository controller
;
510 List
<CdmPreference
> prefs
= null;
513 if(CdmStore
.isActive()){
514 controller
= CdmStore
.getCurrentApplicationConfiguration();
515 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), predicate
);
516 prefs
= controller
.getPreferenceService().list(predicate
);
526 public static void setPreferencesToDB(CdmPreference preference
, boolean setDefault
){
527 ICdmRepository controller
;
529 if(CdmStore
.isActive()){
530 controller
= CdmStore
.getCurrentApplicationConfiguration();
533 controller
.getPreferenceService().remove(preference
.getKey());
535 controller
.getPreferenceService().set(preference
);
543 public static CdmPreference
getPreferenceFromDB(PrefKey key
){
544 ICdmRepository controller
;
545 CdmPreference pref
= null;
548 if(CdmStore
.isActive()){
549 controller
= CdmStore
.getCurrentApplicationConfiguration();
550 pref
= controller
.getPreferenceService().find(key
);
560 public static void setPreferenceToDB(CdmPreference preference
){
561 ICdmRepository controller
;
563 if(CdmStore
.isActive()){
564 controller
= CdmStore
.getCurrentApplicationConfiguration();
565 if (preference
.getValue() == null && preference
.isAllowOverride()){
566 controller
.getPreferenceService().remove(preference
.getKey());
568 controller
.getPreferenceService().set(preference
);
570 CdmPreferenceCache
.instance().put(preference
);
577 public static String
getPreferredDefaultLangugae(){
578 String preferredLanguage
= getStringValue(DEFAULT_LANGUAGE_EDITOR
, true);
579 if(StringUtils
.isNotEmpty(preferredLanguage
) && StringUtils
.isNotBlank(preferredLanguage
)){
580 return preferredLanguage
;
585 public static boolean isShowMediaPreview(){
586 boolean isShowMediaPreview
= getBooleanValue(SHOW_MEDIA_PREVIEW
, true);
587 return isShowMediaPreview
;
591 * Get the match strategy for the given class that was stored in preferences
592 * or the default strategy if it was not stored in preferences
595 * a {@link java.lang.Class} object.
596 * @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
598 public static IMatchStrategy
getMatchStrategy(Class
<?
> clazz
) {
599 String className
= clazz
.getName();
600 if (getBooleanValue(MATCH_STRATEGY_PREFIX
+ className
, true)) {
601 IMatchStrategy matchStrategy
= getDefaultMatchStrategy(clazz
);
603 //TODO CacheMatchers (or multiple field matchers in future) are missing here
604 for (FieldMatcher fieldMatcher
: matchStrategy
.getMatching().getFieldMatchers(false)) {
605 String fieldName
= fieldMatcher
.getPropertyName();
606 String matchModeName
= getStringValue(
607 getMatchStrategyFieldName(className
, fieldName
), true);
608 MatchMode matchMode
= MatchMode
.valueOf(matchModeName
);
610 matchStrategy
.setMatchMode(fieldName
, matchMode
);
611 } catch (MatchException e
) {
612 MessagingUtils
.error(PreferencesUtil
.class, e
);
613 throw new RuntimeException(e
);
617 return matchStrategy
;
619 return getDefaultMatchStrategy(clazz
);
623 * Stores a matchStrategy into the preference store.
625 * @param matchStrategy
626 * a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy}
629 public static void setMatchStrategy(IMatchStrategy matchStrategy
) {
630 String className
= "ANY class"; //FIXME was: matchStrategy.getMatchClass().getName(); seems currently not in use
631 setBooleanValue(MATCH_STRATEGY_PREFIX
+ className
, true);
633 List
<FieldMatcher
> fieldMatchers
= matchStrategy
.getMatching().getFieldMatchers(false);
635 for (FieldMatcher fieldMatcher
: fieldMatchers
) {
636 String fieldName
= fieldMatcher
.getPropertyName();
638 getMatchStrategyFieldName(className
, fieldName
),
639 fieldMatcher
.getMatchMode().name());
644 * Helper method to create the preference property for a match field.
650 private static String
getMatchStrategyFieldName(String className
,
652 return MATCH_STRATEGY_PREFIX
+ className
+ "." + fieldName
;
656 * Returns the default match strategy for a given class.
659 * a {@link java.lang.Class} object.
660 * @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
662 public static IMatchStrategy
getDefaultMatchStrategy(Class clazz
) {
663 return DefaultMatchStrategy
.NewInstance(clazz
);
666 public static String
getDateFormatPattern() {
667 // TODO make this configurable in properties
668 String pattern
= "Y-M-d H:m";
672 public static <T
extends TermBase
> void addTermToPreferredTerms(T term
) {
674 // VocabularyEnum vocabulary =
675 // VocabularyEnum.getVocabularyEnum(term.getClass());
677 // getPreferenceStore().setValue(getPreferenceKey(term),
678 // VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
680 // firePreferencesChanged(term.getClass());
684 * Construct a unique key using the CdmBase object's uuid
689 private static String
getPreferenceKey(ICdmBase cdmBase
) {
690 cdmBase
= HibernateProxyHelper
.deproxy(cdmBase
);
692 String key
= cdmBase
.getClass().getName().concat(".")
693 .concat(cdmBase
.getUuid().toString());
694 if (key
.contains("javassist")) {
695 MessagingUtils
.info("proxy");
701 * Construct a unique key using the CdmBase object's uuid
706 public static String
getPreferenceKey(ISimpleTerm
<?
> simpleTerm
) {
707 simpleTerm
= HibernateProxyHelper
.deproxy(simpleTerm
);
708 String key
= simpleTerm
.getClass().getName().concat(".")
709 .concat(simpleTerm
.getUuid().toString());
710 if (key
.contains("javassist")) {
711 MessagingUtils
.warn(PreferencesUtil
.class,
712 "Trying to persist a preference based on a proxy class.");
718 * Construct a unique key using the CdmBase object's uuid
720 public static String
getPreferenceKey(IDefinedTerm definedTerm
) {
721 definedTerm
= HibernateProxyHelper
.deproxy(definedTerm
);
722 String key
= definedTerm
.getClass().getName().concat(".")
723 .concat(definedTerm
.getUuid().toString());
724 if (key
.contains("javassist")) {
725 MessagingUtils
.warn(PreferencesUtil
.class,
726 "Trying to persist a preference based on a proxy class.");
732 * Retrieves search preferences from the preference store
734 * @return an {@link ITaxonServiceConfigurator} to pass to search methods
736 public static IFindTaxaAndNamesConfigurator
getSearchConfigurator() {
737 IFindTaxaAndNamesConfigurator configurator
= initializeSearchConfigurator();
739 configurator
.setDoTaxa(PreferencesUtil
.getPreferenceStore().contains(IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_TAXA
)? PreferencesUtil
.getPreferenceStore().getBoolean(
740 IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_TAXA
): true);
741 configurator
.setDoSynonyms(PreferencesUtil
.getPreferenceStore().contains(IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_SYNONYMS
)? PreferencesUtil
.getPreferenceStore().getBoolean(
742 IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_SYNONYMS
): true);
743 configurator
.setDoNamesWithoutTaxa(PreferencesUtil
.getPreferenceStore().contains(IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_NAMES
)? PreferencesUtil
.getPreferenceStore().getBoolean(
744 IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_NAMES
): true);
745 configurator
.setDoTaxaByCommonNames(PreferencesUtil
.getPreferenceStore().contains(IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
)? PreferencesUtil
.getPreferenceStore().getBoolean(
746 IPreferenceKeys
.TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
): true);
747 //configurator.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.valueOf(getStringValue(TAXON_SERVICE_CONFIGURATOR_MATCH_MODE)));
753 * create new preferences, setting all search options to true
756 * {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
759 public static IFindTaxaAndNamesConfigurator
initializeSearchConfigurator() {
760 IFindTaxaAndNamesConfigurator configurator
= FindTaxaAndNamesConfiguratorImpl
.NewInstance();
762 configurator
.setDoTaxa(true);
763 configurator
.setDoSynonyms(true);
764 configurator
.setDoNamesWithoutTaxa(true);
765 configurator
.setDoTaxaByCommonNames(true);
767 configurator
.setTaxonPropertyPath(Arrays
.asList("$", "titleCache",
768 "name", "name.$", "relationsFromThisTaxon.$"));
770 configurator
.setSynonymPropertyPath(Arrays
.asList("$", "titleCache",
771 "name", "name.$", "synonyms.relatedTo.*"));
774 // match mode is a simple like, actually all other match modes are kind
777 .setMatchMode(eu
.etaxonomy
.cdm
.persistence
.query
.MatchMode
.ANYWHERE
);
778 // we set page number and size here as this should always be unlimited
779 configurator
.setPageNumber(0);
780 // TODO currently limit results to 10000
781 configurator
.setPageSize(10000);
782 //setSearchConfigurator(configurator) ;
787 * Store search preferences
789 * @param configurator
791 * {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
794 public static void setSearchConfigurator(
795 IFindTaxaAndNamesConfigurator configurator
) {
796 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_TAXA
,
797 configurator
.isDoTaxa());
798 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_SYNONYMS
,
799 configurator
.isDoSynonyms());
800 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_NAMES
,
801 configurator
.isDoNamesWithoutTaxa());
802 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
,
803 configurator
.isDoTaxaByCommonNames());
806 public static void firePreferencesChanged(Class clazz
) {
807 getPreferenceStore().firePropertyChangeEvent(PREFERRED_TERMS_CHANGE
,
812 public static String
createPreferenceString(String property
){
813 return prefKey(property
);
815 public static String
createOverridePreferenceString(String property
){
816 return prefOverrideKey(property
);
819 public static boolean getOverrideForPreference(String preferenceString
){
820 return PreferencesUtil
.getBooleanValue(PreferencesUtil
.createOverridePreferenceString(preferenceString
), true);
824 * Set default values for preferences
826 public static void setDefaults() {
828 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.EditMapServiceAccessPoint
.getKey()),
829 "http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php");
830 //FIXME : changed default for SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
831 getPreferenceStore().setDefault(createPreferenceString(SHOULD_CONNECT_AT_STARTUP
), false);
832 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.MobotOpenUrlServiceAccessPoint
.getKey()),
833 "http://www.biodiversitylibrary.org/openurl");
834 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.MobotOpenUrlServiceMaxWidth
.getKey()), "1000");
835 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.MobotOpenUrlServiceMaxHeight
.getKey()), "1000");
836 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_TAXA
, true);
837 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_SYNONYMS
, true);
838 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_NAMES
, true);
839 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
, true);
842 // getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.NameDetailsView.getKey()), new NameDetailsConfigurator(false).toString());
844 //Navigator preferences
845 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.TaxonNodeOrder
.getKey()), NavigatorOrderEnum
.RankAndNameOrder
.getKey());
847 //getPreferenceStore().setDefault(createPreferenceString(Prefe), true);
849 getPreferenceStore().setDefault(createPreferenceString(SHOW_ADVANCED_MEDIA_SECTION
), false);
851 getPreferenceStore().setDefault(createPreferenceString(SHOW_MEDIA_PREVIEW
), false);
852 //override db preferences
853 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.AbcdImportConfig
.getKey())), false);
854 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.NameDetailsView
.getKey())), false);
855 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.CommonNameAreaVocabularies
.getKey())), false);
856 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.CommonNameReferencesWithMarker
.getKey()), false);
857 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowTaxonNodeWizard
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowTaxonNodeWizard
.getDefaultValue().toString()));
858 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowNamespaceInSource
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowNamespaceInSource
.getDefaultValue().toString()));
859 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowIdInSource
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowIdInSource
.getDefaultValue().toString()));
860 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.DisableMultiClassification
.getKey()), Boolean
.valueOf(PreferencePredicate
.DisableMultiClassification
.getDefaultValue().toString()));
861 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowImportExportMenu
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowImportExportMenu
.getDefaultValue().toString()));
862 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.ShowSpecimen
.getKey()), Boolean
.valueOf(PreferencePredicate
.ShowSpecimen
.getDefaultValue().toString()));
863 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.SearchForIdentifierAndTitleCache
.getKey()), Boolean
.valueOf(PreferencePredicate
.SearchForIdentifierAndTitleCache
.getDefaultValue().toString()));
864 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.SearchForIdentifierAndTitleCache
.getKey())), false);
865 getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate
.SearchForIdentifierAsDefault
.getKey()), Boolean
.valueOf(PreferencePredicate
.SearchForIdentifierAsDefault
.getDefaultValue().toString()));
866 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.SearchForIdentifierAsDefault
.getKey())), false);
867 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.ShowModifierFreeText
.getKey())), false);
868 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.ShowModifier
.getKey())), false);
869 getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate
.DistributionEditorActivated
.getKey())), false);
872 public static void checkNomenclaturalCode() {
873 // First time Editor is opened, no nomenclatural code has been set
874 if (PreferencesUtil
.getPreferredNomenclaturalCode() == null) {
875 PreferencesUtil
.setPreferredNomenclaturalCode(getPreferenceKey(NomenclaturalCode
.ICNAFP
), true);
879 public static void setNomenclaturalCodePreferences(){
880 ICdmRepository controller
;
881 controller
= CdmStore
.getCurrentApplicationConfiguration();
882 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
);
883 CdmPreference preference
= null;
884 if (controller
== null){
887 preference
= controller
.getPreferenceService().find(key
);
888 if (preference
== null){
891 // setBooleanValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY, preference.isAllowOverride());
893 int index
= StringUtils
.lastIndexOf(preference
.getValue(), ".");
894 UUID uuid
= UUID
.fromString(preference
.getValue().substring(index
+1, preference
.getValue().length()));
895 NomenclaturalCode preferredCode
= NomenclaturalCode
.getByUuid(uuid
);
897 setStringValue(PreferencePredicate
.NomenclaturalCode
.getKey(),
898 getPreferenceKey(preferredCode
));
901 public static void checkDefaultLanguage(){
902 if(PreferencesUtil
.getPreferredDefaultLangugae() == null){
903 Shell shell
= AbstractUtility
.getShell();
904 int open
= new DefaultLanguageDialog(shell
).open();
905 if(open
== Window
.OK
){
906 PlatformUI
.getWorkbench().restart();
909 //TODO:In case of a reinstall, the config.ini will be overwritten
910 // here you create config.ini with the stored key from preferences
914 public static String
getMapServiceAccessPoint() {
915 return getStringValue(PreferencePredicate
.EditMapServiceAccessPoint
.getKey());
918 public static boolean shouldConnectAtStartUp() {
919 //FIXME : force SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
920 //return getBooleanValue(SHOULD_CONNECT_AT_STARTUP);
924 public static TermTree
<?
> getDefaultFeatureTreeForTextualDescription() {
925 String uuidString
= getStringValue(
926 FEATURE_TREE_DEFAULT_TEXT
, true);
927 if (StringUtils
.isBlank(uuidString
)) {
930 TermTree
<?
> tree
= CdmStore
.getService(
931 ITermTreeService
.class).load(UUID
.fromString(uuidString
));
933 if (tree
== null || tree
.getId() == 0) {
939 public static TermTree
<?
> getDefaultFeatureTreeForStructuredDescription() {
940 String uuidString
= getStringValue(
941 FEATURE_TREE_DEFAULT_STRUCTURE
, true);
942 return StringUtils
.isBlank(uuidString
) ?
null : CdmStore
.getService(
943 ITermTreeService
.class).load(UUID
.fromString(uuidString
));
946 public static void setSortRanksHierarchichally(boolean selection
) {
947 setBooleanValue(PreferencePredicate
.SortRanksHierarchichally
.getKey(), selection
);
950 public static boolean getSortRanksHierarchichally() {
951 return getBooleanValue(PreferencePredicate
.SortRanksHierarchichally
.getKey());
954 public static boolean isMultilanguageTextEditingCapability() {
955 return getBooleanValue(
956 PreferencePredicate
.MultiLanguageTextEditing
.getKey());
959 public static Language
getGlobalLanguage() {
961 String languageUuidString
= getStringValue(
962 GLOBAL_LANGUAGE_UUID
, true);
964 if(!CdmStore
.isActive()) {
965 MessagingUtils
.noDataSourceWarningDialog(languageUuidString
);
969 if (CdmUtils
.isBlank(languageUuidString
)) {
970 return Language
.getDefaultLanguage();
973 UUID languageUuid
= UUID
.fromString(languageUuidString
);
974 return (Language
) CdmStore
.getService(ITermService
.class).load(
978 public static void setGlobalLanguage(Language language
) {
979 if(language
!= null) {
980 setStringValue(GLOBAL_LANGUAGE_UUID
,language
.getUuid().toString());
981 CdmStore
.setDefaultLanguage(language
);
985 public static Map
<MarkerType
, Boolean
> getEditMarkerTypePreferences() {
986 List
<MarkerType
> markerTypes
= CdmStore
.getTermManager()
987 .getPreferredTerms(MarkerType
.class);
989 Map
<MarkerType
, Boolean
> result
= new HashMap
<>();
991 for (MarkerType markerType
: markerTypes
) {
992 String name
= getMarkerTypeEditingPreferenceKey(markerType
);
993 Boolean value
= getBooleanValue(name
);
994 result
.put(markerType
, value
);
1000 public static void setEditMarkerTypePreferences(
1001 Map
<MarkerType
, Boolean
> markerTypeEditingMap
) {
1002 for (MarkerType markerType
: markerTypeEditingMap
.keySet()) {
1003 String name
= getMarkerTypeEditingPreferenceKey(markerType
);
1004 setBooleanValue(name
,
1005 markerTypeEditingMap
.get(markerType
));
1009 private static String
getMarkerTypeEditingPreferenceKey(
1010 MarkerType markerType
) {
1011 markerType
= HibernateProxyHelper
.deproxy(markerType
);
1012 return markerType
.getClass().getName() + EDIT_MARKER_TYPE_PREFIX
;
1015 public static void setEditMarkerTypePreference(MarkerType markerType
,
1018 getMarkerTypeEditingPreferenceKey(markerType
), edit
);
1021 public static DerivedUnitFacadeConfigurator
getDerivedUnitConfigurator() {
1022 DerivedUnitFacadeConfigurator configurator
= DerivedUnitFacadeConfigurator
1024 configurator
.setMoveDerivedUnitMediaToGallery(true);
1025 configurator
.setMoveFieldObjectMediaToGallery(true);
1026 return configurator
;
1030 * This method will write language properties to the config.ini located in the configuration folder
1031 * of the Taxonomic Ediitor. <b>This method is only used to set the default language for Taxonomic Editor.</b>
1033 * @param setLanguage 0 is for german and 1 for english.
1034 * @throws IOException
1036 public void writePropertyToConfigFile(int setLanguage
) throws IOException
{
1037 File file
= org
.eclipse
.core
.runtime
.preferences
.ConfigurationScope
.INSTANCE
.getLocation().toFile();
1038 //give warning to user if the directory has no write access
1040 throw new IOException();
1042 Properties properties
= load(file
.getAbsolutePath()+"/config.ini");
1043 switch(setLanguage
){
1045 properties
.setProperty("osgi.nl", "de");
1046 setStringValue(IPreferenceKeys
.DEFAULT_LANGUAGE_EDITOR
, "de");
1049 properties
.setProperty("osgi.nl", "en");
1050 setStringValue(IPreferenceKeys
.DEFAULT_LANGUAGE_EDITOR
, "en");
1055 save(file
+"/config.ini", properties
);
1059 * This method loads a property from a given file and returns it.
1063 * @throws IOException
1065 private Properties
load(String filename
) throws IOException
{
1066 FileInputStream in
= new FileInputStream(filename
);
1067 Properties prop
= new Properties();
1074 * This method saves a property to the specified file.
1078 * @throws IOException
1080 private void save(String filename
, Properties properties
) throws IOException
{
1081 FileOutputStream fos
= new FileOutputStream(filename
);
1082 properties
.store(fos
, "");
1087 * Saves a list of P2 Metadata Repositories as string with specified delimiters
1091 public static void setP2Repositories(List
<MetadataRepositoryElement
> p2Repos
) {
1092 StringBuilder sb
= new StringBuilder();
1093 for(MetadataRepositoryElement p2Repo
: p2Repos
) {
1094 sb
.append(P2_REPOSITORIES_DELIM
);
1095 if(p2Repo
.getName() == null || p2Repo
.getName().isEmpty()) {
1098 sb
.append(p2Repo
.getName());
1100 sb
.append(P2_REPOSITORY_FIELDS_DELIM
);
1101 sb
.append(p2Repo
.getLocation().toString());
1102 sb
.append(P2_REPOSITORY_FIELDS_DELIM
);
1103 sb
.append(String
.valueOf(p2Repo
.isEnabled()));
1105 getPreferenceStore().setValue(P2_REPOSITORY_LIST
, sb
.toString());
1110 * Retrieves a list of previously saved P2 repositories
1112 public static List
<MetadataRepositoryElement
> getP2Repositories() {
1113 List
<MetadataRepositoryElement
> p2Repos
= new ArrayList
<MetadataRepositoryElement
>();
1114 String p2ReposPref
= getStringValue(P2_REPOSITORY_LIST
, true);
1115 if(p2ReposPref
!= null && !p2ReposPref
.isEmpty()) {
1116 StringTokenizer p2ReposPrefST
= new StringTokenizer(p2ReposPref
,P2_REPOSITORIES_DELIM
);
1118 while(p2ReposPrefST
.hasMoreTokens()) {
1119 String p2RepoStr
= p2ReposPrefST
.nextToken();
1120 StringTokenizer p2ReposStrST
= new StringTokenizer(p2RepoStr
,P2_REPOSITORY_FIELDS_DELIM
);
1121 if(p2ReposStrST
.countTokens()==3) {
1122 String nickname
= p2ReposStrST
.nextToken();
1125 uri
= new URI(p2ReposStrST
.nextToken());
1126 } catch (URISyntaxException e
) {
1129 boolean enabled
= Boolean
.parseBoolean(p2ReposStrST
.nextToken());
1130 MetadataRepositoryElement mre
= new MetadataRepositoryElement(null, uri
, true);
1131 mre
.setNickname(nickname
);
1132 mre
.setEnabled(enabled
);
1142 * enables/disables nested composite. <br>
1144 * @param ctrl - Composite to be en-/disabeld
1145 * @param enabled - boolean
1147 public static void recursiveSetEnabled(Control ctrl
, boolean enabled
) {
1148 if (ctrl
instanceof Composite
) {
1149 Composite comp
= (Composite
) ctrl
;
1150 for (Control c
: comp
.getChildren()) {
1151 recursiveSetEnabled(c
, enabled
);
1154 ctrl
.setEnabled(enabled
);
1158 public static void setSortNodes(NavigatorOrderEnum nodesOrder
) {
1159 if (nodesOrder
== null){
1160 setStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey(), null);
1162 setStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey(), nodesOrder
.key
);
1166 public static NavigatorOrderEnum
getSortNodes() {
1167 return NavigatorOrderEnum
.valueOf(getStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey()));
1170 public static boolean isNodesSortedNaturally() {
1171 NavigatorOrderEnum value
= NavigatorOrderEnum
.valueOf(getStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey()));
1172 return value
.equals(NavigatorOrderEnum
.NaturalOrder
);
1175 public static boolean isNodesSortedByName() {
1176 NavigatorOrderEnum value
= NavigatorOrderEnum
.valueOf(getStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey()));
1177 return value
.equals(NavigatorOrderEnum
.AlphabeticalOrder
);
1180 public static boolean isNodesSortedByNameAndRank() {
1181 NavigatorOrderEnum value
= NavigatorOrderEnum
.valueOf(getStringValue(PreferencePredicate
.TaxonNodeOrder
.getKey()));
1182 return value
.equals(NavigatorOrderEnum
.RankAndNameOrder
);
1185 public static boolean isStoreNavigatorState() {
1186 return getBooleanValue(RESTORE_NAVIGATOR_STATE
);
1189 public static void setStoreNavigatorState(boolean selection
) {
1190 setBooleanValue(RESTORE_NAVIGATOR_STATE
, selection
);
1193 public static boolean isShowUpWidgetIsDisposedMessages() {
1194 return getBooleanValue(IS_SHOW_UP_WIDGET_IS_DISPOSED
);
1197 public static void setShowUpWidgetIsDisposedMessages(boolean selection
) {
1198 setBooleanValue(IS_SHOW_UP_WIDGET_IS_DISPOSED
, selection
);
1201 public static boolean isShowIdInVocabularyInChecklistEditor() {
1202 String area_display
= getStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey());
1203 if (area_display
.equals(TermDisplayEnum
.IdInVocabulary
.getKey())) {
1209 public static boolean isShowSymbol1InChecklistEditor() {
1210 String area_display
= getStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey());
1211 if (area_display
.equals(TermDisplayEnum
.Symbol1
.getKey())) {
1217 public static boolean isShowSymbol2InChecklistEditor() {
1218 String area_display
= getStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey());
1219 if (area_display
.equals(TermDisplayEnum
.Symbol2
.getKey())) {
1226 public static void setAreaDisplayInChecklistEditor(String selection
) {
1227 setStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey(), selection
);
1230 public static void setOwnDescriptionForChecklistEditor(boolean selection
) {
1231 setBooleanValue(PreferencePredicate
.OwnDescriptionForDistributionEditor
.getKey(), selection
);
1234 public static boolean isOwnDescriptionForChecklistEditor() {
1235 return getBooleanValue(PreferencePredicate
.OwnDescriptionForDistributionEditor
.getKey());
1238 public static TermDisplayEnum
displayAreaInChecklistEditor() {
1239 TermDisplayEnum result
;
1241 result
= TermDisplayEnum
.byKey(getStringValue(PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getKey()));
1242 }catch (IllegalArgumentException e
){
1243 result
= ((TermDisplayEnum
) PreferencePredicate
.DisplayOfAreasInDistributionEditor
.getDefaultValue());
1248 public static TermDisplayEnum
displayStatusInChecklistEditor() {
1249 TermDisplayEnum result
;
1251 result
= TermDisplayEnum
.byKey(getStringValue(PreferencePredicate
.DisplayOfStatus
.getKey()));
1252 }catch (IllegalArgumentException e
){
1253 result
= ((TermDisplayEnum
) PreferencePredicate
.DisplayOfStatus
.getDefaultValue());
1258 public static void setDisplayStatusInChecklistEditor(String selection
) {
1259 setStringValue(PreferencePredicate
.DisplayOfStatus
.getKey(), selection
);
1262 public static boolean isShowRankInChecklistEditor() {
1263 return getBooleanValue(PreferencePredicate
.ShowRankInDistributionEditor
.getKey());
1266 public static void setShowRankInChecklistEditor(boolean selection
) {
1267 setBooleanValue(PreferencePredicate
.ShowRankInDistributionEditor
.getKey(), selection
);
1270 public static NameDetailsConfigurator
getPreferredNameDetailsConfiguration( boolean local
) {
1271 NameDetailsConfigurator config
= new NameDetailsConfigurator();
1272 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1273 CdmPreference preference
= null;
1276 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.NameDetailsView
);
1277 preference
= getPreferenceFromDB(PreferencePredicate
.NameDetailsView
);
1278 if (preference
== null){
1282 // setBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS, preference.isAllowOverride());
1283 value
= preference
.getValue();
1284 config
.setAllowOverride(preference
.isAllowOverride());
1285 //the preference value is build like this:
1286 //<section1>:true;<section2>:false....
1288 value
= getStringValue(PreferencePredicate
.NameDetailsView
.getKey(), local
);
1291 fillNameDetailsConfigurator(config
, value
);
1300 public static void fillNameDetailsConfigurator(NameDetailsConfigurator config
, String value
) {
1301 String
[] sections
= value
.split(";");
1302 Map
<String
, Boolean
> sectionMap
= new HashMap
<>();
1303 String
[] sectionValues
;
1304 for (String sectionValue
: sections
){
1305 if (sectionValue
.contains(":")){
1306 sectionValues
= sectionValue
.split(":");
1307 sectionMap
.put(sectionValues
[0], Boolean
.valueOf(sectionValues
[1]));
1310 for (Field field
: config
.getClass().getDeclaredFields()){
1312 config
.getClass().getDeclaredField(field
.getName()).set(config
, getValue(sectionMap
, field
.getName()));
1313 } catch (IllegalArgumentException
| IllegalAccessException
| NoSuchFieldException
1314 | SecurityException e
) {
1315 logger
.debug(e
.getMessage());
1320 public static NameDetailsConfigurator
getPreferredNameDetailsConfiguration() {
1321 NameDetailsConfigurator config
= new NameDetailsConfigurator();
1325 value
= getStringValue(PreferencePredicate
.NameDetailsView
.getKey(), false);
1327 fillNameDetailsConfigurator(config
, value
);
1334 public static void setPreferredNameDetailsConfiguration(NameDetailsConfigurator config
, boolean local
) {
1335 CdmPreference preference
= null;
1338 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.NameDetailsView
, config
.toString());
1340 setPreferenceToDB(preference
);
1343 setStringValue(PreferencePredicate
.NameDetailsView
.getKey(), config
.toString());
1347 private static Boolean
getValue(Map
<String
, Boolean
> sectionMap
, String string
) {
1348 if (sectionMap
.containsKey(string
)){
1349 return sectionMap
.get(string
);
1355 public static Abcd206ImportConfigurator
getDBAbcdImportConfigurationPreference() {
1357 Abcd206ImportConfigurator config
= Abcd206ImportConfigurator
.NewInstance(null,null);
1358 ICdmRepository controller
;
1359 controller
= CdmStore
.getCurrentApplicationConfiguration();
1360 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AbcdImportConfig
);
1361 CdmPreference preference
= null;
1362 if (controller
== null){
1365 preference
= controller
.getPreferenceService().find(key
);
1366 if (preference
== null){
1369 String configString
= preference
.getValue();
1370 extractAbcdConfiguratorFromPreferenceString(config
, configString
);
1375 public static void extractAbcdConfiguratorFromPreferenceString(Abcd206ImportConfigurator config
,
1376 String configString
) {
1377 if(configString
!= null){
1378 String
[] configArray
= configString
.split(";");
1380 for (String configItem
: configArray
){
1381 String
[] keyValue
= configItem
.split(":");
1382 String keyString
= keyValue
[0];
1383 String valueString
= null;
1384 if (keyValue
.length
>1){
1385 valueString
= keyValue
[1];
1386 if (keyValue
.length
>2){
1388 for (int index
= 2; index
< keyValue
.length
; index
++){
1389 valueString
+= ":"+ keyValue
[index
];
1393 if (keyString
.equals("ignoreImportOfExistingSpecimen")){
1394 config
.setIgnoreImportOfExistingSpecimen(Boolean
.valueOf(valueString
));
1395 }else if (keyString
.equals("addIndividualsAssociationsSuchAsSpecimenAndObservations")){
1396 config
.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(Boolean
.valueOf(valueString
));
1397 }else if (keyString
.equals("reuseExistingTaxaWhenPossible")){
1398 config
.setReuseExistingTaxaWhenPossible(Boolean
.valueOf(valueString
));
1399 }else if (keyString
.equals("ignoreAuthorship")){
1400 config
.setIgnoreAuthorship(Boolean
.valueOf(valueString
));
1401 }else if (keyString
.equals("addMediaAsMediaSpecimen")){
1402 config
.setAddMediaAsMediaSpecimen(Boolean
.valueOf(valueString
));
1403 }else if (keyString
.equals("reuseExistingMetaData")){
1404 config
.setReuseExistingMetaData(Boolean
.valueOf(valueString
));
1405 }else if (keyString
.equals("reuseExistingDescriptiveGroups")){
1406 config
.setReuseExistingDescriptiveGroups(Boolean
.valueOf(valueString
));
1407 }else if (keyString
.equals("allowReuseOtherClassifications")){
1408 config
.setAllowReuseOtherClassifications(Boolean
.valueOf(valueString
));
1409 }else if (keyString
.equals("deduplicateReferences")){
1410 config
.setDeduplicateReferences(Boolean
.valueOf(valueString
));
1411 }else if (keyString
.equals("deduplicateClassifications")){
1412 config
.setDeduplicateClassifications(Boolean
.valueOf(valueString
));
1413 }else if (keyString
.equals("moveNewTaxaToDefaultClassification")){
1414 config
.setMoveNewTaxaToDefaultClassification(Boolean
.valueOf(valueString
));
1415 }else if (keyString
.equals("mapUnitIdToCatalogNumber")){
1416 config
.setMapUnitIdToCatalogNumber(Boolean
.valueOf(valueString
));
1417 }else if (keyString
.equals("mapUnitIdToAccessionNumber")){
1418 config
.setMapUnitIdToAccessionNumber(Boolean
.valueOf(valueString
));
1419 }else if (keyString
.equals("mapUnitIdToBarcode")){
1420 config
.setMapUnitIdToBarcode(Boolean
.valueOf(valueString
));
1421 }else if (keyString
.equals("overwriteExistingSpecimens")){
1422 config
.setOverwriteExistingSpecimens(Boolean
.valueOf(valueString
));
1423 }else if (keyString
.equals("nomenclaturalCode")){
1424 config
.setNomenclaturalCode(NomenclaturalCode
.fromString(valueString
));
1425 }else if (keyString
.equals("removeCountryFromLocalityText")){
1426 config
.setRemoveCountryFromLocalityText(Boolean
.valueOf(valueString
));
1427 }else if (keyString
.equals("getSiblings")){
1428 config
.setGetSiblings(Boolean
.valueOf(valueString
));
1429 }else if (keyString
.equals("classificationUUID")){
1430 config
.setClassificationUuid(UUID
.fromString(valueString
));
1431 }else if (keyString
.equals("classificationName")){
1432 config
.setClassificationName(valueString
);
1433 }else if (keyString
.equals("dnaSource")){
1435 config
.setDnaSoure(URI
.create(valueString
));
1436 }catch(Exception e
){
1437 config
.setDnaSoure(null);
1440 logger
.debug("This key of the abcd configurator needs to be added to the transformer: " + keyString
);
1446 public static Abcd206ImportConfigurator
getLocalAbcdImportConfigurator(){
1447 return getLocalAbcdImportConfigurator(true);
1450 public static Abcd206ImportConfigurator
getLocalAbcdImportConfigurator(boolean skipCheckOverride
){
1451 Abcd206ImportConfigurator config
= Abcd206ImportConfigurator
.NewInstance(null,null);
1452 CdmPreference pref
= CdmPreferenceCache
.instance().get(PreferencePredicate
.AbcdImportConfig
.getKey());
1453 if (pref
== null || pref
.isAllowOverride()){
1454 String configString
= PreferencesUtil
.getStringValue(PreferencePredicate
.AbcdImportConfig
.getKey());
1455 if (StringUtils
.isBlank(configString
)){
1456 configString
= getStringValue(PreferencePredicate
.AbcdImportConfig
.getKey(), skipCheckOverride
);
1457 extractAbcdConfiguratorFromPreferenceString(config
, configString
);
1458 if (config
.getNomenclaturalCode() == null){
1459 config
.setNomenclaturalCode(getPreferredNomenclaturalCode());
1462 config
= Abcd206ImportConfigurator
.NewInstance(null, null);
1463 PreferencesUtil
.extractAbcdConfiguratorFromPreferenceString(config
, configString
);
1466 extractAbcdConfiguratorFromPreferenceString(config
, pref
.getValue());
1473 public static Abcd206ImportConfigurator
getLastUsedAbcdImportConfigurator(){
1474 Abcd206ImportConfigurator config
= Abcd206ImportConfigurator
.NewInstance(null,null);
1476 String configString
= PreferencesUtil
.getStringValue(IPreferenceKeys
.LAST_USED_ABCD_CONFIG
, true);
1477 if (configString
!= null){
1478 extractAbcdConfiguratorFromPreferenceString(config
, configString
);
1479 if (config
!= null){
1480 if (config
.getNomenclaturalCode() == null){
1481 config
.setNomenclaturalCode(getPreferredNomenclaturalCode());
1485 config
= PreferencesUtil
.getLocalAbcdImportConfigurator(false);
1492 public static void updateAbcdImportConfigurationPreference() {
1493 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1495 CdmPreference pref
= cache
.findBestMatching(CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AbcdImportConfig
));
1497 if (!getBooleanValue(prefOverrideKey(PreferencePredicate
.AbcdImportConfig
.getKey())) || !pref
.isAllowOverride()){
1498 resetToDBPreferenceAbcdCOnfigurator();
1503 public static void resetToDBPreferenceAbcdCOnfigurator(){
1504 Abcd206ImportConfigurator config
= getDBAbcdImportConfigurationPreference();
1505 setStringValue(PreferencePredicate
.AbcdImportConfig
.getKey(), config
.toString());
1508 public static boolean isSortTaxaByRankAndName() {
1509 return getBooleanValue(PreferencePredicate
.SortTaxaByRankAndName
.getKey());
1512 public static TermOrder
getSortNamedAreasInDistributionEditor() {
1515 result
= TermOrder
.valueOf(getStringValue(PreferencePredicate
.AreasSortedInDistributionEditor
.getKey()));
1516 }catch (IllegalArgumentException e
){
1517 result
= (TermOrder
)PreferencePredicate
.AreasSortedInDistributionEditor
.getDefaultValue();
1522 public static void setSortNamedAreasInDistributionEditor(String isSortByVocabularyOrder
) {
1523 setStringValue(PreferencePredicate
.AreasSortedInDistributionEditor
.getKey(), isSortByVocabularyOrder
);
1526 public static void setLastSelectedReference(
1527 List
<String
> lastSelectedReferences
) {
1529 setStringValue(IPreferenceKeys
.LAST_SELECTED_REFERENCES
, lastSelectedReferences
.toString());
1532 public static List
<String
> getLastSelectedReferences() {
1534 //IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
1535 String lastSelected
= getStringValue(IPreferenceKeys
.LAST_SELECTED_REFERENCES
, true);
1536 List
<String
> result
= new ArrayList
<>();
1537 if (!StringUtils
.isBlank(lastSelected
)){
1538 Collections
.addAll(result
, lastSelected
.substring(1,lastSelected
.length()-1).split(", "));
1543 public static void setPreferredNamedAreasForDistributionEditor(
1544 String saveCheckedElements
, String saveGrayedElements
, boolean local
) {
1546 setStringValue(PreferencePredicate
.AvailableDistributionAreaTerms
.getKey(), saveCheckedElements
);
1549 CdmPreference preference
= null;
1551 if (saveCheckedElements
== null){
1552 preference
= getPreferenceFromDB(PreferencePredicate
.AvailableDistributionAreaTerms
);
1554 if (preference
== null){
1557 setStringValue(PreferencePredicate
.AvailableDistributionAreaTerms
.getKey(),
1558 saveCheckedElements
);
1559 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionAreaTerms
, saveCheckedElements
);
1560 setPreferenceToDB(preference
);
1564 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionAreaTerms
, saveCheckedElements
);
1565 setPreferenceToDB(preference
);
1566 setStringValue(PreferencePredicate
.AvailableDistributionAreaTerms
.getKey(),
1567 saveCheckedElements
);
1573 public static void setPreferredVocabulariesForDistributionEditor(String saveCheckedElements
,
1574 boolean local
, boolean isOverride
) {
1576 setStringValue(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey(), saveCheckedElements
);
1577 setBooleanValue(prefOverrideKey(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey()), isOverride
);
1580 CdmPreference preference
= null;
1582 if (saveCheckedElements
== null){
1583 preference
= getPreferenceFromDB(PreferencePredicate
.AvailableDistributionAreaVocabularies
);
1585 if (preference
== null){
1588 setStringValue(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey(),
1589 saveCheckedElements
);
1590 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionAreaVocabularies
, saveCheckedElements
);
1591 preference
.setAllowOverride(isOverride
);
1592 setPreferenceToDB(preference
);
1595 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionAreaVocabularies
, saveCheckedElements
);
1596 preference
.setAllowOverride(isOverride
);
1597 setPreferenceToDB(preference
);
1598 setStringValue(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey(),
1599 saveCheckedElements
);
1604 public static String
getPreferredVocabulariesForDistributionEditor(boolean local
) {
1607 String pref
= getStringValue(PreferencePredicate
.AvailableDistributionAreaVocabularies
.getKey(), local
);
1611 CdmPreference preference
= null;
1612 preference
= getPreferenceFromDB(PreferencePredicate
.AvailableDistributionAreaVocabularies
);
1613 if (preference
== null){
1616 return preference
.getValue();
1621 public static List
<UUID
> createUUIDListFromStringPref(String prefKey
, boolean local
) {
1622 if (prefKey
== null){
1625 String prefValue
= PreferencesUtil
.getStringValue(prefKey
, local
);
1626 if (prefValue
== null){
1629 List
<UUID
> uuidList
= createUuidList(prefValue
);
1633 public static List
<UUID
> createUuidList(String prefValue
) {
1634 String
[] stringArray
= prefValue
.split(";");
1635 List
<UUID
> uuidList
= new ArrayList
<>();
1636 for (String uuid
: stringArray
){
1637 if (!StringUtils
.isBlank(uuid
)){
1638 uuidList
.add(UUID
.fromString(uuid
));
1644 public static boolean getFilterCommonNameReferences(){
1645 Boolean result
= getBooleanValue(PreferencePredicate
.CommonNameReferencesWithMarker
.getKey());
1646 if (result
== null){
1652 public static void updateDBPreferences() {
1654 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1655 cache
.getAllTaxEditorDBPreferences();
1659 //updateAbcdImportConfigurationPreference();
1662 NameDetailsConfigurator config
= getPreferredNameDetailsConfiguration(false);
1663 // if (config != null ){
1664 // if (!getBooleanValue(OVERRIDE_NAME_DETAILS) || !getBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS)){
1665 // setPreferredNameDetailsConfiguration(config, false);
1671 public static void setPreferencesToDB(List
<CdmPreference
> preferences
) {
1673 ICdmRepository controller
;
1674 if(CdmStore
.isActive()){
1675 controller
= CdmStore
.getCurrentApplicationConfiguration();
1676 for (CdmPreference preference
: preferences
){
1677 if (preference
.getValue() == null && preference
.isAllowOverride()){
1678 controller
.getPreferenceService().remove(preference
.getKey());
1681 controller
.getPreferenceService().set(preference
);
1686 CdmPreferenceCache
.instance().getAllTaxEditorDBPreferences();
1691 * Returns whether the named preference is known.
1692 * @param prefKey the key of the preference
1693 * @return <code>true</code> if the preference is known, <code>false</code> otherwise
1695 public static boolean contains(String prefKey
){
1696 return getPreferenceStore().contains(prefKey(prefKey
));
1702 public static TermTree
<?
> getPreferredFeatureTreeForNameDescription(boolean createNew
) {
1703 if(preferredNameFeatureTree
!= null && !createNew
){
1704 return preferredNameFeatureTree
;
1706 createPreferredFeatureTreeForNameDescription();
1707 return preferredNameFeatureTree
;
1710 public static void createPreferredFeatureTreeForNameDescription() {
1712 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1713 CdmPreference pref
= cache
.get(PreferencePredicate
.NameFeatures
.getKey());
1714 List
<Feature
> terms
= new ArrayList
<>();
1715 boolean override
= PreferencesUtil
.getOverrideForPreference(PreferencePredicate
.NameFeatures
.getKey());
1717 List
<UUID
> uuids
= PreferencesUtil
.createUUIDListFromStringPref(PreferencePredicate
.NameFeatures
.getKey(), false);
1718 if (uuids
!= null && !uuids
.isEmpty()){
1719 terms
= CdmStore
.getTermManager().getTerms(uuids
, Feature
.class);
1722 if (terms
.isEmpty()){
1723 terms
.addAll(TermStore
.getTerms(CdmStore
.getService(IVocabularyService
.class).load(VocabularyEnum
.NameFeature
.getUuid()), null));
1725 terms
.remove(Feature
.PROTOLOGUE());
1726 if (terms
.isEmpty()){
1727 preferredNameFeatureTree
= TermEditorInput
.getDefaultNameFeatureTree();
1729 preferredNameFeatureTree
= TermTree
.NewInstance(terms
);
1733 public static void removeFromDB(List
<CdmPreference
> prefsToDelete
) {
1734 ICdmRepository controller
;
1736 if(CdmStore
.isActive()){
1737 controller
= CdmStore
.getCurrentApplicationConfiguration();
1738 for (CdmPreference preference
: prefsToDelete
){
1739 controller
.getPreferenceService().remove(preference
.getKey());
1741 CdmPreferenceCache
.instance().getAllTaxEditorDBPreferences();
1745 public static void removeFromDB(CdmPreference prefToDelete
) {
1746 ICdmRepository controller
;
1748 if(CdmStore
.isActive()){
1749 controller
= CdmStore
.getCurrentApplicationConfiguration();
1750 controller
.getPreferenceService().remove(prefToDelete
.getKey());
1752 CdmPreferenceCache
.instance().getAllTaxEditorDBPreferences();
1756 public static TermTree
<?
> getPreferredFeatureTreeForTaxonDescription(boolean createNew
) {
1757 if(preferredTaxonFeatureTree
!= null && !createNew
){
1758 return preferredTaxonFeatureTree
;
1760 createPreferredFeatureTreeForTaxonDescription();
1761 return preferredTaxonFeatureTree
;
1764 public static void createPreferredFeatureTreeForTaxonDescription() {
1766 CdmPreferenceCache cache
= CdmPreferenceCache
.instance();
1767 CdmPreference pref
= cache
.get(PreferencePredicate
.TaxonFeatures
.getKey());
1768 List
<Feature
> terms
= null;
1769 boolean override
= PreferencesUtil
.getOverrideForPreference(PreferencePredicate
.TaxonFeatures
.getKey());
1770 List
<UUID
> uuids
= PreferencesUtil
.createUUIDListFromStringPref(PreferencePredicate
.TaxonFeatures
.getKey(), false);
1771 if (uuids
!= null && !uuids
.isEmpty()){
1772 terms
= CdmStore
.getTermManager().getTerms(uuids
, Feature
.class);
1774 if (terms
== null || terms
.isEmpty()){
1775 terms
= CdmStore
.getTermManager().getPreferredTerms(TermType
.Feature
);
1776 TermVocabulary nameVocabulary
= CdmStore
.getService(IVocabularyService
.class).load(VocabularyEnum
.NameFeature
.getUuid());
1777 Set
<Feature
> nameFeature
= nameVocabulary
.getTerms();
1778 terms
.removeAll(nameFeature
);
1782 if (terms
.isEmpty()){
1783 preferredTaxonFeatureTree
= TermEditorInput
.getDefaultFeatureTree();
1785 preferredTaxonFeatureTree
= TermTree
.NewInstance(terms
);
1789 public static void setLastSelectedBiocaseProvider(String lastAccessPoint
) {
1790 setStringValue(LAST_USED_BIOCASE_PROVIDER
, lastAccessPoint
);
1796 public static boolean getLocalActive() {
1797 // TODO: this needs to be adapted!!!
1804 public static boolean showGfbioMetaData() {
1805 //TODO: needs to be adapted!!!