geoportal-data-entry-app/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/form/GeonaDataEntryMainForm.java

380 lines
9.5 KiB
Java
Raw Normal View History

2021-08-04 17:11:46 +02:00
package org.gcube.portlets.user.geoportaldataentry.client.ui.form;
2020-10-08 16:06:58 +02:00
2022-07-07 18:21:34 +02:00
import java.util.Arrays;
2020-10-09 16:34:23 +02:00
import java.util.LinkedHashMap;
2022-07-08 16:38:45 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsEvent;
2022-07-05 15:51:43 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.events.TreeItemEvent;
import org.gcube.portlets.user.geoportaldataentry.client.events.TreeItemEvent.ACTION;
2020-10-12 13:04:01 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel;
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.MetadataFormCard;
2022-07-07 12:36:08 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.ui.tree.NodeItem;
2022-07-05 15:51:43 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.ui.tree.TreeItemPanel;
2022-07-08 11:44:48 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.TreeVisitUtil;
2020-10-12 17:42:55 +02:00
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
2022-07-07 18:21:34 +02:00
import org.gcube.portlets.user.geoportaldataentry.shared.Tree_Node;
2020-10-09 16:34:23 +02:00
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm;
import com.github.gwtbootstrap.client.ui.AlertBlock;
import com.github.gwtbootstrap.client.ui.Button;
2022-03-04 14:40:43 +01:00
import com.github.gwtbootstrap.client.ui.FormActions;
2022-07-05 15:51:43 +02:00
import com.github.gwtbootstrap.client.ui.NavList;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
2020-10-08 16:06:58 +02:00
import com.google.gwt.core.client.GWT;
2020-10-12 16:46:17 +02:00
import com.google.gwt.event.dom.client.ClickEvent;
2022-07-05 15:51:43 +02:00
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerManager;
2020-10-08 16:06:58 +02:00
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
2020-10-12 16:46:17 +02:00
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Timer;
2020-10-08 16:06:58 +02:00
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
2022-07-05 15:51:43 +02:00
import com.google.gwt.user.client.ui.ScrollPanel;
2022-07-07 12:36:08 +02:00
import com.google.gwt.user.client.ui.TreeItem;
2020-10-08 16:06:58 +02:00
import com.google.gwt.user.client.ui.Widget;
2022-03-04 14:40:43 +01:00
/**
* The Class GeonaDataEntryMainForm.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Mar 4, 2022
*/
2020-10-08 16:06:58 +02:00
public class GeonaDataEntryMainForm extends Composite {
private static GeonaDataEntryMainFormUiBinder uiBinder = GWT.create(GeonaDataEntryMainFormUiBinder.class);
2022-03-04 14:40:43 +01:00
/**
* The Interface GeonaDataEntryMainFormUiBinder.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Mar 4, 2022
*/
2020-10-08 16:06:58 +02:00
interface GeonaDataEntryMainFormUiBinder extends UiBinder<Widget, GeonaDataEntryMainForm> {
}
2022-03-04 14:40:43 +01:00
2022-07-07 18:21:34 +02:00
private Tree_Node<GeoNaFormCardModel> nodes = new Tree_Node<GeoNaFormCardModel>();
2020-10-08 16:06:58 +02:00
@UiField
2020-10-09 16:34:23 +02:00
HTMLPanel mainHTMLPanel;
2022-03-04 14:40:43 +01:00
2022-07-05 15:51:43 +02:00
@UiField
ScrollPanel treePanel;
@UiField
NavList navbarTree;
@UiField
ScrollPanel inputPanel;
@UiField
AlertBlock alertFormAction;
2022-03-04 14:40:43 +01:00
2022-07-05 15:51:43 +02:00
@UiField
Button duplicateSelected;
@UiField
Button removeSelected;
@UiField
Button buttonSave;
2022-03-04 14:40:43 +01:00
@UiField
FormActions formActions;
private LinkedHashMap<String, MetadataFormCard> mapForms = new LinkedHashMap<String, MetadataFormCard>();
private HandlerManager appManagerBus;
2022-05-20 12:31:58 +02:00
private String profileID;
2022-07-05 15:51:43 +02:00
private TreeItemPanel treeItemPanel;
2022-07-07 12:36:08 +02:00
private boolean canSave = true;
2022-03-04 14:40:43 +01:00
/**
* Instantiates a new geona data entry main form.
*
* @param appManagerBus the app manager bus
*/
public GeonaDataEntryMainForm(HandlerManager appManagerBus) {
2020-10-08 16:06:58 +02:00
initWidget(uiBinder.createAndBindUi(this));
this.appManagerBus = appManagerBus;
2022-07-05 15:51:43 +02:00
duplicateSelected.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
appManagerBus.fireEvent(new TreeItemEvent(null, ACTION.DUPLICATE));
}
});
removeSelected.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
appManagerBus.fireEvent(new TreeItemEvent(null, ACTION.DELETE));
}
});
2020-10-08 16:06:58 +02:00
}
2022-03-04 14:40:43 +01:00
/**
2022-07-05 15:51:43 +02:00
* Adds the tree.
2022-03-04 14:40:43 +01:00
*
2022-07-05 15:51:43 +02:00
* @param treeItemPanel the tree item panel
2022-03-04 14:40:43 +01:00
*/
2022-07-05 15:51:43 +02:00
public void addTree(TreeItemPanel treeItemPanel) {
this.treeItemPanel = treeItemPanel;
navbarTree.setVisible(true);
treePanel.add(treeItemPanel.getTree());
2020-10-12 13:04:01 +02:00
}
2022-03-04 14:40:43 +01:00
2022-07-05 15:51:43 +02:00
/**
* Gets the tree item panel.
*
* @return the tree item panel
*/
public TreeItemPanel getTreeItemPanel() {
return treeItemPanel;
}
/**
* Sets the selected form.
*
* @param form the new selected form
*/
public void setSelectedForm(CreateMetadataForm form) {
inputPanel.clear();
inputPanel.add(form);
}
2022-03-04 14:40:43 +01:00
/**
* Reset.
*/
2022-07-06 11:06:35 +02:00
public void resetUI() {
2022-07-05 15:51:43 +02:00
navbarTree.setVisible(false);
mapForms.clear();
2022-07-07 12:36:08 +02:00
// mainTabPanel.clear();
2022-07-06 11:06:35 +02:00
inputPanel.clear();
treePanel.clear();
2022-07-07 12:36:08 +02:00
// listTabs.clear();
}
2022-07-07 12:36:08 +02:00
2022-03-04 14:40:43 +01:00
/**
2022-07-06 11:06:35 +02:00
* Reset.
2022-03-04 14:40:43 +01:00
*/
2022-07-06 11:06:35 +02:00
public void resetInputPanel() {
inputPanel.clear();
2020-10-09 16:34:23 +02:00
}
2022-03-04 14:40:43 +01:00
2022-07-07 12:36:08 +02:00
public void validateFormsIntoTree(TreeItem root) {
GWT.log("validateFormsIntoTree called");
if (root == null) {
return;
}
GWT.log("validateFormsIntoTree called for: " + root.getText());
for (int i = 0; i < root.getChildCount(); i++) {
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.isRoot()) {
return;
}
2022-07-07 12:36:08 +02:00
boolean isValid = node.validateForm();
GWT.log("validateFormsIntoTree called for: " + root.getText() + " is valid: " + isValid);
2022-07-07 18:21:34 +02:00
node.setValidCard(isValid);
2022-07-07 12:36:08 +02:00
if (!isValid) {
canSave = false;
}
}
2022-07-06 11:06:35 +02:00
2022-03-04 14:40:43 +01:00
/**
* Save data.
*
* @param e the e
*/
2020-10-12 16:46:17 +02:00
@UiHandler("buttonSave")
2022-03-04 14:40:43 +01:00
void saveData(ClickEvent e) {
2022-07-07 12:36:08 +02:00
canSave = true;
2022-07-08 11:44:48 +02:00
final TreeItem root = treeItemPanel.getRoot();
2022-07-07 12:36:08 +02:00
validateFormsIntoTree(root);
2022-07-07 18:21:34 +02:00
2022-03-04 14:40:43 +01:00
if (canSave) {
2022-07-07 18:21:34 +02:00
2022-07-08 11:44:48 +02:00
Tree_Node<GeoNaFormDataObject> treeNode = buildTree(root);
GWT.log("Tree node built correctly!");
//System.out.println(treeNode);
2022-07-07 18:21:34 +02:00
2022-07-07 12:36:08 +02:00
// for (String metadataType : mapForms.keySet()) {
// MetadataFormCard card = mapForms.get(metadataType);
// List<GenericDatasetBean> listGDB = new ArrayList<GenericDatasetBean>(card.getListForms().size());
// for (CreateMetadataForm form : card.getListForms()) {
// listGDB.add(form.getFormDataBean());
//
// }
// listGeonaFormObjects.add(new GeoNaFormDataObject(listGDB, card.getGeonaFormModel().getGcubeProfile()));
// }
// appManagerBus.fireEvent(new SaveGeonaDataFormsEvent(profileID, listGeonaFormObjects));
2022-07-08 16:38:45 +02:00
appManagerBus.fireEvent(new SaveGeonaDataFormsEvent(profileID, treeNode));
2022-07-08 11:44:48 +02:00
TreeVisitUtil.preOrderVisit(treeNode);
2022-07-07 12:36:08 +02:00
showAlertOnSaveAction("Andiamo a salvare", AlertType.INFO, true);
2022-03-04 14:40:43 +01:00
} else {
showAlertOnSaveAction("Detected errors, please fix it/them", AlertType.ERROR, true);
2020-10-12 17:42:55 +02:00
}
2022-03-04 14:40:43 +01:00
// Window.alert("I can save: "+listGeonaFormObjects);
}
2022-07-07 18:21:34 +02:00
public <T> void printTree(Tree_Node<T> node) {
if(node==null) {
return;
}
System.out.println(node);
for (Tree_Node<T> children : node.getChildren()) {
printTree(children);
}
}
private Tree_Node<GeoNaFormDataObject> buildTree(TreeItem root) {
GWT.log("buildTree called");
if (root == null) {
GWT.log("buildTree returns, node is null");
return null;
}
GWT.log("buildTree called on: " + root.getText());
// Cloning
2022-07-08 11:44:48 +02:00
NodeItem rootNodeItem = (NodeItem) root.getWidget();
GWT.log("buildTree called on: " + root.getText() + ", node json section: "+rootNodeItem.getJsonSectionFullPath());
Tree_Node<GeoNaFormDataObject> tNode;
//Children
if(!rootNodeItem.isRoot()) {
GeoNaFormCardModel nodeCard = rootNodeItem.getGeoNaFormCardModel();
GeoNaFormDataObject gfdo = new GeoNaFormDataObject(Arrays.asList(nodeCard.getMetadataForm().getFormDataBean()), nodeCard.getGcubeProfile());
tNode = new Tree_Node<GeoNaFormDataObject>(nodeCard.getGcubeProfile().getSectionTitle(), gfdo);
}else {
//root of the tree
tNode = new Tree_Node<GeoNaFormDataObject>(root.getText(), null);
2022-07-08 16:38:45 +02:00
tNode.setRoot(true);
2022-07-08 11:44:48 +02:00
}
2022-07-07 18:21:34 +02:00
// Total children count
int total = root.getChildCount();
// All the children
for (int i = 0; i < total; i++) {
Tree_Node<GeoNaFormDataObject> childCloned = buildTree(root.getChild(i));
tNode.addChild(childCloned);
}
return tNode;
}
2022-03-04 14:40:43 +01:00
/**
* Show alert on save action.
*
* @param text the text
* @param type the type
* @param hideAfterAWhile the hide after A while
*/
public void showAlertOnSaveAction(String text, AlertType type, boolean hideAfterAWhile) {
// Window.alert("Called alertOnCreate");
alertFormAction.setText(text);
alertFormAction.setType(type);
alertFormAction.setVisible(true);
2022-03-04 14:40:43 +01:00
// goBackButtonSecondStep.setEnabled(true);
2022-03-04 14:40:43 +01:00
if (hideAfterAWhile) {
// hide after some seconds
Timer t = new Timer() {
@Override
public void run() {
alertFormAction.setVisible(false);
}
};
t.schedule(10000);
}
2020-10-12 16:46:17 +02:00
}
2022-03-04 14:40:43 +01:00
2022-07-05 15:51:43 +02:00
/**
* Enable button save.
*
* @param enabled the enabled
*/
public void enableButtonDuplicateSection(boolean enabled) {
duplicateSelected.setEnabled(enabled);
}
/**
* Enable button remove section.
*
* @param enabled the enabled
*/
public void enableButtonRemoveSection(boolean enabled) {
removeSelected.setEnabled(enabled);
}
2022-03-04 14:40:43 +01:00
/**
* Enable button save.
*
* @param enabled the enabled
*/
public void enableButtonSave(boolean enabled) {
buttonSave.setEnabled(enabled);
}
2022-03-04 14:40:43 +01:00
2020-10-09 16:34:23 +02:00
/**
* Sets the ative after.
*
* @param index the index
2022-03-04 14:40:43 +01:00
* @param bool the bool
2020-10-09 16:34:23 +02:00
*/
2022-03-04 14:40:43 +01:00
public void setAtiveAfter(int index, boolean bool) {
2020-10-09 16:34:23 +02:00
// if(listTabs.size()<index) {
// for (int i = index; i < listTabs.size(); i++) {
// listTabs.get(i).setEnabled(bool);
// }
// }
2020-10-08 16:06:58 +02:00
}
2022-03-04 14:40:43 +01:00
/**
* Sets the visible form actions.
*
* @param bool the new visible form actions
*/
public void setVisibleFormActions(boolean bool) {
formActions.setVisible(bool);
}
2020-10-08 16:06:58 +02:00
}