ref #8385: fixes in preferences - getDefaults() for all pages
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / SpecimenOrObservationPreferences.java
index 8fb5d39fe42c7802251bd9c6d871bf4231d60808..ca6854f38f57eba6d5c9a51bb5f069cf65362f2d 100644 (file)
@@ -37,19 +37,19 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
     private static final String LOCAL_SETTINGS_NOT_ALLOWED = Messages.SpecimenOrObservationPreferences_0;
     private static final String DESCRIPTION = Messages.SpecimenOrObservationPreferences_1;
 
-    protected boolean isShowSpecimenRelatedIssues;
+    protected Boolean isShowSpecimenRelatedIssues;
     protected boolean allowOverrideShowSpecimenRelatedIssues;
     protected boolean overrideShowSpecimenRelatedIssues;
-    protected boolean isShowCollectingAreaInGeneralSection;
+    protected Boolean isShowCollectingAreaInGeneralSection;
     protected boolean allowOverrideShowCollectingAreaInGeneralSection;
     protected boolean overrideShowCollectionAreaInGeneralSection;
-    protected boolean isDeterminationOnlyForFieldUnits;
+    protected Boolean isDeterminationOnlyForFieldUnits;
     protected boolean allowOverrideDeterminationOnlyForFieldUnits;
     protected boolean overrideDeterminationOnlyForFieldUnits;
-    protected boolean isShowTaxonAssociation;
+    protected Boolean isShowTaxonAssociation;
     protected boolean allowOverrideShowTaxonAssociation;
     protected boolean overrideShowTaxonAssociation;
-    protected boolean isShowLifeForm;
+    protected Boolean isShowLifeForm;
     protected boolean allowOverrideShowLifeForm;
     protected boolean overrideShowLifeForm;
     Composite composite;
@@ -92,20 +92,24 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
         boolean isEditingAllowed = true;
         if(!isAdminPreference){
             CdmPreferenceCache cache = CdmPreferenceCache.instance();
-            PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowSpecimen);
-            CdmPreference showSpecimenPref = cache.findBestMatching(key);
+
             if (showSpecimenPref != null){
                 if (!showSpecimenPref.isAllowOverride() ){
-                    Label label = new Label(parent, SWT.NONE);
-                    label.setText(LOCAL_SETTINGS_NOT_ALLOWED);
+
                     isEditingAllowed = false;
 
                 }
             }
         }
-
-        Label label = new Label(parent, SWT.NONE);
-        label.setText(DESCRIPTION);
+        if (isEditingAllowed){
+            Label label = new Label(parent, SWT.NONE);
+            label.setText(DESCRIPTION);
+        }else{
+            Label label = new Label(parent, SWT.NONE);
+            label.setText(LOCAL_SETTINGS_NOT_ALLOWED);
+            this.noDefaultAndApplyButton();
+            return parent;
+        }
         Composite titleComp = createComposite(parent);
         GridData gridData = createTextGridData();
 
@@ -115,12 +119,23 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
         showSpecimenButton = createBooleanCombo(titleComp, Messages.GeneralPreference_yes, Messages.GeneralPreference_no, PreferencePredicate.ShowSpecimen, Messages.DatabasePreferncesPage_Show_Specimen, isAdminPreference);
 
         showSpecimenButton.addSelectionListener(this);
-        if (isShowSpecimenRelatedIssues){
-            showSpecimenButton.select(0);
-        }else{
-            showSpecimenButton.select(1);
+        int index = 0;
+        for (String itemLabel : showSpecimenButton.getItems()) {
+            if (isShowSpecimenRelatedIssues == null && itemLabel.startsWith(Messages.Preference_Use_Default)) {
+                showSpecimenButton.select(index);
+                break;
+            }
+            if (isShowSpecimenRelatedIssues != null && itemLabel.equals(Messages.GeneralPreference_yes) && isShowSpecimenRelatedIssues){
+                showSpecimenButton.select(index);
+                break;
+            }
+            if (isShowSpecimenRelatedIssues != null && itemLabel.equals(Messages.GeneralPreference_no) && !isShowSpecimenRelatedIssues){
+                showSpecimenButton.select(index);
+                break;
+            }
+            index++;
         }
-
+        showSpecimenButton.setEnabled(isEditingAllowed);
 
         if (isAdminPreference){
             allowOverrideIsShowSpecimenRelatedIssuesButton = createAllowOverrideButton(titleComp);
@@ -144,10 +159,21 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
         showCollectingAreaInGeneralSectionButton = createBooleanCombo(composite, Messages.GeneralPreference_yes, Messages.GeneralPreference_no, PreferencePredicate.ShowCollectingAreasInGeneralSection, Messages.DatabasePreferncesPage_Show_Collecting_Areas_in_general_section, isAdminPreference);
 
         showCollectingAreaInGeneralSectionButton.addSelectionListener(this);
-        if (isShowCollectingAreaInGeneralSection){
-            showCollectingAreaInGeneralSectionButton.select(0);
-        }else{
-            showCollectingAreaInGeneralSectionButton.select(1);
+        index = 0;
+        for (String itemLabel : showCollectingAreaInGeneralSectionButton.getItems()) {
+            if (isShowCollectingAreaInGeneralSection == null && itemLabel.startsWith(Messages.Preference_Use_Default)) {
+                showCollectingAreaInGeneralSectionButton.select(index);
+                break;
+            }
+            if (isShowCollectingAreaInGeneralSection != null && itemLabel.equals(Messages.GeneralPreference_yes) && isShowCollectingAreaInGeneralSection){
+                showCollectingAreaInGeneralSectionButton.select(index);
+                break;
+            }
+            if (isShowCollectingAreaInGeneralSection != null && itemLabel.equals(Messages.GeneralPreference_no) && !isShowCollectingAreaInGeneralSection){
+                showCollectingAreaInGeneralSectionButton.select(index);
+                break;
+            }
+            index++;
         }
         if (isAdminPreference){
             allowOverrideShowCollectingAreaButton = createAllowOverrideButton(composite);
@@ -160,17 +186,34 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
                 }
             });
         }
-
+        if (showCollectingAreaInGeneralSection != null && !showCollectingAreaInGeneralSection.isAllowOverride() ){
+               isEditingAllowed = false;
+        }
+        showCollectingAreaInGeneralSectionButton.setEnabled(isEditingAllowed);
         determinationOnlyForFieldUnitsButton = createBooleanCombo(composite, Messages.GeneralPreference_yes, Messages.GeneralPreference_no, PreferencePredicate.DeterminationOnlyForFieldUnits, Messages.DatabasePreferncesPage_Determination_only_for_field_unnits, isAdminPreference);
 
 
         determinationOnlyForFieldUnitsButton.addSelectionListener(this);
-        if (isDeterminationOnlyForFieldUnits){
-            determinationOnlyForFieldUnitsButton.select(0);
-        }else{
-            determinationOnlyForFieldUnitsButton.select(1);
+        index = 0;
+        for (String itemLabel : determinationOnlyForFieldUnitsButton.getItems()) {
+            if (isDeterminationOnlyForFieldUnits == null && itemLabel.startsWith(Messages.Preference_Use_Default)) {
+                determinationOnlyForFieldUnitsButton.select(index);
+                break;
+            }
+            if (isDeterminationOnlyForFieldUnits != null && itemLabel.equals(Messages.GeneralPreference_yes) && isDeterminationOnlyForFieldUnits){
+                determinationOnlyForFieldUnitsButton.select(index);
+                break;
+            }
+            if (isDeterminationOnlyForFieldUnits != null && itemLabel.equals(Messages.GeneralPreference_no) && !isDeterminationOnlyForFieldUnits){
+                determinationOnlyForFieldUnitsButton.select(index);
+                break;
+            }
+            index++;
         }
-
+        if (showDeterminationOnlyForFieldUnits != null && !showDeterminationOnlyForFieldUnits.isAllowOverride() ){
+            isEditingAllowed = false;
+        }
+        determinationOnlyForFieldUnitsButton.setEnabled(isEditingAllowed);
         if (isAdminPreference){
             allowOverridesDeterminationOnlyForFieldUnitsButton = createAllowOverrideButton(composite);
             allowOverridesDeterminationOnlyForFieldUnitsButton.setSelection(allowOverrideDeterminationOnlyForFieldUnits);
@@ -187,11 +230,26 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
 
 
         showTaxonAssociationButton.addSelectionListener(this);
-        if (isShowTaxonAssociation){
-            showTaxonAssociationButton.select(0);
-        }else{
-            showTaxonAssociationButton.select(1);
+        index = 0;
+        for (String itemLabel : showTaxonAssociationButton.getItems()) {
+            if (isShowTaxonAssociation == null && itemLabel.startsWith(Messages.Preference_Use_Default)) {
+                showTaxonAssociationButton.select(index);
+                break;
+            }
+            if (isShowTaxonAssociation != null && itemLabel.equals(Messages.GeneralPreference_yes) && isShowTaxonAssociation){
+                showTaxonAssociationButton.select(index);
+                break;
+            }
+            if (isShowTaxonAssociation != null && itemLabel.equals(Messages.GeneralPreference_no) && !isShowTaxonAssociation){
+                showTaxonAssociationButton.select(index);
+                break;
+            }
+            index++;
         }
+        if (showTaxonAssociation != null && !showTaxonAssociation.isAllowOverride() ){
+            isEditingAllowed = false;
+        }
+        showTaxonAssociationButton.setEnabled(isEditingAllowed);
         if (isAdminPreference){
             allowOverrideIsShowTaxonAssociationButton = createAllowOverrideButton(composite);
             allowOverrideIsShowTaxonAssociationButton.setSelection(allowOverrideShowTaxonAssociation);
@@ -207,12 +265,26 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
         showLifeFormButton = createBooleanCombo(composite, Messages.GeneralPreference_yes, Messages.GeneralPreference_no, PreferencePredicate.ShowLifeForm, Messages.DatabasePreferncesPage_Life_Form, isAdminPreference);
         showLifeFormButton.addSelectionListener(this);
 
-        if (isShowLifeForm){
-            showLifeFormButton.select(0);
-        }else{
-            showLifeFormButton.select(1);
+        index = 0;
+        for (String itemLabel: showLifeFormButton.getItems()) {
+            if (isShowLifeForm == null && itemLabel.startsWith(Messages.Preference_Use_Default)) {
+                showLifeFormButton.select(index);
+                break;
+            }
+            if (isShowLifeForm != null && itemLabel.equals(Messages.GeneralPreference_yes) && isShowLifeForm){
+                showLifeFormButton.select(index);
+                break;
+            }
+            if (isShowLifeForm != null && itemLabel.equals(Messages.GeneralPreference_no) && !isShowLifeForm){
+                showLifeFormButton.select(index);
+                break;
+            }
+            index++;
         }
-
+        if (showLifeForm != null && !showLifeForm.isAllowOverride() ){
+            isEditingAllowed = false;
+        }
+        showLifeFormButton.setEnabled(isEditingAllowed);
         if (isAdminPreference){
             allowOverrideShowLifeFormButton = createAllowOverrideButton(composite);
             allowOverrideShowLifeFormButton.setSelection(allowOverrideShowLifeForm);
@@ -240,47 +312,144 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
     protected void getValues() {
         CdmPreferenceCache cache = CdmPreferenceCache.instance();
 
-        isShowSpecimenRelatedIssues = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowSpecimen.getKey());
+
+        overrideShowSpecimenRelatedIssues = PreferencesUtil.getBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowSpecimen.getKey()), true) != null? PreferencesUtil.getBooleanValue(
+                        PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowSpecimen.getKey()), true): false;
+
         PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowSpecimen);
-        showSpecimenPref = cache.findBestMatching(key);
-        if (showSpecimenPref == null){
+        showSpecimenPref = PreferencesUtil.getPreferenceFromDB(PreferencePredicate.ShowSpecimen);
+
+
+        if (showSpecimenPref != null) {
+            if (showSpecimenPref.isAllowOverride() ) {
+                if (overrideShowSpecimenRelatedIssues){
+                    isShowSpecimenRelatedIssues = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowSpecimen.getKey(), true);
+                }
+            } else {
+                isShowSpecimenRelatedIssues = Boolean.valueOf(showSpecimenPref.getValue());
+            }
+
+        } else {
+            if(!overrideShowSpecimenRelatedIssues){
+                isShowSpecimenRelatedIssues = null;
+            }else{
+                isShowSpecimenRelatedIssues = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowSpecimen.getKey(), true);
+            }
             showSpecimenPref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowSpecimen, PreferencePredicate.ShowSpecimen.getDefaultValue() != null ?  PreferencePredicate.ShowSpecimen.getDefaultValue().toString(): null);
         }
-        allowOverrideShowSpecimenRelatedIssues = showSpecimenPref != null ? showSpecimenPref.isAllowOverride():true;
 
 
 
-        isShowCollectingAreaInGeneralSection = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey(), true);
+
         key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowCollectingAreasInGeneralSection);
-        showCollectingAreaInGeneralSection = cache.findBestMatching(key);
-        if (showCollectingAreaInGeneralSection == null){
+        showCollectingAreaInGeneralSection = PreferencesUtil.getPreferenceFromDB(PreferencePredicate.ShowCollectingAreasInGeneralSection);
+        overrideShowCollectionAreaInGeneralSection = PreferencesUtil.getBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey()), true) != null? PreferencesUtil.getBooleanValue(
+                        PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey()), true): false;
+        allowOverrideShowCollectingAreaInGeneralSection = showCollectingAreaInGeneralSection != null ? showCollectingAreaInGeneralSection.isAllowOverride():true;
+        if (showCollectingAreaInGeneralSection != null) {
+            if (showCollectingAreaInGeneralSection.isAllowOverride() ) {
+                if (overrideShowCollectionAreaInGeneralSection){
+                    isShowCollectingAreaInGeneralSection = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey(), true);
+                }
+
+            } else {
+                isShowCollectingAreaInGeneralSection = Boolean.valueOf(showCollectingAreaInGeneralSection.getValue());
+
+            }
+
+        } else {
+            if(!overrideShowCollectionAreaInGeneralSection){
+                isShowCollectingAreaInGeneralSection = null;
+            }else{
+                isShowCollectingAreaInGeneralSection = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey(), true);
+            }
             showCollectingAreaInGeneralSection = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowCollectingAreasInGeneralSection, PreferencePredicate.ShowCollectingAreasInGeneralSection.getDefaultValue() != null ?  PreferencePredicate.ShowCollectingAreasInGeneralSection.getDefaultValue().toString(): null);
         }
-        allowOverrideShowCollectingAreaInGeneralSection = showCollectingAreaInGeneralSection != null ? showCollectingAreaInGeneralSection.isAllowOverride():true;
 
 
-        isDeterminationOnlyForFieldUnits = PreferencesUtil.getBooleanValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey());
         key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.DeterminationOnlyForFieldUnits);
-        showDeterminationOnlyForFieldUnits = cache.findBestMatching(key);
-        if (showDeterminationOnlyForFieldUnits == null){
+        showDeterminationOnlyForFieldUnits = PreferencesUtil.getPreferenceFromDB(PreferencePredicate.DeterminationOnlyForFieldUnits);
+        overrideDeterminationOnlyForFieldUnits = PreferencesUtil.getBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey()), true) != null? PreferencesUtil.getBooleanValue(
+                        PreferencesUtil.prefOverrideKey(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey()), true): false;
+        if (showDeterminationOnlyForFieldUnits != null) {
+            if (showDeterminationOnlyForFieldUnits.isAllowOverride() ) {
+                if (overrideDeterminationOnlyForFieldUnits){
+                    isDeterminationOnlyForFieldUnits = PreferencesUtil.getBooleanValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey());
+                }
+
+            } else {
+                isDeterminationOnlyForFieldUnits = Boolean.valueOf(showDeterminationOnlyForFieldUnits.getValue());
+
+            }
+
+        } else {
+            if(!overrideDeterminationOnlyForFieldUnits){
+                isDeterminationOnlyForFieldUnits = null;
+            }else{
+                isDeterminationOnlyForFieldUnits = PreferencesUtil.getBooleanValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey(), true);
+            }
             showDeterminationOnlyForFieldUnits = CdmPreference.NewTaxEditorInstance(PreferencePredicate.DeterminationOnlyForFieldUnits, PreferencePredicate.DeterminationOnlyForFieldUnits.getDefaultValue() != null ?  PreferencePredicate.DeterminationOnlyForFieldUnits.getDefaultValue().toString(): null);
         }
+
         allowOverrideDeterminationOnlyForFieldUnits = showDeterminationOnlyForFieldUnits != null ? showDeterminationOnlyForFieldUnits.isAllowOverride():true;
 
-        isShowTaxonAssociation = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowTaxonAssociations.getKey());
+
         key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowTaxonAssociations);
-        showTaxonAssociation = cache.findBestMatching(key);
-        if (showTaxonAssociation == null){
+        showTaxonAssociation = PreferencesUtil.getPreferenceFromDB(PreferencePredicate.ShowTaxonAssociations);
+        overrideShowTaxonAssociation =  PreferencesUtil.getBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowTaxonAssociations.getKey()), true) != null? PreferencesUtil.getBooleanValue(
+                        PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowTaxonAssociations.getKey()), true): false;
+        if (showTaxonAssociation != null) {
+            if (showTaxonAssociation.isAllowOverride() ) {
+                if (overrideShowTaxonAssociation){
+                    isShowTaxonAssociation = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowTaxonAssociations.getKey());
+                }
+
+            } else {
+                isShowTaxonAssociation = Boolean.valueOf(showTaxonAssociation.getValue());
+
+            }
+
+        } else {
+            if(!overrideShowTaxonAssociation){
+                isShowTaxonAssociation = null;
+            }else{
+                isShowTaxonAssociation = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowTaxonAssociations.getKey(), true);
+            }
             showTaxonAssociation = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowTaxonAssociations, PreferencePredicate.ShowTaxonAssociations.getDefaultValue() != null ?  PreferencePredicate.ShowTaxonAssociations.getDefaultValue().toString(): null);
         }
+
         allowOverrideShowTaxonAssociation = showTaxonAssociation != null ? showTaxonAssociation.isAllowOverride():true;
 
-        isShowLifeForm = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowLifeForm.getKey());
+
         key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowLifeForm);
-        showLifeForm = cache.findBestMatching(key);
-        if (showLifeForm == null){
+        showLifeForm = PreferencesUtil.getPreferenceFromDB(PreferencePredicate.ShowLifeForm);
+        overrideShowLifeForm =  PreferencesUtil.getBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowLifeForm.getKey()), true) != null? PreferencesUtil.getBooleanValue(
+                        PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowLifeForm.getKey()), true): false;
+        if (showLifeForm != null) {
+            if (showLifeForm.isAllowOverride() ) {
+                if (overrideShowLifeForm){
+                    isShowLifeForm = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowLifeForm.getKey());
+                }
+
+            } else {
+                isShowLifeForm = Boolean.valueOf(showLifeForm.getValue());
+
+            }
+
+        } else {
+            if(!overrideShowLifeForm){
+                isShowLifeForm = null;
+            }else{
+                isShowLifeForm = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowLifeForm.getKey(), true);
+            }
             showLifeForm = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowLifeForm, PreferencePredicate.ShowLifeForm.getDefaultValue() != null ?  PreferencePredicate.ShowLifeForm.getDefaultValue().toString(): null);
         }
+
         allowOverrideShowLifeForm = showLifeForm != null ? showLifeForm.isAllowOverride():true;
 
 
@@ -288,27 +457,52 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
 
     @Override
     public boolean performOk() {
-        if (allowOverrideShowSpecimenRelatedIssues){
-            PreferencesUtil.setBooleanValue(PreferencePredicate.ShowSpecimen.getKey(), isShowSpecimenRelatedIssues);
-            boolean test = isShowSpecimenRelatedIssues != Boolean.parseBoolean(showSpecimenPref.getValue());
-            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(PreferencePredicate.ShowSpecimen.getKey()), isShowSpecimenRelatedIssues != Boolean.parseBoolean(showSpecimenPref.getValue()));
+
+        boolean override = false;
+        if (isShowSpecimenRelatedIssues != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.ShowSpecimen.getKey(), isShowSpecimenRelatedIssues.toString());
         }
-        if (allowOverrideShowCollectingAreaInGeneralSection){
-            PreferencesUtil.setBooleanValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey(), isShowCollectingAreaInGeneralSection);
-            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey()), isShowCollectingAreaInGeneralSection != Boolean.parseBoolean(showCollectingAreaInGeneralSection.getValue()));
+        PreferencesUtil.setBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowSpecimen.getKey()),
+                override);
+
+        override = false;
+        if (isShowCollectingAreaInGeneralSection != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey(), isShowCollectingAreaInGeneralSection.toString());
         }
-        if (allowOverrideDeterminationOnlyForFieldUnits){
-            PreferencesUtil.setBooleanValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey(), isDeterminationOnlyForFieldUnits);
-            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey()), isDeterminationOnlyForFieldUnits != Boolean.parseBoolean(showDeterminationOnlyForFieldUnits.getValue()));
+        PreferencesUtil.setBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey()),
+                override);
+
+        override = false;
+        if (isDeterminationOnlyForFieldUnits != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey(), isDeterminationOnlyForFieldUnits.toString());
         }
-        if (allowOverrideShowTaxonAssociation){
-            PreferencesUtil.setBooleanValue(PreferencePredicate.ShowTaxonAssociations.getKey(), isShowTaxonAssociation);
-            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(PreferencePredicate.ShowTaxonAssociations.getKey()), isShowTaxonAssociation != Boolean.parseBoolean(showTaxonAssociation.getValue()));
+        PreferencesUtil.setBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey()),
+                override);
+
+        override = false;
+        if (isShowTaxonAssociation != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.ShowTaxonAssociations.getKey(), isShowTaxonAssociation.toString());
         }
-        if (allowOverrideShowLifeForm){
-            PreferencesUtil.setBooleanValue(PreferencePredicate.ShowLifeForm.getKey(), isShowLifeForm);
-            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(PreferencePredicate.ShowLifeForm.getKey()), isShowLifeForm != Boolean.parseBoolean(showLifeForm.getValue()));
+        PreferencesUtil.setBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowTaxonAssociations.getKey()),
+                override);
+
+        override = false;
+        if (isShowLifeForm != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.ShowLifeForm.getKey(), isShowLifeForm.toString());
         }
+        PreferencesUtil.setBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowLifeForm.getKey()),
+                override);
+
         return true;
     }
 
@@ -316,56 +510,41 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
 
     @Override
     protected void performDefaults() {
-        isShowSpecimenRelatedIssues = (Boolean)PreferencePredicate.ShowSpecimen.getDefaultValue();
-        if (isShowSpecimenRelatedIssues){
-            showSpecimenButton.select(0);
-        }else{
-            showSpecimenButton.select(1);
-        }
+        isShowSpecimenRelatedIssues = null;
+        showSpecimenButton.select(0);
+
         if (allowOverrideIsShowSpecimenRelatedIssuesButton != null){
             allowOverrideShowSpecimenRelatedIssues = true;
             allowOverrideIsShowSpecimenRelatedIssuesButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
         }
-        isShowCollectingAreaInGeneralSection = (Boolean)PreferencePredicate.ShowCollectingAreasInGeneralSection.getDefaultValue();
-        if (isShowCollectingAreaInGeneralSection){
-            showCollectingAreaInGeneralSectionButton.select(0);
-        }else{
-            showCollectingAreaInGeneralSectionButton.select(1);
-        }
+        isShowCollectingAreaInGeneralSection = null;
+        showCollectingAreaInGeneralSectionButton.select(0);
+
         if (allowOverrideShowCollectingAreaButton != null){
             allowOverrideShowCollectingAreaInGeneralSection = true;
             allowOverrideShowCollectingAreaButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
         }
-        isDeterminationOnlyForFieldUnits = (Boolean) PreferencePredicate.DeterminationOnlyForFieldUnits.getDefaultValue();
-        if (isDeterminationOnlyForFieldUnits){
-            determinationOnlyForFieldUnitsButton.select(0);
-        }else{
-            determinationOnlyForFieldUnitsButton.select(1);
-        }
+        isDeterminationOnlyForFieldUnits = null;
+        determinationOnlyForFieldUnitsButton.select(0);
+
         if (allowOverridesDeterminationOnlyForFieldUnitsButton != null){
             allowOverrideDeterminationOnlyForFieldUnits = true;
             allowOverridesDeterminationOnlyForFieldUnitsButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
         }
 
-        isShowTaxonAssociation = (Boolean) PreferencePredicate.ShowTaxonAssociations.getDefaultValue();
-        if (isShowTaxonAssociation){
-            showTaxonAssociationButton.select(0);
-        }else{
-            showTaxonAssociationButton.select(1);
-        }
+        isShowTaxonAssociation = null;
+        showTaxonAssociationButton.select(0);
+
         if (allowOverrideIsShowTaxonAssociationButton != null){
             allowOverrideShowTaxonAssociation = true;
             allowOverrideIsShowTaxonAssociationButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
         }
 
 
-        isShowLifeForm = (Boolean) PreferencePredicate.ShowLifeForm.getDefaultValue();
+        isShowLifeForm = null;
+
+        showLifeFormButton.select(0);
 
-        if (isShowLifeForm){
-            showLifeFormButton.select(0);
-        }else{
-            showLifeFormButton.select(1);
-        }
         if (allowOverrideShowLifeFormButton != null){
             allowOverrideShowLifeForm = true;
             allowOverrideShowLifeFormButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
@@ -381,18 +560,32 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
     @Override
     public void widgetSelected(SelectionEvent e) {
        setApply(true);
-       if (e.getSource().equals(showSpecimenButton)){
+       if (e.getSource().equals(this.showSpecimenButton)) {
            String text = showSpecimenButton.getText();
-           text = text.replace(Messages.Preference_Use_Default, "");
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isShowSpecimenRelatedIssues = null;
+               if (isAdminPreference){
+                   allowOverrideIsShowSpecimenRelatedIssuesButton.setSelection(true);
+               }
+               return;
+           }
            if (text.equals(Messages.GeneralPreference_yes)){
                isShowSpecimenRelatedIssues = true;
            }else{
                isShowSpecimenRelatedIssues = false;
            }
        }
-       if (e.getSource().equals(showCollectingAreaInGeneralSectionButton)){
+
+       if (e.getSource().equals(this.showCollectingAreaInGeneralSectionButton)) {
            String text = showCollectingAreaInGeneralSectionButton.getText();
-           text = text.replace(" (Use default)", "");
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isShowCollectingAreaInGeneralSection = null;
+               if (isAdminPreference){
+                   //showCollectingAreaInGeneralSection.setAllowOverride(true);
+                   allowOverrideShowCollectingAreaButton.setSelection(true);
+               }
+               return;
+           }
            if (text.equals(Messages.GeneralPreference_yes)){
                isShowCollectingAreaInGeneralSection = true;
            }else{
@@ -400,33 +593,57 @@ public class SpecimenOrObservationPreferences extends CdmPreferencePage implemen
            }
        }
 
-       if (e.getSource().equals(determinationOnlyForFieldUnitsButton)){
+       if (e.getSource().equals(this.determinationOnlyForFieldUnitsButton)) {
            String text = determinationOnlyForFieldUnitsButton.getText();
-           text = text.replace(" (Use default)", "");
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isDeterminationOnlyForFieldUnits = null;
+               if (isAdminPreference){
+                   //showDeterminationOnlyForFieldUnits.setAllowOverride(true);
+                   allowOverridesDeterminationOnlyForFieldUnitsButton.setSelection(true);
+               }
+               return;
+           }
            if (text.equals(Messages.GeneralPreference_yes)){
                isDeterminationOnlyForFieldUnits = true;
            }else{
                isDeterminationOnlyForFieldUnits = false;
            }
        }
-       if (e.getSource().equals(showTaxonAssociationButton)){
+
+       if (e.getSource().equals(this.showTaxonAssociationButton)) {
            String text = showTaxonAssociationButton.getText();
-           text = text.replace(" (Use default)", "");
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isShowTaxonAssociation = null;
+               if (isAdminPreference){
+                   //showTaxonAssociation.setAllowOverride(true);
+                   allowOverrideIsShowTaxonAssociationButton.setSelection(true);
+               }
+               return;
+           }
            if (text.equals(Messages.GeneralPreference_yes)){
                isShowTaxonAssociation = true;
            }else{
                isShowTaxonAssociation = false;
            }
        }
-       if (e.getSource().equals(showLifeFormButton)){
+
+       if (e.getSource().equals(this.showLifeFormButton)) {
            String text = showLifeFormButton.getText();
-           text = text.replace(" (Use default)", "");
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isShowLifeForm = null;
+               if (isAdminPreference){
+                   //showLifeForm.setAllowOverride(true);
+                   allowOverrideShowLifeFormButton.setSelection(true);
+               }
+               return;
+           }
            if (text.equals(Messages.GeneralPreference_yes)){
                isShowLifeForm = true;
            }else{
                isShowLifeForm = false;
            }
        }
+
     }
 
     /**