Entity selector null handling if none selected
authorVásáry Dániel <vasary@elgekko.net>
Thu, 2 Nov 2023 09:58:00 +0000 (10:58 +0100)
committerVásáry Dániel <vasary@elgekko.net>
Thu, 2 Nov 2023 09:58:00 +0000 (10:58 +0100)
lis-service/src/main/java/hu/user/lis/service/data/EntityDataService.java
lis-service/src/main/java/hu/user/lis/service/data/EntityDataServiceBase.java
lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java
lis-ui/src/main/resources/web/widget/entity-selector.zul

index 89d0a6e6bc1264333992984a64adf7b0cc7c904b..d7de60d3fd9534fc9d6c7a9ad8ad707e9a194206 100644 (file)
@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.Serializable;
+import java.util.AbstractMap;
 import java.util.Objects;
 
 @Log4j2
@@ -24,7 +25,8 @@ public class EntityDataService<T extends Serializable> extends EntityDataService
 
     public T clone(T sourceEntity, String property, Object value) {
         T result = clone(sourceEntity);
-        if (!setFieldValue(result, property, value)) {
+        AbstractMap.SimpleEntry<Object, String> info = setFieldValue(result, property, value);
+        if (Objects.isNull(info)) {
             result = null;
         }
         return result;
@@ -54,7 +56,7 @@ public class EntityDataService<T extends Serializable> extends EntityDataService
     public T fromJSON(String data, Class<T> objectClass) {
         T result = null;
         try {
-            result = (T) objectMapper.readValue(data, objectClass);
+            result = objectMapper.readValue(data, objectClass);
         } catch (JsonProcessingException e) {
             log.catching(e);
         }
index 70816393cfda8a993482202554559e679235e241..6c5397c82668d56a2d37f18a09542f1b8ae17cbe 100644 (file)
@@ -4,6 +4,7 @@ import lombok.extern.log4j.Log4j2;
 import org.springframework.stereotype.Service;
 
 import java.lang.reflect.Field;
+import java.util.AbstractMap;
 import java.util.Arrays;
 import java.util.Optional;
 
@@ -47,15 +48,15 @@ public class EntityDataServiceBase {
         return field;
     }
 
-    public boolean setFieldValue(Object entity, String property, Object value) {
-        boolean result = false;
+    public AbstractMap.SimpleEntry<Object, String> setFieldValue(Object entity, String property, Object value) {
+        AbstractMap.SimpleEntry<Object, String> result = null;
         try {
             String memberPropertyName = getPropertyName(property);
             Object memberEntity = getMemberEntity(entity, property);
             Field field = getField(memberEntity, memberPropertyName);
             field.setAccessible(true);
             field.set(memberEntity, value);
-            result = true;
+            result = new AbstractMap.SimpleEntry<Object, String>(memberEntity, memberPropertyName);
         } catch (Exception e) {
             log.error(e);
         }
index 5edab56860db31cf3c1d5a5ac621d7dd8acfb060..82533fda0a5a9d5cc3141acf05641ce61fbf4768 100644 (file)
@@ -4,6 +4,7 @@ import hu.user.lis.service.data.EntityDataServiceBase;
 import hu.user.lis.ui.data.common.CachedSpringDataModel;
 import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
@@ -15,8 +16,10 @@ import org.zkoss.zk.ui.event.InputEvent;
 import org.zkoss.zk.ui.event.OpenEvent;
 import org.zkoss.zul.impl.XulElement;
 
+import java.util.AbstractMap;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 @Log4j2
 public abstract class EntitySelectorModel<T> {
@@ -43,6 +46,9 @@ public abstract class EntitySelectorModel<T> {
     public void onEntityBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
         InputEvent event = (InputEvent) ctx.getTriggerEvent();
         log.info("onEntityBandChanging: {}", event.getValue());
+        if (StringUtils.isBlank(event.getValue()) && Objects.nonNull(getSelectedEntity())) {
+            setSelectedEntity(null);
+        }
         search(event.getValue());
     }
 
@@ -59,8 +65,8 @@ public abstract class EntitySelectorModel<T> {
 
     public void setSelectedEntity(T selectedEntity) {
         this.selectedEntity = selectedEntity;
-        entityDataServiceBase.setFieldValue(formDocument, member, selectedEntity);
-        BindUtils.postNotifyChange(formDocument, member);
+        AbstractMap.SimpleEntry<Object, String> info = entityDataServiceBase.setFieldValue(formDocument, member, selectedEntity);
+        BindUtils.postNotifyChange(info.getKey(), info.getValue());
     }
 
     public void configureSelector(Object formDocument, String member) {
index 0bc15355965cc70343810908bcc0ccd4d0d89185..e9538d43fcfba872c218c2d7d5d18e142a6a40db 100644 (file)
@@ -21,9 +21,6 @@ import org.zkoss.zk.ui.event.Event;
 import org.zkoss.zk.ui.event.EventListener;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
 
-import java.util.Arrays;
-import java.util.List;
-
 import static hu.user.lis.ui.data.common.CachedDataModel.ASCENDING;
 import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL;
 
@@ -31,7 +28,6 @@ import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL;
 public class InvoicesViewModel extends EntityViewModel<Invoice> implements EventListener<Event> {
     @Getter
     private final InvoiceFilter invoiceFilter = InvoiceFilter.builder().incoming(true).build();
-    List<String> refreshTriggerProperties = Arrays.asList("paymentDeadLineFrom", "paymentDeadLineTo", "paid", "incoming");
     @WireVariable
     private EventBus eventBus;
     @Getter
@@ -98,10 +94,11 @@ public class InvoicesViewModel extends EntityViewModel<Invoice> implements Event
     public void onEvent(Event evt) throws Exception {
         if (evt instanceof PropertyChangeEvent) {
             PropertyChangeEvent propertyEvent = (PropertyChangeEvent) evt;
+//           (this.equals(propertyEvent.getBase()) && propertyEvent.getProperty().startsWith("invoiceFilter")))
             if (invoiceFilter.equals(propertyEvent.getBase())) {
+                log.info("Refresh needed, {} changed", propertyEvent.getProperty());
                 refresh();
             }
-
         }
     }
 
index 3a965aee57e1502d1573e2cb40991260294bc4bf..c317fe8f326abee72e42148e78394eab1d755ff1 100644 (file)
@@ -8,7 +8,7 @@
                 <![CDATA[
                             function (evt) {
                                 var keyCode = evt.keyCode;
-                                console.log(keyCode);
+                                console.log(keyCode, zk.$("$entityBandBox").getValue());
                                 if (keyCode == 13){
                                     zk.$("$entityBandBox").close();
                                     zk.$("$entityBandBox").focus();