X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/182b1e60f7c55aa977abf53b40891bbbc2d559a7..28f1e48626e0bf59a1d5cbcfc18c9cd46f44f46b:/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferenceCache.java diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferenceCache.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferenceCache.java old mode 100755 new mode 100644 index e73d0adcb..6bc4bb518 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferenceCache.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferenceCache.java @@ -9,12 +9,14 @@ package eu.etaxonomy.taxeditor.preference; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import eu.etaxonomy.cdm.api.application.ICdmRepository; import eu.etaxonomy.cdm.api.service.ITermService; @@ -23,24 +25,20 @@ import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey; import eu.etaxonomy.cdm.model.metadata.PreferencePredicate; import eu.etaxonomy.cdm.model.metadata.PreferenceResolver; import eu.etaxonomy.cdm.model.metadata.PreferenceSubject; -import eu.etaxonomy.cdm.model.term.DefinedTermBase; import eu.etaxonomy.cdm.model.term.TermType; +import eu.etaxonomy.cdm.persistence.dto.TermDto; import eu.etaxonomy.taxeditor.store.CdmStore; -import eu.etaxonomy.taxeditor.store.TermStore; /** * @author k.luther * @since 27.04.2018 - * */ public class CdmPreferenceCache { - Map> preferenceCache = new HashMap(); + Map> preferenceCache = new HashMap<>(); private static CdmPreferenceCache instance; - private final static Logger logger = Logger.getLogger(CdmPreferenceCache.class); - - + private final static Logger logger = LogManager.getLogger(); public static CdmPreferenceCache instance(){ if(instance == null){ @@ -51,7 +49,6 @@ public class CdmPreferenceCache { public CdmPreference get(String predicate){ if (preferenceCache.get(predicate) != null){ - List preferences = preferenceCache.get(predicate); if (preferenceCache.get(predicate).size() > 1){ CdmPreference pref = PreferenceResolver.resolve(preferenceCache.get(predicate), CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.getByKey(predicate))); return pref; @@ -73,7 +70,6 @@ public class CdmPreferenceCache { public CdmPreference get(PrefKey key){ if (preferenceCache.containsKey(key.getPredicate())){ for (CdmPreference pref: preferenceCache.get(key.getPredicate())){ - System.err.println("pref subject: " + pref.getSubjectString() + "key subject: " +key.getSubject()); if (pref.getSubjectString().equals(key.getSubject())){ return pref; } @@ -95,12 +91,24 @@ public class CdmPreferenceCache { cachedPreferences.remove(prefToRemove); cachedPreferences.add(pref); }else{ - List prefs = new ArrayList(); + List prefs = new ArrayList<>(); prefs.add(pref); preferenceCache.put(pref.getPredicate(), prefs); } + } - + public boolean remove(CdmPreference pref){ + if (preferenceCache.containsKey(pref.getPredicate())){ + List cachedPreferences = preferenceCache.get(pref.getPredicate()); + CdmPreference prefToRemove = null; + for (CdmPreference cachedPref:cachedPreferences){ + if (pref.getKey().equals(cachedPref.getKey())){ + prefToRemove = cachedPref; + } + } + cachedPreferences.remove(prefToRemove); + } + return true; } public void getAllTaxEditorDBPreferences(){ @@ -113,37 +121,67 @@ public class CdmPreferenceCache { put(pref); } - PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionStatus); + loadAndSet(PreferencePredicate.AvailableDistributionStatus, TermType.PresenceAbsenceTerm); + loadAndSet(PreferencePredicate.AvailableRanks, TermType.Rank); + loadAndSet(PreferencePredicate.AvailableNomenclaturalStatus, TermType.NomenclaturalStatusType); + loadAndSet(PreferencePredicate.AvailableNameRelationshipType, TermType.NameRelationshipType); + loadAndSet(PreferencePredicate.AvailableLanguages, TermType.Language); + } + private void loadAndSet(PreferencePredicate preferencePredicate, TermType termType) { + PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), preferencePredicate); + boolean checkLocal = false; if (get(key) != null){ - if (!PreferencesUtil.getBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())) || !get(key).isAllowOverride()){ + if (!PreferencesUtil.getOverrideForPreference(preferencePredicate.getKey()) || !get(key).isAllowOverride()){ //get terms for the uuids... and add them to the termManager as preferred terms - ITermService termService = CdmStore.getService(ITermService.class); - String[] uuidArray =findBestMatching(key).getValue().split(";"); - List uuidList = new ArrayList(); - for (String uuidString:uuidArray){ - try { - uuidList.add(UUID.fromString(uuidString)); - } catch (Exception e) { - logger.warn("Preference loading failed", e); - } + Collection dtos = createDtoList(key); + if (dtos != null){ + CdmStore.getTermManager().setPreferredTermsByType(dtos, termType); } + }else { + checkLocal = true; + } - List definedTermBases = termService.load(uuidList, null); - CdmStore.getTermManager().setPreferredTerms(definedTermBases, TermStore.getTerms(TermType.PresenceAbsenceTerm, null)); + }else { + checkLocal = true; + } + if (checkLocal) { + List uuidList = PreferencesUtil.createUUIDListFromStringPref(preferencePredicate.getKey(), checkLocal); + ITermService termService = CdmStore.getService(ITermService.class); + Collection dtos = termService.findByUUIDsAsDto(uuidList); + if (dtos != null) { + CdmStore.getTermManager().setPreferredTermsByType(dtos, termType); } } } + public Collection createDtoList(PrefKey key) { + ITermService termService = CdmStore.getService(ITermService.class); + List uuidList = createUuidList(key); + Collection dtos = termService.findByUUIDsAsDto(uuidList); + return dtos; + } + public List createUuidList(PrefKey key) { + List uuidList = new ArrayList<>(); + if (get(key).getValue() != null){ + String[] uuidArray =findBestMatching(key).getValue().split(";"); + for (String uuidString:uuidArray){ + try { + uuidList.add(UUID.fromString(uuidString)); + } catch (Exception e) { + logger.warn("Preference loading failed", e); + } + } + } + return uuidList; + } public CdmPreference findBestMatching(PrefKey key) { - List allPrefs = new ArrayList(); + List allPrefs = new ArrayList<>(); for (String predicate: preferenceCache.keySet()){ allPrefs.addAll(preferenceCache.get(predicate)); } - return PreferenceResolver.resolve(allPrefs, key); - + return PreferenceResolver.resolve(allPrefs, key); } - }