EDocument handling improved
authorVásáry Dániel <vasary@elgekko.net>
Tue, 19 Dec 2023 14:05:27 +0000 (15:05 +0100)
committerVásáry Dániel <vasary@elgekko.net>
Tue, 19 Dec 2023 14:05:27 +0000 (15:05 +0100)
lis-ui/src/main/java/hu/user/lis/ui/data/EntityDocumentDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityAttachmentEditorModel.java
lis-ui/src/main/resources/web/form/attachment-form.zul

index 8d8443cad5ac07ce845481f8dad9f9e17a86c4bb..dbf8f122df81d7d38662215fa9edb66fa92dcca9 100644 (file)
@@ -7,11 +7,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
+import org.zkoss.bind.BindUtils;
+import org.zkoss.bind.annotation.Command;
 import org.zkoss.zul.ListModelList;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 @Log4j2
 @Component
@@ -23,32 +23,45 @@ public class EntityDocumentDataModel extends ListModelList<EDocument> {
     private EDocumentRepository eDocumentRepository;
 
 
-    public EDocument refresh(Long referenceId, String documentType) {
+    public EDocument getSelectedDocument() {
         EDocument result = null;
+        Set<EDocument> documents = getSelection();
+        Optional<EDocument> document = documents.stream().findFirst();
+        if (document.isPresent()) {
+            result = document.get();
+        }
+        return result;
+    }
+
+
+    public void setSelectedDocument(EDocument document) {
+        clearSelection();
+        if (Objects.nonNull(document)) {
+            addToSelection(document);
+        }
+        BindUtils.postNotifyChange(this, "selectedDocument");
+    }
+
+    public void refresh(Long referenceId, String documentType) {
         clear();
         List<EDocument> documents = eDocumentRepository.findByReferenceIdAndDocumentType(referenceId, documentType);
         addAll(documents);
         if (!documents.isEmpty()) {
-            result = documents.stream().findFirst().get();
+            setSelectedDocument(documents.stream().findFirst().get());
         }
-        return result;
     }
 
     public void addNew(EDocument document) {
         added.add(document);
-//        selectedDocument = document;
         add(document);
+        setSelectedDocument(document);
     }
 
     public void remove() {
-        Set<EDocument> documents = getSelection();
-        if (documents.isEmpty()) {
-            return;
-        }
-        removed.addAll(documents);
-//        clearSelection();
-//        selectedDocument = null;
-        removeAll(documents);
+        EDocument selectedDocument = getSelectedDocument();
+        removed.add(selectedDocument);
+        setSelectedDocument(null);
+        remove(selectedDocument);
     }
 
     public void save(Long entityId) {
@@ -60,4 +73,9 @@ public class EntityDocumentDataModel extends ListModelList<EDocument> {
     public boolean isChanged() {
         return !added.isEmpty() || !removed.isEmpty();
     }
+
+    @Command
+    public void onSelectionChanged() {
+        BindUtils.postNotifyChange(this, "selectedDocument");
+    }
 }
index 944844f7ea0ab0723088a3a0af52d949bbad7a77..f3a598f20f67f5b67c4e81d173d829ea84fd76c4 100644 (file)
@@ -53,7 +53,7 @@ public class ServiceRecordEditorModel extends EntityAttachmentEditorModel<Servic
     @Override
     public void init() {
         super.init();
-        setSelectedDocument(getEntityDocumentDataModel().refresh(getFormDocument().getId(), ServiceRecord.class.getSimpleName()));
+        getEntityDocumentDataModel().refresh(getFormDocument().getId(), ServiceRecord.class.getSimpleName());
     }
 
     @AfterCompose
index 574567639c04a43f9e8f611ccce8a1300beb8987..02e8e1649c4a6282440c69f60bcc1b90f3f3af8d 100644 (file)
@@ -3,7 +3,6 @@ package hu.user.lis.ui.editor.common;
 import hu.user.lis.db.EDocument;
 import hu.user.lis.ui.data.EntityDocumentDataModel;
 import lombok.Getter;
-import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
@@ -26,10 +25,6 @@ public class EntityAttachmentEditorModel<T extends Serializable> extends EntityE
     @WireVariable
     private EntityDocumentDataModel entityDocumentDataModel;
 
-    @Getter
-    @Setter
-    private EDocument selectedDocument;
-
     protected boolean canSave(T entity) {
         return true;
     }
@@ -64,13 +59,6 @@ public class EntityAttachmentEditorModel<T extends Serializable> extends EntityE
         validate();
     }
 
-//    @Command
-//    public void onSelectFile(@BindingParam("selectedDocument") EDocument selectedDocument) {
-//        entityDocumentDataModel.clearSelection();
-//        entityDocumentDataModel.addToSelection(selectedDocument);
-//        entityDocumentDataModel.setSelectedDocument(selectedDocument);
-//    }
-
     @Override
     protected boolean areDifferent(T entity) {
         return super.areDifferent(entity) || entityDocumentDataModel.isChanged();
index e99d831500e6088f546bfefe61fb1970ab2d0559..7b50fcff675de78016bc78a1719dafee393db304 100644 (file)
@@ -6,20 +6,21 @@
                                onUpload="@command('onUploadFile')"/>
                 <toolbarbutton label="Törlés" iconSclass="z-icon-remove"
                                onClick="@command('onRemoveFile')"
-                               disabled="@load(empty vm.selectedDocument)"/>
+                               disabled="@load(empty vm.entityDocumentDataModel.selectedDocument)"/>
             </toolbar>
         </north>
-        <west title="Fájlok" size="25%" flex="true" border="none" splittable="true" collapsible="true">
+        <west title="Fájlok" size="160px" flex="true" border="none" splittable="true" collapsible="true">
             <listbox vflex="true" hflex="true" model="@load(vm.entityDocumentDataModel)" multiple="false"
-                     sizedByContent="true" selectedItem="@bind(vm.selectedDocument)">
+                     sizedByContent="true" onSelect="@command(vm.entityDocumentDataModel.onSelectionChanged())">
                 <listhead visible="false">
-                    <listheader hflex="true"/>
+                    <listheader hflex="true" align="center"/>
                 </listhead>
                 <template name="model">
                     <listitem>
-                        <listcell>
-                            <button iconSclass="z-icon-file-pdf-o"/>
-                            <label value="@load(each.name)"/>
+                        <listcell iconSclass="z-icon-file-pdf-o" style="font-size: 1.5em">
+                            <vlayout>
+                                <label value="@load(each.name)"/>
+                            </vlayout>
                         </listcell>
                     </listitem>
                 </template>
@@ -27,7 +28,7 @@
         </west>
         <center border="none" hflex="true" vflex="true">
             <iframe hflex="true" vflex="true"
-                    content="@load(vm.selectedDocument.file) @converter('hu.user.lis.ui.converter.ByteArrayToAMediaConverter')"/>
+                    content="@load(vm.entityDocumentDataModel.selectedDocument.file) @converter('hu.user.lis.ui.converter.ByteArrayToAMediaConverter')"/>
         </center>
     </borderlayout>
 </zk>
\ No newline at end of file