Working on Feature #11331 Field repeatability
Updated pom version at 1.6.0 git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/widgets/ckan-metadata-publisher-widget@179748 82a268e6-3cf1-43bd-a215-b396298e98cfmigrate-to-catalogue-util-library_#19764
parent
849fe5e104
commit
16beccba5d
@ -0,0 +1,160 @@
|
||||
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<MetaDataFieldSkeleton> listOfMetadataFields = new ArrayList<MetaDataFieldSkeleton>();
|
||||
|
||||
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<Widget, MetaDataField> {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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()<fieldWrapper.getMaxOccurs();
|
||||
addFieldButton.setVisible(repeatibilityCond);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Removes the latest occurrence of filed.
|
||||
*/
|
||||
private void removeLatestOccurrenceOfFiled() {
|
||||
int size = listOfMetadataFields.size();
|
||||
MetaDataFieldSkeleton skeleton = listOfMetadataFields.get(size-1);
|
||||
try {
|
||||
panelMetaDataFieldsSkeleton.remove(skeleton);
|
||||
listOfMetadataFields.remove(size-1);
|
||||
}catch (Exception e) {
|
||||
GWT.log("Error: ",e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the new occurrence of field.
|
||||
*/
|
||||
private void addNewOccurrenceOfField() {
|
||||
try {
|
||||
MetaDataFieldSkeleton fieldWidget = new MetaDataFieldSkeleton(fieldWrapper, eventBus);
|
||||
listOfMetadataFields.add(fieldWidget);
|
||||
panelMetaDataFieldsSkeleton.add(fieldWidget);
|
||||
} catch (Exception e) {
|
||||
GWT.log("Error: ",e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of metadata fields.
|
||||
*
|
||||
* @return the list of metadata fields
|
||||
*/
|
||||
public List<MetaDataFieldSkeleton> getListOfMetadataFields() {
|
||||
return listOfMetadataFields;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
|
||||
xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
||||
xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
|
||||
<ui:style>
|
||||
.important {
|
||||
font-weight: bold;
|
||||
}
|
||||
</ui:style>
|
||||
<g:HTMLPanel>
|
||||
<g:VerticalPanel
|
||||
ui:field="panelMetaDataFieldsSkeleton" width="100%">
|
||||
</g:VerticalPanel>
|
||||
<b:ControlGroup>
|
||||
<b:Label ui:field="repeatabilityLabel" visible="false">Repeatability</b:Label>
|
||||
<b:Button icon="MINUS_SIGN" title="Remove Latest Field"
|
||||
ui:field="removeFieldButton" visible="false"></b:Button>
|
||||
<b:Button icon="PLUS_SIGN" title="Add Another Field"
|
||||
ui:field="addFieldButton" visible="false"></b:Button>
|
||||
</b:ControlGroup>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
Loading…
Reference in New Issue