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

279 lines
6.9 KiB
Java
Raw Normal View History

package org.gcube.portlets.user.geoportaldataentry.client.ui.tree;
2022-07-05 15:51:43 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel;
2022-07-07 12:36:08 +02:00
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;
2022-07-04 16:34:15 +02:00
import com.github.gwtbootstrap.client.ui.Button;
2022-07-07 12:36:08 +02:00
import com.github.gwtbootstrap.client.ui.Icon;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.Widget;
public class NodeItem extends Composite {
private static NodeItemUiBinder uiBinder = GWT.create(NodeItemUiBinder.class);
interface NodeItemUiBinder extends UiBinder<Widget, NodeItem> {
}
2022-07-07 12:36:08 +02:00
@UiField
Icon iconField;
@UiField
HTML htmlNode;
@UiField
Button buttonAdd;
@UiField
Button buttonRemove;
2022-07-05 15:51:43 +02:00
private GeoNaFormCardModel geoNaFormCardModel;
private TreeItem parentTreeItem;
private String jsonSectionFullPath;
2022-07-06 11:06:35 +02:00
private boolean canBeDuplicated;
private boolean canBeDeleted;
2022-07-07 12:36:08 +02:00
private boolean isRoot = false;
private MetadataFormCardEventHandler formCardEventHandler = new MetadataFormCardEventHandler();
2022-07-08 16:54:52 +02:00
private String nodeHTMLLabel;
public NodeItem(TreeItem parent, String nodeHTMLLabel, GeoNaFormCardModel geoNaFormCardModel,
boolean canBeDuplicated, boolean canBeDeleted, String jsonSectionFullPath) {
initWidget(uiBinder.createAndBindUi(this));
2022-07-05 15:51:43 +02:00
this.geoNaFormCardModel = geoNaFormCardModel;
this.parentTreeItem = parent;
this.jsonSectionFullPath = jsonSectionFullPath;
2022-07-06 11:06:35 +02:00
this.canBeDuplicated = canBeDuplicated;
this.canBeDeleted = canBeDeleted;
2022-07-08 16:54:52 +02:00
this.nodeHTMLLabel = nodeHTMLLabel;
htmlNode.setHTML(this.nodeHTMLLabel);
2022-07-05 15:51:43 +02:00
buttonAdd.setVisible(false);
buttonRemove.setVisible(false);
if (canBeDuplicated) {
buttonAdd.setIcon(IconType.COPY);
2022-07-07 12:36:08 +02:00
// buttonAdd.getElement().getStyle().setProperty("pointerEvents", "none");
2022-07-05 15:51:43 +02:00
buttonAdd.getElement().getStyle().setProperty("textDecoration", "none");
buttonAdd.getElement().getStyle().setColor("#555");
buttonAdd.setVisible(true);
}
if (canBeDeleted) {
buttonRemove.setIcon(IconType.TRASH);
2022-07-07 12:36:08 +02:00
// buttonRemove.getElement().getStyle().setProperty("pointerEvents", "none");
2022-07-05 15:51:43 +02:00
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
}
});
2022-07-08 16:54:52 +02:00
// Is not the root node
if (geoNaFormCardModel != null) {
2022-07-07 12:36:08 +02:00
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() {
2022-07-08 16:54:52 +02:00
if (isRoot) {
2022-07-07 12:36:08 +02:00
return true;
2022-07-08 11:44:48 +02:00
}
2022-07-08 16:54:52 +02:00
2022-07-07 12:36:08 +02:00
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);
2022-07-07 18:21:34 +02:00
iconField.getElement().removeClassName("red-text");
iconField.getElement().addClassName("green-text");
htmlNode.getElement().removeClassName("red-text");
htmlNode.getElement().addClassName("green-text");
2022-07-07 12:36:08 +02:00
} else {
iconField.setIcon(IconType.MINUS_SIGN);
2022-07-07 18:21:34 +02:00
iconField.getElement().removeClassName("green-text");
iconField.getElement().addClassName("red-text");
htmlNode.getElement().removeClassName("green-text");
htmlNode.getElement().addClassName("red-text");
2022-07-07 12:36:08 +02:00
}
}
/**
* Sets the tab status.
*/
private void setNodeStatus() {
boolean isValid = validateForm();
if (isValid) {
iconField.setIcon(IconType.OK_SIGN);
2022-07-07 18:21:34 +02:00
iconField.getElement().removeClassName("red-text");
iconField.getElement().addClassName("green-text");
htmlNode.getElement().removeClassName("red-text");
htmlNode.getElement().addClassName("green-text");
2022-07-07 12:36:08 +02:00
} else {
iconField.setIcon(IconType.MINUS_SIGN);
2022-07-07 18:21:34 +02:00
iconField.getElement().removeClassName("green-text");
iconField.getElement().addClassName("red-text");
htmlNode.getElement().removeClassName("green-text");
htmlNode.getElement().addClassName("red-text");
2022-07-07 12:36:08 +02:00
}
}
public boolean isRoot() {
return isRoot;
}
public void setRoot(boolean isRoot) {
this.isRoot = isRoot;
}
private void resetNodeStatus() {
iconField.setIcon(null);
}
2022-07-05 15:51:43 +02:00
public TreeItem getParentTreeItem() {
return parentTreeItem;
}
public GeoNaFormCardModel getGeoNaFormCardModel() {
return geoNaFormCardModel;
}
/**
* Gets the json section full path.
*
* @return the json section full path
*/
public String getJsonSectionFullPath() {
return jsonSectionFullPath;
}
2022-07-06 11:06:35 +02:00
public boolean isCanBeDeleted() {
return canBeDeleted;
}
public boolean isCanBeDuplicated() {
return canBeDuplicated;
}
2022-07-07 12:36:08 +02:00
2022-07-06 17:12:55 +02:00
public HTML getHtmlNode() {
return htmlNode;
}
2022-07-06 11:06:35 +02:00
2022-07-08 16:54:52 +02:00
public String getNodeHTMLLabel() {
return nodeHTMLLabel;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("NodeItem [jsonSectionFullPath=");
builder.append(jsonSectionFullPath);
builder.append(", canBeDuplicated=");
builder.append(canBeDuplicated);
builder.append(", canBeDeleted=");
builder.append(canBeDeleted);
builder.append(", isRoot=");
builder.append(isRoot);
builder.append(", nodeHTMLLabel=");
builder.append(nodeHTMLLabel);
builder.append("]");
return builder.toString();
}
}