Project associate added to project editor
authorelgekko <vasary@elgekko.net>
Fri, 28 Apr 2023 12:27:12 +0000 (14:27 +0200)
committerelgekko <vasary@elgekko.net>
Fri, 28 Apr 2023 12:27:12 +0000 (14:27 +0200)
lis-services/src/main/java/hu/user/lis/services/data/ProjectAssociateService.java
lis-services/src/main/java/hu/user/lis/services/data/ProjectAssociateServiceImpl.java
lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java

index 5054c13793a3329809e25ad40ca536b39780eb63..dfc738a5acccb75de90fc13a8da90c1d5f49a16e 100644 (file)
@@ -3,6 +3,7 @@ package hu.user.lis.services.data;
 import hu.user.lis.db.ProjectAssociate;
 
 import java.util.Collection;
+import java.util.Map;
 
 public interface ProjectAssociateService {
     ProjectAssociate createNew(String projectId, String associateId);
@@ -11,6 +12,8 @@ public interface ProjectAssociateService {
 
     void remove(ProjectAssociate entity);
 
+    void update(String projectId, Map<String, Boolean> associates);
+
     String toString(ProjectAssociate sourceEntity);
 
     Collection<ProjectAssociate> getAll();
index 6062437ca9d704c58cb520b81c584d1325d145c2..460f1ecd8a0d6ae1d6cf5efa7eae5178a526284c 100644 (file)
@@ -12,6 +12,8 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 @Log4j2
@@ -47,6 +49,18 @@ public class ProjectAssociateServiceImpl implements ProjectAssociateService {
         entities.remove(entity);
     }
 
+    @Override
+    public void update(String projectId, Map<String, Boolean> associates) {
+        List<ProjectAssociate> deleteEntities = entities.stream().filter(pa -> pa.getProjectId().equals(projectId)).collect(Collectors.toList());
+        entities.removeAll(deleteEntities);
+        associates.forEach((associateId, isAssociate) -> {
+            if (isAssociate) {
+                ProjectAssociate projectAssociate = ProjectAssociate.builder().projectId(projectId).associateId(associateId).build();
+                entities.add(projectAssociate);
+            }
+        });
+    }
+
     private List<ProjectAssociate> generate() {
         List<ProjectAssociate> result = new ArrayList<>();
         List<Project> projects = projectService.getAll();
index 9df6d7860e549e081534531ce0ca52739b72487c..d5d13a5efc40bf20b741694727e9988120b474c5 100644 (file)
@@ -47,6 +47,8 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen
     ProjectAssociateService projectAssociateServiceImpl;
     private Project formDocument;
     private Project origDocument;
+    private Map<String, Boolean> origAssociates;
+    private Map<String, Boolean> formAssociates;
     @WireVariable
     private PartnerSelectorDataModel partnerSelectorDataModel;
     @WireVariable
@@ -61,8 +63,6 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen
 
     private String partialAssociateName;
 
-    private Map<String, Boolean> origAssociates;
-    private Map<String, Boolean> formAssociates;
 
     public ProjectEditorModel() {
 
@@ -87,7 +87,9 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen
             } else {
                 args = ImmutableMap.of("origDocument", origDocument, "formDocument", formDocument);
             }
+            projectAssociateServiceImpl.update(formDocument.getId(), formAssociates);
         }
+
         eventBus.showProjectsList(args);
     }
 
@@ -298,10 +300,11 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen
     }
 
     @Command
-    @NotifyChange("associates")
+    @NotifyChange("formAssociates")
     public void onAfterRenderAssociates() {
         formAssociates = new HashMap<>();
-        for (int i = 1; i < associatesDataModel.getSize() + 1; i++) {
+        origAssociates = new HashMap<>();
+        for (int i = 0; i < associatesDataModel.getSize(); i++) {
             Associate associate = associatesDataModel.getElementAt(i);
             boolean exists = projectAssociateServiceImpl.getAll().stream()
                     .anyMatch(
@@ -312,6 +315,7 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen
                 log.info("{} is on project {}", associate.getName(), formDocument.getName());
             }
             formAssociates.put(associate.getId(), exists);
+            origAssociates.put(associate.getId(), exists);
         }
     }