Revision 11847891
Added by Katja Luther almost 5 years ago
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java | ||
---|---|---|
27 | 27 |
|
28 | 28 |
import org.apache.commons.lang.StringUtils; |
29 | 29 |
import org.apache.log4j.Logger; |
30 |
import org.eclipse.core.runtime.preferences.ConfigurationScope; |
|
31 |
import org.eclipse.core.runtime.preferences.IEclipsePreferences; |
|
30 | 32 |
import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement; |
31 | 33 |
import org.eclipse.jface.preference.IPreferenceStore; |
32 | 34 |
import org.eclipse.jface.window.Window; |
... | ... | |
34 | 36 |
import org.eclipse.swt.widgets.Control; |
35 | 37 |
import org.eclipse.swt.widgets.Shell; |
36 | 38 |
import org.eclipse.ui.PlatformUI; |
39 |
import org.osgi.service.prefs.BackingStoreException; |
|
40 |
import org.osgi.service.prefs.Preferences; |
|
37 | 41 |
|
38 | 42 |
import eu.etaxonomy.cdm.api.application.ICdmRepository; |
39 | 43 |
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeConfigurator; |
... | ... | |
81 | 85 |
* @created 05.12.2008 |
82 | 86 |
*/ |
83 | 87 |
public class PreferencesUtil implements IPreferenceKeys { |
88 |
private final static String EDITOR_PREFERENCES_NODE = "eu.etaxonomy.taxeditor"; |
|
84 | 89 |
|
85 |
public static final String PREFERRED_TERMS_CHANGE = "preferred_terms";
|
|
90 |
public static final String PREFERRED_TERMS_CHANGE = "preferred_terms";
|
|
86 | 91 |
|
87 |
public static final String P2_REPOSITORIES_DELIM = ","; |
|
88 |
public static final String P2_REPOSITORY_FIELDS_DELIM = ";"; |
|
92 |
public static final String P2_REPOSITORIES_DELIM = ","; |
|
93 |
public static final String P2_REPOSITORY_FIELDS_DELIM = ";"; |
|
94 |
public static final String SUBJECT_DELIM = "/"; |
|
95 |
private final static Logger logger = Logger.getLogger(PreferencesUtil.class); |
|
89 | 96 |
|
90 |
private final static Logger logger = Logger.getLogger(PreferencesUtil.class); |
|
97 |
public static IPreferenceStore getPreferenceStore() { |
|
98 |
return TaxeditorStorePlugin.getDefault().getPreferenceStore(); |
|
99 |
} |
|
100 |
|
|
101 |
public static String[] extractSubjectParts(String subject){ |
|
102 |
String[] result = subject.split("/"); |
|
103 |
return result; |
|
104 |
} |
|
105 |
|
|
106 |
public static IEclipsePreferences getEditorPreferences(){ |
|
107 |
return ConfigurationScope.INSTANCE.getNode(EDITOR_PREFERENCES_NODE); |
|
108 |
} |
|
109 |
|
|
110 |
public static String getPreferenceValue(PrefKey prefKey){ |
|
111 |
try { |
|
112 |
if(getEditorPreferences().nodeExists(prefKey.getPredicate())){ |
|
113 |
Preferences predicateNode = getEditorPreferences().node(prefKey.getPredicate()); |
|
114 |
String[] splittedSubject = extractSubjectParts(prefKey.getSubject()); |
|
115 |
String value = predicateNode.get(splittedSubject[splittedSubject.length-1], PreferencePredicate.getByKey(prefKey.getPredicate()).getDefaultValue() != null? PreferencePredicate.getByKey(prefKey.getPredicate()).getDefaultValue().toString(): ""); |
|
116 |
int index = splittedSubject.length -2; |
|
117 |
while (value != null && index >= 0){ |
|
118 |
value = predicateNode.get(splittedSubject[index], prefKey.getPredicate()); |
|
119 |
index--; |
|
120 |
} |
|
121 |
return value; |
|
122 |
} |
|
91 | 123 |
|
92 |
public static IPreferenceStore getPreferenceStore() { |
|
93 |
return TaxeditorStorePlugin.getDefault().getPreferenceStore(); |
|
94 |
} |
|
124 |
} catch (BackingStoreException e) { |
|
125 |
// TODO Auto-generated catch block |
|
126 |
e.printStackTrace(); |
|
127 |
} |
|
128 |
return null; |
|
129 |
} |
|
95 | 130 |
|
96 |
private static String prefKey(String name) { |
|
97 |
return name + "_"+ ((CdmRemoteSource)CdmStore.getActiveCdmSource()).toString(); |
|
98 |
} |
|
131 |
public static List<CdmPreference> getPreference(PreferencePredicate prefPredicate){ |
|
132 |
try { |
|
133 |
List<CdmPreference> prefs = new ArrayList(); |
|
134 |
CdmPreference pref; |
|
135 |
PreferenceSubject subject; |
|
136 |
if(getEditorPreferences().nodeExists(prefPredicate.getKey())){ |
|
137 |
Preferences predicateNode = getEditorPreferences().node(prefPredicate.getKey()); |
|
138 |
for (String childName: predicateNode.childrenNames()){ |
|
139 |
Preferences child = predicateNode.node(childName); |
|
140 |
String subjectString = ""; |
|
141 |
subjectString = createSubjectStringForChildNodes(childName, child); |
|
142 |
String value = child.get(subjectString, ""); |
|
143 |
subject = PreferenceSubject.NewInstance(subjectString); |
|
144 |
pref = CdmPreference.NewInstance(subject, prefPredicate, value); |
|
145 |
prefs.add(pref); |
|
146 |
} |
|
147 |
|
|
148 |
} |
|
149 |
|
|
150 |
} catch (BackingStoreException e) { |
|
151 |
// TODO Auto-generated catch block |
|
152 |
e.printStackTrace(); |
|
153 |
} |
|
154 |
return null; |
|
155 |
} |
|
156 |
|
|
157 |
/** |
|
158 |
* @param childName |
|
159 |
* @param child |
|
160 |
*/ |
|
161 |
private static String createSubjectStringForChildNodes(String subject, Preferences parent) { |
|
162 |
try { |
|
163 |
for (String childName: parent.childrenNames()){ |
|
164 |
subject = childName+SUBJECT_DELIM+subject; |
|
165 |
Preferences child = parent.node(childName); |
|
166 |
createSubjectStringForChildNodes(subject, child); |
|
167 |
} |
|
168 |
} catch (BackingStoreException e) { |
|
169 |
// TODO Auto-generated catch block |
|
170 |
e.printStackTrace(); |
|
171 |
} |
|
172 |
return subject; |
|
99 | 173 |
|
100 |
public static String prefOverrideKey(String name) { |
|
174 |
} |
|
175 |
|
|
176 |
private static String prefKey(String name) { |
|
177 |
return name + "_"+ ((CdmRemoteSource)CdmStore.getActiveCdmSource()).toString(); |
|
178 |
} |
|
179 |
|
|
180 |
public static String prefOverrideKey(String name) { |
|
101 | 181 |
return name + "_OVERRIDE_"; |
102 | 182 |
} |
103 | 183 |
|
... | ... | |
309 | 389 |
return result; |
310 | 390 |
} |
311 | 391 |
|
312 |
public static CdmPreference setPreferredNomenclaturalCode(
|
|
313 |
String preferenceValue, boolean local) {
|
|
314 |
if (local){
|
|
315 |
setStringValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
|
|
316 |
preferenceValue);
|
|
317 |
}
|
|
318 |
else{
|
|
319 |
ICdmRepository controller;
|
|
320 |
controller = CdmStore.getCurrentApplicationConfiguration();
|
|
321 |
if (controller == null){
|
|
392 |
public static CdmPreference setPreferredNomenclaturalCode(
|
|
393 |
String preferenceValue, boolean local) {
|
|
394 |
if (local){
|
|
395 |
setStringValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
|
|
396 |
preferenceValue);
|
|
397 |
}
|
|
398 |
else{
|
|
399 |
ICdmRepository controller;
|
|
400 |
controller = CdmStore.getCurrentApplicationConfiguration();
|
|
401 |
if (controller == null){
|
|
322 | 402 |
return null; |
323 | 403 |
} |
324 |
PrefKey key = null;
|
|
325 |
try{
|
|
326 |
key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode);
|
|
327 |
}catch (Exception e){
|
|
328 |
System.out.println(e.getStackTrace());
|
|
329 |
}
|
|
330 |
CdmPreference preference = null;
|
|
331 |
|
|
332 |
if (preferenceValue == null){
|
|
333 |
preference = controller.getPreferenceService().find(key);
|
|
334 |
if (preference == null){
|
|
335 |
return null;
|
|
336 |
} else{
|
|
337 |
setStringValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
|
|
338 |
preference.getValue());
|
|
339 |
|
|
340 |
return preference;
|
|
341 |
}
|
|
342 |
} else{
|
|
343 |
preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode, preferenceValue);
|
|
344 |
controller.getPreferenceService().set(preference);
|
|
345 |
|
|
346 |
}
|
|
347 |
}
|
|
404 |
PrefKey key = null;
|
|
405 |
try{
|
|
406 |
key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode);
|
|
407 |
}catch (Exception e){
|
|
408 |
System.out.println(e.getStackTrace());
|
|
409 |
}
|
|
410 |
CdmPreference preference = null;
|
|
411 |
|
|
412 |
if (preferenceValue == null){
|
|
413 |
preference = controller.getPreferenceService().find(key);
|
|
414 |
if (preference == null){
|
|
415 |
return null;
|
|
416 |
} else{
|
|
417 |
setStringValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
|
|
418 |
preference.getValue());
|
|
419 |
|
|
420 |
return preference;
|
|
421 |
}
|
|
422 |
} else{
|
|
423 |
preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode, preferenceValue);
|
|
424 |
controller.getPreferenceService().set(preference);
|
|
425 |
|
|
426 |
}
|
|
427 |
}
|
|
348 | 428 |
return null; |
349 | 429 |
|
350 | 430 |
|
351 | 431 |
|
352 |
}
|
|
432 |
}
|
|
353 | 433 |
|
354 | 434 |
public static void setPreferredNomenclaturalCode( |
355 | 435 |
CdmPreference preference) { |
... | ... | |
370 | 450 |
|
371 | 451 |
} |
372 | 452 |
|
373 |
public static NomenclaturalCode getPreferredNomenclaturalCode() {
|
|
453 |
public static NomenclaturalCode getPreferredNomenclaturalCode() {
|
|
374 | 454 |
|
375 |
CdmPreference pref = getPreferenceFromDB(PreferencePredicate.NomenclaturalCode);
|
|
455 |
CdmPreference pref = getPreferenceFromDB(PreferencePredicate.NomenclaturalCode);
|
|
376 | 456 |
|
377 | 457 |
|
378 |
String preferredCode;
|
|
379 |
if(pref == null || (pref.isAllowOverride() && getBooleanValue(prefOverrideKey(PreferencePredicate.NomenclaturalCode.getKey())))){
|
|
380 |
preferredCode = getStringValue(
|
|
381 |
PreferencePredicate.NomenclaturalCode.getKey(), true);
|
|
458 |
String preferredCode;
|
|
459 |
if(pref == null || (pref.isAllowOverride() && getBooleanValue(prefOverrideKey(PreferencePredicate.NomenclaturalCode.getKey())))){
|
|
460 |
preferredCode = getStringValue(
|
|
461 |
PreferencePredicate.NomenclaturalCode.getKey(), true);
|
|
382 | 462 |
|
383 |
}else{
|
|
384 |
preferredCode = pref.getValue();
|
|
385 |
}
|
|
386 |
if (StringUtils.isBlank(preferredCode)){
|
|
387 |
preferredCode = getPreferenceKey((NomenclaturalCode)PreferencePredicate.NomenclaturalCode.getDefaultValue());
|
|
388 |
}
|
|
463 |
}else{
|
|
464 |
preferredCode = pref.getValue();
|
|
465 |
}
|
|
466 |
if (StringUtils.isBlank(preferredCode)){
|
|
467 |
preferredCode = getPreferenceKey((NomenclaturalCode)PreferencePredicate.NomenclaturalCode.getDefaultValue());
|
|
468 |
}
|
|
389 | 469 |
|
390 |
return getPreferredNomenclaturalCode(preferredCode);
|
|
470 |
return getPreferredNomenclaturalCode(preferredCode);
|
|
391 | 471 |
|
392 |
}
|
|
472 |
}
|
|
393 | 473 |
|
394 | 474 |
public static NomenclaturalCode getPreferredNomenclaturalCode(String preferenceKeyNomenclaturalCode) { |
395 | 475 |
|
... | ... | |
401 | 481 |
return null; |
402 | 482 |
} |
403 | 483 |
|
404 |
public static boolean isShowTaxonAssociations(){
|
|
484 |
public static boolean isShowTaxonAssociations(){
|
|
405 | 485 |
boolean result = getBooleanValue(PreferencePredicate.ShowTaxonAssociations.getKey()); |
406 | 486 |
return result; |
407 | 487 |
} |
408 | 488 |
|
409 |
public static boolean isShowLifeForm(){
|
|
410 |
boolean result = getBooleanValue(PreferencePredicate.ShowLifeForm.getKey());
|
|
411 |
return result;
|
|
489 |
public static boolean isShowLifeForm(){
|
|
490 |
boolean result = getBooleanValue(PreferencePredicate.ShowLifeForm.getKey());
|
|
491 |
return result;
|
|
412 | 492 |
} |
413 | 493 |
|
414 |
public static boolean isDeterminationOnlyForFieldUnits(){
|
|
415 |
boolean result = getBooleanValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey());
|
|
494 |
public static boolean isDeterminationOnlyForFieldUnits(){
|
|
495 |
boolean result = getBooleanValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey());
|
|
416 | 496 |
return result; |
417 | 497 |
} |
418 | 498 |
|
419 |
public static boolean isCollectingAreaInGeneralSection(){
|
|
420 |
boolean result = getBooleanValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey());
|
|
499 |
public static boolean isCollectingAreaInGeneralSection(){
|
|
500 |
boolean result = getBooleanValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey());
|
|
421 | 501 |
return result; |
422 |
}
|
|
502 |
}
|
|
423 | 503 |
|
424 |
public static CdmPreference getPreferenceFromDB(IPreferencePredicate predicate){
|
|
504 |
public static CdmPreference getPreferenceFromDB(IPreferencePredicate predicate){
|
|
425 | 505 |
ICdmRepository controller; |
426 | 506 |
CdmPreference pref = null; |
427 | 507 |
|
... | ... | |
439 | 519 |
|
440 | 520 |
} |
441 | 521 |
|
442 |
public static List<CdmPreference> getPreferencesFromDB(IPreferencePredicate predicate){
|
|
522 |
public static List<CdmPreference> getPreferencesFromDB(IPreferencePredicate predicate){
|
|
443 | 523 |
ICdmRepository controller; |
444 | 524 |
List<CdmPreference> prefs = null; |
445 | 525 |
|
... | ... | |
457 | 537 |
|
458 | 538 |
} |
459 | 539 |
|
460 |
public static void setPreferencesToDB(CdmPreference preference, boolean setDefault){
|
|
540 |
public static void setPreferencesToDB(CdmPreference preference, boolean setDefault){
|
|
461 | 541 |
ICdmRepository controller; |
462 | 542 |
|
463 | 543 |
|
... | ... | |
479 | 559 |
|
480 | 560 |
} |
481 | 561 |
|
482 |
public static CdmPreference getPreferenceFromDB(PrefKey key){
|
|
562 |
public static CdmPreference getPreferenceFromDB(PrefKey key){
|
|
483 | 563 |
ICdmRepository controller; |
484 | 564 |
CdmPreference pref = null; |
485 | 565 |
|
... | ... | |
510 | 590 |
|
511 | 591 |
} |
512 | 592 |
|
513 |
public static String getPreferredDefaultLangugae(){
|
|
514 |
String preferredLanguage = getStringValue(DEFAULT_LANGUAGE_EDITOR);
|
|
515 |
if(StringUtils.isNotEmpty(preferredLanguage) && StringUtils.isNotBlank(preferredLanguage)){
|
|
516 |
return preferredLanguage;
|
|
517 |
}
|
|
518 |
return null;
|
|
519 |
}
|
|
593 |
public static String getPreferredDefaultLangugae(){
|
|
594 |
String preferredLanguage = getStringValue(DEFAULT_LANGUAGE_EDITOR);
|
|
595 |
if(StringUtils.isNotEmpty(preferredLanguage) && StringUtils.isNotBlank(preferredLanguage)){
|
|
596 |
return preferredLanguage;
|
|
597 |
}
|
|
598 |
return null;
|
|
599 |
}
|
|
520 | 600 |
|
521 |
public static boolean isShowMediaPreview(){
|
|
601 |
public static boolean isShowMediaPreview(){
|
|
522 | 602 |
boolean isShowMediaPreview = getBooleanValue(SHOW_MEDIA_PREVIEW); |
523 | 603 |
return isShowMediaPreview; |
524 | 604 |
} |
525 | 605 |
|
526 |
/**
|
|
527 |
* Get the match strategy for the given class that was stored in preferences
|
|
528 |
* or the default strategy if it was not stored in preferences
|
|
529 |
*
|
|
530 |
* @param clazz
|
|
531 |
* a {@link java.lang.Class} object.
|
|
532 |
* @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
|
|
533 |
*/
|
|
534 |
public static IMatchStrategy getMatchStrategy(Class<?> clazz) {
|
|
535 |
String className = clazz.getName();
|
|
536 |
if (getBooleanValue(MATCH_STRATEGY_PREFIX + className)) {
|
|
537 |
IMatchStrategy matchStrategy = getDefaultMatchStrategy(clazz);
|
|
538 |
|
|
539 |
//TODO CacheMatchers (or multiple field matchers in future) are missing here
|
|
540 |
for (FieldMatcher fieldMatcher : matchStrategy.getMatching().getFieldMatchers(false)) {
|
|
541 |
String fieldName = fieldMatcher.getPropertyName();
|
|
542 |
String matchModeName = getStringValue(
|
|
543 |
getMatchStrategyFieldName(className, fieldName));
|
|
544 |
MatchMode matchMode = MatchMode.valueOf(matchModeName);
|
|
545 |
try {
|
|
546 |
matchStrategy.setMatchMode(fieldName, matchMode);
|
|
547 |
} catch (MatchException e) {
|
|
548 |
MessagingUtils.error(PreferencesUtil.class, e);
|
|
549 |
throw new RuntimeException(e);
|
|
550 |
}
|
|
551 |
}
|
|
552 |
|
|
553 |
return matchStrategy;
|
|
554 |
}
|
|
555 |
return getDefaultMatchStrategy(clazz);
|
|
556 |
}
|
|
557 |
|
|
558 |
/**
|
|
559 |
* Stores a matchStrategy into the preference store.
|
|
560 |
*
|
|
561 |
* @param matchStrategy
|
|
562 |
* a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy}
|
|
563 |
* object.
|
|
564 |
*/
|
|
565 |
public static void setMatchStrategy(IMatchStrategy matchStrategy) {
|
|
566 |
String className = "ANY class"; //FIXME was: matchStrategy.getMatchClass().getName(); seems currently not in use
|
|
567 |
setBooleanValue(MATCH_STRATEGY_PREFIX + className, true);
|
|
568 |
|
|
569 |
List<FieldMatcher> fieldMatchers = matchStrategy.getMatching().getFieldMatchers(false);
|
|
570 |
|
|
571 |
for (FieldMatcher fieldMatcher : fieldMatchers) {
|
|
572 |
String fieldName = fieldMatcher.getPropertyName();
|
|
573 |
setStringValue(
|
|
574 |
getMatchStrategyFieldName(className, fieldName),
|
|
575 |
fieldMatcher.getMatchMode().name());
|
|
576 |
}
|
|
577 |
}
|
|
578 |
|
|
579 |
/**
|
|
580 |
* Helper method to create the preference property for a match field.
|
|
581 |
*
|
|
582 |
* @param className
|
|
583 |
* @param fieldName
|
|
584 |
* @return
|
|
585 |
*/
|
|
586 |
private static String getMatchStrategyFieldName(String className,
|
|
587 |
String fieldName) {
|
|
588 |
return MATCH_STRATEGY_PREFIX + className + "." + fieldName;
|
|
589 |
}
|
|
590 |
|
|
591 |
/**
|
|
592 |
* Returns the default match strategy for a given class.
|
|
593 |
*
|
|
594 |
* @param clazz
|
|
595 |
* a {@link java.lang.Class} object.
|
|
596 |
* @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
|
|
597 |
*/
|
|
598 |
public static IMatchStrategy getDefaultMatchStrategy(Class clazz) {
|
|
599 |
return DefaultMatchStrategy.NewInstance(clazz);
|
|
600 |
}
|
|
601 |
|
|
602 |
public static String getDateFormatPattern() {
|
|
603 |
// TODO make this configurable in properties
|
|
604 |
String pattern = "Y-M-d H:m";
|
|
605 |
return pattern;
|
|
606 |
}
|
|
607 |
|
|
608 |
public static <T extends TermBase> void addTermToPreferredTerms(T term) {
|
|
609 |
|
|
610 |
// VocabularyEnum vocabulary =
|
|
611 |
// VocabularyEnum.getVocabularyEnum(term.getClass());
|
|
612 |
//
|
|
613 |
// getPreferenceStore().setValue(getPreferenceKey(term),
|
|
614 |
// VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
|
|
615 |
//
|
|
616 |
// firePreferencesChanged(term.getClass());
|
|
617 |
}
|
|
618 |
|
|
619 |
/**
|
|
620 |
* Construct a unique key using the CdmBase object's uuid
|
|
621 |
*
|
|
622 |
* @param cdmBase
|
|
623 |
* @return
|
|
624 |
*/
|
|
625 |
private static String getPreferenceKey(ICdmBase cdmBase) {
|
|
626 |
cdmBase = HibernateProxyHelper.deproxy(cdmBase);
|
|
627 |
|
|
628 |
String key = cdmBase.getClass().getName().concat(".")
|
|
629 |
.concat(cdmBase.getUuid().toString());
|
|
630 |
if (key.contains("javassist")) {
|
|
631 |
MessagingUtils.info("proxy");
|
|
632 |
}
|
|
633 |
return key;
|
|
634 |
}
|
|
635 |
|
|
636 |
/**
|
|
637 |
* Construct a unique key using the CdmBase object's uuid
|
|
638 |
*
|
|
639 |
* @param cdmBase
|
|
640 |
* @return
|
|
641 |
*/
|
|
642 |
public static String getPreferenceKey(ISimpleTerm simpleTerm) {
|
|
643 |
simpleTerm = HibernateProxyHelper.deproxy(simpleTerm);
|
|
644 |
String key = simpleTerm.getClass().getName().concat(".")
|
|
645 |
.concat(simpleTerm.getUuid().toString());
|
|
646 |
if (key.contains("javassist")) {
|
|
647 |
MessagingUtils.warn(PreferencesUtil.class,
|
|
648 |
"Trying to persist a preference based on a proxy class.");
|
|
649 |
}
|
|
650 |
return key;
|
|
651 |
}
|
|
652 |
|
|
653 |
|
|
654 |
|
|
655 |
/**
|
|
656 |
* Construct a unique key using the CdmBase object's uuid
|
|
657 |
*
|
|
658 |
* @param cdmBase
|
|
659 |
* @return
|
|
660 |
*/
|
|
661 |
public static String getPreferenceKey(IDefinedTerm definedTerm) {
|
|
662 |
definedTerm = HibernateProxyHelper.deproxy(definedTerm);
|
|
663 |
String key = definedTerm.getClass().getName().concat(".")
|
|
664 |
.concat(definedTerm.getUuid().toString());
|
|
665 |
if (key.contains("javassist")) {
|
|
666 |
MessagingUtils.warn(PreferencesUtil.class,
|
|
667 |
"Trying to persist a preference based on a proxy class.");
|
|
668 |
}
|
|
669 |
return key;
|
|
670 |
}
|
|
671 |
|
|
672 |
/**
|
|
673 |
* Retrieves search preferences from the preference store
|
|
674 |
*
|
|
675 |
* @return an {@link ITaxonServiceConfigurator} to pass to search methods
|
|
676 |
*/
|
|
677 |
public static IFindTaxaAndNamesConfigurator getSearchConfigurator() {
|
|
678 |
IFindTaxaAndNamesConfigurator configurator = initializeSearchConfigurator();
|
|
679 |
|
|
680 |
configurator.setDoTaxa(getBooleanValue(
|
|
681 |
TAXON_SERVICE_CONFIGURATOR_TAXA));
|
|
682 |
configurator.setDoSynonyms(getBooleanValue(
|
|
683 |
TAXON_SERVICE_CONFIGURATOR_SYNONYMS));
|
|
684 |
configurator.setDoNamesWithoutTaxa(getBooleanValue(
|
|
685 |
TAXON_SERVICE_CONFIGURATOR_NAMES));
|
|
686 |
configurator.setDoTaxaByCommonNames(getBooleanValue(
|
|
687 |
TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES));
|
|
688 |
//configurator.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.valueOf(getStringValue(TAXON_SERVICE_CONFIGURATOR_MATCH_MODE)));
|
|
689 |
|
|
690 |
return configurator;
|
|
691 |
}
|
|
692 |
|
|
693 |
/**
|
|
694 |
* create new preferences, setting all search options to true
|
|
695 |
*
|
|
696 |
* @return a
|
|
697 |
* {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
|
|
698 |
* object.
|
|
699 |
*/
|
|
700 |
public static IFindTaxaAndNamesConfigurator initializeSearchConfigurator() {
|
|
701 |
IFindTaxaAndNamesConfigurator configurator = FindTaxaAndNamesConfiguratorImpl.NewInstance();
|
|
702 |
|
|
703 |
configurator.setDoTaxa(true);
|
|
704 |
configurator.setDoSynonyms(true);
|
|
705 |
configurator.setDoNamesWithoutTaxa(true);
|
|
706 |
configurator.setDoTaxaByCommonNames(true);
|
|
707 |
|
|
708 |
configurator.setTaxonPropertyPath(Arrays.asList("$", "titleCache",
|
|
709 |
"name", "name.$", "relationsFromThisTaxon.$"));
|
|
710 |
|
|
711 |
configurator.setSynonymPropertyPath(Arrays.asList("$", "titleCache",
|
|
712 |
"name", "name.$", "synonyms.relatedTo.*"));
|
|
713 |
|
|
714 |
// DEFAULT VALUES
|
|
715 |
// match mode is a simple like, actually all other match modes are kind
|
|
716 |
// of bogus
|
|
717 |
configurator
|
|
718 |
.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.ANYWHERE);
|
|
719 |
// we set page number and size here as this should always be unlimited
|
|
720 |
configurator.setPageNumber(0);
|
|
721 |
// TODO currently limit results to 10000
|
|
722 |
configurator.setPageSize(10000);
|
|
723 |
//setSearchConfigurator(configurator) ;
|
|
724 |
return configurator;
|
|
725 |
}
|
|
726 |
|
|
727 |
/**
|
|
728 |
* Store search preferences
|
|
729 |
*
|
|
730 |
* @param configurator
|
|
731 |
* a
|
|
732 |
* {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
|
|
733 |
* object.
|
|
734 |
*/
|
|
735 |
public static void setSearchConfigurator(
|
|
736 |
IFindTaxaAndNamesConfigurator configurator) {
|
|
737 |
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_TAXA,
|
|
738 |
configurator.isDoTaxa());
|
|
739 |
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_SYNONYMS,
|
|
740 |
configurator.isDoSynonyms());
|
|
741 |
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_NAMES,
|
|
742 |
configurator.isDoNamesWithoutTaxa());
|
|
743 |
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES,
|
|
744 |
configurator.isDoTaxaByCommonNames());
|
|
745 |
}
|
|
746 |
|
|
747 |
public static void firePreferencesChanged(Class clazz) {
|
|
748 |
getPreferenceStore().firePropertyChangeEvent(PREFERRED_TERMS_CHANGE,
|
|
749 |
null, clazz);
|
|
750 |
}
|
|
751 |
|
|
752 |
public static String createPreferenceString(String property){
|
|
753 |
return prefKey(property);
|
|
754 |
|
|
755 |
}
|
|
756 |
public static String createOverridePreferenceString(String property){
|
|
757 |
return prefOverrideKey(property);
|
|
758 |
|
|
759 |
}
|
|
760 |
|
|
761 |
/**
|
|
762 |
* Set default values for preferences
|
|
763 |
*/
|
|
764 |
public static void setDefaults() {
|
|
765 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_TAXA, true);
|
|
766 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_SYNONYMS,
|
|
767 |
true);
|
|
768 |
getPreferenceStore().setDefault(createPreferenceString(EDIT_MAP_SERVICE_ACCES_POINT),
|
|
769 |
"http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php");
|
|
770 |
//FIXME : changed default for SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
|
|
771 |
getPreferenceStore().setDefault(createPreferenceString(SHOULD_CONNECT_AT_STARTUP), false);
|
|
772 |
getPreferenceStore().setDefault(createPreferenceString(OPENURL_ACCESS_POINT),
|
|
773 |
"http://www.biodiversitylibrary.org/openurl");
|
|
774 |
getPreferenceStore().setDefault(createPreferenceString(OPENURL_IMAGE_MAX_WIDTH), "1000");
|
|
775 |
getPreferenceStore().setDefault(createPreferenceString(OPENURL_IMAGE_MAX_HEIGHT), "1000");
|
|
776 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_TAXA, true);
|
|
777 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_SYNONYMS, true);
|
|
778 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_NAMES, true);
|
|
779 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES, true);
|
|
780 |
|
|
781 |
//Distribution Editor:
|
|
782 |
// getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DistributionEditorActivated.getKey()), Boolean.valueOf(PreferencePredicate.DistributionEditorActivated.getDefaultValue().toString()));
|
|
783 |
// getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisplayOfAreasInDistributionEditor.getKey()), PreferencePredicate.DisplayOfAreasInDistributionEditor.getDefaultValue().toString());
|
|
784 |
// getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisplayOfStatus.getKey()), PreferencePredicate.DisplayOfStatus.getDefaultValue().toString());
|
|
785 |
|
|
786 |
|
|
787 |
//Name Details
|
|
788 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.NameDetailsView.getKey()), new NameDetailsConfigurator(false).toString());
|
|
789 |
|
|
790 |
//Navigator preferences
|
|
791 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.TaxonNodeOrder.getKey()), NavigatorOrderEnum.RankAndNameOrder.getKey());
|
|
792 |
|
|
793 |
//getPreferenceStore().setDefault(createPreferenceString(Prefe), true);
|
|
794 |
|
|
795 |
getPreferenceStore().setDefault(createPreferenceString(SHOW_ADVANCED_MEDIA_SECTION), false);
|
|
606 |
/**
|
|
607 |
* Get the match strategy for the given class that was stored in preferences
|
|
608 |
* or the default strategy if it was not stored in preferences
|
|
609 |
*
|
|
610 |
* @param clazz
|
|
611 |
* a {@link java.lang.Class} object.
|
|
612 |
* @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
|
|
613 |
*/
|
|
614 |
public static IMatchStrategy getMatchStrategy(Class<?> clazz) {
|
|
615 |
String className = clazz.getName();
|
|
616 |
if (getBooleanValue(MATCH_STRATEGY_PREFIX + className)) {
|
|
617 |
IMatchStrategy matchStrategy = getDefaultMatchStrategy(clazz);
|
|
618 |
|
|
619 |
//TODO CacheMatchers (or multiple field matchers in future) are missing here
|
|
620 |
for (FieldMatcher fieldMatcher : matchStrategy.getMatching().getFieldMatchers(false)) {
|
|
621 |
String fieldName = fieldMatcher.getPropertyName();
|
|
622 |
String matchModeName = getStringValue(
|
|
623 |
getMatchStrategyFieldName(className, fieldName));
|
|
624 |
MatchMode matchMode = MatchMode.valueOf(matchModeName);
|
|
625 |
try {
|
|
626 |
matchStrategy.setMatchMode(fieldName, matchMode);
|
|
627 |
} catch (MatchException e) {
|
|
628 |
MessagingUtils.error(PreferencesUtil.class, e);
|
|
629 |
throw new RuntimeException(e);
|
|
630 |
}
|
|
631 |
}
|
|
632 |
|
|
633 |
return matchStrategy;
|
|
634 |
}
|
|
635 |
return getDefaultMatchStrategy(clazz);
|
|
636 |
}
|
|
637 |
|
|
638 |
/**
|
|
639 |
* Stores a matchStrategy into the preference store.
|
|
640 |
*
|
|
641 |
* @param matchStrategy
|
|
642 |
* a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy}
|
|
643 |
* object.
|
|
644 |
*/
|
|
645 |
public static void setMatchStrategy(IMatchStrategy matchStrategy) {
|
|
646 |
String className = "ANY class"; //FIXME was: matchStrategy.getMatchClass().getName(); seems currently not in use
|
|
647 |
setBooleanValue(MATCH_STRATEGY_PREFIX + className, true);
|
|
648 |
|
|
649 |
List<FieldMatcher> fieldMatchers = matchStrategy.getMatching().getFieldMatchers(false);
|
|
650 |
|
|
651 |
for (FieldMatcher fieldMatcher : fieldMatchers) {
|
|
652 |
String fieldName = fieldMatcher.getPropertyName();
|
|
653 |
setStringValue(
|
|
654 |
getMatchStrategyFieldName(className, fieldName),
|
|
655 |
fieldMatcher.getMatchMode().name());
|
|
656 |
}
|
|
657 |
}
|
|
658 |
|
|
659 |
/**
|
|
660 |
* Helper method to create the preference property for a match field.
|
|
661 |
*
|
|
662 |
* @param className
|
|
663 |
* @param fieldName
|
|
664 |
* @return
|
|
665 |
*/
|
|
666 |
private static String getMatchStrategyFieldName(String className,
|
|
667 |
String fieldName) {
|
|
668 |
return MATCH_STRATEGY_PREFIX + className + "." + fieldName;
|
|
669 |
}
|
|
670 |
|
|
671 |
/**
|
|
672 |
* Returns the default match strategy for a given class.
|
|
673 |
*
|
|
674 |
* @param clazz
|
|
675 |
* a {@link java.lang.Class} object.
|
|
676 |
* @return a {@link eu.etaxonomy.cdm.strategy.match.IMatchStrategy} object.
|
|
677 |
*/
|
|
678 |
public static IMatchStrategy getDefaultMatchStrategy(Class clazz) {
|
|
679 |
return DefaultMatchStrategy.NewInstance(clazz);
|
|
680 |
}
|
|
681 |
|
|
682 |
public static String getDateFormatPattern() {
|
|
683 |
// TODO make this configurable in properties
|
|
684 |
String pattern = "Y-M-d H:m";
|
|
685 |
return pattern;
|
|
686 |
}
|
|
687 |
|
|
688 |
public static <T extends TermBase> void addTermToPreferredTerms(T term) {
|
|
689 |
|
|
690 |
// VocabularyEnum vocabulary =
|
|
691 |
// VocabularyEnum.getVocabularyEnum(term.getClass());
|
|
692 |
//
|
|
693 |
// getPreferenceStore().setValue(getPreferenceKey(term),
|
|
694 |
// VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
|
|
695 |
//
|
|
696 |
// firePreferencesChanged(term.getClass());
|
|
697 |
}
|
|
698 |
|
|
699 |
/**
|
|
700 |
* Construct a unique key using the CdmBase object's uuid
|
|
701 |
*
|
|
702 |
* @param cdmBase
|
|
703 |
* @return
|
|
704 |
*/
|
|
705 |
private static String getPreferenceKey(ICdmBase cdmBase) {
|
|
706 |
cdmBase = HibernateProxyHelper.deproxy(cdmBase);
|
|
707 |
|
|
708 |
String key = cdmBase.getClass().getName().concat(".")
|
|
709 |
.concat(cdmBase.getUuid().toString());
|
|
710 |
if (key.contains("javassist")) {
|
|
711 |
MessagingUtils.info("proxy");
|
|
712 |
}
|
|
713 |
return key;
|
|
714 |
}
|
|
715 |
|
|
716 |
/**
|
|
717 |
* Construct a unique key using the CdmBase object's uuid
|
|
718 |
*
|
|
719 |
* @param cdmBase
|
|
720 |
* @return
|
|
721 |
*/
|
|
722 |
public static String getPreferenceKey(ISimpleTerm simpleTerm) {
|
|
723 |
simpleTerm = HibernateProxyHelper.deproxy(simpleTerm);
|
|
724 |
String key = simpleTerm.getClass().getName().concat(".")
|
|
725 |
.concat(simpleTerm.getUuid().toString());
|
|
726 |
if (key.contains("javassist")) {
|
|
727 |
MessagingUtils.warn(PreferencesUtil.class,
|
|
728 |
"Trying to persist a preference based on a proxy class.");
|
|
729 |
}
|
|
730 |
return key;
|
|
731 |
}
|
|
732 |
|
|
733 |
|
|
734 |
|
|
735 |
/**
|
|
736 |
* Construct a unique key using the CdmBase object's uuid
|
|
737 |
*
|
|
738 |
* @param cdmBase
|
|
739 |
* @return
|
|
740 |
*/
|
|
741 |
public static String getPreferenceKey(IDefinedTerm definedTerm) {
|
|
742 |
definedTerm = HibernateProxyHelper.deproxy(definedTerm);
|
|
743 |
String key = definedTerm.getClass().getName().concat(".")
|
|
744 |
.concat(definedTerm.getUuid().toString());
|
|
745 |
if (key.contains("javassist")) {
|
|
746 |
MessagingUtils.warn(PreferencesUtil.class,
|
|
747 |
"Trying to persist a preference based on a proxy class.");
|
|
748 |
}
|
|
749 |
return key;
|
|
750 |
}
|
|
751 |
|
|
752 |
/**
|
|
753 |
* Retrieves search preferences from the preference store
|
|
754 |
*
|
|
755 |
* @return an {@link ITaxonServiceConfigurator} to pass to search methods
|
|
756 |
*/
|
|
757 |
public static IFindTaxaAndNamesConfigurator getSearchConfigurator() {
|
|
758 |
IFindTaxaAndNamesConfigurator configurator = initializeSearchConfigurator();
|
|
759 |
|
|
760 |
configurator.setDoTaxa(getBooleanValue(
|
|
761 |
TAXON_SERVICE_CONFIGURATOR_TAXA));
|
|
762 |
configurator.setDoSynonyms(getBooleanValue(
|
|
763 |
TAXON_SERVICE_CONFIGURATOR_SYNONYMS));
|
|
764 |
configurator.setDoNamesWithoutTaxa(getBooleanValue(
|
|
765 |
TAXON_SERVICE_CONFIGURATOR_NAMES));
|
|
766 |
configurator.setDoTaxaByCommonNames(getBooleanValue(
|
|
767 |
TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES));
|
|
768 |
//configurator.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.valueOf(getStringValue(TAXON_SERVICE_CONFIGURATOR_MATCH_MODE)));
|
|
769 |
|
|
770 |
return configurator;
|
|
771 |
}
|
|
772 |
|
|
773 |
/**
|
|
774 |
* create new preferences, setting all search options to true
|
|
775 |
*
|
|
776 |
* @return a
|
|
777 |
* {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
|
|
778 |
* object.
|
|
779 |
*/
|
|
780 |
public static IFindTaxaAndNamesConfigurator initializeSearchConfigurator() {
|
|
781 |
IFindTaxaAndNamesConfigurator configurator = FindTaxaAndNamesConfiguratorImpl.NewInstance();
|
|
782 |
|
|
783 |
configurator.setDoTaxa(true);
|
|
784 |
configurator.setDoSynonyms(true);
|
|
785 |
configurator.setDoNamesWithoutTaxa(true);
|
|
786 |
configurator.setDoTaxaByCommonNames(true);
|
|
787 |
|
|
788 |
configurator.setTaxonPropertyPath(Arrays.asList("$", "titleCache",
|
|
789 |
"name", "name.$", "relationsFromThisTaxon.$"));
|
|
790 |
|
|
791 |
configurator.setSynonymPropertyPath(Arrays.asList("$", "titleCache",
|
|
792 |
"name", "name.$", "synonyms.relatedTo.*"));
|
|
793 |
|
|
794 |
// DEFAULT VALUES
|
|
795 |
// match mode is a simple like, actually all other match modes are kind
|
|
796 |
// of bogus
|
|
797 |
configurator
|
|
798 |
.setMatchMode(eu.etaxonomy.cdm.persistence.query.MatchMode.ANYWHERE);
|
|
799 |
// we set page number and size here as this should always be unlimited
|
|
800 |
configurator.setPageNumber(0);
|
|
801 |
// TODO currently limit results to 10000
|
|
802 |
configurator.setPageSize(10000);
|
|
803 |
//setSearchConfigurator(configurator) ;
|
|
804 |
return configurator;
|
|
805 |
}
|
|
806 |
|
|
807 |
/**
|
|
808 |
* Store search preferences
|
|
809 |
*
|
|
810 |
* @param configurator
|
|
811 |
* a
|
|
812 |
* {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator}
|
|
813 |
* object.
|
|
814 |
*/
|
|
815 |
public static void setSearchConfigurator(
|
|
816 |
IFindTaxaAndNamesConfigurator configurator) {
|
|
817 |
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_TAXA,
|
|
818 |
configurator.isDoTaxa());
|
|
819 |
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_SYNONYMS,
|
|
820 |
configurator.isDoSynonyms());
|
|
821 |
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_NAMES,
|
|
822 |
configurator.isDoNamesWithoutTaxa());
|
|
823 |
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES,
|
|
824 |
configurator.isDoTaxaByCommonNames());
|
|
825 |
}
|
|
826 |
|
|
827 |
public static void firePreferencesChanged(Class clazz) {
|
|
828 |
getPreferenceStore().firePropertyChangeEvent(PREFERRED_TERMS_CHANGE,
|
|
829 |
null, clazz);
|
|
830 |
}
|
|
831 |
|
|
832 |
public static String createPreferenceString(String property){
|
|
833 |
return prefKey(property);
|
|
834 |
|
|
835 |
}
|
|
836 |
public static String createOverridePreferenceString(String property){
|
|
837 |
return prefOverrideKey(property);
|
|
838 |
|
|
839 |
}
|
|
840 |
|
|
841 |
/**
|
|
842 |
* Set default values for preferences
|
|
843 |
*/
|
|
844 |
public static void setDefaults() {
|
|
845 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_TAXA, true);
|
|
846 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_SYNONYMS,
|
|
847 |
true);
|
|
848 |
getPreferenceStore().setDefault(createPreferenceString(EDIT_MAP_SERVICE_ACCES_POINT),
|
|
849 |
"http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php");
|
|
850 |
//FIXME : changed default for SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
|
|
851 |
getPreferenceStore().setDefault(createPreferenceString(SHOULD_CONNECT_AT_STARTUP), false);
|
|
852 |
getPreferenceStore().setDefault(createPreferenceString(OPENURL_ACCESS_POINT),
|
|
853 |
"http://www.biodiversitylibrary.org/openurl");
|
|
854 |
getPreferenceStore().setDefault(createPreferenceString(OPENURL_IMAGE_MAX_WIDTH), "1000");
|
|
855 |
getPreferenceStore().setDefault(createPreferenceString(OPENURL_IMAGE_MAX_HEIGHT), "1000");
|
|
856 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_TAXA, true);
|
|
857 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_SYNONYMS, true);
|
|
858 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_NAMES, true);
|
|
859 |
getPreferenceStore().setDefault(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES, true);
|
|
860 |
|
|
861 |
//Distribution Editor:
|
|
862 |
// getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DistributionEditorActivated.getKey()), Boolean.valueOf(PreferencePredicate.DistributionEditorActivated.getDefaultValue().toString()));
|
|
863 |
// getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisplayOfAreasInDistributionEditor.getKey()), PreferencePredicate.DisplayOfAreasInDistributionEditor.getDefaultValue().toString());
|
|
864 |
// getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisplayOfStatus.getKey()), PreferencePredicate.DisplayOfStatus.getDefaultValue().toString());
|
|
865 |
|
|
866 |
|
|
867 |
//Name Details
|
|
868 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.NameDetailsView.getKey()), new NameDetailsConfigurator(false).toString());
|
|
869 |
|
|
870 |
//Navigator preferences
|
|
871 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.TaxonNodeOrder.getKey()), NavigatorOrderEnum.RankAndNameOrder.getKey());
|
|
872 |
|
|
873 |
//getPreferenceStore().setDefault(createPreferenceString(Prefe), true);
|
|
874 |
|
|
875 |
getPreferenceStore().setDefault(createPreferenceString(SHOW_ADVANCED_MEDIA_SECTION), false);
|
|
796 | 876 |
|
797 | 877 |
getPreferenceStore().setDefault(createPreferenceString(SHOW_MEDIA_PREVIEW), false); |
798 |
//override db preferences
|
|
799 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AbcdImportConfig.getKey())), false);
|
|
800 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.ShowSpecimen.getKey())), true);
|
|
801 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.NameDetailsView.getKey())), false);
|
|
802 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.DistributionEditorActivated.getKey())), true);
|
|
803 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())), true);
|
|
804 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaTerms.getKey())), true);
|
|
805 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey())), true);
|
|
806 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.CommonNameAreaVocabularies.getKey())), false);
|
|
807 |
getPreferenceStore().setDefault(createPreferenceString(FILTER_COMMON_NAME_REFERENCES), false);
|
|
808 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowTaxonNodeWizard.getKey()), Boolean.valueOf(PreferencePredicate.ShowTaxonNodeWizard.getDefaultValue().toString()));
|
|
809 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowNamespaceInSource.getKey()), Boolean.valueOf(PreferencePredicate.ShowNamespaceInSource.getDefaultValue().toString()));
|
|
810 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowIdInSource.getKey()), Boolean.valueOf(PreferencePredicate.ShowIdInSource.getDefaultValue().toString()));
|
|
811 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisableMultiClassification.getKey()), Boolean.valueOf(PreferencePredicate.DisableMultiClassification.getDefaultValue().toString()));
|
|
812 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowImportExportMenu.getKey()), Boolean.valueOf(PreferencePredicate.ShowImportExportMenu.getDefaultValue().toString()));
|
|
813 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowSpecimen.getKey()), Boolean.valueOf(PreferencePredicate.ShowSpecimen.getDefaultValue().toString()));
|
|
814 |
|
|
815 |
}
|
|
816 |
|
|
817 |
public static void checkNomenclaturalCode() {
|
|
818 |
// First time Editor is opened, no nomenclatural code has been set
|
|
819 |
if (PreferencesUtil.getPreferredNomenclaturalCode() == null) {
|
|
820 |
PreferencesUtil.setPreferredNomenclaturalCode(getPreferenceKey(NomenclaturalCode.ICNAFP), true);
|
|
821 |
}
|
|
822 |
|
|
823 |
|
|
824 |
|
|
825 |
}
|
|
826 |
public static void setNomenclaturalCodePreferences(){
|
|
827 |
ICdmRepository controller;
|
|
878 |
//override db preferences
|
|
879 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AbcdImportConfig.getKey())), false);
|
|
880 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.ShowSpecimen.getKey())), true);
|
|
881 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.NameDetailsView.getKey())), false);
|
|
882 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.DistributionEditorActivated.getKey())), true);
|
|
883 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())), true);
|
|
884 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaTerms.getKey())), true);
|
|
885 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey())), true);
|
|
886 |
getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.CommonNameAreaVocabularies.getKey())), false);
|
|
887 |
getPreferenceStore().setDefault(createPreferenceString(FILTER_COMMON_NAME_REFERENCES), false);
|
|
888 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowTaxonNodeWizard.getKey()), Boolean.valueOf(PreferencePredicate.ShowTaxonNodeWizard.getDefaultValue().toString()));
|
|
889 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowNamespaceInSource.getKey()), Boolean.valueOf(PreferencePredicate.ShowNamespaceInSource.getDefaultValue().toString()));
|
|
890 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowIdInSource.getKey()), Boolean.valueOf(PreferencePredicate.ShowIdInSource.getDefaultValue().toString()));
|
|
891 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisableMultiClassification.getKey()), Boolean.valueOf(PreferencePredicate.DisableMultiClassification.getDefaultValue().toString()));
|
|
892 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowImportExportMenu.getKey()), Boolean.valueOf(PreferencePredicate.ShowImportExportMenu.getDefaultValue().toString()));
|
|
893 |
getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowSpecimen.getKey()), Boolean.valueOf(PreferencePredicate.ShowSpecimen.getDefaultValue().toString()));
|
|
894 |
|
|
895 |
}
|
|
896 |
|
|
897 |
public static void checkNomenclaturalCode() {
|
|
898 |
// First time Editor is opened, no nomenclatural code has been set
|
|
899 |
if (PreferencesUtil.getPreferredNomenclaturalCode() == null) {
|
|
900 |
PreferencesUtil.setPreferredNomenclaturalCode(getPreferenceKey(NomenclaturalCode.ICNAFP), true);
|
|
901 |
}
|
|
902 |
|
|
903 |
|
|
904 |
|
|
905 |
}
|
|
906 |
public static void setNomenclaturalCodePreferences(){
|
|
907 |
ICdmRepository controller;
|
|
828 | 908 |
controller = CdmStore.getCurrentApplicationConfiguration(); |
829 | 909 |
PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode); |
830 | 910 |
CdmPreference preference = null; |
... | ... | |
844 | 924 |
setStringValue(PREFERRED_NOMENCLATURAL_CODE_KEY, |
845 | 925 |
getPreferenceKey(preferredCode)); |
846 | 926 |
|
847 |
}
|
|
848 |
|
|
849 |
public static void checkDefaultLanguage(){
|
|
850 |
if(PreferencesUtil.getPreferredDefaultLangugae() == null){
|
|
851 |
Shell shell = AbstractUtility.getShell();
|
|
852 |
int open = new DefaultLanguageDialog(shell).open();
|
|
853 |
if(open == Window.OK){
|
|
854 |
PlatformUI.getWorkbench().restart();
|
|
855 |
}
|
|
856 |
}else{
|
|
857 |
//TODO:In case of a reinstall, the config.ini will be overwritten
|
|
858 |
// here you create config.ini with the stored key from preferences
|
|
859 |
}
|
|
860 |
}
|
|
861 |
|
|
862 |
public static String getMapServiceAccessPoint() {
|
|
863 |
return getStringValue(EDIT_MAP_SERVICE_ACCES_POINT);
|
|
864 |
}
|
|
865 |
|
|
866 |
public static boolean shouldConnectAtStartUp() {
|
|
867 |
//FIXME : force SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
|
|
868 |
//return getBooleanValue(SHOULD_CONNECT_AT_STARTUP);
|
|
869 |
return false;
|
|
870 |
}
|
|
871 |
|
|
872 |
public static FeatureTree getDefaultFeatureTreeForTextualDescription() {
|
|
873 |
String uuidString = getStringValue(
|
|
874 |
FEATURE_TREE_DEFAULT_TEXT);
|
|
875 |
if (StringUtils.isBlank(uuidString)) {
|
|
927 |
}
|
|
928 |
|
|
929 |
public static void checkDefaultLanguage(){
|
|
930 |
if(PreferencesUtil.getPreferredDefaultLangugae() == null){
|
|
931 |
Shell shell = AbstractUtility.getShell();
|
|
932 |
int open = new DefaultLanguageDialog(shell).open();
|
|
933 |
if(open == Window.OK){
|
|
934 |
PlatformUI.getWorkbench().restart();
|
|
935 |
}
|
|
936 |
}else{
|
|
937 |
//TODO:In case of a reinstall, the config.ini will be overwritten
|
|
938 |
// here you create config.ini with the stored key from preferences
|
|
939 |
}
|
|
940 |
}
|
|
941 |
|
|
942 |
public static String getMapServiceAccessPoint() {
|
|
943 |
return getStringValue(EDIT_MAP_SERVICE_ACCES_POINT);
|
|
944 |
}
|
|
945 |
|
|
946 |
public static boolean shouldConnectAtStartUp() {
|
|
947 |
//FIXME : force SHOULD_CONNECT_AT_STARTUP to false (ticket 3828) until resolution
|
|
948 |
//return getBooleanValue(SHOULD_CONNECT_AT_STARTUP);
|
|
949 |
return false;
|
|
950 |
}
|
|
951 |
|
|
952 |
public static FeatureTree getDefaultFeatureTreeForTextualDescription() {
|
|
953 |
String uuidString = getStringValue(
|
|
954 |
FEATURE_TREE_DEFAULT_TEXT);
|
|
955 |
if (StringUtils.isBlank(uuidString)) {
|
|
876 | 956 |
return null; |
877 | 957 |
} |
878 |
FeatureTree tree = CdmStore.getService(
|
|
879 |
IFeatureTreeService.class).load(UUID.fromString(uuidString));
|
|
880 |
if (tree.getId() == 0) {
|
|
958 |
FeatureTree tree = CdmStore.getService(
|
|
959 |
IFeatureTreeService.class).load(UUID.fromString(uuidString));
|
|
960 |
if (tree.getId() == 0) {
|
|
881 | 961 |
return null; |
882 | 962 |
} |
883 |
return tree;
|
|
884 |
}
|
|
963 |
return tree;
|
|
964 |
}
|
|
885 | 965 |
|
886 |
public static FeatureTree getDefaultFeatureTreeForStructuredDescription() {
|
|
887 |
String uuidString = getStringValue(
|
|
888 |
FEATURE_TREE_DEFAULT_STRUCTURE);
|
|
889 |
return CdmUtils.isEmpty(uuidString) ? null : CdmStore.getService(
|
|
890 |
IFeatureTreeService.class).load(UUID.fromString(uuidString));
|
|
891 |
}
|
|
966 |
public static FeatureTree getDefaultFeatureTreeForStructuredDescription() {
|
|
967 |
String uuidString = getStringValue(
|
|
968 |
FEATURE_TREE_DEFAULT_STRUCTURE);
|
|
969 |
return CdmUtils.isEmpty(uuidString) ? null : CdmStore.getService(
|
|
970 |
IFeatureTreeService.class).load(UUID.fromString(uuidString));
|
|
971 |
}
|
|
892 | 972 |
|
893 |
public static void setSortRanksHierarchichally(boolean selection) {
|
|
894 |
setBooleanValue(SORT_RANKS_HIERARCHICHALLY, selection);
|
|
895 |
}
|
|
973 |
public static void setSortRanksHierarchichally(boolean selection) {
|
|
974 |
setBooleanValue(SORT_RANKS_HIERARCHICHALLY, selection);
|
|
975 |
}
|
|
896 | 976 |
|
897 |
public static boolean getSortRanksHierarchichally() {
|
|
898 |
return getBooleanValue(SORT_RANKS_HIERARCHICHALLY);
|
|
899 |
}
|
|
977 |
public static boolean getSortRanksHierarchichally() {
|
|
978 |
return getBooleanValue(SORT_RANKS_HIERARCHICHALLY);
|
|
979 |
}
|
|
900 | 980 |
|
901 |
public static boolean isMultilanguageTextEditingCapability() {
|
|
902 |
return getBooleanValue(
|
|
903 |
MULTILANGUAGE_TEXT_EDITING_CAPABILITY);
|
|
904 |
}
|
|
981 |
public static boolean isMultilanguageTextEditingCapability() {
|
|
982 |
return getBooleanValue(
|
|
983 |
MULTILANGUAGE_TEXT_EDITING_CAPABILITY);
|
|
984 |
}
|
|
905 | 985 |
|
906 |
public static Language getGlobalLanguage() {
|
|
986 |
public static Language getGlobalLanguage() {
|
|
907 | 987 |
|
908 | 988 |
|
909 |
String languageUuidString = getStringValue(
|
|
910 |
GLOBAL_LANGUAGE_UUID);
|
|
989 |
String languageUuidString = getStringValue(
|
|
990 |
GLOBAL_LANGUAGE_UUID);
|
|
911 | 991 |
|
912 |
if(!CdmStore.isActive()) {
|
|
992 |
if(!CdmStore.isActive()) {
|
|
913 | 993 |
MessagingUtils.noDataSourceWarningDialog(languageUuidString); |
914 | 994 |
return null; |
915 | 995 |
} |
916 | 996 |
|
917 |
if (CdmUtils.isBlank(languageUuidString)) {
|
|
918 |
return Language.getDefaultLanguage();
|
|
919 |
}
|
|
920 |
|
|
921 |
UUID languageUuid = UUID.fromString(languageUuidString);
|
|
922 |
return (Language) CdmStore.getService(ITermService.class).load(
|
|
923 |
languageUuid);
|
|
924 |
}
|
|
925 |
|
|
926 |
public static void setGlobalLanguage(Language language) {
|
|
927 |
if(language != null) {
|
|
928 |
setStringValue(GLOBAL_LANGUAGE_UUID,language.getUuid().toString());
|
|
929 |
CdmStore.setDefaultLanguage(language);
|
|
930 |
}
|
|
931 |
|
|
932 |
}
|
|
933 |
|
|
934 |
public static Map<MarkerType, Boolean> getEditMarkerTypePreferences() {
|
|
935 |
List<MarkerType> markerTypes = CdmStore.getTermManager()
|
|
936 |
.getPreferredTerms(MarkerType.class);
|
|
937 |
|
|
938 |
Map<MarkerType, Boolean> result = new HashMap<MarkerType, Boolean>();
|
|
939 |
|
|
940 |
for (MarkerType markerType : markerTypes) {
|
|
941 |
String name = getMarkerTypeEditingPreferenceKey(markerType);
|
|
942 |
Boolean value = getBooleanValue(name);
|
|
943 |
|
|
944 |
result.put(markerType, value);
|
|
945 |
}
|
|
946 |
|
|
947 |
return result;
|
|
948 |
}
|
|
949 |
|
|
950 |
public static void setEditMarkerTypePreferences(
|
|
951 |
Map<MarkerType, Boolean> markerTypeEditingMap) {
|
|
952 |
for (MarkerType markerType : markerTypeEditingMap.keySet()) {
|
|
953 |
String name = getMarkerTypeEditingPreferenceKey(markerType);
|
|
954 |
setBooleanValue(name,
|
|
955 |
markerTypeEditingMap.get(markerType));
|
|
956 |
}
|
|
957 |
|
|
958 |
}
|
|
959 |
|
|
960 |
private static String getMarkerTypeEditingPreferenceKey(
|
|
961 |
MarkerType markerType) {
|
|
962 |
markerType = HibernateProxyHelper.deproxy(markerType);
|
|
963 |
return markerType.getClass().getName() + EDIT_MARKER_TYPE_PREFIX;
|
|
964 |
}
|
|
965 |
|
|
966 |
public static void setEditMarkerTypePreference(MarkerType markerType,
|
|
967 |
boolean edit) {
|
|
968 |
setBooleanValue(
|
|
969 |
getMarkerTypeEditingPreferenceKey(markerType), edit);
|
|
970 |
}
|
|
971 |
|
|
972 |
public static DerivedUnitFacadeConfigurator getDerivedUnitConfigurator() {
|
|
973 |
DerivedUnitFacadeConfigurator configurator = DerivedUnitFacadeConfigurator
|
|
974 |
.NewInstance();
|
|
975 |
configurator.setMoveDerivedUnitMediaToGallery(true);
|
|
976 |
configurator.setMoveFieldObjectMediaToGallery(true);
|
|
977 |
return configurator;
|
|
978 |
}
|
|
979 |
|
|
980 |
/**
|
|
981 |
* This method will write language properties to the config.ini located in the configuration folder
|
|
982 |
* of the Taxonomic Ediitor. <b>This method is only used to set the default language for Taxonomic Editor.</b>
|
|
983 |
*
|
|
984 |
* @param setLanguage 0 is for german and 1 for english.
|
|
985 |
* @throws IOException
|
|
986 |
*/
|
|
997 |
if (CdmUtils.isBlank(languageUuidString)) {
|
|
998 |
return Language.getDefaultLanguage();
|
|
999 |
}
|
|
1000 |
|
|
1001 |
UUID languageUuid = UUID.fromString(languageUuidString);
|
|
1002 |
return (Language) CdmStore.getService(ITermService.class).load(
|
|
1003 |
languageUuid);
|
|
1004 |
}
|
|
1005 |
|
|
1006 |
public static void setGlobalLanguage(Language language) {
|
|
1007 |
if(language != null) {
|
|
1008 |
setStringValue(GLOBAL_LANGUAGE_UUID,language.getUuid().toString());
|
|
1009 |
CdmStore.setDefaultLanguage(language);
|
|
1010 |
}
|
|
1011 |
|
|
1012 |
}
|
|
1013 |
|
|
1014 |
public static Map<MarkerType, Boolean> getEditMarkerTypePreferences() {
|
|
1015 |
List<MarkerType> markerTypes = CdmStore.getTermManager()
|
|
1016 |
.getPreferredTerms(MarkerType.class);
|
|
1017 |
|
|
1018 |
Map<MarkerType, Boolean> result = new HashMap<MarkerType, Boolean>();
|
|
1019 |
|
|
1020 |
for (MarkerType markerType : markerTypes) {
|
|
1021 |
String name = getMarkerTypeEditingPreferenceKey(markerType);
|
|
1022 |
Boolean value = getBooleanValue(name);
|
|
1023 |
|
|
1024 |
result.put(markerType, value);
|
|
1025 |
}
|
|
1026 |
|
|
1027 |
return result;
|
|
1028 |
}
|
|
1029 |
|
|
1030 |
public static void setEditMarkerTypePreferences(
|
|
1031 |
Map<MarkerType, Boolean> markerTypeEditingMap) {
|
|
1032 |
for (MarkerType markerType : markerTypeEditingMap.keySet()) {
|
|
1033 |
String name = getMarkerTypeEditingPreferenceKey(markerType);
|
|
1034 |
setBooleanValue(name,
|
|
1035 |
markerTypeEditingMap.get(markerType));
|
|
1036 |
}
|
|
1037 |
|
|
1038 |
}
|
|
1039 |
|
|
1040 |
private static String getMarkerTypeEditingPreferenceKey(
|
|
1041 |
MarkerType markerType) {
|
|
1042 |
markerType = HibernateProxyHelper.deproxy(markerType);
|
|
1043 |
return markerType.getClass().getName() + EDIT_MARKER_TYPE_PREFIX;
|
|
1044 |
}
|
|
1045 |
|
|
1046 |
public static void setEditMarkerTypePreference(MarkerType markerType,
|
|
1047 |
boolean edit) {
|
|
1048 |
setBooleanValue(
|
|
1049 |
getMarkerTypeEditingPreferenceKey(markerType), edit);
|
|
1050 |
}
|
|
1051 |
|
|
1052 |
public static DerivedUnitFacadeConfigurator getDerivedUnitConfigurator() {
|
|
1053 |
DerivedUnitFacadeConfigurator configurator = DerivedUnitFacadeConfigurator
|
|
1054 |
.NewInstance();
|
|
1055 |
configurator.setMoveDerivedUnitMediaToGallery(true);
|
|
1056 |
configurator.setMoveFieldObjectMediaToGallery(true);
|
|
1057 |
return configurator;
|
|
1058 |
}
|
|
1059 |
|
|
1060 |
/**
|
|
1061 |
* This method will write language properties to the config.ini located in the configuration folder
|
|
1062 |
* of the Taxonomic Ediitor. <b>This method is only used to set the default language for Taxonomic Editor.</b>
|
|
1063 |
*
|
|
1064 |
* @param setLanguage 0 is for german and 1 for english.
|
|
1065 |
* @throws IOException
|
|
1066 |
*/
|
|
987 | 1067 |
public void writePropertyToConfigFile(int setLanguage) throws IOException { |
988 | 1068 |
File file = org.eclipse.core.runtime.preferences.ConfigurationScope.INSTANCE.getLocation().toFile(); |
989 | 1069 |
//give warning to user if the directory has no write access |
... | ... | |
1137 | 1217 |
} |
1138 | 1218 |
|
1139 | 1219 |
public static boolean isStoreNavigatorState() { |
1140 |
return getBooleanValue(RESTORE_NAVIGATOR_STATE);
|
|
1220 |
return getBooleanValue(RESTORE_NAVIGATOR_STATE);
|
|
1141 | 1221 |
|
1142 |
}
|
|
1222 |
}
|
|
1143 | 1223 |
|
1144 |
public static void setStoreNavigatorState(boolean selection) {
|
|
1145 |
setBooleanValue(RESTORE_NAVIGATOR_STATE, selection);
|
|
1224 |
public static void setStoreNavigatorState(boolean selection) {
|
|
1225 |
setBooleanValue(RESTORE_NAVIGATOR_STATE, selection);
|
|
1146 | 1226 |
|
1147 |
}
|
|
1227 |
}
|
|
1148 | 1228 |
|
1149 | 1229 |
public static boolean isShowUpWidgetIsDisposedMessages() { |
1150 | 1230 |
return getBooleanValue(IS_SHOW_UP_WIDGET_IS_DISPOSED); |
... | ... | |
1329 | 1409 |
} |
1330 | 1410 |
|
1331 | 1411 |
private static Boolean getValue(Map<String, Boolean> sectionMap, String string) { |
1332 |
if (sectionMap.containsKey(string)){
|
|
1333 |
return sectionMap.get(string);
|
|
1334 |
}else{
|
|
1335 |
return true;
|
|
1336 |
}
|
|
1412 |
if (sectionMap.containsKey(string)){
|
|
1413 |
return sectionMap.get(string);
|
|
1414 |
}else{
|
|
1415 |
return true;
|
|
1416 |
}
|
|
1337 | 1417 |
|
1338 |
}
|
|
1418 |
}
|
|
1339 | 1419 |
|
1340 | 1420 |
public static Abcd206ImportConfigurator getDBAbcdImportConfigurationPreference() { |
1341 | 1421 |
|
... | ... | |
1598 | 1678 |
} |
1599 | 1679 |
|
1600 | 1680 |
public static void updateDBPreferences() { |
1601 |
CdmPreference preference = null; |
|
1681 |
|
|
1682 |
|
|
1602 | 1683 |
CdmPreferenceCache cache = CdmPreferenceCache.instance(); |
1603 | 1684 |
cache.getAllTaxEditorDBPreferences(); |
1604 | 1685 |
|
Also available in: Unified diff
ref #8047: configurable display of status in drop down