layout issues in name details view preference
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / SpecimenOrObservationPreferences.java
index a19cb7abeebcc723f443bce5065d3836cfcc4711..799b6831a5e193dbac5b1cbcc3f22d2c0f464602 100644 (file)
@@ -8,18 +8,23 @@
 */
 package eu.etaxonomy.taxeditor.preference;
 
-import org.eclipse.jface.preference.BooleanFieldEditor;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 
-import eu.etaxonomy.cdm.api.application.ICdmRepository;
-import eu.etaxonomy.cdm.api.service.IPreferenceService;
 import eu.etaxonomy.cdm.model.metadata.CdmPreference;
 import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
 import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
 import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
-import eu.etaxonomy.taxeditor.preference.menu.FieldEditorPreferencePageE4;
+import eu.etaxonomy.taxeditor.l10n.Messages;
+import eu.etaxonomy.taxeditor.preference.menu.CdmPreferencePage;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -27,21 +32,44 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @date 13.02.2014
  *
  */
-public class SpecimenOrObservationPreferences extends FieldEditorPreferencePageE4 {
+public class SpecimenOrObservationPreferences extends CdmPreferencePage implements SelectionListener{
 
-    private static final String LOCAL_SETTINGS_NOT_ALLOWED = "The CDM settings don't allow to set the preferences for the display of specimen and obeservations locally. If you need to make local settings, please ask an administrator.";
-    private static final String DESCRIPTION = "Set the preferences for the display of specimen and observations.";
+    private static final String LOCAL_SETTINGS_NOT_ALLOWED = Messages.SpecimenOrObservationPreferences_0;
+    private static final String DESCRIPTION = Messages.SpecimenOrObservationPreferences_1;
 
-    public SpecimenOrObservationPreferences(){
-        super();
-        setPreferenceStore(PreferencesUtil.getPreferenceStore());
-        if (getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SPECIMEN_ALLOW_OVERRIDE)){
-            setDescription(DESCRIPTION);
-        }else{
-            setDescription(LOCAL_SETTINGS_NOT_ALLOWED);
-        }
-    }
+    protected Boolean isShowSpecimenRelatedIssues;
+    protected boolean allowOverrideShowSpecimenRelatedIssues;
+    protected boolean overrideShowSpecimenRelatedIssues;
+    protected Boolean isShowCollectingAreaInGeneralSection;
+    protected boolean allowOverrideShowCollectingAreaInGeneralSection;
+    protected boolean overrideShowCollectionAreaInGeneralSection;
+    protected Boolean isDeterminationOnlyForFieldUnits;
+    protected boolean allowOverrideDeterminationOnlyForFieldUnits;
+    protected boolean overrideDeterminationOnlyForFieldUnits;
+    protected Boolean isShowTaxonAssociation;
+    protected boolean allowOverrideShowTaxonAssociation;
+    protected boolean overrideShowTaxonAssociation;
+    protected Boolean isShowLifeForm;
+    protected boolean allowOverrideShowLifeForm;
+    protected boolean overrideShowLifeForm;
+    Composite composite;
+
+    protected Combo showSpecimenButton;
+    protected Button allowOverrideIsShowSpecimenRelatedIssuesButton;
+    protected Combo showCollectingAreaInGeneralSectionButton;
+    protected Button allowOverrideShowCollectingAreaButton;
+    protected Combo determinationOnlyForFieldUnitsButton;
+    protected Button allowOverridesDeterminationOnlyForFieldUnitsButton;
+    protected Combo showTaxonAssociationButton;
+    protected Button allowOverrideIsShowTaxonAssociationButton;
+    protected Button allowOverrideShowLifeFormButton;
+    protected Combo showLifeFormButton;
 
+    CdmPreference showSpecimenPref;
+    CdmPreference showCollectingAreaInGeneralSection;
+    CdmPreference showDeterminationOnlyForFieldUnits;
+    CdmPreference showTaxonAssociation;
+    CdmPreference showLifeForm;
 
     @Override
     public void init() {
@@ -50,61 +78,577 @@ public class SpecimenOrObservationPreferences extends FieldEditorPreferencePageE
         if(!CdmStore.isActive()){
             return;
         }
-        ICdmRepository controller = CdmStore.getCurrentApplicationConfiguration();
-        if (controller != null){
-            IPreferenceService service = controller.getPreferenceService();
-            PrefKey keyTaxonAssociation = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowTaxonAssociations);
-            CdmPreference prefTaxonAssociation = service.find(keyTaxonAssociation);
-            getPreferenceStore().setValue(IPreferenceKeys.SHOW_TAXON_ASSOCIATIONS_ALLOW_OVERRIDE, prefTaxonAssociation == null? true : prefTaxonAssociation.isAllowOverride());
-
-            PrefKey keyDeterminationFieldUnit = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.DeterminationOnlyForFieldUnits);
-            CdmPreference prefDeterminationFieldUnit = service.find(keyDeterminationFieldUnit);
-            getPreferenceStore().setValue(IPreferenceKeys.DETERMINATIONS_ONLY_FOR_FIELDUNITS_ALLOW_OVERRIDE, prefDeterminationFieldUnit == null? true : prefDeterminationFieldUnit.isAllowOverride());
-
-            PrefKey keyCollectingAreas = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowCollectingAreasInGeneralSection);
-            CdmPreference prefCollectingAreas = service.find(keyCollectingAreas);
-            getPreferenceStore().setValue(IPreferenceKeys.SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_ALLOW_OVERRIDE, prefCollectingAreas == null? true : prefCollectingAreas.isAllowOverride());
-
-            PrefKey keyShowLifeForm = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowLifeForm);
-            CdmPreference prefShowLifeForm = service.find(keyShowLifeForm);
-            getPreferenceStore().setValue(IPreferenceKeys.SHOW_LIFE_FORM_ALLOW_OVERRIDE, prefShowLifeForm == null? true : prefShowLifeForm.isAllowOverride());
-         }
-        if (getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_TAXON_ASSOCIATIONS_OVERRIDE)) {
-            setDescription(DESCRIPTION);
+
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected Control createContents(Composite parent) {
+        getValues();
+
+        boolean isEditingAllowed = true;
+        if(!isAdminPreference){
+            CdmPreferenceCache cache = CdmPreferenceCache.instance();
+
+            if (showSpecimenPref != null){
+                if (!showSpecimenPref.isAllowOverride() ){
+                    isEditingAllowed = false;
+                }
+            }
+        }
+        if (isEditingAllowed){
+            Label label = new Label(parent, SWT.NONE);
+            label.setText(DESCRIPTION);
         }else{
-            setDescription(LOCAL_SETTINGS_NOT_ALLOWED);
+            Label label = new Label(parent, SWT.NONE);
+            label.setText(LOCAL_SETTINGS_NOT_ALLOWED);
+            this.noDefaultAndApplyButton();
+            return parent;
+        }
+        Composite titleComp = createComposite(parent);
+        GridData gridData = createTextGridData();
+
+        Label separator= new Label(titleComp, SWT.HORIZONTAL | SWT.SEPARATOR);
+        separator.setLayoutData(gridData);
+        separator.setVisible(false);
+        showSpecimenButton = createBooleanCombo(titleComp, Messages.GeneralPreference_yes, Messages.GeneralPreference_no, PreferencePredicate.ShowSpecimen, Messages.DatabasePreferncesPage_Show_Specimen, isAdminPreference);
+
+        showSpecimenButton.addSelectionListener(this);
+        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);
+            allowOverrideIsShowSpecimenRelatedIssuesButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
+//            allowOverrideIsShowSpecimenRelatedIssuesButton.setEnabled(isShowSpecimenRelatedIssues != null);
+            allowOverrideIsShowSpecimenRelatedIssuesButton.addSelectionListener(new SelectionAdapter(){
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    setApply(true);
+                    allowOverrideShowSpecimenRelatedIssues = allowOverrideIsShowSpecimenRelatedIssuesButton.getSelection();
+                }
+            });
+        }
+
+        composite = createComposite(parent);
+        //composite.setEnabled(isShowSpecimenRelatedIssues);
+        gridData = createTextGridData();
+
+        separator= new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
+        separator.setLayoutData(gridData);
+
+        showCollectingAreaInGeneralSectionButton = createBooleanCombo(composite, Messages.GeneralPreference_yes, Messages.GeneralPreference_no, PreferencePredicate.ShowCollectingAreasInGeneralSection, Messages.DatabasePreferncesPage_Show_Collecting_Areas_in_general_section, isAdminPreference);
+
+        showCollectingAreaInGeneralSectionButton.addSelectionListener(this);
+        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);
+            allowOverrideShowCollectingAreaButton.setSelection(allowOverrideShowCollectingAreaInGeneralSection);
+//            allowOverrideShowCollectingAreaButton.setEnabled(isShowCollectingAreaInGeneralSection != null);
+            allowOverrideShowCollectingAreaButton.addSelectionListener(new SelectionAdapter(){
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    setApply(true);
+                    allowOverrideShowCollectingAreaInGeneralSection = allowOverrideShowCollectingAreaButton.getSelection();
+                }
+            });
+        }
+        isEditingAllowed = true;
+        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);
+        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++;
+        }
+        isEditingAllowed = true;
+        if (showDeterminationOnlyForFieldUnits != null && !showDeterminationOnlyForFieldUnits.isAllowOverride() ){
+            isEditingAllowed = false;
+        }
+
+        determinationOnlyForFieldUnitsButton.setEnabled(isEditingAllowed);
+        if (isAdminPreference){
+            allowOverridesDeterminationOnlyForFieldUnitsButton = createAllowOverrideButton(composite);
+            allowOverridesDeterminationOnlyForFieldUnitsButton.setSelection(allowOverrideDeterminationOnlyForFieldUnits);
+//            allowOverridesDeterminationOnlyForFieldUnitsButton.setEnabled(showDeterminationOnlyForFieldUnits != null);
+            allowOverridesDeterminationOnlyForFieldUnitsButton.addSelectionListener(new SelectionAdapter(){
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    setApply(true);
+                    allowOverrideDeterminationOnlyForFieldUnits = allowOverridesDeterminationOnlyForFieldUnitsButton.getSelection();
+                }
+            });
+        }
+
+        showTaxonAssociationButton =createBooleanCombo(composite, Messages.GeneralPreference_yes, Messages.GeneralPreference_no, PreferencePredicate.ShowTaxonAssociations, Messages.DatabasePreferncesPage_Taxon_Associations, isAdminPreference);
+
+
+        showTaxonAssociationButton.addSelectionListener(this);
+        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++;
+        }
+        isEditingAllowed = true;
+        if (showTaxonAssociation != null && !showTaxonAssociation.isAllowOverride() ){
+            isEditingAllowed = false;
+        }
+        showTaxonAssociationButton.setEnabled(isEditingAllowed);
+        if (isAdminPreference){
+            allowOverrideIsShowTaxonAssociationButton = createAllowOverrideButton(composite);
+            allowOverrideIsShowTaxonAssociationButton.setSelection(allowOverrideShowTaxonAssociation);
+//            allowOverrideIsShowTaxonAssociationButton.setEnabled(showTaxonAssociation != null);
+            allowOverrideIsShowTaxonAssociationButton.addSelectionListener(new SelectionAdapter(){
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    setApply(true);
+                    allowOverrideShowTaxonAssociation = allowOverrideIsShowTaxonAssociationButton.getSelection();
+                }
+            });
+        }
+
+        showLifeFormButton = createBooleanCombo(composite, Messages.GeneralPreference_yes, Messages.GeneralPreference_no, PreferencePredicate.ShowLifeForm, Messages.DatabasePreferncesPage_Life_Form, isAdminPreference);
+        showLifeFormButton.addSelectionListener(this);
+
+        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++;
+        }
+        isEditingAllowed = true;
+        if (showLifeForm != null && !showLifeForm.isAllowOverride() ){
+            isEditingAllowed = false;
+        }
+        showLifeFormButton.setEnabled(isEditingAllowed);
+        if (isAdminPreference){
+            allowOverrideShowLifeFormButton = createAllowOverrideButton(composite);
+            allowOverrideShowLifeFormButton.setSelection(allowOverrideShowLifeForm);
+//            allowOverrideShowLifeFormButton.setEnabled(showLifeForm != null);
+            allowOverrideShowLifeFormButton.addSelectionListener(new SelectionAdapter(){
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    setApply(true);
+                    allowOverrideShowLifeForm = allowOverrideShowLifeFormButton.getSelection();
+                }
+            });
+        }
+
+        if (!isEditingAllowed){
+            PreferencesUtil.recursiveSetEnabled(composite, false);
+        }
+
+        return composite;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected void getValues() {
+        CdmPreferenceCache cache = CdmPreferenceCache.instance();
+
+
+        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 = 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);
+        }
+
+
+
+
+        key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowCollectingAreasInGeneralSection);
+        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);
+        }
 
+
+        key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.DeterminationOnlyForFieldUnits);
+        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;
+
+
+        key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowTaxonAssociations);
+        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;
+
+
+        key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowLifeForm);
+        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;
+
+
+    }
+
+    @Override
+    public boolean performOk() {
+
+        boolean override = false;
+        if (isShowSpecimenRelatedIssues != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.ShowSpecimen.getKey(), isShowSpecimenRelatedIssues.toString());
+        }
+        PreferencesUtil.setBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowSpecimen.getKey()),
+                override);
+
+        override = false;
+        if (isShowCollectingAreaInGeneralSection != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey(), isShowCollectingAreaInGeneralSection.toString());
+        }
+        PreferencesUtil.setBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey()),
+                override);
+
+        override = false;
+        if (isDeterminationOnlyForFieldUnits != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey(), isDeterminationOnlyForFieldUnits.toString());
+        }
+        PreferencesUtil.setBooleanValue(
+                PreferencesUtil.prefOverrideKey(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey()),
+                override);
+
+        override = false;
+        if (isShowTaxonAssociation != null ) {
+            override = true;
+            PreferencesUtil.setStringValue(PreferencePredicate.ShowTaxonAssociations.getKey(), isShowTaxonAssociation.toString());
         }
+        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;
     }
 
+
+
     @Override
-    protected void createFieldEditors() {
-        if (getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SPECIMEN_ALLOW_OVERRIDE)) {
-            addField(new BooleanFieldEditor(IPreferenceKeys.DETERMINATION_ONLY_FOR_FIELD_UNITS,
-                    "Taxon determination only on FieldUnit level",
-                    getFieldEditorParent()));
-            addField(new BooleanFieldEditor(IPreferenceKeys.SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION,
-                    "Show \"Collecting Areas\" in \"General\" section of details view",
-                    getFieldEditorParent()));
-            addField(new BooleanFieldEditor(IPreferenceKeys.SHOW_TAXON_ASSOCIATIONS,
-                    "Show taxon associations of a specimen in the details view",
-                    getFieldEditorParent()));
-            addField(new BooleanFieldEditor(IPreferenceKeys.SHOW_LIFE_FORM,
-                    "Show life form of a specimen in the details view",
-                    getFieldEditorParent()));
-            Label label = new Label(getFieldEditorParent(), SWT.NONE);
+    protected void performDefaults() {
+        isShowSpecimenRelatedIssues = null;
+        showSpecimenButton.select(0);
+
+        if (allowOverrideIsShowSpecimenRelatedIssuesButton != null){
+            allowOverrideShowSpecimenRelatedIssues = true;
+            allowOverrideIsShowSpecimenRelatedIssuesButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
+        }
+        isShowCollectingAreaInGeneralSection = null;
+        showCollectingAreaInGeneralSectionButton.select(0);
+
+        if (allowOverrideShowCollectingAreaButton != null){
+            allowOverrideShowCollectingAreaInGeneralSection = true;
+            allowOverrideShowCollectingAreaButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
+        }
+        isDeterminationOnlyForFieldUnits = null;
+        determinationOnlyForFieldUnitsButton.select(0);
+
+        if (allowOverridesDeterminationOnlyForFieldUnitsButton != null){
+            allowOverrideDeterminationOnlyForFieldUnits = true;
+            allowOverridesDeterminationOnlyForFieldUnitsButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
+        }
+
+        isShowTaxonAssociation = null;
+        showTaxonAssociationButton.select(0);
+
+        if (allowOverrideIsShowTaxonAssociationButton != null){
+            allowOverrideShowTaxonAssociation = true;
+            allowOverrideIsShowTaxonAssociationButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
+        }
 
-            label.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
 
-            addField(new BooleanFieldEditor(
-                    IPreferenceKeys.SHOW_SPECIMEN_OVERRIDE,
-                    "Use local specimen preferences",
-                    getFieldEditorParent()));
+        isShowLifeForm = null;
 
+        showLifeFormButton.select(0);
 
+        if (allowOverrideShowLifeFormButton != null){
+            allowOverrideShowLifeForm = true;
+            allowOverrideShowLifeFormButton.setSelection(allowOverrideShowSpecimenRelatedIssues);
         }
+        setApply(true);
+
+        super.performDefaults();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void widgetSelected(SelectionEvent e) {
+       setApply(true);
+       if (e.getSource().equals(this.showSpecimenButton)) {
+           String text = showSpecimenButton.getText();
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isShowSpecimenRelatedIssues = null;
+               return;
+           }
+
+           if (text.equals(Messages.GeneralPreference_yes)){
+               isShowSpecimenRelatedIssues = true;
+           }else{
+               isShowSpecimenRelatedIssues = false;
+           }
+       }
+
+       if (e.getSource().equals(this.showCollectingAreaInGeneralSectionButton)) {
+           String text = showCollectingAreaInGeneralSectionButton.getText();
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isShowCollectingAreaInGeneralSection = null;
+               return;
+           }
+
+           if (text.equals(Messages.GeneralPreference_yes)){
+               isShowCollectingAreaInGeneralSection = true;
+           }else{
+               isShowCollectingAreaInGeneralSection = false;
+           }
+       }
+
+       if (e.getSource().equals(this.determinationOnlyForFieldUnitsButton)) {
+           String text = determinationOnlyForFieldUnitsButton.getText();
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isDeterminationOnlyForFieldUnits = null;
+               return;
+           }
+           if (text.equals(Messages.GeneralPreference_yes)){
+               isDeterminationOnlyForFieldUnits = true;
+           }else{
+               isDeterminationOnlyForFieldUnits = false;
+           }
+       }
+
+       if (e.getSource().equals(this.showTaxonAssociationButton)) {
+           String text = showTaxonAssociationButton.getText();
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isShowTaxonAssociation = null;
+               return;
+           }
+
+           if (text.equals(Messages.GeneralPreference_yes)){
+               isShowTaxonAssociation = true;
+           }else{
+               isShowTaxonAssociation = false;
+           }
+       }
+
+       if (e.getSource().equals(this.showLifeFormButton)) {
+           String text = showLifeFormButton.getText();
+           if(text.startsWith(Messages.Preference_Use_Default)){
+               isShowLifeForm = null;
+               return;
+           }
+
+           if (text.equals(Messages.GeneralPreference_yes)){
+               isShowLifeForm = true;
+           }else{
+               isShowLifeForm = false;
+           }
+       }
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void widgetDefaultSelected(SelectionEvent e) {
+        // TODO Auto-generated method stub
 
     }
 
 
+
+
 }