ref #8176 WeaklyRelatedEntityCombobox solving minor performance on setValue
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Tue, 12 Mar 2019 16:57:02 +0000 (17:57 +0100)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Tue, 12 Mar 2019 16:57:02 +0000 (17:57 +0100)
src/main/java/eu/etaxonomy/cdm/service/TaxonNameStringFilterablePagingProvider.java
src/main/java/eu/etaxonomy/vaadin/component/WeaklyRelatedEntityCombobox.java

index 029a801a8411702c0a7e40802322461bfd4cd94e..374caac0f36e00eaaff6e4bed90c9a1a22dad2d3 100644 (file)
@@ -13,6 +13,7 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.UUID;
 
 import org.apache.log4j.Logger;
@@ -233,7 +234,10 @@ public class TaxonNameStringFilterablePagingProvider implements FilterableString
     @Override
     public UUID idFor(String stringRepresentation) {
         if(lastPagedEntityUUIDs == null){
-            findEntities(0, stringRepresentation);
+            int pages = Math.max(1, size(stringRepresentation));
+            for(int i = 0; i < pages; i++){
+                findEntities(i, stringRepresentation);
+            }
         }
         return lastPagedEntityUUIDs.get(stringRepresentation);
     }
index ba02d14bec69534a9b5e39e8f81adc7525231ebe..f472cc32ce3ed6139b41362c1d8f865442ee0763 100644 (file)
@@ -8,6 +8,7 @@
 */
 package eu.etaxonomy.vaadin.component;
 
+import java.util.Objects;
 import java.util.Optional;
 import java.util.UUID;
 
@@ -196,13 +197,25 @@ public class WeaklyRelatedEntityCombobox<V extends IdentifiableEntity<?>> extend
      */
     @Override
     public void setValue(String newFieldValue) throws com.vaadin.data.Property.ReadOnlyException, ConversionException {
-        lazySelect.refresh();
-        if(lazySelect.getOptions().contains(newFieldValue)){
-            lazySelect.setValue(newFieldValue);
+        if(!Objects.equals(newFieldValue, lazySelect.getValue())){
+            lazySelect.refresh();
+            if(contains(newFieldValue)){
+                lazySelect.setValue(newFieldValue);
+            }
+            lazySelect.markAsDirty();
         }
-        lazySelect.markAsDirty();
     }
 
+    /**
+     * @param newFieldValue
+     * @return
+     */
+    private boolean contains(String newFieldValue) {
+        UUID id = filterablePagingProvider.idFor(newFieldValue);
+        return id != null;
+    }
+
+
     @Override
     public boolean isValueInOptions(){
         return lazySelect.getOptions().contains(lazySelect.getValue());