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
;
17 import java
.net
.URISyntaxException
;
18 import java
.util
.ArrayList
;
19 import java
.util
.Arrays
;
20 import java
.util
.HashMap
;
21 import java
.util
.List
;
23 import java
.util
.Properties
;
25 import java
.util
.StringTokenizer
;
26 import java
.util
.UUID
;
28 import org
.apache
.commons
.lang
.StringUtils
;
29 import org
.apache
.log4j
.Logger
;
30 import org
.eclipse
.equinox
.internal
.p2
.ui
.model
.MetadataRepositoryElement
;
31 import org
.eclipse
.jface
.preference
.IPreferenceStore
;
32 import org
.eclipse
.jface
.window
.Window
;
33 import org
.eclipse
.swt
.widgets
.Composite
;
34 import org
.eclipse
.swt
.widgets
.Control
;
35 import org
.eclipse
.swt
.widgets
.Shell
;
36 import org
.eclipse
.ui
.PlatformUI
;
38 import eu
.etaxonomy
.cdm
.api
.application
.ICdmRepository
;
39 import eu
.etaxonomy
.cdm
.api
.facade
.DerivedUnitFacadeConfigurator
;
40 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureTreeService
;
41 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
42 import eu
.etaxonomy
.cdm
.api
.service
.config
.FindTaxaAndNamesConfiguratorImpl
;
43 import eu
.etaxonomy
.cdm
.api
.service
.config
.IFindTaxaAndNamesConfigurator
;
44 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
45 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
46 import eu
.etaxonomy
.cdm
.io
.specimen
.abcd206
.in
.Abcd206ImportConfigurator
;
47 import eu
.etaxonomy
.cdm
.model
.common
.ICdmBase
;
48 import eu
.etaxonomy
.cdm
.model
.common
.IDefinedTerm
;
49 import eu
.etaxonomy
.cdm
.model
.common
.ISimpleTerm
;
50 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
51 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
52 import eu
.etaxonomy
.cdm
.model
.common
.TermBase
;
53 import eu
.etaxonomy
.cdm
.model
.description
.FeatureTree
;
54 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
;
55 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
.PrefKey
;
56 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferencePredicate
;
57 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferenceSubject
;
58 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalCode
;
59 import eu
.etaxonomy
.cdm
.strategy
.match
.DefaultMatchStrategy
;
60 import eu
.etaxonomy
.cdm
.strategy
.match
.IMatchStrategy
;
61 import eu
.etaxonomy
.cdm
.strategy
.match
.MatchException
;
62 import eu
.etaxonomy
.cdm
.strategy
.match
.MatchMode
;
63 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
64 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
65 import eu
.etaxonomy
.taxeditor
.model
.NomenclaturalCodeHelper
;
66 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
67 import eu
.etaxonomy
.taxeditor
.store
.internal
.TaxeditorStorePlugin
;
68 import eu
.etaxonomy
.taxeditor
.ui
.dialog
.DefaultLanguageDialog
;
72 * PreferencesUtil class.
80 public class PreferencesUtil
implements IPreferenceKeys
{
85 public static final String PREFERRED_TERMS_CHANGE
= "preferred_terms";
87 public static final String P2_REPOSITORIES_DELIM
= ",";
88 public static final String P2_REPOSITORY_FIELDS_DELIM
= ";";
90 private final static Logger logger
= Logger
.getLogger(PreferencesUtil
.class);
97 * @return a {@link org.eclipse.jface.preference.IPreferenceStore} object.
99 public static IPreferenceStore
getPreferenceStore() {
100 return TaxeditorStorePlugin
.getDefault().getPreferenceStore();
105 * setPreferredNomenclaturalCode
108 * @param preferredCode
109 * a {@link eu.etaxonomy.cdm.model.name.NomenclaturalCode}
112 public static CdmPreference
setPreferredNomenclaturalCode(
113 NomenclaturalCode preferredCode
, boolean local
) {
115 getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY
,
116 getPreferenceKey(preferredCode
));
119 ICdmRepository controller
;
120 controller
= CdmStore
.getCurrentApplicationConfiguration();
121 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
);
122 CdmPreference preference
= null;
123 if (controller
== null){
126 if (preferredCode
== null){
127 preference
= controller
.getPreferenceService().find(key
);
128 if (preference
== null){
131 int index
= StringUtils
.lastIndexOf(preference
.getValue(), ".");
132 UUID uuid
= UUID
.fromString(preference
.getValue().substring(index
+1, preference
.getValue().length()));
133 preferredCode
= NomenclaturalCode
.getByUuid(uuid
);
135 getPreferenceStore().setValue(CDM_NOMENCLATURAL_CODE_KEY
,
136 getPreferenceKey(preferredCode
));
137 getPreferenceStore().setValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY
,preference
.isAllowOverride());
141 preference
= CdmPreference
.NewInstance(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
, preferredCode
.getKey());
142 controller
.getPreferenceService().set(preference
);
152 public static NomenclaturalCode
getPreferredNomenclaturalCode(){
153 if (getPreferenceStore().getBoolean(OVERRIDE_NOMENCLATURAL_CODE_KEY
)) {
154 return getPreferredNomenclaturalCode(true);
156 return getPreferredNomenclaturalCode(false);
162 * getPreferredNomenclaturalCode
165 * @return a {@link eu.etaxonomy.cdm.model.name.NomenclaturalCode} object.
167 public static NomenclaturalCode
getPreferredNomenclaturalCode(boolean useLocal
) {
169 CdmPreference pref
= null;
171 pref
= getPreferenceFromDB(PreferencePredicate
.NomenclaturalCode
);
174 String preferredCode
;
176 preferredCode
= getPreferenceStore().getString(
177 PREFERRED_NOMENCLATURAL_CODE_KEY
);
180 preferredCode
= pref
.getValue();
183 for (NomenclaturalCode code
: NomenclaturalCodeHelper
.getAllCodes()) {
184 if (getPreferenceKey(code
).equals(preferredCode
)) {
192 private static CdmPreference
getPreferenceFromDB(PreferencePredicate predicate
){
193 ICdmRepository controller
;
194 CdmPreference pref
= null;
197 controller
= CdmStore
.getCurrentApplicationConfiguration();
198 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), predicate
);
199 pref
= controller
.getPreferenceService().find(key
);
209 public static String
getPreferredDefaultLangugae(){
210 String preferredLanguage
= getPreferenceStore().getString(DEFAULT_LANGUAGE_EDITOR
);
211 if(StringUtils
.isNotEmpty(preferredLanguage
) && StringUtils
.isNotBlank(preferredLanguage
)){
212 return preferredLanguage
;
218 * Get the match strategy for the given class that was stored in preferences
219 * or the default strategy if it was not stored in preferences
222 * a {@link java.lang.Class} object.
223 * @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
225 public static IMatchStrategy
getMatchStrategy(Class clazz
) {
226 String className
= clazz
.getName();
227 if (getPreferenceStore().getBoolean(MATCH_STRATEGY_PREFIX
+ className
)) {
228 IMatchStrategy matchStrategy
= getDefaultMatchStrategy(clazz
);
230 for (String fieldName
: matchStrategy
.getMatchFieldPropertyNames()) {
231 String matchModeName
= getPreferenceStore().getString(
232 getMatchStrategyFieldName(className
, fieldName
));
233 MatchMode matchMode
= MatchMode
.valueOf(matchModeName
);
235 matchStrategy
.setMatchMode(fieldName
, matchMode
);
236 } catch (MatchException e
) {
237 MessagingUtils
.error(PreferencesUtil
.class, e
);
238 throw new RuntimeException(e
);
242 return matchStrategy
;
244 return getDefaultMatchStrategy(clazz
);
248 * Stores a matchStrategy into the preference store.
250 * @param matchStrategy
251 * a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy}
254 public static void setMatchStrategy(IMatchStrategy matchStrategy
) {
255 String className
= matchStrategy
.getMatchClass().getName();
256 getPreferenceStore().setValue(MATCH_STRATEGY_PREFIX
+ className
, true);
258 Set
<String
> matchFields
= matchStrategy
.getMatchFieldPropertyNames();
260 for (String fieldName
: matchFields
) {
261 getPreferenceStore().setValue(
262 getMatchStrategyFieldName(className
, fieldName
),
263 matchStrategy
.getMatchMode(fieldName
).name());
268 * Helper method to create the preference property for a match field.
274 private static String
getMatchStrategyFieldName(String className
,
276 return MATCH_STRATEGY_PREFIX
+ className
+ "." + fieldName
;
280 * Returns the default match strategy for a given class.
283 * a {@link java.lang.Class} object.
284 * @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
286 public static IMatchStrategy
getDefaultMatchStrategy(Class clazz
) {
287 return DefaultMatchStrategy
.NewInstance(clazz
);
292 * getDateFormatPattern
295 * @return a {@link java.lang.String} object.
297 public static String
getDateFormatPattern() {
298 // TODO make this configurable in properties
299 String pattern
= "Y-M-d H:m";
305 * addTermToPreferredTerms
313 public static <T
extends TermBase
> void addTermToPreferredTerms(T term
) {
315 // VocabularyEnum vocabulary =
316 // VocabularyEnum.getVocabularyEnum(term.getClass());
318 // getPreferenceStore().setValue(getPreferenceKey(term),
319 // VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
321 // firePreferencesChanged(term.getClass());
325 * Construct a unique key using the CdmBase object's uuid
330 private static String
getPreferenceKey(ICdmBase cdmBase
) {
331 cdmBase
= HibernateProxyHelper
.deproxy(cdmBase
);
333 String key
= cdmBase
.getClass().getName().concat(".")
334 .concat(cdmBase
.getUuid().toString());
335 if (key
.contains("javassist")) {
336 MessagingUtils
.info("proxy");
342 * Construct a unique key using the CdmBase object's uuid
347 public static String
getPreferenceKey(ISimpleTerm simpleTerm
) {
348 simpleTerm
= HibernateProxyHelper
.deproxy(simpleTerm
);
349 String key
= simpleTerm
.getClass().getName().concat(".")
350 .concat(simpleTerm
.getUuid().toString());
351 if (key
.contains("javassist")) {
352 MessagingUtils
.warn(PreferencesUtil
.class,
353 "Trying to persist a preference based on a proxy class.");
361 * Construct a unique key using the CdmBase object's uuid
366 public static String
getPreferenceKey(IDefinedTerm definedTerm
) {
367 definedTerm
= HibernateProxyHelper
.deproxy(definedTerm
);
368 String key
= definedTerm
.getClass().getName().concat(".")
369 .concat(definedTerm
.getUuid().toString());
370 if (key
.contains("javassist")) {
371 MessagingUtils
.warn(PreferencesUtil
.class,
372 "Trying to persist a preference based on a proxy class.");
378 * Retrieves search preferences from the preference store
380 * @return an {@link ITaxonServiceConfigurator} to pass to search methods
382 public static IFindTaxaAndNamesConfigurator
getSearchConfigurator() {
383 IFindTaxaAndNamesConfigurator configurator
= initializeSearchConfigurator();
385 configurator
.setDoTaxa(getPreferenceStore().getBoolean(
386 TAXON_SERVICE_CONFIGURATOR_TAXA
));
387 configurator
.setDoSynonyms(getPreferenceStore().getBoolean(
388 TAXON_SERVICE_CONFIGURATOR_SYNONYMS
));
389 configurator
.setDoNamesWithoutTaxa(getPreferenceStore().getBoolean(
390 TAXON_SERVICE_CONFIGURATOR_NAMES
));
391 configurator
.setDoTaxaByCommonNames(getPreferenceStore().getBoolean(
392 TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
));
393 //configurator.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.valueOf(getPreferenceStore().getString(TAXON_SERVICE_CONFIGURATOR_MATCH_MODE)));
399 * create new preferences, setting all search options to true
402 * {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
405 public static IFindTaxaAndNamesConfigurator
initializeSearchConfigurator() {
406 IFindTaxaAndNamesConfigurator configurator
= new FindTaxaAndNamesConfiguratorImpl();
408 configurator
.setDoTaxa(true);
409 configurator
.setDoSynonyms(true);
410 configurator
.setDoNamesWithoutTaxa(true);
411 configurator
.setDoTaxaByCommonNames(true);
413 configurator
.setTaxonPropertyPath(Arrays
.asList("$", "titleCache",
414 "name", "name.$", "relationsFromThisTaxon.$"));
416 configurator
.setSynonymPropertyPath(Arrays
.asList("$", "titleCache",
417 "name", "name.$", "synonymRelations.relatedTo.*"));
420 // match mode is a simple like, actually all other match modes are kind
423 .setMatchMode(eu
.etaxonomy
.cdm
.persistence
.query
.MatchMode
.ANYWHERE
);
424 // we set page number and size here as this should always be unlimited
425 configurator
.setPageNumber(0);
426 // TODO currently limit results to 10000
427 configurator
.setPageSize(10000);
433 * Store search preferences
435 * @param configurator
437 * {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
440 public static void setSearchConfigurator(
441 IFindTaxaAndNamesConfigurator configurator
) {
442 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_TAXA
,
443 configurator
.isDoTaxa());
444 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_SYNONYMS
,
445 configurator
.isDoSynonyms());
446 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_NAMES
,
447 configurator
.isDoNamesWithoutTaxa());
448 getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES
,
449 configurator
.isDoTaxaByCommonNames());
454 * firePreferencesChanged
458 * a {@link java.lang.Class} object.
460 public static void firePreferencesChanged(Class clazz
) {
461 getPreferenceStore().firePropertyChangeEvent(PREFERRED_TERMS_CHANGE
,
466 * Set default values for preferences
468 public static void setDefaults() {
469 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_TAXA
, true);
470 getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_SYNONYMS
,
472 getPreferenceStore().setDefault(EDIT_MAP_SERVICE_ACCES_POINT
,
473 "http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php");
474 //FIXME : changed default for SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
475 getPreferenceStore().setDefault(SHOULD_CONNECT_AT_STARTUP
, false);
476 getPreferenceStore().setDefault(OPENURL_ACCESS_POINT
,
477 "http://www.biodiversitylibrary.org/openurl");
478 getPreferenceStore().setDefault(OPENURL_IMAGE_MAX_WIDTH
, "1000");
479 getPreferenceStore().setDefault(OPENURL_IMAGE_MAX_HEIGHT
, "1000");
480 getPreferenceStore().setDefault(IPreferenceKeys
.DISTRIBUTION_AREA_PREFRENCES_ACTIVE
, false);
481 getPreferenceStore().setDefault(CHECKLIST_ID_IN_VOCABULARY
, true);
482 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS
, true);
483 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP_CACHE
, true);
484 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP
, true);
485 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_HYBRID
, true);
486 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_LSID
, true);
487 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP
, true);
488 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NAMECACHE
, true);
489 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE
, true);
490 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE
, true);
491 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS
, true);
492 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE
, true);
493 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_RANK
, true);
494 getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION
, true);
495 getPreferenceStore().setDefault(SORT_NODES_NATURALLY
, false);
496 getPreferenceStore().setDefault(SORT_NODES_ALPHABETICALLY
, false);
502 * checkNomenclaturalCode
505 public static void checkNomenclaturalCode() {
506 // First time Editor is opened, no nomenclatural code has been set
509 if (PreferencesUtil
.getPreferredNomenclaturalCode(true) == null) {
510 PreferencesUtil
.setPreferredNomenclaturalCode(NomenclaturalCode
.ICNAFP
, true);
516 public static void setNomenclaturalCodePreferences(){
517 ICdmRepository controller
;
518 controller
= CdmStore
.getCurrentApplicationConfiguration();
519 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.NomenclaturalCode
);
520 CdmPreference preference
= null;
521 if (controller
== null){
524 preference
= controller
.getPreferenceService().find(key
);
525 if (preference
== null){
528 getPreferenceStore().setValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY
, preference
.isAllowOverride());
530 int index
= StringUtils
.lastIndexOf(preference
.getValue(), ".");
531 UUID uuid
= UUID
.fromString(preference
.getValue().substring(index
+1, preference
.getValue().length()));
532 NomenclaturalCode preferredCode
= NomenclaturalCode
.getByUuid(uuid
);
534 getPreferenceStore().setValue(CDM_NOMENCLATURAL_CODE_KEY
,
535 getPreferenceKey(preferredCode
));
537 if (!preference
.isAllowOverride()){
538 getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY
,
539 getPreferenceKey(preferredCode
));
543 public static void checkDefaultLanguage(){
544 if(PreferencesUtil
.getPreferredDefaultLangugae() == null){
545 Shell shell
= AbstractUtility
.getShell();
546 int open
= new DefaultLanguageDialog(shell
).open();
547 if(open
== Window
.OK
){
548 PlatformUI
.getWorkbench().restart();
551 //TODO:In case of a reinstall, the config.ini will be overwritten
552 // here you create config.ini with the stored key from preferences
558 * getMapServiceAccessPoint
561 * @return a {@link java.lang.String} object.
563 public static String
getMapServiceAccessPoint() {
564 return getPreferenceStore().getString(EDIT_MAP_SERVICE_ACCES_POINT
);
569 * shouldConnectAtStartUp
574 public static boolean shouldConnectAtStartUp() {
575 //FIXME : force SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
576 //return getPreferenceStore().getBoolean(SHOULD_CONNECT_AT_STARTUP);
582 * getDefaultFeatureTreeForTextualDescription
585 * @return a {@link eu.etaxonomy.cdm.model.description.FeatureTree} object.
587 public static FeatureTree
getDefaultFeatureTreeForTextualDescription() {
588 String uuidString
= getPreferenceStore().getString(
589 FEATURE_TREE_DEFAULT_TEXT
);
590 return CdmUtils
.isEmpty(uuidString
) ?
null : CdmStore
.getService(
591 IFeatureTreeService
.class).load(UUID
.fromString(uuidString
));
596 * getDefaultFeatureTreeForStructuredDescription
599 * @return a {@link eu.etaxonomy.cdm.model.description.FeatureTree} object.
601 public static FeatureTree
getDefaultFeatureTreeForStructuredDescription() {
602 String uuidString
= getPreferenceStore().getString(
603 FEATURE_TREE_DEFAULT_STRUCTURE
);
604 return CdmUtils
.isEmpty(uuidString
) ?
null : CdmStore
.getService(
605 IFeatureTreeService
.class).load(UUID
.fromString(uuidString
));
610 * setSortRanksHierarchichally
616 public static void setSortRanksHierarchichally(boolean selection
) {
617 getPreferenceStore().setValue(SORT_RANKS_HIERARCHICHALLY
, selection
);
622 * getSortRanksHierarchichally
627 public static boolean getSortRanksHierarchichally() {
628 return getPreferenceStore().getBoolean(SORT_RANKS_HIERARCHICHALLY
);
631 public static boolean isMultilanguageTextEditingCapability() {
632 return getPreferenceStore().getBoolean(
633 MULTILANGUAGE_TEXT_EDITING_CAPABILITY
);
636 public static Language
getGlobalLanguage() {
639 String languageUuidString
= getPreferenceStore().getString(
640 GLOBAL_LANGUAGE_UUID
);
642 if(!CdmStore
.isActive()) {
643 MessagingUtils
.noDataSourceWarningDialog(languageUuidString
);
647 if (CdmUtils
.isBlank(languageUuidString
)) {
648 return Language
.getDefaultLanguage();
651 UUID languageUuid
= UUID
.fromString(languageUuidString
);
652 return (Language
) CdmStore
.getService(ITermService
.class).load(
656 public static void setGlobalLanguage(Language language
) {
657 if(language
!= null) {
658 getPreferenceStore().setValue(GLOBAL_LANGUAGE_UUID
,language
.getUuid().toString());
659 CdmStore
.setDefaultLanguage(language
);
667 public static Map
<MarkerType
, Boolean
> getEditMarkerTypePreferences() {
668 List
<MarkerType
> markerTypes
= CdmStore
.getTermManager()
669 .getPreferredTerms(MarkerType
.class);
671 Map
<MarkerType
, Boolean
> result
= new HashMap
<MarkerType
, Boolean
>();
673 for (MarkerType markerType
: markerTypes
) {
674 String name
= getMarkerTypeEditingPreferenceKey(markerType
);
675 Boolean value
= getPreferenceStore().getBoolean(name
);
677 result
.put(markerType
, value
);
684 * @param markerTypeEditingMap
686 public static void setEditMarkerTypePreferences(
687 Map
<MarkerType
, Boolean
> markerTypeEditingMap
) {
688 for (MarkerType markerType
: markerTypeEditingMap
.keySet()) {
689 String name
= getMarkerTypeEditingPreferenceKey(markerType
);
690 getPreferenceStore().setValue(name
,
691 markerTypeEditingMap
.get(markerType
));
696 private static String
getMarkerTypeEditingPreferenceKey(
697 MarkerType markerType
) {
698 markerType
= HibernateProxyHelper
.deproxy(markerType
);
699 return markerType
.getClass().getName() + EDIT_MARKER_TYPE_PREFIX
;
704 * setEditMarkerTypePreference
708 * a {@link org.eclipse.ui.IEditorInput} object.
710 * a {@link eu.etaxonomy.cdm.model.common.MarkerType} object.
714 public static void setEditMarkerTypePreference(MarkerType markerType
,
716 getPreferenceStore().setValue(
717 getMarkerTypeEditingPreferenceKey(markerType
), edit
);
723 public static DerivedUnitFacadeConfigurator
getDerivedUnitConfigurator() {
724 DerivedUnitFacadeConfigurator configurator
= DerivedUnitFacadeConfigurator
726 configurator
.setMoveDerivedUnitMediaToGallery(true);
727 configurator
.setMoveFieldObjectMediaToGallery(true);
732 * This method will write language properties to the config.ini located in the configuration folder
733 * of the Taxonomic Ediitor. <b>This method is only used to set the default language for Taxonomic Editor.</b>
735 * @param setLanguage 0 is for german and 1 for english.
736 * @throws IOException
738 public void writePropertyToConfigFile(int setLanguage
) throws IOException
{
739 File file
= org
.eclipse
.core
.runtime
.preferences
.ConfigurationScope
.INSTANCE
.getLocation().toFile();
740 //give warning to user if the directory has no write access
742 throw new IOException();
744 Properties properties
= load(file
.getAbsolutePath()+"/config.ini");
747 properties
.setProperty("osgi.nl", "de");
748 PreferencesUtil
.getPreferenceStore().setValue(IPreferenceKeys
.DEFAULT_LANGUAGE_EDITOR
, "de");
751 properties
.setProperty("osgi.nl", "en");
752 PreferencesUtil
.getPreferenceStore().setValue(IPreferenceKeys
.DEFAULT_LANGUAGE_EDITOR
, "en");
757 save(file
+"/config.ini", properties
);
761 * This method loads a property from a given file and returns it.
765 * @throws IOException
767 private Properties
load(String filename
) throws IOException
{
768 FileInputStream in
= new FileInputStream(filename
);
769 Properties prop
= new Properties();
776 * This method saves a property to the specified file.
780 * @throws IOException
782 private void save(String filename
, Properties properties
) throws IOException
{
783 FileOutputStream fos
= new FileOutputStream(filename
);
784 properties
.store(fos
, "");
789 * Saves a list of P2 Metadata Repositories as string with specified delimiters
793 public static void setP2Repositories(List
<MetadataRepositoryElement
> p2Repos
) {
794 StringBuilder sb
= new StringBuilder();
795 for(MetadataRepositoryElement p2Repo
: p2Repos
) {
796 sb
.append(P2_REPOSITORIES_DELIM
);
797 if(p2Repo
.getName() == null || p2Repo
.getName().isEmpty()) {
800 sb
.append(p2Repo
.getName());
802 sb
.append(P2_REPOSITORY_FIELDS_DELIM
);
803 sb
.append(p2Repo
.getLocation().toString());
804 sb
.append(P2_REPOSITORY_FIELDS_DELIM
);
805 sb
.append(String
.valueOf(p2Repo
.isEnabled()));
807 getPreferenceStore().setValue(P2_REPOSITORY_LIST
, sb
.toString());
812 * Retrieves a list of previously saved P2 repositories
816 public static List
<MetadataRepositoryElement
> getP2Repositories() {
817 List
<MetadataRepositoryElement
> p2Repos
= new ArrayList
<MetadataRepositoryElement
>();
818 String p2ReposPref
= getPreferenceStore().getString(P2_REPOSITORY_LIST
);
819 if(p2ReposPref
!= null && !p2ReposPref
.isEmpty()) {
820 StringTokenizer p2ReposPrefST
= new StringTokenizer(p2ReposPref
,P2_REPOSITORIES_DELIM
);
822 while(p2ReposPrefST
.hasMoreTokens()) {
823 String p2RepoStr
= p2ReposPrefST
.nextToken();
824 StringTokenizer p2ReposStrST
= new StringTokenizer(p2RepoStr
,P2_REPOSITORY_FIELDS_DELIM
);
825 if(p2ReposStrST
.countTokens()==3) {
826 String nickname
= p2ReposStrST
.nextToken();
829 uri
= new URI(p2ReposStrST
.nextToken());
830 } catch (URISyntaxException e
) {
833 boolean enabled
= Boolean
.parseBoolean(p2ReposStrST
.nextToken());
834 MetadataRepositoryElement mre
= new MetadataRepositoryElement(null, uri
, true);
835 mre
.setNickname(nickname
);
836 mre
.setEnabled(enabled
);
846 * enables/disables nested composite. <br>
848 * @param ctrl - Composite to be en-/disabeld
849 * @param enabled - boolean
851 public static void recursiveSetEnabled(Control ctrl
, boolean enabled
) {
852 if (ctrl
instanceof Composite
) {
853 Composite comp
= (Composite
) ctrl
;
854 for (Control c
: comp
.getChildren()) {
855 recursiveSetEnabled(c
, enabled
);
858 ctrl
.setEnabled(enabled
);
864 * getSortRanksNaturally
869 public static boolean getSortNodesNaturally() {
870 return getPreferenceStore().getBoolean(SORT_NODES_NATURALLY
);
875 * setSortRanksNaturally
881 public static void setSortNodesNaturally(boolean selection
) {
882 getPreferenceStore().setValue(SORT_NODES_NATURALLY
, selection
);
888 * getSortRanksNaturally
893 public static boolean getSortNodesStrictlyAlphabetically() {
894 return getPreferenceStore().getBoolean(SORT_NODES_ALPHABETICALLY
);
899 * setSortRanksNaturally
905 public static void setSortNodesStrictlyAlphabetically(boolean selection
) {
906 getPreferenceStore().setValue(SORT_NODES_ALPHABETICALLY
, selection
);
911 * setStoreNavigatorState
917 public static boolean isStoreNavigatorState() {
918 return getPreferenceStore().getBoolean(RESTORE_NAVIGATOR_STATE
);
924 * setStoreNavigatorState
930 public static void setStoreNavigatorState(boolean selection
) {
931 getPreferenceStore().setValue(RESTORE_NAVIGATOR_STATE
, selection
);
938 public static boolean isShowUpWidgetIsDisposedMessages() {
939 return getPreferenceStore().getBoolean(IS_SHOW_UP_WIDGET_IS_DISPOSED
);
941 public static void setShowUpWidgetIsDisposedMessages(boolean selection
) {
942 getPreferenceStore().setValue(IS_SHOW_UP_WIDGET_IS_DISPOSED
, selection
);
948 public static boolean isShowIdInVocabularyInChecklistEditor() {
949 return getPreferenceStore().getBoolean(IPreferenceKeys
.CHECKLIST_ID_IN_VOCABULARY
);
951 public static void setShowIdInVocabularyInChecklistEditor(boolean selection
) {
952 getPreferenceStore().setValue(CHECKLIST_ID_IN_VOCABULARY
, selection
);
958 public static boolean isShowRankInChecklistEditor() {
959 return getPreferenceStore().getBoolean(IPreferenceKeys
.CHECKLIST_SHOW_RANK
);
961 public static void setShowRankInChecklistEditor(boolean selection
) {
962 getPreferenceStore().setValue(CHECKLIST_SHOW_RANK
, selection
);
970 public static NameDetailsConfigurator
setPreferredNameDetailsConfiguration( boolean local
) {
971 NameDetailsConfigurator config
= new NameDetailsConfigurator(true);
973 CdmPreference preference
= null;
976 preference
= getPreferenceFromDB(PreferencePredicate
.NameDetailsView
);
978 if (preference
== null){
982 getPreferenceStore().setValue(ALLOW_OVERRIDE_NAMEDETAILS
, preference
.isAllowOverride());
984 //the preference value is build like this:
985 //<section1>:true;<section2>:false....
987 String value
= preference
.getValue();
988 String
[] sections
= value
.split(";");
989 Map
<String
, Boolean
> sectionMap
= new HashMap
<String
, Boolean
>();
990 String
[] sectionValues
;
991 for (String sectionValue
: sections
){
992 sectionValues
= sectionValue
.split(":");
993 sectionMap
.put(sectionValues
[0], Boolean
.valueOf(sectionValues
[1]));
998 getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_TAXON
,
999 (sectionMap
.get("taxon")));
1000 config
.setTaxonSectionActivated(sectionMap
.get("taxon"));
1002 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_LSID
,
1003 (sectionMap
.get("lsid")));
1004 config
.setLSIDActivated(sectionMap
.get("lsid"));
1006 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE
,
1007 (sectionMap
.get("nc")));
1008 config
.setNomenclaturalCodeActived(sectionMap
.get("nc"));
1010 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE
,
1011 (sectionMap
.get("ap")));
1012 config
.setAppendedPhraseActivated(sectionMap
.get("ap"));
1014 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_RANK
,
1015 (sectionMap
.get("rank")));
1016 config
.setRankActivated(sectionMap
.get("rank"));
1019 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS
,
1020 (sectionMap
.get("atomisedEpithets")));
1021 config
.setAtomisedEpithetsActivated(sectionMap
.get("atomisedEpithets"));
1023 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP
,
1024 (sectionMap
.get("author")));
1025 config
.setAuthorshipSectionActivated(sectionMap
.get("author"));
1027 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE
,
1028 (sectionMap
.get("nomRef")));
1029 config
.setNomenclaturalReferenceSectionActivated(sectionMap
.get("nomRef"));
1031 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS
,
1032 (sectionMap
.get("nomStat")));
1033 config
.setNomenclaturalStatusSectionActivated(sectionMap
.get("nomStat"));
1036 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE
,
1037 (sectionMap
.get("protologue")));
1038 config
.setProtologueActivated(sectionMap
.get("protologue"));
1040 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION
,
1041 (sectionMap
.get("typeDes")));
1042 config
.setTypeDesignationSectionActivated(sectionMap
.get("typeDes"));
1044 getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP
,
1045 (sectionMap
.get("nameRelation")));
1046 config
.setNameRelationsSectionActivated(sectionMap
.get("nameRelation"));
1051 public static boolean getIsDeterminiationOnlyForFieldUnit(boolean local
){
1052 CdmPreference preference
= null;
1055 preference
= getPreferenceFromDB(PreferencePredicate
.DeterminationOnlyForFieldUnits
);
1057 if (preference
== null){
1058 return getPreferenceStore().getBoolean(DETERMINATION_ONLY_FOR_FIELD_UNITS
);
1060 return Boolean
.valueOf(preference
.getValue());
1063 public static boolean getIsShowCollectingAreasInGeneralSection(boolean local
){
1064 CdmPreference preference
= null;
1067 preference
= getPreferenceFromDB(PreferencePredicate
.ShowCollectingAreasInGeneralSection
);
1069 if (preference
== null){
1070 return getPreferenceStore().getBoolean(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION
);
1072 return Boolean
.valueOf(preference
.getValue());
1075 public static boolean getIsShowTaxonAssociations(boolean local
){
1076 CdmPreference preference
= null;
1079 preference
= getPreferenceFromDB(PreferencePredicate
.ShowTaxonAssociations
);
1081 if (preference
== null){
1082 return getPreferenceStore().getBoolean(SHOW_TAXON_ASSOCIATIONS
);
1084 return Boolean
.valueOf(preference
.getValue());
1087 // public static boolean getBioCaseProvider(boolean local){
1088 // CdmPreference preference = null;
1091 // preference = getPreferenceFromDB(PreferencePredicate.BioCaseProvider);
1093 // if (preference == null){
1094 // return getPreferenceStore().getBoolean(SHOW_TAXON_ASSOCIATIONS);
1096 // return Boolean.valueOf(preference.getValue());
1102 * setAbcdConfigurator
1105 * @param preferredConfiguration
1106 * a {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
1109 public static Abcd206ImportConfigurator
getAbcdImportConfigurationPreference(boolean useLocal
) {
1111 Abcd206ImportConfigurator config
= Abcd206ImportConfigurator
.NewInstance(null,null);
1114 config
.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS
));
1116 config
.setAddMediaAsMediaSpecimen(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN
));
1118 config
.setAllowReuseOtherClassifications(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS
));
1119 config
.setDeduplicateClassifications(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS
));
1120 config
.setDeduplicateReferences(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES
));
1122 config
.setGetSiblings(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS
));
1123 config
.setIgnoreAuthorship(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP
));
1124 config
.setIgnoreImportOfExistingSpecimen(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN
));
1125 config
.setMapUnitIdToAccessionNumber(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER
));
1126 config
.setMapUnitIdToBarcode(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE
));
1127 config
.setMapUnitIdToCatalogNumber(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER
));
1128 config
.setMoveNewTaxaToDefaultClassification(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION
));
1129 config
.setOverwriteExistingSpecimens(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN
));
1130 config
.setReuseExistingDescriptiveGroups(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS
));
1131 config
.setReuseExistingMetaData(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA
));
1132 config
.setReuseExistingTaxaWhenPossible(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE
));
1136 ICdmRepository controller
;
1137 controller
= CdmStore
.getCurrentApplicationConfiguration();
1138 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewDatabaseInstance(), PreferencePredicate
.AbcdImportConfig
);
1139 CdmPreference preference
= null;
1140 if (controller
== null){
1143 preference
= controller
.getPreferenceService().find(key
);
1144 if (preference
== null){
1147 String configString
= preference
.getValue();
1148 String
[] configArray
= configString
.split(";");
1150 for (String configItem
: configArray
){
1151 String
[] keyValue
= configItem
.split(":");
1152 String keyString
= keyValue
[0];
1153 String valueString
= keyValue
[1];
1154 if (keyString
.equals("ignoreImportOfExistingSpecimen")){
1155 config
.setIgnoreImportOfExistingSpecimen(Boolean
.valueOf(valueString
));
1156 }else if (keyString
.equals("addIndividualsAssociationsSuchAsSpecimenAndObservations")){
1157 config
.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(Boolean
.valueOf(valueString
));
1158 }else if (keyString
.equals("reuseExistingTaxaWhenPossible")){
1159 config
.setReuseExistingTaxaWhenPossible(Boolean
.valueOf(valueString
));
1160 }else if (keyString
.equals("ignoreAuthorship")){
1161 config
.setIgnoreAuthorship(Boolean
.valueOf(valueString
));
1162 }else if (keyString
.equals("addMediaAsMediaSpecimen")){
1163 config
.setAddMediaAsMediaSpecimen(Boolean
.valueOf(valueString
));
1164 }else if (keyString
.equals("reuseExistingMetaData")){
1165 config
.setReuseExistingMetaData(Boolean
.valueOf(valueString
));
1166 }else if (keyString
.equals("reuseExistingDescriptiveGroups")){
1167 config
.setReuseExistingDescriptiveGroups(Boolean
.valueOf(valueString
));
1168 }else if (keyString
.equals("allowReuseOtherClassifications")){
1169 config
.setAllowReuseOtherClassifications(Boolean
.valueOf(valueString
));
1170 }else if (keyString
.equals("deduplicateReferences")){
1171 config
.setDeduplicateReferences(Boolean
.valueOf(valueString
));
1172 }else if (keyString
.equals("deduplicateClassifications")){
1173 config
.setDeduplicateClassifications(Boolean
.valueOf(valueString
));
1174 }else if (keyString
.equals("moveNewTaxaToDefaultClassification")){
1175 config
.setMoveNewTaxaToDefaultClassification(Boolean
.valueOf(valueString
));
1176 }else if (keyString
.equals("mapUnitIdToCatalogNumber")){
1177 config
.setMapUnitIdToCatalogNumber(Boolean
.valueOf(valueString
));
1178 }else if (keyString
.equals("mapUnitIdToAccessionNumber")){
1179 config
.setMapUnitIdToAccessionNumber(Boolean
.valueOf(valueString
));
1180 }else if (keyString
.equals("mapUnitIdToBarcode")){
1181 config
.setMapUnitIdToBarcode(Boolean
.valueOf(valueString
));
1182 }else if (keyString
.equals("overwriteExistingSpecimens")){
1183 config
.setOverwriteExistingSpecimens(Boolean
.valueOf(valueString
));
1185 logger
.debug("This key of the abcd configurator needs to be added to the transformer: " + keyString
);