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; import com.github.gwtbootstrap.client.ui.Tab; import com.github.gwtbootstrap.client.ui.constants.IconType; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; public class MetadataFormCard { private String heading; private Tab tab; private boolean repeatible; private List listForms = new ArrayList(); private MetadataFormCardEventHandler formCardEventHandler = new MetadataFormCardEventHandler(); private class MetadataFormCardEventHandler implements GenericFormEventsListener{ @Override public void onFormDataValid(GenericDatasetBean genericDatasetBean) { setTabStatus(); } @Override public void onFormDataEdit() { resetTabStatus(); } @Override public void onFormAborted() { // TODO Auto-generated method stub } @Override public void onValidationError(Throwable throwable, String errorMsg) { // TODO Auto-generated method stub } } public MetadataFormCard(Tab tab, CreateMetadataForm createMetadataForm, boolean repeatible) { this.tab = tab; this.repeatible = repeatible; this.buildCard(createMetadataForm); createMetadataForm.addListener(formCardEventHandler); } 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) { CreateMetadataForm newForm = new CreateMetadataForm(createMetadataForm.getMetadataProfiles()); addNewForm(newForm); } }); } addNewForm(createMetadataForm); } private void addNewForm(final CreateMetadataForm newForm) { tab.add(newForm); listForms.add(newForm); if(listForms.size()>1) { final Button buttonRemoveLatestForm = new Button("Remove"); buttonRemoveLatestForm.setIcon(IconType.TRASH); tab.add(buttonRemoveLatestForm); buttonRemoveLatestForm.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { tab.remove(newForm); listForms.remove(newForm); tab.remove(buttonRemoveLatestForm); } }); } } public List getListForms() { return listForms; } public String getHeading() { return heading; } /** * Validate form. * * @return true, if successful */ public boolean validateForm() { for (CreateMetadataForm createMetadataForm : listForms) { if(!createMetadataForm.isFormDataValid()) return false; } return true; } public void setValidCard(boolean bool) { if(bool) tab.setIcon(IconType.OK_SIGN); else tab.setIcon(IconType.REMOVE_SIGN); } private void setTabStatus() { boolean isValid = validateForm(); if(isValid) tab.setIcon(IconType.OK_SIGN); else tab.setIcon(IconType.REMOVE_SIGN); } private void resetTabStatus() { tab.setIcon(null); } }