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

266 lines
6.4 KiB
Java
Raw Normal View History

2020-10-12 13:04:01 +02:00
package org.gcube.portlets.user.geoportaldataentry.client.ui.card;
import java.util.ArrayList;
import java.util.List;
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;
2020-10-12 16:46:17 +02:00
import com.github.gwtbootstrap.client.ui.Tab;
2020-10-12 13:04:01 +02:00
import com.github.gwtbootstrap.client.ui.constants.IconType;
2020-12-01 18:15:13 +01:00
import com.google.gwt.core.client.GWT;
2020-10-12 13:04:01 +02:00
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerManager;
2020-12-01 18:15:13 +01:00
import com.google.gwt.user.client.Window;
2020-12-18 11:37:23 +01:00
import com.google.gwt.user.client.ui.FlowPanel;
2020-10-12 13:04:01 +02:00
2020-10-12 17:42:55 +02:00
/**
* The Class MetadataFormCard.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Oct 12, 2020
*/
2020-10-12 16:46:17 +02:00
public class MetadataFormCard {
2020-10-12 13:04:01 +02:00
2020-10-12 17:42:55 +02:00
/** The heading. */
2020-10-12 13:04:01 +02:00
private String heading;
2020-10-12 17:42:55 +02:00
/** The tab. */
2020-10-12 16:46:17 +02:00
private Tab tab;
2020-10-12 17:42:55 +02:00
/** The repeatible. */
2020-10-12 13:04:01 +02:00
private boolean repeatible;
2020-10-12 17:42:55 +02:00
/** The list forms. */
2020-10-12 13:04:01 +02:00
private List<CreateMetadataForm> listForms = new ArrayList<CreateMetadataForm>();
2020-10-12 17:42:55 +02:00
/** The form card event handler. */
2020-10-12 16:46:17 +02:00
private MetadataFormCardEventHandler formCardEventHandler = new MetadataFormCardEventHandler();
2020-10-12 17:42:55 +02:00
/** The geona form model. */
private GeoNaFormCardModel geonaFormModel;
2020-10-12 16:46:17 +02:00
private HandlerManager appManagerBus;
2020-12-01 18:15:13 +01:00
private Integer maxFormRepeatability;
2020-12-18 11:37:23 +01:00
private FlowPanel tabContainer = new FlowPanel();
2020-12-01 18:15:13 +01:00
2020-10-12 17:42:55 +02:00
/**
* The Class MetadataFormCardEventHandler.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Oct 12, 2020
*/
2020-10-12 16:46:17 +02:00
private class MetadataFormCardEventHandler implements GenericFormEventsListener{
2020-10-12 17:42:55 +02:00
/**
* On form data valid.
*
* @param genericDatasetBean the generic dataset bean
*/
2020-10-12 16:46:17 +02:00
@Override
public void onFormDataValid(GenericDatasetBean genericDatasetBean) {
setTabStatus();
}
2020-10-12 17:42:55 +02:00
/**
* On form data edit.
*/
2020-10-12 16:46:17 +02:00
@Override
public void onFormDataEdit() {
resetTabStatus();
}
2020-10-12 17:42:55 +02:00
/**
* On form aborted.
*/
2020-10-12 16:46:17 +02:00
@Override
public void onFormAborted() {
// TODO Auto-generated method stub
}
2020-10-12 17:42:55 +02:00
/**
* On validation error.
*
* @param throwable the throwable
* @param errorMsg the error msg
*/
2020-10-12 16:46:17 +02:00
@Override
public void onValidationError(Throwable throwable, String errorMsg) {
// TODO Auto-generated method stub
}
}
2020-10-12 17:42:55 +02:00
/**
* Instantiates a new metadata form card.
*
* @param tab the tab
* @param geonaFormModel the geona form model
* @param appManagerBus the app manager bus
2020-10-12 17:42:55 +02:00
*/
public MetadataFormCard(Tab tab, GeoNaFormCardModel geonaFormModel, HandlerManager appManagerBus) {
2020-10-12 13:04:01 +02:00
this.tab = tab;
2020-10-12 17:42:55 +02:00
this.geonaFormModel = geonaFormModel;
this.appManagerBus = appManagerBus;
2020-10-12 17:42:55 +02:00
this.repeatible = geonaFormModel.getFormCardTitle().isInternalRepeatibleForm();
2020-12-01 18:15:13 +01:00
this.maxFormRepeatability = geonaFormModel.getFormCardTitle().getMaxFormRepeatability()!=null?geonaFormModel.getFormCardTitle().getMaxFormRepeatability():Integer.MAX_VALUE;
2020-10-12 17:42:55 +02:00
this.buildCard(geonaFormModel.getMetadataForm());
2020-12-01 18:15:13 +01:00
//geonaFormModel.getMetadataForm().addListener(formCardEventHandler);
2020-10-12 13:04:01 +02:00
}
2020-10-12 17:42:55 +02:00
/**
* Builds the card.
*
* @param createMetadataForm the create metadata form
*/
2020-10-12 13:04:01 +02:00
private void buildCard(final CreateMetadataForm createMetadataForm) {
if(repeatible) {
Button buttonAddNew = new Button("Add New...");
tab.add(buttonAddNew);
buttonAddNew.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
2020-12-01 18:15:13 +01:00
if(listForms.size() < maxFormRepeatability) {
CreateMetadataForm newForm = new CreateMetadataForm(createMetadataForm.getMetadataProfiles(),appManagerBus);
//newForm.addListener(formCardEventHandler);
addNewForm(newForm);
}else
Window.alert("Maximun number of data reached for "+geonaFormModel.getFormCardTitle().getTitle());
2020-10-12 17:42:55 +02:00
//newForm.getCreateButton().setFocus(true);
2020-10-12 13:04:01 +02:00
}
});
}
2020-12-18 11:37:23 +01:00
tab.add(tabContainer);
2020-10-12 13:04:01 +02:00
addNewForm(createMetadataForm);
}
2020-10-12 17:42:55 +02:00
/**
* Adds the new form.
*
* @param newForm the new form
*/
2020-10-12 13:04:01 +02:00
private void addNewForm(final CreateMetadataForm newForm) {
2020-12-18 11:37:23 +01:00
tabContainer.insert(newForm,0);
2020-10-12 13:04:01 +02:00
listForms.add(newForm);
if(listForms.size()>1) {
final Button buttonRemoveLatestForm = new Button("Remove");
buttonRemoveLatestForm.setIcon(IconType.TRASH);
2020-12-18 11:37:23 +01:00
tabContainer.insert(buttonRemoveLatestForm,1);
2020-10-12 13:04:01 +02:00
buttonRemoveLatestForm.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
2020-12-18 11:37:23 +01:00
tabContainer.remove(newForm);
2020-10-12 13:04:01 +02:00
listForms.remove(newForm);
2020-12-18 11:37:23 +01:00
tabContainer.remove(buttonRemoveLatestForm);
2020-10-12 13:04:01 +02:00
}
});
}
2020-12-01 18:15:13 +01:00
newForm.addListener(formCardEventHandler);
2020-10-12 13:04:01 +02:00
}
2020-10-12 17:42:55 +02:00
/**
* Gets the list forms.
*
* @return the list forms
*/
2020-10-12 13:04:01 +02:00
public List<CreateMetadataForm> getListForms() {
return listForms;
}
2020-10-12 17:42:55 +02:00
/**
* Gets the heading.
*
* @return the heading
*/
2020-10-12 13:04:01 +02:00
public String getHeading() {
return heading;
}
/**
* Validate form.
*
* @return true, if successful
*/
public boolean validateForm() {
for (CreateMetadataForm createMetadataForm : listForms) {
2020-12-01 18:15:13 +01:00
boolean isFormDataValid = createMetadataForm.isFormDataValid();
GWT.log("Is form data valid: "+isFormDataValid);
if(!isFormDataValid) {
2020-10-12 13:04:01 +02:00
return false;
2020-12-01 18:15:13 +01:00
}
2020-10-12 13:04:01 +02:00
}
return true;
}
2020-10-12 17:42:55 +02:00
/**
* Sets the valid card.
*
* @param bool the new valid card
*/
2020-10-12 16:46:17 +02:00
public void setValidCard(boolean bool) {
if(bool) {
2020-10-12 16:46:17 +02:00
tab.setIcon(IconType.OK_SIGN);
tab.asWidget().getElement().removeClassName("red-text");
tab.asWidget().getElement().addClassName("green-text");
}
else {
tab.setIcon(IconType.MINUS_SIGN);
2020-12-01 18:15:13 +01:00
tab.asWidget().getElement().removeClassName("green-text");
tab.asWidget().getElement().addClassName("red-text");
}
2020-10-12 16:46:17 +02:00
}
2020-10-12 17:42:55 +02:00
/**
* Sets the tab status.
*/
2020-10-12 16:46:17 +02:00
private void setTabStatus() {
boolean isValid = validateForm();
if(isValid) {
2020-10-12 16:46:17 +02:00
tab.setIcon(IconType.OK_SIGN);
tab.asWidget().getElement().removeClassName("red-text");
tab.asWidget().getElement().addClassName("green-text");
}
else {
2020-10-12 17:42:55 +02:00
tab.setIcon(IconType.MINUS_SIGN);
2020-12-01 18:15:13 +01:00
tab.asWidget().getElement().removeClassName("red-text");
tab.asWidget().getElement().addClassName("red-text");
}
2020-10-12 16:46:17 +02:00
}
2020-10-12 17:42:55 +02:00
/**
* Reset tab status.
*/
2020-10-12 16:46:17 +02:00
private void resetTabStatus() {
tab.setIcon(null);
}
2020-10-12 17:42:55 +02:00
public GeoNaFormCardModel getGeonaFormModel() {
return geonaFormModel;
}
2020-10-12 13:04:01 +02:00
}