diff --git a/mvc/src/main/java/org/karnak/ui/data/ProjectDataProvider.java b/mvc/src/main/java/org/karnak/ui/data/ProjectDataProvider.java index 1c6ef6897..e3983c3a8 100644 --- a/mvc/src/main/java/org/karnak/ui/data/ProjectDataProvider.java +++ b/mvc/src/main/java/org/karnak/ui/data/ProjectDataProvider.java @@ -32,18 +32,18 @@ public void save(Project project) { boolean isNewProject = project.isNewData(); if (isNewProject) { getItems().add(project); - refreshAll(); } else { refreshItem(project); } projectPersistence.saveAndFlush(project); + refreshAll(); } public void update(Project project) { if (!project.isNewData()) { - refreshItem(project); projectPersistence.saveAndFlush(project); updateDestinations(project); + refreshAll(); } } @@ -56,12 +56,14 @@ private void updateDestinations(Project project) { public void remove(Project project) { projectPersistence.deleteById(project.getId()); projectPersistence.flush(); - getItems().remove(project); refreshAll(); } - public Project getProjectById(Long dataId) { - return projectPersistence.findById(dataId).orElse(null); + public Project getProjectById(Long projectID) { + refreshAll(); + return getItems().stream() + .filter(project -> project.getId().equals(projectID)) + .findAny().orElse(null); } public List getAllProjects() { @@ -75,4 +77,11 @@ public void setApplicationEventPublisher(ApplicationEventPublisher applicationEv public ApplicationEventPublisher getApplicationEventPublisher() { return applicationEventPublisher; } + + @Override + public void refreshAll() { + getItems().clear(); + getItems().addAll(getAllProjects()); + super.refreshAll(); + } } diff --git a/mvc/src/main/java/org/karnak/ui/project/EditProject.java b/mvc/src/main/java/org/karnak/ui/project/EditProject.java index ace4adac7..8eb65f894 100644 --- a/mvc/src/main/java/org/karnak/ui/project/EditProject.java +++ b/mvc/src/main/java/org/karnak/ui/project/EditProject.java @@ -38,12 +38,11 @@ public EditProject(ProjectDataProvider projectDataProvider) { } public void setProject(Project project) { + this.project = project; if (project != null) { - this.project = projectDataProvider.getProjectById(project.getId()); - binder.setBean(this.project); + binder.setBean(project); setEnabled(true); } else { - this.project = null; binder.removeBean(); clear(); setEnabled(false); diff --git a/mvc/src/main/java/org/karnak/ui/project/GridProject.java b/mvc/src/main/java/org/karnak/ui/project/GridProject.java index 7b7a13cee..987083128 100644 --- a/mvc/src/main/java/org/karnak/ui/project/GridProject.java +++ b/mvc/src/main/java/org/karnak/ui/project/GridProject.java @@ -20,6 +20,10 @@ public GridProject(ProjectDataProvider projectDataProvider) { } public void selectRow(Project row) { - getSelectionModel().select(row); + if (row != null) { + getSelectionModel().select(row); + } else { + getSelectionModel().deselectAll(); + } } } diff --git a/mvc/src/main/java/org/karnak/ui/project/MainViewProjects.java b/mvc/src/main/java/org/karnak/ui/project/MainViewProjects.java index cfb192d99..e2a1b17b1 100644 --- a/mvc/src/main/java/org/karnak/ui/project/MainViewProjects.java +++ b/mvc/src/main/java/org/karnak/ui/project/MainViewProjects.java @@ -3,8 +3,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.data.binder.Binder; -import com.vaadin.flow.router.PageTitle; -import com.vaadin.flow.router.Route; +import com.vaadin.flow.router.*; import org.karnak.data.gateway.Project; import org.karnak.profilepipe.utils.HMAC; import org.karnak.ui.MainLayout; @@ -14,7 +13,7 @@ @Route(value = "project", layout = MainLayout.class) @PageTitle("KARNAK - Project") -public class MainViewProjects extends HorizontalLayout { +public class MainViewProjects extends HorizontalLayout implements HasUrlParameter { public static final String VIEW_NAME = "Project"; private ProjectDataProvider projectDataProvider; @@ -46,17 +45,28 @@ private void setEventButtonNewProject() { newProject.setSecret(HMAC.generateRandomKey()); projectDataProvider.save(newProject); newProjectForm.clear(); - gridProject.selectRow(newProject); + ProjectViewLogic.navigateProject(newProject); } }); } private void setEventGridSelection() { gridProject.asSingleSelect().addValueChangeListener(event -> { - editProject.setProject(event.getValue()); + ProjectViewLogic.navigateProject(event.getValue()); }); } + @Override + public void setParameter(BeforeEvent event, @OptionalParameter String parameter) { + Long idProject = ProjectViewLogic.enter(parameter); + Project currentProject = null; + if (idProject != null) { + currentProject = projectDataProvider.getProjectById(idProject); + } + editProject.setProject(currentProject); + gridProject.selectRow(currentProject); + } + @Autowired private void addEventManager(ApplicationEventPublisher publisher) { projectDataProvider.setApplicationEventPublisher(publisher); diff --git a/mvc/src/main/java/org/karnak/ui/project/ProjectViewLogic.java b/mvc/src/main/java/org/karnak/ui/project/ProjectViewLogic.java new file mode 100644 index 000000000..34d0f7855 --- /dev/null +++ b/mvc/src/main/java/org/karnak/ui/project/ProjectViewLogic.java @@ -0,0 +1,24 @@ +package org.karnak.ui.project; + +import com.vaadin.flow.component.UI; +import org.karnak.data.gateway.Project; + +public class ProjectViewLogic { + public static Long enter(String dataIdStr) { + try { + Long dataId = Long.valueOf(dataIdStr); + return dataId; + } catch (NumberFormatException e) { + } + return null; + } + + public static void navigateProject(Project project) { + if (project == null) { + UI.getCurrent().navigate(MainViewProjects.class, ""); + } else { + String projectID = String.valueOf(project.getId()); + UI.getCurrent().navigate(MainViewProjects.class, projectID); + } + } +}