ref #7063: better handling of preferences for distribution editor and other places
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / PreferencesUtil.java
index 041d40eede2da3caad48f4b2c38a43c3ae9197d0..35889bca0d064cbd08c936ea3567b46a8a7944cd 100644 (file)
@@ -90,6 +90,8 @@ public class PreferencesUtil implements IPreferenceKeys {
 
        private final static Logger logger = Logger.getLogger(PreferencesUtil.class);
 
+
+
        /**
         * <p>
         * getPreferenceStore
@@ -119,6 +121,9 @@ public class PreferencesUtil implements IPreferenceKeys {
            else{
                ICdmRepository controller;
                controller = CdmStore.getCurrentApplicationConfiguration();
+               if (controller == null){
+                return null;
+            }
                PrefKey key = null;
                try{
                    key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode);
@@ -126,9 +131,7 @@ public class PreferencesUtil implements IPreferenceKeys {
                    System.out.println(e.getStackTrace());
                }
                CdmPreference preference = null;
-               if (controller == null){
-                       return null;
-               }
+
                if (preferenceKey == null){
                        preference = controller.getPreferenceService().find(key);
                        if (preference == null){
@@ -138,7 +141,7 @@ public class PreferencesUtil implements IPreferenceKeys {
 //                             UUID uuid = UUID.fromString(preference.getValue().substring(index +1, preference.getValue().length()));
 //                             preferredCode = NomenclaturalCode.getByUuid(uuid);
 
-                               getPreferenceStore().setValue(CDM_NOMENCLATURAL_CODE_KEY,
+                               getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
                                        preferenceKey);
                                getPreferenceStore().setValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY,preference.isAllowOverride());
                                return preference;
@@ -494,7 +497,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         *         object.
         */
        public static IFindTaxaAndNamesConfigurator initializeSearchConfigurator() {
-               IFindTaxaAndNamesConfigurator configurator = new FindTaxaAndNamesConfiguratorImpl();
+               IFindTaxaAndNamesConfigurator configurator = FindTaxaAndNamesConfiguratorImpl.NewInstance();
 
                configurator.setDoTaxa(true);
                configurator.setDoSynonyms(true);
@@ -568,9 +571,13 @@ public class PreferencesUtil implements IPreferenceKeys {
                                "http://www.biodiversitylibrary.org/openurl");
                getPreferenceStore().setDefault(OPENURL_IMAGE_MAX_WIDTH, "1000");
                getPreferenceStore().setDefault(OPENURL_IMAGE_MAX_HEIGHT, "1000");
-               getPreferenceStore().setDefault(IPreferenceKeys.DISTRIBUTION_AREA_PREFRENCES_ACTIVE, false);
+               //Distribution Editor:
+               getPreferenceStore().setDefault(DISTRIBUTION_AREA_PREFRENCES_ACTIVE, false);
                getPreferenceStore().setDefault(CHECKLIST_ID_IN_VOCABULARY, true);
                getPreferenceStore().setDefault(CHECKLIST_SYMBOL, false);
+
+
+               //Name Details
                getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS, true);
                getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP_CACHE, true);
                getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP, true);
@@ -584,9 +591,16 @@ public class PreferencesUtil implements IPreferenceKeys {
                getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE, true);
                getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_RANK, true);
                getPreferenceStore().setDefault(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION, true);
+               //Navigator preferences
                getPreferenceStore().setDefault(SORT_NODES_NATURALLY, false);
                getPreferenceStore().setDefault(SORT_NODES_ALPHABETICALLY, false);
                getPreferenceStore().setDefault(SORT_TAXA_BY_RANK_AND_NAME, true);
+               //override db preferences
+               getPreferenceStore().setDefault(ABCD_IMPORT_OVERRIDE, false);
+               getPreferenceStore().setDefault(OVERRIDE_SPECIMEN_PREF, false);
+               getPreferenceStore().setDefault(OVERRIDE_NAME_DETAILS, false);
+               getPreferenceStore().setDefault(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE, false);
+
 
        }
 
@@ -597,8 +611,6 @@ public class PreferencesUtil implements IPreferenceKeys {
         */
        public static void checkNomenclaturalCode() {
                // First time Editor is opened, no nomenclatural code has been set
-
-
                if (PreferencesUtil.getPreferredNomenclaturalCode(true) == null) {
                        PreferencesUtil.setPreferredNomenclaturalCode(getPreferenceKey(NomenclaturalCode.ICNAFP), true);
                }
@@ -624,13 +636,9 @@ public class PreferencesUtil implements IPreferenceKeys {
         UUID uuid = UUID.fromString(preference.getValue().substring(index +1, preference.getValue().length()));
         NomenclaturalCode preferredCode = NomenclaturalCode.getByUuid(uuid);
 
-        getPreferenceStore().setValue(CDM_NOMENCLATURAL_CODE_KEY,
+        getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
                 getPreferenceKey(preferredCode));
 
-        if (!preference.isAllowOverride()){
-            getPreferenceStore().setValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
-                    getPreferenceKey(preferredCode));
-        }
        }
 
        public static void checkDefaultLanguage(){
@@ -1070,7 +1078,7 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @param b
      * @return
      */
-    public static NameDetailsConfigurator setPreferredNameDetailsConfiguration( boolean local) {
+    public static NameDetailsConfigurator getPreferredNameDetailsConfiguration( boolean local) {
         NameDetailsConfigurator config = new NameDetailsConfigurator(true);
 
         CdmPreference preference = null;
@@ -1169,6 +1177,37 @@ public class PreferencesUtil implements IPreferenceKeys {
         return config;
     }
 
+    /**
+     * @param object
+     * @param b
+     * @return
+     */
+    public static void setPreferredNameDetailsConfiguration(NameDetailsConfigurator config, boolean local) {
+        CdmPreference preference = null;
+
+        if (!local) {
+            preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NameDetailsView, config.toString());
+
+            setPreferenceToDB(preference);
+        }
+        //also add to local preferences
+        getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_SECTION, config.isSimpleDetailsViewActivated());
+        getPreferenceStore().setValue(SHOW_SIMPLE_NAME_DETAILS_TAXON, config.isTaxonSectionActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_LSID, config.isLSIDActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_CODE, config.isNomenclaturalCodeActived());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_APPENDED_PHRASE, config.isAppendedPhraseActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_RANK, config.isRankActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_ATOMISED_EPITHETS, config.isAtomisedEpithetsActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_AUTHORSHIP, config.isAuthorshipSectionActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_REFERENCE, config.isNomenclaturalReferenceSectionActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NOMENCLATURAL_STATUS, config.isNomenclaturalStatusSectionActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_PROTOLOGUE, config.isProtologueActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION, config.isTypeDesignationSectionActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_NAME_RELATIONSHIP, config.isNameRelationsSectionActivated());
+        getPreferenceStore().setValue(SHOW_NAME_DETAILS_SECTION_HYBRID, config.isHybridActivated());
+
+    }
+
     private static Boolean getValue(Map<String, Boolean> sectionMap, String string) {
                if (sectionMap.containsKey(string)){
                        return sectionMap.get(string);
@@ -1189,11 +1228,23 @@ public class PreferencesUtil implements IPreferenceKeys {
      *            a {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
      *            object.
      */
-    public static Abcd206ImportConfigurator getAbcdImportConfigurationPreference(boolean useLocal) {
+    public static Abcd206ImportConfigurator getAbcdImportConfigurationPreference() {
 
         Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
+        ICdmRepository controller;
+        controller = CdmStore.getCurrentApplicationConfiguration();
+        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AbcdImportConfig);
+        CdmPreference preference = null;
+        if (controller == null){
+            return null;
+        }
+        preference = controller.getPreferenceService().find(key);
+        boolean allowOverride = true;
+        if (preference != null && !preference.isAllowOverride()){
+            allowOverride = false;
+        }
+        if (PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_OVERRIDE) && allowOverride){
 
-        if (useLocal){
             config.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS));
 
             config.setAddMediaAsMediaSpecimen(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN));
@@ -1217,14 +1268,7 @@ public class PreferencesUtil implements IPreferenceKeys {
             return config;
 
         }
-            ICdmRepository controller;
-            controller = CdmStore.getCurrentApplicationConfiguration();
-            PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AbcdImportConfig);
-            CdmPreference preference = null;
-            if (controller == null){
-                return null;
-            }
-            preference = controller.getPreferenceService().find(key);
+
             if (preference == null){
                 return config;
              } else{
@@ -1274,11 +1318,53 @@ public class PreferencesUtil implements IPreferenceKeys {
             }
         }
         return config;
+    }
+
 
+    public static void updateAbcdImportConfigurationPreference() {
+
+        Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
+        ICdmRepository controller;
+        controller = CdmStore.getCurrentApplicationConfiguration();
+        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AbcdImportConfig);
+        CdmPreference preference = null;
+        if (controller == null){
+            return ;
+        }
+        preference = controller.getPreferenceService().find(key);
+        boolean allowOverride = true;
+        if (preference != null && !preference.isAllowOverride()){
+            allowOverride = false;
+        }
+        if (!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ABCD_IMPORT_OVERRIDE) || !allowOverride){
+
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS, config.isAddIndividualsAssociationsSuchAsSpecimenAndObservations());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN, config.isAddMediaAsMediaSpecimen());
+
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS, config.isAllowReuseOtherClassifications());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS, config.isDeduplicateClassifications());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES, config.isDeduplicateReferences());
+
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS, config.isGetSiblings());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP, config.isIgnoreAuthorship());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN, config.isIgnoreImportOfExistingSpecimen());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER, config.isMapUnitIdToAccessionNumber());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE, config.isMapUnitIdToBarcode());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER, config.isMapUnitIdToCatalogNumber());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION, config.isMoveNewTaxaToDefaultClassification());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN, config.isOverwriteExistingSpecimens());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS, config.isReuseExistingDescriptiveGroups());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA, config.isReuseExistingMetaData());
+            getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE, config.isReuseExistingTaxaWhenPossible());
+            if (config.getNomenclaturalCode() != null){
+                getPreferenceStore().setValue(ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE, config.getNomenclaturalCode().getKey());
+            }
 
 
+        }
     }
 
+
     /**
     *
     */
@@ -1391,7 +1477,9 @@ public static List<String> getLastSelectedReferences() {
         IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
         String lastSelected = preferenceStore.getString(PreferencesUtil.LAST_SELECTED_REFERENCES);
         List<String> result = new ArrayList<>();
-        Collections.addAll(result, lastSelected.substring(1,lastSelected.length()-1).split(", "));
+        if (!StringUtils.isBlank(lastSelected)){
+            Collections.addAll(result, lastSelected.substring(1,lastSelected.length()-1).split(", "));
+        }
         return result;
     }
 
@@ -1404,7 +1492,7 @@ public static List<String> getLastSelectedReferences() {
  * @param saveCheckedElements
  * @param saveGrayedElements
  */
-public static CdmPreference setPreferredNamedAreasForDistributionEditor(
+public static void setPreferredNamedAreasForDistributionEditor(
         String saveCheckedElements, String saveGrayedElements, boolean local) {
     if (local){
         IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
@@ -1413,42 +1501,172 @@ public static CdmPreference setPreferredNamedAreasForDistributionEditor(
 
     }
     else{
-        ICdmRepository controller;
+//        ICdmRepository controller;
 
 //        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaTerms);
         CdmPreference preference = null;
 
         if (saveCheckedElements == null){
             preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaTerms);
-//            preference = controller.getPreferenceService().find(key);
+
             if (preference == null){
-                return null;
+                return ;
             } else{
-                String[] uuids = StringUtils.splitByWholeSeparator(saveCheckedElements, ",");
-                List<UUID> uuidList = new ArrayList();
-                for (String uuidString: uuids){
-                    uuidList.add(UUID.fromString(uuidString.trim()));
-                }
                 getPreferenceStore().setValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
                         saveCheckedElements);
+                preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
+                setPreferenceToDB(preference);
 
-                return preference;
             }
         } else{
-            controller = CdmStore.getCurrentApplicationConfiguration();
-            preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
-            controller.getPreferenceService().set(preference);
+           preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
+           setPreferenceToDB(preference);
+           getPreferenceStore().setValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
+                    saveCheckedElements);
+
+        }
+    }
+
+}
+
+/**
+ * @param saveCheckedElements
+ * @param saveCheckedElements2
+ * @param b
+ */
+public static void setPreferredVocabulariesForDistributionEditor(String saveCheckedElements,
+        boolean local) {
+    if (local){
+        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
+        preferenceStore.setValue(PreferencesUtil.DISTRIBUTION_VOCABULARIES, saveCheckedElements);
+
+
+    }
+    else{
+        ICdmRepository controller;
+        CdmPreference preference = null;
+
+        if (saveCheckedElements == null){
+            preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
+
+            if (preference == null){
+                return ;
+            } else{
+                getPreferenceStore().setValue(DISTRIBUTION_VOCABULARIES,
+                        saveCheckedElements);
+                preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaVocabularies, saveCheckedElements);
+                setPreferenceToDB(preference);
+
+
+            }
+        } else{
+            preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.AvailableDistributionAreaVocabularies, saveCheckedElements);
+            setPreferenceToDB(preference);
             getPreferenceStore().setValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
                     saveCheckedElements);
 
         }
     }
-    return null;
 
 
 
 }
 
+/**
+ * @param saveCheckedElements
+ * @param saveCheckedElements2
+ * @param b
+ */
+public static String getPreferredVocabulariesForDistributionEditor(boolean local) {
+    if (local){
+        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
+        String pref = preferenceStore.getString(DISTRIBUTION_VOCABULARIES);
+        return pref;
+
+    }
+    else{
+
+        CdmPreference preference = null;
+
+        preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
+
+            if (preference == null){
+                return null;
+            } else{
+                return preference.getValue();
+            }
+
+    }
+
+
+
+}
+
+/**
+ *
+ */
+public static void updateDBPreferences() {
+    CdmPreference preference = null;
+    IPreferenceStore prefStore = getPreferenceStore();
+
+    //ABCD Configurator
+
+    updateAbcdImportConfigurationPreference();
+
+    //Specimen Details
+    preference = getPreferenceFromDB(PreferencePredicate.ShowTaxonAssociations);
+    if (preference != null){
+        if(!prefStore.getBoolean(SHOW_TAXON_ASSOCIATIONS_OVERRIDE) ||  !preference.isAllowOverride()){
+            prefStore.setValue(SHOW_TAXON_ASSOCIATIONS, preference.getValue());
+        }
+    }
+    preference = getPreferenceFromDB(PreferencePredicate.ShowCollectingAreasInGeneralSection);
+    if (preference != null){
+        if(!prefStore.getBoolean(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_OVERRIDE) ||  !preference.isAllowOverride()){
+            prefStore.setValue(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION, preference.getValue());
+        }
+    }
+    preference = getPreferenceFromDB(PreferencePredicate.ShowLifeForm);
+    if (preference != null){
+        if(!prefStore.getBoolean(SHOW_LIFE_FORM_OVERRIDE) ||  !preference.isAllowOverride()){
+            prefStore.setValue(SHOW_LIFE_FORM, preference.getValue());
+        }
+    }
+    preference = getPreferenceFromDB(PreferencePredicate.DeterminationOnlyForFieldUnits);
+    if (preference != null){
+        if(!prefStore.getBoolean(DETERMINATION_ONLY_FOR_FIELD_UNITS_OVERRIDE) ||  !preference.isAllowOverride()){
+            prefStore.setValue(DETERMINATION_ONLY_FOR_FIELD_UNITS, preference.getValue());
+        }
+    }
+
+
+    //Name Details
+    NameDetailsConfigurator config = getPreferredNameDetailsConfiguration(false);
+    if (config != null ){
+        if (!prefStore.getBoolean(OVERRIDE_NAME_DETAILS) ||  !prefStore.getBoolean(ALLOW_OVERRIDE_NAME_DETAILS)){
+            setPreferredNameDetailsConfiguration(config, false);
+        }
+    }
+
+    //Distribution Editor
+    preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
+    if (preference != null){
+        if (!prefStore.getBoolean(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE) ||  !preference.isAllowOverride()){
+            prefStore.setValue(DISTRIBUTION_VOCABULARIES, preference.getValue());
+        }
+    }
+
+    preference = getPreferenceFromDB(PreferencePredicate.DistributionEditorActivated);
+    if (preference != null){
+        if (!prefStore.getBoolean(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE) || !preference.isAllowOverride()){
+            prefStore.setValue(DISTRIBUTION_AREA_PREFRENCES_ACTIVE, preference.getValue());
+        }
+    }
+
+}
+
+
+