package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.form; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.metadata.MetaDataFieldSkeleton; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.metadata.MetadataFieldWrapper; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.ControlGroup; import com.github.gwtbootstrap.client.ui.ControlLabel; import com.github.gwtbootstrap.client.ui.Label; 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.event.shared.HandlerManager; 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.VerticalPanel; import com.google.gwt.user.client.ui.Widget; /** * The Class MetaDataField. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * * Jun 10, 2019 */ public class MetaDataField extends Composite { private static MetaDataFieldUiBinder uiBinder = GWT.create(MetaDataFieldUiBinder.class); @UiField VerticalPanel panelMetaDataFieldsSkeleton; @UiField Label repeatabilityLabel; //@UiField ControlGroup cgMetaDataFieldSkeletonFields; @UiField Button addFieldButton; @UiField Button removeFieldButton; private List listOfMetadataFields = new ArrayList(); private MetadataFieldWrapper fieldWrapper; private HandlerManager eventBus; /** * The Interface MetaDataFieldUiBinder. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * * Jun 10, 2019 */ interface MetaDataFieldUiBinder extends UiBinder { } /** * Instantiates a new meta data field. * * @param field the field * @param eventBus the event bus * @throws Exception the exception */ public MetaDataField(final MetadataFieldWrapper field, HandlerManager eventBus) throws Exception { initWidget(uiBinder.createAndBindUi(this)); this.fieldWrapper = field; this.eventBus = eventBus; addNewOccurrenceOfField(); checkAllowedAddField(); checkAllowedRemoveField(); addFieldButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { addNewOccurrenceOfField(); checkAllowedAddField(); checkAllowedRemoveField(); } }); removeFieldButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { removeLatestOccurrenceOfFiled(); checkAllowedAddField(); checkAllowedRemoveField(); } }); //The field is repeatable if(field.getMaxOccurs()>1) { repeatabilityLabel.setVisible(true); repeatabilityLabel.setText(field.getFieldName()+" repeatability"); } } /** * Check allowed remove field. */ private void checkAllowedRemoveField() { boolean removeCond = fieldWrapper.getMaxOccurs()>1 && listOfMetadataFields.size()>1; removeFieldButton.setVisible(removeCond); } /** * Checks if is allowed add occurrence. */ private void checkAllowedAddField() { boolean repeatibilityCond = fieldWrapper.getMaxOccurs()>1 && listOfMetadataFields.size() getListOfMetadataFields() { return listOfMetadataFields; } }