in progress

This commit is contained in:
Francesco Mangiacrapa 2022-07-07 12:36:08 +02:00
parent 935e0035f1
commit 22713ca924
6 changed files with 253 additions and 124 deletions

View File

@ -143,6 +143,8 @@ public class GeoPortalDataEntryApp implements EntryPoint {
private boolean dataEntryProjectCreated = false; private boolean dataEntryProjectCreated = false;
private TreeItemPanel treeItemPanel;
/** /**
* This is the entry point method. * This is the entry point method.
*/ */
@ -417,18 +419,6 @@ public class GeoPortalDataEntryApp implements EntryPoint {
String theMetaType = metaDataProfileBean.getType().toLowerCase(); String theMetaType = metaDataProfileBean.getType().toLowerCase();
GWT.log("Building form card for type: " + theMetaType); GWT.log("Building form card for type: " + theMetaType);
// // Managing Forms repeatability
// int minOccurs = gcubeProfiles.getMinOccurs();
// minOccurs = minOccurs <= 0 ? 0 : minOccurs;
// int maxOccurs = gcubeProfiles.getMaxOccurs();
// maxOccurs = maxOccurs <= 0 ? Integer.MAX_VALUE : maxOccurs;
//
// // TODO MUST BE MANAGED MIN_OCCURS
// ProjectFormCard cct = new ProjectFormCard(gcubeProfiles.getSectionName(),
// gcubeProfiles.getSectionTitle(), order, maxOccurs > 1, minOccurs, maxOccurs);
// GeoNaFormCardModel geonaForm = new GeoNaFormCardModel(metaDataProfileBean, null, cct,
// gcubeProfiles);
GeoNaFormCardModel geonaForm = buildNewFormCardModelFromProfile(gcubeProfile, order, GeoNaFormCardModel geonaForm = buildNewFormCardModelFromProfile(gcubeProfile, order,
metaDataProfileBean, OPERATION.UPDATE); metaDataProfileBean, OPERATION.UPDATE);
@ -468,6 +458,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
*/ */
private GeoNaFormCardModel buildNewFormCardModelFromProfile(GcubeProfileDV gcubeProfile, int order, private GeoNaFormCardModel buildNewFormCardModelFromProfile(GcubeProfileDV gcubeProfile, int order,
MetaDataProfileBean metaDataProfileBean, OPERATION operation) { MetaDataProfileBean metaDataProfileBean, OPERATION operation) {
// Managing Forms repeatability // Managing Forms repeatability
int minOccurs = gcubeProfile.getMinOccurs(); int minOccurs = gcubeProfile.getMinOccurs();
minOccurs = minOccurs <= 0 ? 0 : minOccurs; minOccurs = minOccurs <= 0 ? 0 : minOccurs;
@ -488,37 +479,16 @@ public class GeoPortalDataEntryApp implements EntryPoint {
} }
private void buildNewCards(String profileID, String itemTypeTitle, Collection<GeoNaFormCardModel> orderedCards) { private void buildNewCards(String profileID, String itemTypeTitle, Collection<GeoNaFormCardModel> orderedCards) {
projectSavedWithSuccess = false; // resetting state of saving projectSavedWithSuccess = false; // resetting state of saving
mainTabPanel.setLoaderVisible("Loading...", true); mainTabPanel.setLoaderVisible("Loading...", true);
geoNaMainForm.setVisibleFormActions(true); geoNaMainForm.setVisibleFormActions(true);
resetUI(); resetUI();
// ordered values
// for (GeoNaFormCardModel geonaForm : orderedCards) {
//
// // TODO TO TEST
// // if(geonaForm.getFormCardTitle().equals(ProjectFormCard.IMMAGINI_RAPPRESENTATIVE)){
//
// GWT.log("Adding card: " + geonaForm.getFormCard());
// CreateMetadataForm baseForm = new CreateMetadataForm(Arrays.asList(geonaForm.getMetadataProfileBean()),
// appManagerBus, operation);
// geonaForm.setMetadataForm(baseForm);
// String key = geonaForm.getMetadataProfileBean().getType();
// if (geonaForm.getFormCard() != null) {
// key = geonaForm.getFormCard().getTitle();
// }
// // profileID is unique for all the cards/forms
// geoNaMainForm.addForm(profileID, key, geonaForm);
// mapForms.put(key, geonaForm);
//
// // }
// }
geoNaMainForm.enableButtonSave(true); geoNaMainForm.enableButtonSave(true);
mainTabPanel.setLoaderVisible("", false); mainTabPanel.setLoaderVisible("", false);
TreeItemPanel tip = new TreeItemPanel(profileID, itemTypeTitle, orderedCards, appManagerBus); treeItemPanel = new TreeItemPanel(profileID, itemTypeTitle, orderedCards, appManagerBus);
geoNaMainForm.addTree(tip); geoNaMainForm.addTree(treeItemPanel);
// RootPanel.get(GeoPortalDataEntryApp.DIV_PORTLET_ID).add(tip.getTree());
} }
private void resetUI() { private void resetUI() {
@ -1130,8 +1100,9 @@ public class GeoPortalDataEntryApp implements EntryPoint {
// geoNaMainForm.getTreeItemPanel().createAndAddChild(theRootNode.getParentTreeItem(), newNodeFormCard, // geoNaMainForm.getTreeItemPanel().createAndAddChild(theRootNode.getParentTreeItem(), newNodeFormCard,
// canBeDuplicated, true, theRootNode.getJsonSectionFullPath()); // canBeDuplicated, true, theRootNode.getJsonSectionFullPath());
TreeItem newTreeItem = new TreeItem(new NodeItem(root.getParentItem(), newNodeFormCard, canBeDuplicated, true, TreeItem newTreeItem = new TreeItem(
theRootNode.getJsonSectionFullPath())); new NodeItem(root.getParentItem(), nodeCard.getGcubeProfile().getSectionTitle(), newNodeFormCard,
canBeDuplicated, true, theRootNode.getJsonSectionFullPath()));
String parentText = root.getParentItem() != null ? root.getParentItem().getText() : null; String parentText = root.getParentItem() != null ? root.getParentItem().getText() : null;
GWT.log("newTreeItem created: " + newTreeItem.getText() + ", parent is: " + parentText); GWT.log("newTreeItem created: " + newTreeItem.getText() + ", parent is: " + parentText);

View File

@ -9,8 +9,10 @@ import org.gcube.portlets.user.geoportaldataentry.client.events.TreeItemEvent;
import org.gcube.portlets.user.geoportaldataentry.client.events.TreeItemEvent.ACTION; import org.gcube.portlets.user.geoportaldataentry.client.events.TreeItemEvent.ACTION;
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel; import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel;
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.MetadataFormCard; import org.gcube.portlets.user.geoportaldataentry.client.ui.card.MetadataFormCard;
import org.gcube.portlets.user.geoportaldataentry.client.ui.tree.NodeItem;
import org.gcube.portlets.user.geoportaldataentry.client.ui.tree.TreeItemPanel; import org.gcube.portlets.user.geoportaldataentry.client.ui.tree.TreeItemPanel;
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject; import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
import org.gcube.portlets.user.geoportaldataentry.shared.TNode;
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm; import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm;
import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean; import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean;
@ -32,6 +34,7 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
/** /**
@ -55,7 +58,7 @@ public class GeonaDataEntryMainForm extends Composite {
interface GeonaDataEntryMainFormUiBinder extends UiBinder<Widget, GeonaDataEntryMainForm> { interface GeonaDataEntryMainFormUiBinder extends UiBinder<Widget, GeonaDataEntryMainForm> {
} }
private List<GeoNaFormCardModel> listCards = new ArrayList<GeoNaFormCardModel>(); private TNode<GeoNaFormCardModel> nodes = new TNode<GeoNaFormCardModel>();
@UiField @UiField
HTMLPanel mainHTMLPanel; HTMLPanel mainHTMLPanel;
@ -69,9 +72,6 @@ public class GeonaDataEntryMainForm extends Composite {
@UiField @UiField
ScrollPanel inputPanel; ScrollPanel inputPanel;
// @UiField
// TabPanel mainTabPanel;
@UiField @UiField
AlertBlock alertFormAction; AlertBlock alertFormAction;
@ -89,14 +89,14 @@ public class GeonaDataEntryMainForm extends Composite {
private LinkedHashMap<String, MetadataFormCard> mapForms = new LinkedHashMap<String, MetadataFormCard>(); private LinkedHashMap<String, MetadataFormCard> mapForms = new LinkedHashMap<String, MetadataFormCard>();
//private List<Tab> listTabs = new ArrayList<Tab>();
private HandlerManager appManagerBus; private HandlerManager appManagerBus;
private String profileID; private String profileID;
private TreeItemPanel treeItemPanel; private TreeItemPanel treeItemPanel;
private boolean canSave = true;
/** /**
* Instantiates a new geona data entry main form. * Instantiates a new geona data entry main form.
* *
@ -155,54 +155,17 @@ public class GeonaDataEntryMainForm extends Composite {
inputPanel.add(form); inputPanel.add(form);
} }
// /**
// * Adds the form.
// *
// * @param tabHeading the tab heading
// * @param key
// * @param geonFormModel the geon form model
// */
// public void addForm(String profileID, String tabHeading, GeoNaFormCardModel geonFormModel) {
// this.profileID = profileID;
// listCards.add(geonFormModel);
// 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);
// }
/** /**
* Reset. * Reset.
*/ */
public void resetUI() { public void resetUI() {
navbarTree.setVisible(false); navbarTree.setVisible(false);
mapForms.clear(); mapForms.clear();
//mainTabPanel.clear(); // mainTabPanel.clear();
inputPanel.clear(); inputPanel.clear();
//listTabs.clear(); // listTabs.clear();
} }
/** /**
* Reset. * Reset.
*/ */
@ -210,20 +173,44 @@ public class GeonaDataEntryMainForm extends Composite {
inputPanel.clear(); inputPanel.clear();
} }
// /** public void validateFormsIntoTree(TreeItem root) {
// * Select tab. GWT.log("validateFormsIntoTree called");
// *
// * @param index the index if (root == null) {
// */ return;
// public void selectTab(int index) { }
//
// GWT.log("Selecting tab index: " + index + " of " + listTabs.size()); GWT.log("validateFormsIntoTree called for: " + root.getText());
//
// if (listTabs.size() < index) { for (int i = 0; i < root.getChildCount(); i++) {
// mainTabPanel.selectTab(index); TreeItem child = root.getChild(i);
// validateFormsIntoTree(child);
}
NodeItem node = (NodeItem) root.getWidget();
GWT.log("validateFormsIntoTree called for: " + root.getText() + " node: " + node);
//Is root
if (node == null) {
return;
}
// try {
// node = (NodeItem) root.getWidget();
// boolean isRoot = node.isRoot();
// if(isRoot)
// return true;
// }catch (Exception e) {
// // TODO: handle exception
// } // }
// }
boolean isValid = node.validateForm();
GWT.log("validateFormsIntoTree called for: " + root.getText() + " is valid: " + isValid);
if (!isValid) {
canSave = false;
}
}
/** /**
* Save data. * Save data.
@ -233,29 +220,46 @@ public class GeonaDataEntryMainForm extends Composite {
@UiHandler("buttonSave") @UiHandler("buttonSave")
void saveData(ClickEvent e) { void saveData(ClickEvent e) {
boolean canSave = true; canSave = true;
TreeItem root = treeItemPanel.getRoot();
validateFormsIntoTree(root);
for (String metadataType : mapForms.keySet()) { // boolean canSave = true;
MetadataFormCard card = mapForms.get(metadataType); //
boolean isValid = card.validateForm(); // TreeItem root = treeItemPanel.getRoot();
card.setValidCard(isValid); //
if (isValid == false) // for (int i=0; i<root.getChildCount(); i++) {
canSave = false; // TreeItem child = root.getChild(i);
} // NodeItem node = (NodeItem) child.getWidget();
// boolean isValid = node.validateForm();
// if (isValid == false)
// canSave = false;
// }
//
// for (String metadataType : mapForms.keySet()) {
// MetadataFormCard card = mapForms.get(metadataType);
// boolean isValid = card.validateForm();
// card.setValidCard(isValid);
// if (isValid == false)
// canSave = false;
// }
List<GeoNaFormDataObject> listGeonaFormObjects = new ArrayList<GeoNaFormDataObject>(); List<GeoNaFormDataObject> listGeonaFormObjects = new ArrayList<GeoNaFormDataObject>();
if (canSave) { if (canSave) {
for (String metadataType : mapForms.keySet()) { // for (String metadataType : mapForms.keySet()) {
MetadataFormCard card = mapForms.get(metadataType); // MetadataFormCard card = mapForms.get(metadataType);
List<GenericDatasetBean> listGDB = new ArrayList<GenericDatasetBean>(card.getListForms().size()); // List<GenericDatasetBean> listGDB = new ArrayList<GenericDatasetBean>(card.getListForms().size());
for (CreateMetadataForm form : card.getListForms()) { // for (CreateMetadataForm form : card.getListForms()) {
listGDB.add(form.getFormDataBean()); // listGDB.add(form.getFormDataBean());
//
// }
// listGeonaFormObjects.add(new GeoNaFormDataObject(listGDB, card.getGeonaFormModel().getGcubeProfile()));
// }
// appManagerBus.fireEvent(new SaveGeonaDataFormsEvent(profileID, listGeonaFormObjects));
showAlertOnSaveAction("Andiamo a salvare", AlertType.INFO, true);
}
listGeonaFormObjects.add(new GeoNaFormDataObject(listGDB, card.getGeonaFormModel().getGcubeProfile()));
}
appManagerBus.fireEvent(new SaveGeonaDataFormsEvent(profileID, listGeonaFormObjects));
} else { } else {
showAlertOnSaveAction("Detected errors, please fix it/them", AlertType.ERROR, true); showAlertOnSaveAction("Detected errors, please fix it/them", AlertType.ERROR, true);
} }

View File

@ -1,8 +1,12 @@
package org.gcube.portlets.user.geoportaldataentry.client.ui.tree; package org.gcube.portlets.user.geoportaldataentry.client.ui.tree;
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel; import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel;
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm;
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.GenericFormEvents.GenericFormEventsListener;
import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean;
import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Icon;
import com.github.gwtbootstrap.client.ui.constants.IconType; import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickEvent;
@ -21,6 +25,9 @@ public class NodeItem extends Composite {
interface NodeItemUiBinder extends UiBinder<Widget, NodeItem> { interface NodeItemUiBinder extends UiBinder<Widget, NodeItem> {
} }
@UiField
Icon iconField;
@UiField @UiField
HTML htmlNode; HTML htmlNode;
@ -40,7 +47,11 @@ public class NodeItem extends Composite {
private boolean canBeDeleted; private boolean canBeDeleted;
public NodeItem(TreeItem parent, GeoNaFormCardModel geoNaFormCardModel, boolean canBeDuplicated, private boolean isRoot = false;
private MetadataFormCardEventHandler formCardEventHandler = new MetadataFormCardEventHandler();
public NodeItem(TreeItem parent, String nodeHTML, GeoNaFormCardModel geoNaFormCardModel, boolean canBeDuplicated,
boolean canBeDeleted, String jsonSectionFullPath) { boolean canBeDeleted, String jsonSectionFullPath) {
initWidget(uiBinder.createAndBindUi(this)); initWidget(uiBinder.createAndBindUi(this));
this.geoNaFormCardModel = geoNaFormCardModel; this.geoNaFormCardModel = geoNaFormCardModel;
@ -48,13 +59,13 @@ public class NodeItem extends Composite {
this.jsonSectionFullPath = jsonSectionFullPath; this.jsonSectionFullPath = jsonSectionFullPath;
this.canBeDuplicated = canBeDuplicated; this.canBeDuplicated = canBeDuplicated;
this.canBeDeleted = canBeDeleted; this.canBeDeleted = canBeDeleted;
htmlNode.setHTML(geoNaFormCardModel.getGcubeProfile().getSectionTitle()); htmlNode.setHTML(nodeHTML);
buttonAdd.setVisible(false); buttonAdd.setVisible(false);
buttonRemove.setVisible(false); buttonRemove.setVisible(false);
if (canBeDuplicated) { if (canBeDuplicated) {
buttonAdd.setIcon(IconType.COPY); 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().setProperty("textDecoration", "none");
buttonAdd.getElement().getStyle().setColor("#555"); buttonAdd.getElement().getStyle().setColor("#555");
buttonAdd.setVisible(true); buttonAdd.setVisible(true);
@ -63,7 +74,7 @@ public class NodeItem extends Composite {
if (canBeDeleted) { if (canBeDeleted) {
buttonRemove.setIcon(IconType.TRASH); 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().setProperty("textDecoration", "none");
buttonRemove.getElement().getStyle().setColor("#555"); buttonRemove.getElement().getStyle().setColor("#555");
buttonRemove.setVisible(true); buttonRemove.setVisible(true);
@ -78,6 +89,128 @@ public class NodeItem extends Composite {
} }
}); });
//Is not the root node
if(geoNaFormCardModel!=null) {
geoNaFormCardModel.getMetadataForm().addListener(formCardEventHandler);
resetNodeStatus();
}
}
/**
* The Class MetadataFormCardEventHandler.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Oct 12, 2020
*/
private class MetadataFormCardEventHandler implements GenericFormEventsListener {
/**
* On form data valid.
*
* @param genericDatasetBean the generic dataset bean
*/
@Override
public void onFormDataValid(GenericDatasetBean genericDatasetBean) {
setNodeStatus();
}
/**
* On form data edit.
*/
@Override
public void onFormDataEdit() {
resetNodeStatus();
}
/**
* On form aborted.
*/
@Override
public void onFormAborted() {
// TODO Auto-generated method stub
}
/**
* On validation error.
*
* @param throwable the throwable
* @param errorMsg the error msg
*/
@Override
public void onValidationError(Throwable throwable, String errorMsg) {
// TODO Auto-generated method stub
}
}
/**
* Validate form.
*
* @return true, if successful
*/
public boolean validateForm() {
if(isRoot)
return true;
CreateMetadataForm createMetadataForm = geoNaFormCardModel.getMetadataForm();
boolean isFormDataValid = createMetadataForm.isFormDataValid();
GWT.log("Is form data valid: " + isFormDataValid);
if (!isFormDataValid) {
return false;
}
return true;
}
/**
* Sets the valid card.
*
* @param bool the new valid card
*/
public void setValidCard(boolean bool) {
if (bool) {
iconField.setIcon(IconType.OK_SIGN);
htmlNode.asWidget().getElement().removeClassName("red-text");
htmlNode.asWidget().getElement().addClassName("green-text");
} else {
iconField.setIcon(IconType.MINUS_SIGN);
htmlNode.asWidget().getElement().removeClassName("green-text");
htmlNode.asWidget().getElement().addClassName("red-text");
}
}
/**
* Sets the tab status.
*/
private void setNodeStatus() {
boolean isValid = validateForm();
if (isValid) {
iconField.setIcon(IconType.OK_SIGN);
htmlNode.asWidget().getElement().removeClassName("red-text");
htmlNode.asWidget().getElement().addClassName("green-text");
} else {
iconField.setIcon(IconType.MINUS_SIGN);
htmlNode.asWidget().getElement().removeClassName("red-text");
htmlNode.asWidget().getElement().addClassName("red-text");
}
}
public boolean isRoot() {
return isRoot;
}
public void setRoot(boolean isRoot) {
this.isRoot = isRoot;
}
private void resetNodeStatus() {
iconField.setIcon(null);
} }
public TreeItem getParentTreeItem() { public TreeItem getParentTreeItem() {
@ -104,7 +237,7 @@ public class NodeItem extends Composite {
public boolean isCanBeDuplicated() { public boolean isCanBeDuplicated() {
return canBeDuplicated; return canBeDuplicated;
} }
public HTML getHtmlNode() { public HTML getHtmlNode() {
return htmlNode; return htmlNode;
} }

View File

@ -8,11 +8,18 @@
margin-left: 20px; margin-left: 20px;
} }
.margin-left-10 {
margin-left: 10px;
}
.margin-left-10 { .margin-left-10 {
margin-left: 10px; margin-left: 10px;
} }
</ui:style> </ui:style>
<g:HorizontalPanel> <g:HorizontalPanel>
<g:HTMLPanel addStyleNames="margin-left-10">
<b:Icon type="OK_SIGN" ui:field="iconField"></b:Icon>
</g:HTMLPanel>
<g:HTML ui:field="htmlNode">Node</g:HTML> <g:HTML ui:field="htmlNode">Node</g:HTML>
<b:Button title="This section can be duplicated" <b:Button title="This section can be duplicated"
styleName="{style.margin-left-10}" ui:field="buttonAdd"></b:Button> styleName="{style.margin-left-10}" ui:field="buttonAdd"></b:Button>

View File

@ -22,7 +22,7 @@ public class TreeItemPanel {
private static final String JSON_ROOT_PATH = "$."; private static final String JSON_ROOT_PATH = "$.";
private Tree tree = new Tree(); private Tree tree = new Tree();
private TreeItem root = new TreeItem(); private TreeItem root;
private HandlerManager appManagerBus; private HandlerManager appManagerBus;
private HashMap<String, List<TreeItem>> treeItemParents = new HashMap<String, List<TreeItem>>(); private HashMap<String, List<TreeItem>> treeItemParents = new HashMap<String, List<TreeItem>>();
private String itemTypeTitle; private String itemTypeTitle;
@ -35,7 +35,12 @@ public class TreeItemPanel {
this.itemTypeTitle = itemTypeTitle; this.itemTypeTitle = itemTypeTitle;
this.profileID = profileID; this.profileID = profileID;
tree.setAnimationEnabled(true); tree.setAnimationEnabled(true);
NodeItem rootNode = new NodeItem(null, "root", null, false, false, JSON_ROOT_PATH);
rootNode.setRoot(true);
root = new TreeItem(rootNode);
root.setHTML(itemTypeTitle); root.setHTML(itemTypeTitle);
// TreeMap<String, List<TreeItem>> mapParentSections = new TreeMap<String, // TreeMap<String, List<TreeItem>> mapParentSections = new TreeMap<String,
// List<TreeItem>>(); // List<TreeItem>>();
@ -80,7 +85,7 @@ public class TreeItemPanel {
+ profile.getSectionName() + " title: " + profile.getSectionTitle()); + profile.getSectionName() + " title: " + profile.getSectionTitle());
boolean canBeDuplicated = geoNaFormCardModel.getFormCard().isInternalRepeatibleForm(); boolean canBeDuplicated = geoNaFormCardModel.getFormCard().isInternalRepeatibleForm();
TreeItem child = createAndAddChild(listParent.get(0), geoNaFormCardModel, canBeDuplicated, false, TreeItem child = createAndAddChild(listParent.get(0), profile.getSectionTitle(), geoNaFormCardModel, canBeDuplicated, false,
jsonSectionFullPath); jsonSectionFullPath);
} }
@ -124,10 +129,10 @@ public class TreeItemPanel {
return jsonSectionFullPath; return jsonSectionFullPath;
} }
public TreeItem createAndAddChild(TreeItem parent, GeoNaFormCardModel geoNaFormCardModel, boolean canBeDuplicated, public TreeItem createAndAddChild(TreeItem parent, String nodeHTML, GeoNaFormCardModel geoNaFormCardModel, boolean canBeDuplicated,
boolean canBeDeleted, String jsonSectionFullPath) { boolean canBeDeleted, String jsonSectionFullPath) {
GWT.log("Creating and adding child to parent: " + parent.getText()); GWT.log("Creating and adding child to parent: " + parent.getText());
TreeItem newChild = new TreeItem(new NodeItem(parent, geoNaFormCardModel, canBeDuplicated, canBeDeleted, jsonSectionFullPath)); TreeItem newChild = new TreeItem(new NodeItem(parent, nodeHTML, geoNaFormCardModel, canBeDuplicated, canBeDeleted, jsonSectionFullPath));
parent.addItem(newChild); parent.addItem(newChild);
fillItemParents(jsonSectionFullPath, newChild); fillItemParents(jsonSectionFullPath, newChild);

View File

@ -1,5 +1,6 @@
package org.gcube.portlets.user.geoportaldataentry.shared; package org.gcube.portlets.user.geoportaldataentry.shared;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -11,11 +12,19 @@ import java.util.List;
* Jul 6, 2022 * Jul 6, 2022
* @param <T> the generic type * @param <T> the generic type
*/ */
public class TNode<T> { public class TNode<T> implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7319055031988865761L;
private T data; private T data;
private List<TNode<T>> children; private List<TNode<T>> children;
private TNode<T> parent; private TNode<T> parent;
public TNode() {
}
/** /**
* Instantiates a new node. * Instantiates a new node.
* *