From 30cbc7108bce5eaa36aeff08ab33c3a28b6c17eb Mon Sep 17 00:00:00 2001 From: vanina Date: Wed, 22 Aug 2018 17:45:50 -0300 Subject: [PATCH 1/3] Fix edit and delete function Issue: BMS-5074 Reviewer: Clary --- .../study/tree/StudyTreeButtonsPanel.java | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java b/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java index 4e5cd7fc02..a62c2e24ac 100644 --- a/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java +++ b/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java @@ -86,18 +86,25 @@ public void addListeners() { @Override public void buttonClick(final Button.ClickEvent event) { - final Object selectedStudyTreeNodeId = StudyTreeButtonsPanel.this.studyTree.getValue(); - final int studyId = Integer.valueOf(selectedStudyTreeNodeId.toString()); - final Study study = StudyTreeButtonsPanel.this.studyDataManager.getStudy(studyId); - if (null == study.getProgramUUID()) { - if (StudyTreeButtonsPanel.this.getWindow() != null) { - MessageNotifier.showError(StudyTreeButtonsPanel.this.getWindow(), + if (StudyTreeButtonsPanel.this.studyTree != null && StudyTreeButtonsPanel.this.studyTree.getValue() != null) { + final Object selectedStudyTreeNodeId = StudyTreeButtonsPanel.this.studyTree.getValue(); + final int studyId = Integer.valueOf(selectedStudyTreeNodeId.toString()); + final Study study = StudyTreeButtonsPanel.this.studyDataManager.getStudy(studyId); + if (null == study.getProgramUUID()) { + if (StudyTreeButtonsPanel.this.getWindow() != null) { + MessageNotifier.showError(StudyTreeButtonsPanel.this.getWindow(), StudyTreeButtonsPanel.this.messageSource.getMessage(Message.ERROR), "Program templates cannot be renamed."); + } + } else { + final String name = StudyTreeButtonsPanel.this.studyTree.getItemCaption(selectedStudyTreeNodeId); + StudyTreeButtonsPanel.this.browseTreeComponent.getParentComponent().getWindow() + .addWindow(new StudyTreeRenameItemWindow( + studyId, name, StudyTreeButtonsPanel.this.studyTree, StudyTreeButtonsPanel.this.studyTabSheet)); } - } else { - final String name = StudyTreeButtonsPanel.this.studyTree.getItemCaption(selectedStudyTreeNodeId); - StudyTreeButtonsPanel.this.browseTreeComponent.getParentComponent().getWindow().addWindow(new StudyTreeRenameItemWindow( - studyId, name, StudyTreeButtonsPanel.this.studyTree, StudyTreeButtonsPanel.this.studyTabSheet)); + } + else { + MessageNotifier.showError(StudyTreeButtonsPanel.this.getWindow(), + StudyTreeButtonsPanel.this.messageSource.getMessage(Message.ERROR), "Please choose a Program folder."); } } }); @@ -120,10 +127,16 @@ public void buttonClick(final Button.ClickEvent event) { @Override public void buttonClick(final Button.ClickEvent event) { - final int studyId = Integer.valueOf(StudyTreeButtonsPanel.this.studyTree.getValue().toString()); - final StudyTreeDeleteItemHandler deleteHandler = new StudyTreeDeleteItemHandler(StudyTreeButtonsPanel.this.studyTree, + if (StudyTreeButtonsPanel.this.studyTree != null && StudyTreeButtonsPanel.this.studyTree.getValue() != null) { + final int studyId = Integer.valueOf(StudyTreeButtonsPanel.this.studyTree.getValue().toString()); + final StudyTreeDeleteItemHandler deleteHandler = new StudyTreeDeleteItemHandler(StudyTreeButtonsPanel.this.studyTree, StudyTreeButtonsPanel.this, StudyTreeButtonsPanel.this.browseTreeComponent.getParentComponent().getWindow()); - deleteHandler.showConfirmDeletionDialog(studyId); + deleteHandler.showConfirmDeletionDialog(studyId); + } + else { + MessageNotifier.showError(StudyTreeButtonsPanel.this.getWindow(), + StudyTreeButtonsPanel.this.messageSource.getMessage(Message.ERROR), "Please choose a Program folder."); + } } }); From 1a625761491a4d2a26e27da1cb29381d1f2d7c15 Mon Sep 17 00:00:00 2001 From: vanina Date: Wed, 29 Aug 2018 16:06:11 -0300 Subject: [PATCH 2/3] Set and check if it's first time opening Issue: BMS-5074 Reviewer: Clary --- .../ibpworkbench/study/StudyBrowserMain.java | 7 ++++--- .../study/tree/BrowseStudyTreeComponent.java | 10 ++++++++- .../study/tree/StudyTreeButtonsPanel.java | 21 +++++++++++++------ .../listeners/StudyTreeItemClickListener.java | 1 + 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/generationcp/ibpworkbench/study/StudyBrowserMain.java b/src/main/java/org/generationcp/ibpworkbench/study/StudyBrowserMain.java index 45bebafe54..be80462058 100644 --- a/src/main/java/org/generationcp/ibpworkbench/study/StudyBrowserMain.java +++ b/src/main/java/org/generationcp/ibpworkbench/study/StudyBrowserMain.java @@ -131,7 +131,7 @@ public void addListeners() { private static final long serialVersionUID = 1L; @Override - public void buttonClick(ClickEvent event) { + public void buttonClick(final ClickEvent event) { StudyBrowserMain.this.openBrowseForStudyWindow(); } }); @@ -141,7 +141,7 @@ public void buttonClick(ClickEvent event) { private static final long serialVersionUID = 1L; @Override - public void buttonClick(ClickEvent event) { + public void buttonClick(final ClickEvent event) { StudyBrowserMain.this.openSearchForStudyWindow(); } }); @@ -154,7 +154,7 @@ public void layoutComponents() { final HeaderLabelLayout headingLayout = new HeaderLabelLayout(StudyBrowserMain.STUDY_DETAILS_ICON, this.headingLabel); - HorizontalLayout directionLayout = new HorizontalLayout(); + final HorizontalLayout directionLayout = new HorizontalLayout(); directionLayout.addStyleName("study-browser-main"); directionLayout.setHeight("16px"); directionLayout.setSpacing(true); @@ -183,6 +183,7 @@ public void updateLabels() { } public void openBrowseForStudyWindow() { + this.browseTreeComponent.setFirstTimeOpening(true); this.browseTreeComponent.refreshTree(); this.launchListSelectionWindow(this.getWindow(), this.browseTreeComponent, this.messageSource.getMessage(Message.BROWSE_STUDIES)) .addListener(this.browseTreeComponent.getSaveTreeStateListener()); diff --git a/src/main/java/org/generationcp/ibpworkbench/study/tree/BrowseStudyTreeComponent.java b/src/main/java/org/generationcp/ibpworkbench/study/tree/BrowseStudyTreeComponent.java index 92d61f0477..f61aaedee6 100644 --- a/src/main/java/org/generationcp/ibpworkbench/study/tree/BrowseStudyTreeComponent.java +++ b/src/main/java/org/generationcp/ibpworkbench/study/tree/BrowseStudyTreeComponent.java @@ -70,6 +70,7 @@ public class BrowseStudyTreeComponent extends VerticalLayout private Map parentChildItemIdMap; private StudyTreeButtonsPanel buttonsPanel; private StudyTypeFilterComponent studyTypeFilterComponent; + private boolean isFirstTimeOpening; public BrowseStudyTreeComponent(final StudyBrowserMain studyBrowserMain) { this.studyBrowserMain = studyBrowserMain; @@ -261,7 +262,7 @@ private void buildChildMap(final Integer studyId, final Boolean endNode) { } public void updateButtons(final Object itemId) { - this.buttonsPanel.updateButtons(itemId); + this.buttonsPanel.updateButtons(itemId, this.isFirstTimeOpening); } @@ -350,4 +351,11 @@ protected void setButtonsPanel(final StudyTreeButtonsPanel buttonsPanel) { this.buttonsPanel = buttonsPanel; } + public boolean isFirstTimeOpening() { + return this.isFirstTimeOpening; + } + + public void setFirstTimeOpening(final boolean firstTimeOpening) { + this.isFirstTimeOpening = firstTimeOpening; + } } diff --git a/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java b/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java index a62c2e24ac..dd54814401 100644 --- a/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java +++ b/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java @@ -175,14 +175,10 @@ public void afterPropertiesSet() throws Exception { public void updateButtons(final Object itemId) { if (itemId instanceof String) { // this means its the ROOT Folder - this.addFolderBtn.setEnabled(true); - this.renameFolderBtn.setEnabled(false); - this.deleteFolderBtn.setEnabled(false); + this.setButtonStatus(false); } else if (this.studyTree.isFolder((Integer) itemId)) { - this.addFolderBtn.setEnabled(true); - this.renameFolderBtn.setEnabled(true); - this.deleteFolderBtn.setEnabled(true); + this.setButtonStatus(true); // The rest of the local lists } else { this.addFolderBtn.setEnabled(true); @@ -192,6 +188,12 @@ public void updateButtons(final Object itemId) { } + public void setButtonStatus(final boolean b) { + this.addFolderBtn.setEnabled(true); + this.renameFolderBtn.setEnabled(b); + this.deleteFolderBtn.setEnabled(b); + } + protected Button getAddFolderBtn() { return this.addFolderBtn; } @@ -232,4 +234,11 @@ protected void setStudyTree(final StudyTree studyTree) { this.studyTree = studyTree; } + public void updateButtons(final Object itemId, final boolean isFirstTimeOpening) { + if (isFirstTimeOpening) { + this.setButtonStatus(false); + } else { + this.updateButtons(itemId); + } + } } diff --git a/src/main/java/org/generationcp/ibpworkbench/study/tree/listeners/StudyTreeItemClickListener.java b/src/main/java/org/generationcp/ibpworkbench/study/tree/listeners/StudyTreeItemClickListener.java index 540b569381..b70f84cd2a 100644 --- a/src/main/java/org/generationcp/ibpworkbench/study/tree/listeners/StudyTreeItemClickListener.java +++ b/src/main/java/org/generationcp/ibpworkbench/study/tree/listeners/StudyTreeItemClickListener.java @@ -28,6 +28,7 @@ public void itemClick(final ItemClickEvent event) { } public void studyTreeItemClickAction(final Object itemId) { + this.browseStudyTreeComponent.setFirstTimeOpening(false); this.studyTree.expandOrCollapseStudyTreeNode(itemId); if (!StudyTree.STUDY_ROOT_NODE.equals(itemId)) { final int studyId = Integer.valueOf(itemId.toString()); From 36ff34d735c59a54338d2a25a77af935c992dbc7 Mon Sep 17 00:00:00 2001 From: Vanina Maletta Date: Thu, 30 Aug 2018 16:25:38 -0300 Subject: [PATCH 3/3] Fix test Revert method setStatusButton Issue: BMS-5074 Reviewer: Clary --- .../study/tree/StudyTreeButtonsPanel.java | 18 ++++++++--------- .../tree/BrowseStudyTreeComponentTest.java | 2 +- .../StudyTreeItemClickListenerTest.java | 20 +++++++++---------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java b/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java index dd54814401..62de9ab1da 100644 --- a/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java +++ b/src/main/java/org/generationcp/ibpworkbench/study/tree/StudyTreeButtonsPanel.java @@ -175,10 +175,14 @@ public void afterPropertiesSet() throws Exception { public void updateButtons(final Object itemId) { if (itemId instanceof String) { // this means its the ROOT Folder - this.setButtonStatus(false); + this.addFolderBtn.setEnabled(true); + this.renameFolderBtn.setEnabled(false); + this.deleteFolderBtn.setEnabled(false); } else if (this.studyTree.isFolder((Integer) itemId)) { - this.setButtonStatus(true); + this.addFolderBtn.setEnabled(true); + this.renameFolderBtn.setEnabled(true); + this.deleteFolderBtn.setEnabled(true); // The rest of the local lists } else { this.addFolderBtn.setEnabled(true); @@ -188,12 +192,6 @@ public void updateButtons(final Object itemId) { } - public void setButtonStatus(final boolean b) { - this.addFolderBtn.setEnabled(true); - this.renameFolderBtn.setEnabled(b); - this.deleteFolderBtn.setEnabled(b); - } - protected Button getAddFolderBtn() { return this.addFolderBtn; } @@ -236,7 +234,9 @@ protected void setStudyTree(final StudyTree studyTree) { public void updateButtons(final Object itemId, final boolean isFirstTimeOpening) { if (isFirstTimeOpening) { - this.setButtonStatus(false); + this.addFolderBtn.setEnabled(true); + this.renameFolderBtn.setEnabled(false); + this.deleteFolderBtn.setEnabled(false); } else { this.updateButtons(itemId); } diff --git a/src/test/java/org/generationcp/ibpworkbench/study/tree/BrowseStudyTreeComponentTest.java b/src/test/java/org/generationcp/ibpworkbench/study/tree/BrowseStudyTreeComponentTest.java index eb1a680e3f..64127caf4b 100644 --- a/src/test/java/org/generationcp/ibpworkbench/study/tree/BrowseStudyTreeComponentTest.java +++ b/src/test/java/org/generationcp/ibpworkbench/study/tree/BrowseStudyTreeComponentTest.java @@ -202,7 +202,7 @@ public void testCreateStudyInfoTabWhenStudyTabExists() { public void testUpdateButtons() { this.browseTreeComponent.setButtonsPanel(this.buttonsPanel); this.browseTreeComponent.updateButtons(STUDY_ID); - Mockito.verify(this.buttonsPanel).updateButtons(STUDY_ID); + Mockito.verify(this.buttonsPanel).updateButtons(STUDY_ID, false); } @Test diff --git a/src/test/java/org/generationcp/ibpworkbench/study/tree/listeners/StudyTreeItemClickListenerTest.java b/src/test/java/org/generationcp/ibpworkbench/study/tree/listeners/StudyTreeItemClickListenerTest.java index 7eda362788..be3a6c351f 100644 --- a/src/test/java/org/generationcp/ibpworkbench/study/tree/listeners/StudyTreeItemClickListenerTest.java +++ b/src/test/java/org/generationcp/ibpworkbench/study/tree/listeners/StudyTreeItemClickListenerTest.java @@ -33,8 +33,8 @@ public class StudyTreeItemClickListenerTest { @Before public void setup() { MockitoAnnotations.initMocks(this); - Mockito.doReturn(ClickEvent.BUTTON_LEFT).when(clickEvent).getButton(); - Mockito.doReturn(STUDY_ID).when(clickEvent).getItemId(); + Mockito.doReturn(ClickEvent.BUTTON_LEFT).when(this.clickEvent).getButton(); + Mockito.doReturn(STUDY_ID).when(this.clickEvent).getItemId(); Mockito.doReturn(false).when(this.studyTree).hasChildStudy(STUDY_ID); Mockito.doReturn(true).when(this.studyTree).hasChildStudy(FOLDER_ID); Mockito.doReturn(false).when(this.studyTree).isFolder(STUDY_ID); @@ -43,15 +43,15 @@ public void setup() { @Test public void testItemClickWhenRightClick() { - Mockito.doReturn(ClickEvent.BUTTON_RIGHT).when(clickEvent).getButton(); - this.clickListener.itemClick(clickEvent); + Mockito.doReturn(ClickEvent.BUTTON_RIGHT).when(this.clickEvent).getButton(); + this.clickListener.itemClick(this.clickEvent); Mockito.verifyZeroInteractions(this.studyTree); Mockito.verifyZeroInteractions(this.browseTreeComponent); } @Test public void testItemClickWhenItemIsStudy(){ - this.clickListener.itemClick(clickEvent); + this.clickListener.itemClick(this.clickEvent); Mockito.verify(this.studyTree).expandOrCollapseStudyTreeNode(STUDY_ID); Mockito.verify(this.browseTreeComponent).createStudyInfoTab(STUDY_ID); Mockito.verify(this.studyTree).selectItem(STUDY_ID); @@ -59,22 +59,20 @@ public void testItemClickWhenItemIsStudy(){ @Test public void testItemClickWhenItemIsFolder(){ - Mockito.doReturn(FOLDER_ID).when(clickEvent).getItemId(); - this.clickListener.itemClick(clickEvent); + Mockito.doReturn(FOLDER_ID).when(this.clickEvent).getItemId(); + this.clickListener.itemClick(this.clickEvent); Mockito.verify(this.studyTree).expandOrCollapseStudyTreeNode(FOLDER_ID); Mockito.verify(this.studyTree).selectItem(FOLDER_ID); - Mockito.verifyZeroInteractions(this.browseTreeComponent); } @Test public void testItemClickWhenItemIsRootNode(){ - Mockito.doReturn(StudyTree.STUDY_ROOT_NODE).when(clickEvent).getItemId(); - this.clickListener.itemClick(clickEvent); + Mockito.doReturn(StudyTree.STUDY_ROOT_NODE).when(this.clickEvent).getItemId(); + this.clickListener.itemClick(this.clickEvent); Mockito.verify(this.studyTree).expandOrCollapseStudyTreeNode(StudyTree.STUDY_ROOT_NODE); Mockito.verify(this.studyTree).selectItem(StudyTree.STUDY_ROOT_NODE); Mockito.verify(this.studyTree, Mockito.never()).hasChildStudy(Matchers.anyInt()); Mockito.verify(this.studyTree, Mockito.never()).isFolder(Matchers.anyInt()); - Mockito.verifyZeroInteractions(this.browseTreeComponent); } }