From 71e26af6dd96c649c62fd290bd7f73b663d6a021 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Wed, 6 Jul 2022 11:06:35 +0200 Subject: [PATCH] in progress on #23587 --- .../client/GeoPortalDataEntryApp.java | 79 +++++++++------- .../client/events/TreeItemEvent.java | 21 +++-- .../client/ui/GeonaMainTabPanel.java | 2 +- .../client/ui/GeonaMainTabPanel.ui.xml | 16 +++- .../ui/form/GeonaDataEntryMainForm.java | 90 ++++++++++--------- .../ui/form/GeonaDataEntryMainForm.ui.xml | 4 +- .../client/ui/tree/NodeItem.java | 59 ++++-------- .../client/ui/tree/TreeItemPanel.java | 68 +++++++++----- 8 files changed, 192 insertions(+), 147 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java index 0478687..587082b 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java @@ -387,7 +387,7 @@ public class GeoPortalDataEntryApp implements EntryPoint { if (cardsPerIT != null) { orderedCards.addAll(cardsPerIT); - buildNewCards(profileID, orderedCards); + buildNewCards(profileID, handlerDeclarationDV.getItemType(), orderedCards); return; } @@ -443,7 +443,7 @@ public class GeoPortalDataEntryApp implements EntryPoint { orderedCards.addAll(gnaCardsModels); mapGcubeProfilePerItemType.put(handlerDeclarationDV.getItemType(), new ArrayList(orderedCards)); - buildNewCards(profileID, orderedCards); + buildNewCards(profileID, handlerDeclarationDV.getItemType(), orderedCards); } } @@ -487,7 +487,7 @@ public class GeoPortalDataEntryApp implements EntryPoint { return geoNaFormCardModel; } - private void buildNewCards(String profileID, Collection orderedCards) { + private void buildNewCards(String profileID, String itemTypeTitle, Collection orderedCards) { projectSavedWithSuccess = false; // resetting state of saving mainTabPanel.setLoaderVisible("Loading...", true); geoNaMainForm.setVisibleFormActions(true); @@ -516,13 +516,13 @@ public class GeoPortalDataEntryApp implements EntryPoint { geoNaMainForm.enableButtonSave(true); mainTabPanel.setLoaderVisible("", false); - TreeItemPanel tip = new TreeItemPanel(profileID, orderedCards, appManagerBus); + TreeItemPanel tip = new TreeItemPanel(profileID, itemTypeTitle, orderedCards, appManagerBus); geoNaMainForm.addTree(tip); // RootPanel.get(GeoPortalDataEntryApp.DIV_PORTLET_ID).add(tip.getTree()); } private void resetUI() { - geoNaMainForm.reset(); + geoNaMainForm.resetUI(); mapForms.clear(); } @@ -680,52 +680,71 @@ public class GeoPortalDataEntryApp implements EntryPoint { @Override public void onTreeItemEvent(TreeItemEvent treeItemEvent) { - NodeItem selectedNode = treeItemEvent.getSelectItem(); - if (selectedNode == null) { - TreeItem selectedItem = geoNaMainForm.getTreeItemPanel().getSelectItem(); - - if(selectedItem==null) + TreeItem selectedItem = treeItemEvent.getSelectItem(); + NodeItem selectedNode = treeItemEvent.selectedAsNodeItem(); + + if (selectedItem == null) { + selectedItem = geoNaMainForm.getTreeItemPanel().getSelectItem(); + + if (selectedItem == null) return; - + selectedNode = (NodeItem) selectedItem.getWidget(); } - GeoNaFormCardModel nodeCard = selectedNode.getGeoNaFormCardModel(); - - + switch (treeItemEvent.getActionPerformed()) { - case SELECTED: + case SELECTED: { geoNaMainForm.enableButtonRemoveSection(false); geoNaMainForm.enableButtonDuplicateSection(false); geoNaMainForm.setSelectedForm(nodeCard.getMetadataForm()); - int nodeCount = geoNaMainForm.getTreeItemPanel().countNodeForFullPath(selectedNode.getJsonSectionFullPath()); - - if(nodeCount>1) { - geoNaMainForm.enableButtonRemoveSection(true); - } - - if(nodeCard.getFormCard().isInternalRepeatibleForm()) { + +// if(nodeCount>1) { +// geoNaMainForm.enableButtonRemoveSection(true); +// } +// + if (nodeCard.getFormCard().isInternalRepeatibleForm()) { geoNaMainForm.enableButtonDuplicateSection(true); } - - - break; - case DELETE: + + if (selectedNode.isCanBeDeleted()) { + geoNaMainForm.enableButtonRemoveSection(true); + } break; + } + case DELETE: { + + geoNaMainForm.getTreeItemPanel().removeChild(selectedItem.getParentItem(), selectedItem, selectedNode.getJsonSectionFullPath()); + geoNaMainForm.resetInputPanel(); + break; + } - case DUPLICATE: + case DUPLICATE: { GWT.log("DUPLICATE node: " + selectedNode); + int nodeCountPerJSONFullPAth = geoNaMainForm.getTreeItemPanel() + .countNodeForFullPath(selectedNode.getJsonSectionFullPath()); + + if (nodeCountPerJSONFullPAth >= nodeCard.getFormCard().getMaxFormRepeatability()) { + + DialogInform di = new DialogInform(new Image(Images.ICONS.accessDenied()), "Maximun reached", + "Maximun number of data reached for " + nodeCard.getFormCard().getTitle()); + di.center(); + return; + } + GeoNaFormCardModel newNodeFormCard = buildNewFormCardModelFromProfile(nodeCard.getGcubeProfile(), -1, nodeCard.getMetadataProfileBean(), OPERATION.UPDATE); - - geoNaMainForm.getTreeItemPanel().addChild(selectedNode.getParentTreeItem(), newNodeFormCard, true, - selectedNode.getJsonSectionFullPath()); + + boolean canBeDuplicated = newNodeFormCard.getFormCard().isInternalRepeatibleForm(); + geoNaMainForm.getTreeItemPanel().addChild(selectedNode.getParentTreeItem(), newNodeFormCard, + canBeDuplicated, true, selectedNode.getJsonSectionFullPath()); break; + } default: break; diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/events/TreeItemEvent.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/events/TreeItemEvent.java index 12fbe53..d779da2 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/events/TreeItemEvent.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/events/TreeItemEvent.java @@ -1,10 +1,9 @@ package org.gcube.portlets.user.geoportaldataentry.client.events; -import java.util.List; - import org.gcube.portlets.user.geoportaldataentry.client.ui.tree.NodeItem; import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.user.client.ui.TreeItem; /** @@ -17,7 +16,7 @@ import com.google.gwt.event.shared.GwtEvent; */ public class TreeItemEvent extends GwtEvent { public static Type TYPE = new Type(); - private NodeItem selectItem; + private TreeItem treeItem; private ACTION actionPerformed; /** @@ -37,8 +36,8 @@ public class TreeItemEvent extends GwtEvent { * @param selectItems the select items * @param action the action */ - public TreeItemEvent(NodeItem selectItem, ACTION action) { - this.selectItem = selectItem; + public TreeItemEvent(TreeItem treeItem, ACTION action) { + this.treeItem = treeItem; this.actionPerformed = action; } @@ -79,8 +78,16 @@ public class TreeItemEvent extends GwtEvent { * * @return the select items */ - public NodeItem getSelectItem() { - return selectItem; + public TreeItem getSelectItem() { + return treeItem; + } + + public NodeItem selectedAsNodeItem(){ + if(treeItem!=null) { + return (NodeItem) treeItem.getWidget(); + } + + return null; } /** diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java index 76bc7bd..cd76854 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java @@ -189,7 +189,7 @@ public class GeonaMainTabPanel extends Composite { alertSearchFor.setText(searchForFields.get(0).getDisplayName()); alertSortBy.setText(toLabelFilter((initialSortFilter.getOrderByFields().get(0)), initialSortFilter.getOrder())); - pageHeaderDataEntry.setHeight("25px"); + //pageHeaderDataEntry.setHeight("25px"); bindEvents(); resetSearch.setIconSize(IconSize.TWO_TIMES); resetSearch.setType(ButtonType.LINK); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml index 9a21a62..40cc422 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml @@ -52,6 +52,18 @@ padding-top: 6px; margin-top: 2px; } + + .sub-page-header { + height: 25px; + margin: 0 !important; + } + + .sub-page-header h1 { + } + + .sub-page-header small { + font-size: 18px; + } select "Create New Project" + ui:field="pageHeaderDataEntry" + addStyleNames="{style.sub-page-header}" visible="false"> + diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.java index 036eea5..9de8dfd 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.java @@ -69,8 +69,8 @@ public class GeonaDataEntryMainForm extends Composite { @UiField ScrollPanel inputPanel; - @UiField - TabPanel mainTabPanel; +// @UiField +// TabPanel mainTabPanel; @UiField AlertBlock alertFormAction; @@ -89,7 +89,7 @@ public class GeonaDataEntryMainForm extends Composite { private LinkedHashMap mapForms = new LinkedHashMap(); - private List listTabs = new ArrayList(); + //private List listTabs = new ArrayList(); private HandlerManager appManagerBus; @@ -168,55 +168,63 @@ public class GeonaDataEntryMainForm extends Composite { // createNewCard(profileID, tabHeading, geonFormModel); // } - /** - * Creates the new card. - * - * @param profileID the profile ID - * @param tabHeading the tab heading - * @param geonFormModel the geon form model - */ - private void createNewCard(String profileID, String tabHeading, final GeoNaFormCardModel geonFormModel) { - final Tab tab = new Tab(); - tab.setHeading(tabHeading); - // MetadataFormCard mfc = new MetadataFormCard(tab, createMetadataForm, - // repeatible); - MetadataFormCard mfc = new MetadataFormCard(tab, geonFormModel, appManagerBus); - listTabs.add(tab); - mainTabPanel.add(tab); - - if (listTabs.size() == 1) { - tab.setActive(true); - mainTabPanel.selectTab(0); - } - - mapForms.put(tabHeading, mfc); - } +// /** +// * Creates the new card. +// * +// * @param profileID the profile ID +// * @param tabHeading the tab heading +// * @param geonFormModel the geon form model +// */ +// private void createNewCard(String profileID, String tabHeading, final GeoNaFormCardModel geonFormModel) { +// final Tab tab = new Tab(); +// tab.setHeading(tabHeading); +// // MetadataFormCard mfc = new MetadataFormCard(tab, createMetadataForm, +// // repeatible); +// MetadataFormCard mfc = new MetadataFormCard(tab, geonFormModel, appManagerBus); +// listTabs.add(tab); +// mainTabPanel.add(tab); +// +// if (listTabs.size() == 1) { +// tab.setActive(true); +// mainTabPanel.selectTab(0); +// } +// +// mapForms.put(tabHeading, mfc); +// } /** * Reset. */ - public void reset() { + public void resetUI() { navbarTree.setVisible(false); mapForms.clear(); - mainTabPanel.clear(); - listTabs.clear(); + //mainTabPanel.clear(); + inputPanel.clear(); + //listTabs.clear(); } - + /** - * Select tab. - * - * @param index the index + * Reset. */ - public void selectTab(int index) { - - GWT.log("Selecting tab index: " + index + " of " + listTabs.size()); - - if (listTabs.size() < index) { - mainTabPanel.selectTab(index); - - } + public void resetInputPanel() { + inputPanel.clear(); } +// /** +// * Select tab. +// * +// * @param index the index +// */ +// public void selectTab(int index) { +// +// GWT.log("Selecting tab index: " + index + " of " + listTabs.size()); +// +// if (listTabs.size() < index) { +// mainTabPanel.selectTab(index); +// +// } +// } + /** * Save data. * diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.ui.xml index 449cfb1..9fe79dd 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.ui.xml +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.ui.xml @@ -51,8 +51,8 @@ - - + diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/tree/NodeItem.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/tree/NodeItem.java index 566651b..356ddee 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/tree/NodeItem.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/tree/NodeItem.java @@ -36,58 +36,25 @@ public class NodeItem extends Composite { private String jsonSectionFullPath; -// public NodeItem(TreeItem parent, GcubeProfileDV profile, CreateMetadataForm baseForm, Integer minOccurs, -// Integer maxOccurs, boolean canBeDuplicated, boolean canBeDeleted) { -// initWidget(uiBinder.createAndBindUi(this)); -// this.profile = profile; -// this.baseForm = baseForm; -// htmlNode.setHTML(profile.getSectionTitle()); -// buttonAdd.setVisible(false); -// buttonRemove.setVisible(false); -// -// if (canBeDuplicated) { -// buttonAdd.setIcon(IconType.COPY); -// buttonAdd.getElement().getStyle().setProperty("pointerEvents", "none"); -// buttonAdd.getElement().getStyle().setProperty("textDecoration", "none"); -// buttonAdd.getElement().getStyle().setColor("#555"); -// buttonAdd.setVisible(true); -// -// } -// -// if (canBeDeleted) { -// buttonRemove.setIcon(IconType.TRASH); -// buttonRemove.getElement().getStyle().setProperty("pointerEvents", "none"); -// buttonRemove.getElement().getStyle().setProperty("textDecoration", "none"); -// buttonRemove.getElement().getStyle().setColor("#555"); -// buttonRemove.setVisible(true); -// } -// -// htmlNode.addClickHandler(new ClickHandler() { -// -// @Override -// public void onClick(ClickEvent event) { -// // TODO Auto-generated method stub -// -// } -// }); -// -// } + private boolean canBeDuplicated; - public NodeItem(TreeItem parent, GeoNaFormCardModel geoNaFormCardModel, boolean canBeDeleted, - String jsonSectionFullPath) { + private boolean canBeDeleted; + + public NodeItem(TreeItem parent, GeoNaFormCardModel geoNaFormCardModel, boolean canBeDuplicated, + boolean canBeDeleted, String jsonSectionFullPath) { initWidget(uiBinder.createAndBindUi(this)); this.geoNaFormCardModel = geoNaFormCardModel; this.parentTreeItem = parent; this.jsonSectionFullPath = jsonSectionFullPath; + this.canBeDuplicated = canBeDuplicated; + this.canBeDeleted = canBeDeleted; htmlNode.setHTML(geoNaFormCardModel.getGcubeProfile().getSectionTitle()); buttonAdd.setVisible(false); buttonRemove.setVisible(false); - boolean canBeDuplicated = geoNaFormCardModel.getFormCard().isInternalRepeatibleForm(); - if (canBeDuplicated) { buttonAdd.setIcon(IconType.COPY); - buttonAdd.getElement().getStyle().setProperty("pointerEvents", "none"); + //buttonAdd.getElement().getStyle().setProperty("pointerEvents", "none"); buttonAdd.getElement().getStyle().setProperty("textDecoration", "none"); buttonAdd.getElement().getStyle().setColor("#555"); buttonAdd.setVisible(true); @@ -96,7 +63,7 @@ public class NodeItem extends Composite { if (canBeDeleted) { buttonRemove.setIcon(IconType.TRASH); - buttonRemove.getElement().getStyle().setProperty("pointerEvents", "none"); + //buttonRemove.getElement().getStyle().setProperty("pointerEvents", "none"); buttonRemove.getElement().getStyle().setProperty("textDecoration", "none"); buttonRemove.getElement().getStyle().setColor("#555"); buttonRemove.setVisible(true); @@ -130,4 +97,12 @@ public class NodeItem extends Composite { return jsonSectionFullPath; } + public boolean isCanBeDeleted() { + return canBeDeleted; + } + + public boolean isCanBeDuplicated() { + return canBeDuplicated; + } + } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/tree/TreeItemPanel.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/tree/TreeItemPanel.java index ea43655..d6e4954 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/tree/TreeItemPanel.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/tree/TreeItemPanel.java @@ -24,13 +24,18 @@ public class TreeItemPanel { private Tree tree = new Tree(); private HandlerManager appManagerBus; private HashMap> treeItemParents = new HashMap>(); + private String itemTypeTitle; + private String profileID; // Create a tree with a few items in it. - public TreeItemPanel(String itemType, Collection gnaCardsModels, HandlerManager appManagerBus) { + public TreeItemPanel(String profileID, String itemTypeTitle, Collection gnaCardsModels, + HandlerManager appManagerBus) { this.appManagerBus = appManagerBus; + this.itemTypeTitle = itemTypeTitle; + this.profileID = profileID; TreeItem root = new TreeItem(); - root.setHTML(itemType); + root.setHTML(itemTypeTitle); // TreeMap> mapParentSections = new TreeMap>(); @@ -64,7 +69,7 @@ public class TreeItemPanel { GcubeProfileDV profile = geoNaFormCardModel.getGcubeProfile(); String parentName = profile.getParentName(); String jsonSectionFullPath = getJSONFullPathFromProfile(profile); - + if (parentName == null || parentName.isEmpty()) { parentName = JSON_ROOT_PATH; } @@ -74,8 +79,10 @@ public class TreeItemPanel { GWT.log("tree jsonSection: " + jsonSectionFullPath + " parent " + parentName + " name: " + profile.getSectionName() + " title: " + profile.getSectionTitle()); - TreeItem child = addChild(listParent.get(0), geoNaFormCardModel, false, jsonSectionFullPath); - + boolean canBeDuplicated = geoNaFormCardModel.getFormCard().isInternalRepeatibleForm(); + TreeItem child = addChild(listParent.get(0), geoNaFormCardModel, canBeDuplicated, false, + jsonSectionFullPath); + } tree.addItem(root); @@ -83,10 +90,12 @@ public class TreeItemPanel { @Override public void onSelection(SelectionEvent event) { - NodeItem nodeItem = (NodeItem) event.getSelectedItem().getWidget(); + TreeItem treeItem = event.getSelectedItem(); + + NodeItem nodeItem = (NodeItem) treeItem.getWidget(); GWT.log("Selected: " + nodeItem.getGeoNaFormCardModel().getGcubeProfile()); - appManagerBus.fireEvent(new TreeItemEvent(nodeItem, ACTION.SELECTED)); + appManagerBus.fireEvent(new TreeItemEvent(treeItem, ACTION.SELECTED)); } }); @@ -113,34 +122,48 @@ public class TreeItemPanel { return jsonSectionFullPath; } - public TreeItem addChild(TreeItem parent, GeoNaFormCardModel geoNaFormCardModel, boolean canBeDeleted, String jsonSectionFullPath) { + public TreeItem addChild(TreeItem parent, GeoNaFormCardModel geoNaFormCardModel, boolean canBeDuplicated, + boolean canBeDeleted, String jsonSectionFullPath) { GWT.log("Adding child to parent: " + parent.getText()); - TreeItem child = new TreeItem(new NodeItem(parent, geoNaFormCardModel, canBeDeleted, jsonSectionFullPath)); + TreeItem child = new TreeItem( + new NodeItem(parent, geoNaFormCardModel, canBeDuplicated, canBeDeleted, jsonSectionFullPath)); parent.addItem(child); - + // if the path section is not the root if (jsonSectionFullPath.compareTo(JSON_ROOT_PATH) != 0) { - + List listNodeParents = treeItemParents.get(jsonSectionFullPath); - - if(listNodeParents==null) { + + if (listNodeParents == null) { listNodeParents = new ArrayList(); } - + listNodeParents.add(child); - + treeItemParents.put(jsonSectionFullPath, listNodeParents); } return child; } - - public int countNodeForFullPath(String jsonSectionFullPath){ + + public void removeChild(TreeItem parent, TreeItem item, String jsonSectionFullPath) { + GWT.log("Removing child to parent: " + parent.getText()); List nodes = treeItemParents.get(jsonSectionFullPath); - - if(nodes != null) + + if (nodes != null) { + nodes.remove(item); + treeItemParents.put(jsonSectionFullPath, nodes); + } + + parent.removeItem(item); + } + + public int countNodeForFullPath(String jsonSectionFullPath) { + List nodes = treeItemParents.get(jsonSectionFullPath); + + if (nodes != null) return nodes.size(); - + return 0; } @@ -151,10 +174,9 @@ public class TreeItemPanel { public TreeItem getSelectItem() { return tree.getSelectedItem(); } - - public int getNodeIndex(TreeItem parent,TreeItem item){ + + public int getNodeIndex(TreeItem parent, TreeItem item) { return parent.getChildIndex(item); } - }