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

144 lines
3.4 KiB
Java

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<CreateMetadataForm> listForms = new ArrayList<CreateMetadataForm>();
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<CreateMetadataForm> 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);
}
}