in progress on #23587

This commit is contained in:
Francesco Mangiacrapa 2022-07-06 11:06:35 +02:00
parent b7836b33ae
commit 71e26af6dd
8 changed files with 192 additions and 147 deletions

View File

@ -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<GeoNaFormCardModel>(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<GeoNaFormCardModel> orderedCards) {
private void buildNewCards(String profileID, String itemTypeTitle, Collection<GeoNaFormCardModel> 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;

View File

@ -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<TreeItemEventHandler> {
public static Type<TreeItemEventHandler> TYPE = new Type<TreeItemEventHandler>();
private NodeItem selectItem;
private TreeItem treeItem;
private ACTION actionPerformed;
/**
@ -37,8 +36,8 @@ public class TreeItemEvent extends GwtEvent<TreeItemEventHandler> {
* @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<TreeItemEventHandler> {
*
* @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;
}
/**

View File

@ -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);

View File

@ -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;
}
</ui:style>
<g:HTMLPanel>
<b:PageHeader subtext="data entry facility"
@ -83,7 +95,9 @@
<b:Paragraph>select "Create New Project"</b:Paragraph>
</b:Hero>
<b:PageHeader subtext=" "
ui:field="pageHeaderDataEntry" visible="false"> </b:PageHeader>
ui:field="pageHeaderDataEntry"
addStyleNames="{style.sub-page-header}" visible="false">
</b:PageHeader>
</g:HTMLPanel>
<r:LoaderIcon ui:field="loader"></r:LoaderIcon>

View File

@ -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<String, MetadataFormCard> mapForms = new LinkedHashMap<String, MetadataFormCard>();
private List<Tab> listTabs = new ArrayList<Tab>();
//private List<Tab> listTabs = new ArrayList<Tab>();
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.
*

View File

@ -51,8 +51,8 @@
<g:ScrollPanel ui:field="inputPanel"
addStyleNames="{style.w80}"></g:ScrollPanel>
</g:HTMLPanel>
<b:TabPanel ui:field="mainTabPanel" tabPosition="left">
</b:TabPanel>
<!-- <b:TabPanel ui:field="mainTabPanel" tabPosition="left">
</b:TabPanel> -->
<b:AlertBlock type="DEFAULT" visible="false"
close="false" ui:field="alertFormAction"></b:AlertBlock>
<b:FormActions ui:field="formActions" visible="false">

View File

@ -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;
}
}

View File

@ -24,13 +24,18 @@ public class TreeItemPanel {
private Tree tree = new Tree();
private HandlerManager appManagerBus;
private HashMap<String, List<TreeItem>> treeItemParents = new HashMap<String, List<TreeItem>>();
private String itemTypeTitle;
private String profileID;
// Create a tree with a few items in it.
public TreeItemPanel(String itemType, Collection<GeoNaFormCardModel> gnaCardsModels, HandlerManager appManagerBus) {
public TreeItemPanel(String profileID, String itemTypeTitle, Collection<GeoNaFormCardModel> gnaCardsModels,
HandlerManager appManagerBus) {
this.appManagerBus = appManagerBus;
this.itemTypeTitle = itemTypeTitle;
this.profileID = profileID;
TreeItem root = new TreeItem();
root.setHTML(itemType);
root.setHTML(itemTypeTitle);
// TreeMap<String, List<TreeItem>> mapParentSections = new TreeMap<String,
// List<TreeItem>>();
@ -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<TreeItem> 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<TreeItem> listNodeParents = treeItemParents.get(jsonSectionFullPath);
if(listNodeParents==null) {
if (listNodeParents == null) {
listNodeParents = new ArrayList<TreeItem>();
}
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<TreeItem> 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<TreeItem> 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);
}
}