2020-10-01 15:56:27 +02:00
package org.gcube.portlets.widgets.mpformbuilder.client.form.generic ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
import org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderService ;
import org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderServiceAsync ;
import org.gcube.portlets.widgets.mpformbuilder.client.events.CloseCreationFormEvent ;
import org.gcube.portlets.widgets.mpformbuilder.client.events.CloseCreationFormEventHandler ;
import org.gcube.portlets.widgets.mpformbuilder.client.events.DeleteCustomFieldEvent ;
import org.gcube.portlets.widgets.mpformbuilder.client.events.DeleteCustomFieldEventHandler ;
import org.gcube.portlets.widgets.mpformbuilder.client.form.MetaDataField ;
2020-10-09 11:50:09 +02:00
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.GenericFormEvents.GenericFormEventsListener ;
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.GenericFormEvents.HasGenericFormListenerRegistration ;
2020-10-01 15:56:27 +02:00
import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.CategoryPanel ;
import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.CustomFieldEntry ;
import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.MetaDataFieldSkeleton ;
import org.gcube.portlets.widgets.mpformbuilder.client.ui.resources.AddResourceToDataset ;
import org.gcube.portlets.widgets.mpformbuilder.client.ui.twincolumnselection.TwinColumnSelectionMainPanel ;
2020-10-09 11:50:09 +02:00
import org.gcube.portlets.widgets.mpformbuilder.client.ui.upload.DialogUpload ;
2020-10-08 16:06:21 +02:00
import org.gcube.portlets.widgets.mpformbuilder.client.ui.utils.CustomLegend ;
2020-10-01 15:56:27 +02:00
import org.gcube.portlets.widgets.mpformbuilder.client.ui.utils.InfoIconsLabels ;
2020-10-02 16:16:31 +02:00
import org.gcube.portlets.widgets.mpformbuilder.client.ui.utils.LoaderIcon ;
2020-10-09 11:50:09 +02:00
import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean ;
2020-10-01 15:56:27 +02:00
import org.gcube.portlets.widgets.mpformbuilder.shared.catalogue.OrganizationBean ;
import org.gcube.portlets.widgets.mpformbuilder.shared.license.LicenseBean ;
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.CategoryWrapper ;
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean ;
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper ;
2020-10-09 11:50:09 +02:00
import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded ;
2020-10-01 15:56:27 +02:00
import com.github.gwtbootstrap.client.ui.AlertBlock ;
import com.github.gwtbootstrap.client.ui.Button ;
import com.github.gwtbootstrap.client.ui.ControlGroup ;
import com.github.gwtbootstrap.client.ui.Form ;
import com.github.gwtbootstrap.client.ui.Icon ;
import com.github.gwtbootstrap.client.ui.ListBox ;
import com.github.gwtbootstrap.client.ui.Paragraph ;
import com.github.gwtbootstrap.client.ui.Popover ;
import com.github.gwtbootstrap.client.ui.TabPanel ;
import com.github.gwtbootstrap.client.ui.constants.AlertType ;
import com.google.gwt.core.client.GWT ;
2020-10-07 11:15:48 +02:00
import com.google.gwt.core.client.Scheduler ;
import com.google.gwt.core.client.Scheduler.ScheduledCommand ;
import com.google.gwt.dom.client.Document ;
2020-10-01 15:56:27 +02:00
import com.google.gwt.event.dom.client.ChangeEvent ;
import com.google.gwt.event.dom.client.ChangeHandler ;
import com.google.gwt.event.dom.client.ClickEvent ;
2020-10-07 11:15:48 +02:00
import com.google.gwt.event.dom.client.DomEvent ;
2020-10-01 15:56:27 +02:00
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.uibinder.client.UiHandler ;
import com.google.gwt.user.client.Timer ;
import com.google.gwt.user.client.rpc.AsyncCallback ;
import com.google.gwt.user.client.ui.Composite ;
import com.google.gwt.user.client.ui.FocusPanel ;
import com.google.gwt.user.client.ui.HTMLPanel ;
import com.google.gwt.user.client.ui.VerticalPanel ;
import com.google.gwt.user.client.ui.Widget ;
2022-03-03 18:42:59 +01:00
2020-10-01 15:56:27 +02:00
/ * *
* Create metadata form for ckan product .
* @author Costantino Perciante at ISTI - CNR ( costantino . perciante @isti.cnr.it )
* /
2020-10-09 11:50:09 +02:00
public class CreateMetadataForm extends Composite implements HasGenericFormListenerRegistration {
2020-10-01 15:56:27 +02:00
2020-10-07 14:28:10 +02:00
/** The ui binder. */
2020-10-01 15:56:27 +02:00
private static EditMetadataFormUiBinder uiBinder = GWT
. create ( EditMetadataFormUiBinder . class ) ;
2020-10-12 13:04:20 +02:00
/** The listeners generic form events. */
2020-10-09 11:50:09 +02:00
private List < GenericFormEventsListener > listenersGenericFormEvents = new ArrayList < GenericFormEventsListener > ( ) ;
2020-10-01 15:56:27 +02:00
/ * *
* The Interface EditMetadataFormUiBinder .
*
* @author Francesco Mangiacrapa at ISTI - CNR ( francesco . mangiacrapa @isti.cnr.it )
*
* Oct 1 , 2020
* /
interface EditMetadataFormUiBinder extends
UiBinder < Widget , CreateMetadataForm > {
}
2020-10-07 14:28:10 +02:00
/** The create dataset main panel. */
2020-10-01 15:56:27 +02:00
@UiField HTMLPanel createDatasetMainPanel ;
2020-10-07 14:28:10 +02:00
/** The custom fields. */
2020-10-01 15:56:27 +02:00
@UiField ControlGroup customFields ;
2020-10-07 14:28:10 +02:00
/** The custom fields group. */
2020-10-07 11:15:48 +02:00
@UiField ControlGroup customFieldsGroup ;
2020-10-07 14:28:10 +02:00
/** The add custom field button. */
2020-10-01 15:56:27 +02:00
@UiField Button addCustomFieldButton ;
2020-10-07 14:28:10 +02:00
/** The create button. */
2020-10-01 15:56:27 +02:00
@UiField Button createButton ;
2020-10-12 16:44:58 +02:00
/** The create button. */
@UiField Button editButton ;
2020-10-07 14:28:10 +02:00
/** The info block. */
2020-10-02 16:16:31 +02:00
// @UiField Button resetButton;
2020-10-01 15:56:27 +02:00
@UiField AlertBlock infoBlock ;
2020-10-07 14:28:10 +02:00
/** The on continue alert block. */
2020-10-01 15:56:27 +02:00
@UiField AlertBlock onContinueAlertBlock ;
2020-10-07 14:28:10 +02:00
/** The on create alert block. */
2020-10-01 15:56:27 +02:00
@UiField AlertBlock onCreateAlertBlock ;
2020-10-07 14:28:10 +02:00
/** The metadata fields panel. */
2020-10-01 15:56:27 +02:00
@UiField VerticalPanel metadataFieldsPanel ;
2020-10-07 14:28:10 +02:00
/** The metadata type listbox. */
2020-10-01 15:56:27 +02:00
@UiField ListBox metadataTypeListbox ;
2020-10-07 14:28:10 +02:00
/** The form first step. */
2020-10-01 15:56:27 +02:00
@UiField Form formFirstStep ;
2020-10-07 14:28:10 +02:00
/** The form third step. */
2020-10-01 17:10:13 +02:00
@UiField Form formThirdStep ;
2020-10-07 14:28:10 +02:00
/** The selected profile. */
2020-10-02 16:16:31 +02:00
// @UiField Button continueButton;
2020-10-01 15:56:27 +02:00
@UiField Paragraph selectedProfile ;
2020-10-07 14:28:10 +02:00
/** The loader profiles. */
2020-10-02 16:16:31 +02:00
@UiField LoaderIcon loaderProfiles ;
2020-10-07 14:28:10 +02:00
/** The loader profile information. */
2020-10-02 16:16:31 +02:00
@UiField LoaderIcon loaderProfileInformation ;
//@UiField TagsPanel tagsPanel;
2020-10-01 15:56:27 +02:00
2020-10-07 14:28:10 +02:00
/** The info icon types. */
2020-10-01 15:56:27 +02:00
// info panels
@UiField Icon infoIconTypes ;
2020-10-07 14:28:10 +02:00
/** The focus panel types. */
2020-10-01 15:56:27 +02:00
@UiField FocusPanel focusPanelTypes ;
2020-10-07 14:28:10 +02:00
/** The popover types. */
2020-10-01 15:56:27 +02:00
@UiField Popover popoverTypes ;
2020-10-07 14:28:10 +02:00
/** The info icon custom fields. */
2020-10-01 15:56:27 +02:00
@UiField Icon infoIconCustomFields ;
2020-10-07 14:28:10 +02:00
/** The focus panel custom fields. */
2020-10-01 15:56:27 +02:00
@UiField FocusPanel focusPanelCustomFields ;
2020-10-07 14:28:10 +02:00
/** The popover custom fields. */
2020-10-01 15:56:27 +02:00
@UiField Popover popoverCustomFields ;
2020-10-07 14:28:10 +02:00
/** The metadata types control group. */
2020-10-01 15:56:27 +02:00
@UiField ControlGroup metadataTypesControlGroup ;
2020-10-12 13:04:20 +02:00
/** The custom legend. */
2020-10-08 16:06:21 +02:00
@UiField CustomLegend customLegend ;
2020-10-07 14:28:10 +02:00
/** The form builder service. */
2020-10-01 15:56:27 +02:00
private final MetadataProfileFormBuilderServiceAsync formBuilderService = GWT . create ( MetadataProfileFormBuilderService . class ) ;
2020-10-07 14:28:10 +02:00
/** The Constant NONE_PROFILE. */
2020-10-01 15:56:27 +02:00
private static final String NONE_PROFILE = " none " ;
2020-10-07 14:28:10 +02:00
/** The Constant ERROR_PRODUCT_CREATION. */
2020-10-01 15:56:27 +02:00
// error/info messages
protected static final String ERROR_PRODUCT_CREATION = " There was an error while trying to publish your item. " ;
2020-10-07 14:28:10 +02:00
/** The Constant PRODUCT_CREATED_OK. */
2020-10-01 15:56:27 +02:00
protected static final String PRODUCT_CREATED_OK = " Item correctly published! " ;
2020-10-07 14:28:10 +02:00
/** The Constant TRYING_TO_CREATE_PRODUCT. */
2020-10-13 14:30:24 +02:00
private static final String DATA_FORM_FILLED_IN_CORRECTLY = " Very well!!! Data form filled in correclty! " ;
2020-10-07 14:28:10 +02:00
/** The Constant MISSING_PUBLISH_RIGHTS. */
2020-10-01 15:56:27 +02:00
protected static final String MISSING_PUBLISH_RIGHTS = " It seems you are not authorized to publish on catalogue. Request it to the VRE manager or the portal administrator. " ;
2020-10-07 14:28:10 +02:00
/** The tab panel. */
2020-10-01 15:56:27 +02:00
// tab panel
private TabPanel tabPanel ;
2020-10-07 14:28:10 +02:00
/** The resource form. */
2020-10-01 15:56:27 +02:00
// add resource form
private AddResourceToDataset resourceForm ;
2020-10-07 14:28:10 +02:00
/** The license bean. */
2020-10-01 15:56:27 +02:00
// the licenses
private List < LicenseBean > licenseBean ;
2020-10-07 14:28:10 +02:00
/** The event bus. */
2020-10-01 15:56:27 +02:00
// event bus
2020-10-20 15:20:41 +02:00
private HandlerManager uiBus = new HandlerManager ( null ) ;
private HandlerManager appManagerBus ;
2020-10-01 15:56:27 +02:00
2020-10-07 14:28:10 +02:00
/** The custom field entries list. */
2020-10-01 15:56:27 +02:00
// added custom field entries (by the user)
private List < CustomFieldEntry > customFieldEntriesList = new ArrayList < CustomFieldEntry > ( ) ;
2020-10-07 14:28:10 +02:00
/** The list of metadata fields. */
2020-10-01 15:56:27 +02:00
// the list of MetaDataField added
private List < MetaDataField > listOfMetadataFields = new ArrayList < MetaDataField > ( ) ;
// dataset metadata bean
//private DatasetBean receivedBean;
2020-10-07 14:28:10 +02:00
/** The owner. */
2020-10-01 15:56:27 +02:00
// the owner
private String owner ;
2020-10-07 14:28:10 +02:00
/** The resources twin panel. */
2020-10-01 15:56:27 +02:00
// resource table
private TwinColumnSelectionMainPanel resourcesTwinPanel ;
2020-10-07 14:28:10 +02:00
/** The popup opened ids. */
2020-10-01 15:56:27 +02:00
// List of opened popup'ids
private List < String > popupOpenedIds = new ArrayList < String > ( ) ;
2020-10-07 14:28:10 +02:00
/** The name title organization map. */
2020-10-01 15:56:27 +02:00
// map of organization name title
private Map < String , String > nameTitleOrganizationMap = new HashMap < String , String > ( ) ;
2020-10-07 14:28:10 +02:00
/** The scope. */
2020-10-01 15:56:27 +02:00
private String scope ;
2020-10-07 14:28:10 +02:00
/** The generic resource secondary type. */
2020-10-01 15:56:27 +02:00
private String genericResourceSecondaryType ;
2020-10-09 11:50:09 +02:00
2020-10-12 13:04:20 +02:00
/** The metadata profiles. */
2020-10-09 11:50:09 +02:00
private List < MetaDataProfileBean > metadataProfiles ;
2020-10-12 16:44:58 +02:00
/** The form data bean. */
private GenericDatasetBean formDataBean ;
2022-03-03 18:42:59 +01:00
private OPERATION operationPerfom ;
public enum OPERATION { NEW , UPDATE }
2020-10-01 15:56:27 +02:00
/ * *
* Invoked in the most general case .
*
* @param scope the scope
* @param genericResourceSecondaryType the generic resource secondary type
* /
2020-10-20 15:20:41 +02:00
public CreateMetadataForm ( String scope , String genericResourceSecondaryType , HandlerManager eventBus ) {
this ( eventBus ) ;
2020-10-01 15:56:27 +02:00
this . scope = scope ;
this . genericResourceSecondaryType = genericResourceSecondaryType ;
2020-10-02 16:16:31 +02:00
showLoadingProfiles ( true ) ;
2020-10-01 15:56:27 +02:00
MetadataProfileFormBuilderServiceAsync . Util . getInstance ( ) . getProfilesInTheScope ( scope , genericResourceSecondaryType , new AsyncCallback < List < MetaDataProfileBean > > ( ) {
@Override
public void onFailure ( Throwable caught ) {
}
@Override
public void onSuccess ( List < MetaDataProfileBean > profiles ) {
createDatasetFormBody ( profiles ) ;
2020-10-02 16:16:31 +02:00
showLoadingProfiles ( false ) ;
2020-10-01 15:56:27 +02:00
}
} ) ;
2020-10-09 11:50:09 +02:00
2020-10-01 15:56:27 +02:00
}
2020-10-07 11:15:48 +02:00
2020-10-01 15:56:27 +02:00
/ * *
* Instantiates a new creates the dataset form .
*
* @param profiles the profiles
* /
2022-03-03 18:42:59 +01:00
public CreateMetadataForm ( List < MetaDataProfileBean > profiles , HandlerManager eventBus , OPERATION operation ) {
2020-10-20 15:20:41 +02:00
this ( eventBus ) ;
2022-03-03 18:42:59 +01:00
this . operationPerfom = operation ;
2020-10-02 16:16:31 +02:00
showLoadingProfiles ( true ) ;
2020-10-01 15:56:27 +02:00
createDatasetFormBody ( profiles ) ;
2020-10-02 16:16:31 +02:00
showLoadingProfiles ( false ) ;
2020-10-01 15:56:27 +02:00
}
2020-10-08 16:06:21 +02:00
/ * *
* Show choose profile form .
*
* @param bool the bool
* /
private void showChooseProfileForm ( boolean bool ) {
formFirstStep . setVisible ( bool ) ;
}
2020-10-01 15:56:27 +02:00
/ * *
* Instantiates a new creates the dataset form .
2020-10-20 15:20:41 +02:00
* @param eventBus2
2020-10-01 15:56:27 +02:00
* /
2020-10-20 15:20:41 +02:00
private CreateMetadataForm ( HandlerManager eventBus ) {
2020-10-01 15:56:27 +02:00
initWidget ( uiBinder . createAndBindUi ( this ) ) ;
2020-10-20 15:20:41 +02:00
this . appManagerBus = eventBus ;
2020-10-01 15:56:27 +02:00
bind ( ) ;
prepareInfoIcons ( ) ;
2020-10-07 14:28:10 +02:00
showSelectedProfiles ( false ) ;
2020-10-08 16:06:21 +02:00
showChooseProfileForm ( false ) ;
2020-10-07 14:28:10 +02:00
showCustomFieldsEntries ( false ) ;
2020-10-01 15:56:27 +02:00
}
2022-03-03 18:42:59 +01:00
2020-10-07 14:28:10 +02:00
/ * *
* Show loading profiles .
*
* @param bool the bool
* /
2020-10-02 16:16:31 +02:00
private void showLoadingProfiles ( boolean bool ) {
loaderProfiles . setText ( " Loading Profiles... " ) ;
loaderProfiles . setVisible ( bool ) ;
}
2020-10-07 14:28:10 +02:00
/ * *
* Show loading profile information .
*
* @param bool the bool
* /
2020-10-02 16:16:31 +02:00
private void showLoadingProfileInformation ( boolean bool ) {
loaderProfileInformation . setText ( " Loading Profile Information... " ) ;
loaderProfileInformation . setVisible ( bool ) ;
}
2020-10-01 15:56:27 +02:00
/ * *
* Bind on events .
* /
private void bind ( ) {
// when a custom field is removed, remove it from the list
2020-10-20 15:20:41 +02:00
uiBus . addHandler ( DeleteCustomFieldEvent . TYPE , new DeleteCustomFieldEventHandler ( ) {
2020-10-01 15:56:27 +02:00
@Override
public void onRemoveEntry ( DeleteCustomFieldEvent event ) {
customFieldEntriesList . remove ( event . getRemovedEntry ( ) ) ;
customFields . remove ( event . getRemovedEntry ( ) ) ;
}
} ) ;
// on close form
2020-10-20 15:20:41 +02:00
uiBus . addHandler ( CloseCreationFormEvent . TYPE , new CloseCreationFormEventHandler ( ) {
2020-10-01 15:56:27 +02:00
@Override
public void onClose ( CloseCreationFormEvent event ) {
InfoIconsLabels . closeDialogBox ( popupOpenedIds ) ;
}
} ) ;
}
/ * *
* Creates the dataset form body .
*
* @param profiles the profiles
* /
private void createDatasetFormBody ( final List < MetaDataProfileBean > profiles ) {
if ( profiles = = null ) {
setAlertBlock ( " An unknow error occurred while retrieving types, sorry " , AlertType . ERROR , true ) ;
}
else {
2020-10-09 11:50:09 +02:00
this . metadataProfiles = profiles ;
2020-10-01 15:56:27 +02:00
prepareMetadataList ( profiles ) ;
metadataTypeListbox . setEnabled ( true ) ;
}
}
/ * *
* Add the items to the listbox and put data into the metadataPanel .
*
* @param profiles the profiles
* /
private void prepareMetadataList ( final List < MetaDataProfileBean > profiles ) {
if ( profiles ! = null & & ! profiles . isEmpty ( ) ) {
2020-10-21 12:28:18 +02:00
GWT . log ( " Building form/s for profile/s: " + profiles ) ;
2020-10-08 16:06:21 +02:00
if ( profiles . size ( ) > 1 )
showChooseProfileForm ( true ) ;
2020-10-01 15:56:27 +02:00
for ( MetaDataProfileBean metadataBean : profiles ) {
metadataTypeListbox . addItem ( metadataBean . getType ( ) ) ;
}
2020-10-07 11:15:48 +02:00
2020-10-02 16:16:31 +02:00
// add handler on select
metadataTypeListbox . addChangeHandler ( new ChangeHandler ( ) {
@Override
public void onChange ( ChangeEvent event ) {
2020-10-07 11:15:48 +02:00
GWT . log ( " Profile type selection changed... " ) ;
2020-10-02 16:16:31 +02:00
String selectedItemText = metadataTypeListbox . getSelectedItemText ( ) ;
metadataFieldsPanel . clear ( ) ;
if ( selectedItemText . equals ( NONE_PROFILE ) ) {
metadataFieldsPanel . setVisible ( false ) ;
2020-10-08 16:06:21 +02:00
formThirdStep . setVisible ( false ) ;
2020-10-07 11:15:48 +02:00
selectedProfile . setText ( " Selected Profile is " + NONE_PROFILE ) ;
2020-10-02 16:16:31 +02:00
//receivedBean.setChosenType(null);
} else {
//receivedBean.setChosenType(selectedItemText);
showLoadingProfileInformation ( true ) ;
formThirdStep . setVisible ( true ) ;
2020-10-08 16:06:21 +02:00
customLegend . setText ( " Insert Information for: " + metadataTypeListbox . getSelectedItemText ( ) , true ) ;
2020-10-02 16:16:31 +02:00
selectedProfile . setText ( " Selected Profile is " + metadataTypeListbox . getSelectedItemText ( ) ) ;
addFields ( selectedItemText , profiles ) ;
showLoadingProfileInformation ( false ) ;
}
}
} ) ;
2020-10-07 11:15:48 +02:00
2020-10-01 15:56:27 +02:00
} else {
// just hide this listbox
metadataTypesControlGroup . setVisible ( false ) ;
metadataFieldsPanel . clear ( ) ;
listOfMetadataFields . clear ( ) ;
//receivedBean.setChosenType(null);
}
2020-10-07 11:15:48 +02:00
2020-10-09 16:34:04 +02:00
Scheduler . get ( ) . scheduleDeferred ( new ScheduledCommand ( ) {
@Override
public void execute ( ) {
if ( profiles . size ( ) = = 1 ) {
showChooseProfileForm ( false ) ;
metadataTypeListbox . setSelectedValue ( profiles . get ( 0 ) . getType ( ) ) ;
customLegend . setText ( " Insert Information for: " + profiles . get ( 0 ) . getType ( ) , true ) ;
DomEvent . fireNativeEvent ( Document . get ( ) . createChangeEvent ( ) , metadataTypeListbox ) ;
}
}
} ) ;
2020-10-07 11:15:48 +02:00
2020-10-01 15:56:27 +02:00
}
/ * *
* Add fields of the selected metadata profile to the widget .
*
* @param selectedItem the selected item
* @param listProfiles the list profiles
* /
protected void addFields ( String selectedItem , List < MetaDataProfileBean > listProfiles ) {
for ( MetaDataProfileBean bean : listProfiles ) {
if ( bean . getType ( ) . equals ( selectedItem ) ) {
// clear old data
listOfMetadataFields . clear ( ) ;
// prepare the data
List < MetadataFieldWrapper > fields = bean . getMetadataFields ( ) ;
List < CategoryWrapper > categories = bean . getCategories ( ) ;
GWT . log ( " There are " + categories . size ( ) + " categories for profile " + bean . getTitle ( ) ) ;
if ( categories = = null | | categories . isEmpty ( ) ) {
for ( MetadataFieldWrapper field : fields ) {
/ * MetaDataFieldSkeleton fieldWidget ;
try {
fieldWidget = new MetaDataFieldSkeleton ( field , eventBus ) ;
metadataFieldsPanel . add ( fieldWidget ) ;
listOfMetadataFields . add ( fieldWidget ) ;
} catch ( Exception e ) {
GWT . log ( " Unable to build such widget " , e ) ;
} * /
MetaDataField fieldWidget ;
try {
2022-03-03 18:42:59 +01:00
fieldWidget = new MetaDataField ( field , uiBus , operationPerfom ) ;
2020-10-01 15:56:27 +02:00
metadataFieldsPanel . add ( fieldWidget ) ;
listOfMetadataFields . add ( fieldWidget ) ;
} catch ( Exception e ) {
GWT . log ( " Unable to build such widget " , e ) ;
}
}
} else {
// create the categories, then parse the fields. Fields do not belonging to a category are put at the end
for ( CategoryWrapper categoryWrapper : categories ) {
if ( categoryWrapper . getFieldsForThisCategory ( ) ! = null & & categoryWrapper . getFieldsForThisCategory ( ) . size ( ) > 0 ) {
CategoryPanel cp = new CategoryPanel ( categoryWrapper . getTitle ( ) , categoryWrapper . getDescription ( ) ) ;
List < MetadataFieldWrapper > fieldsForThisCategory = categoryWrapper . getFieldsForThisCategory ( ) ;
fields . removeAll ( fieldsForThisCategory ) ;
for ( MetadataFieldWrapper metadataFieldWrapper : fieldsForThisCategory ) {
/ * MetaDataFieldSkeleton fieldWidget ;
try {
fieldWidget = new MetaDataFieldSkeleton ( metadataFieldWrapper , eventBus ) ;
cp . addField ( fieldWidget ) ;
listOfMetadataFields . add ( fieldWidget ) ;
} catch ( Exception e ) {
GWT . log ( " Unable to build such widget " , e ) ;
} * /
MetaDataField fieldWidget ;
try {
2022-03-03 18:42:59 +01:00
fieldWidget = new MetaDataField ( metadataFieldWrapper , uiBus , operationPerfom ) ;
2020-10-01 15:56:27 +02:00
cp . addField ( fieldWidget ) ;
listOfMetadataFields . add ( fieldWidget ) ;
} catch ( Exception e ) {
GWT . log ( " Unable to build such widget " , e ) ;
}
}
metadataFieldsPanel . add ( cp ) ;
}
}
// add the remaining one at the end of the categories
CategoryPanel extrasCategory = new CategoryPanel ( " Other " , null ) ;
for ( MetadataFieldWrapper field : fields ) {
/ * MetaDataFieldSkeleton fieldWidget ;
try {
fieldWidget = new MetaDataFieldSkeleton ( field , eventBus ) ;
extrasCategory . addField ( fieldWidget ) ;
listOfMetadataFields . add ( fieldWidget ) ;
} catch ( Exception e ) {
GWT . log ( " Unable to build such widget " , e ) ;
} * /
MetaDataField fieldWidget ;
try {
2022-03-03 18:42:59 +01:00
fieldWidget = new MetaDataField ( field , uiBus , operationPerfom ) ;
2020-10-01 15:56:27 +02:00
extrasCategory . addField ( fieldWidget ) ;
listOfMetadataFields . add ( fieldWidget ) ;
} catch ( Exception e ) {
GWT . log ( " Unable to build such widget " , e ) ;
}
}
metadataFieldsPanel . add ( extrasCategory ) ;
}
metadataFieldsPanel . setVisible ( true ) ;
}
}
}
/ * *
* Adds the custom field event .
*
* @param e the e
* /
@UiHandler ( " addCustomFieldButton " )
void addCustomFieldEvent ( ClickEvent e ) {
2020-10-20 15:20:41 +02:00
CustomFieldEntry toAdd = new CustomFieldEntry ( uiBus , " " , " " , true ) ;
2020-10-01 15:56:27 +02:00
customFieldEntriesList . add ( toAdd ) ;
customFields . add ( toAdd ) ;
}
/ * *
* Creates the dataset event .
*
* @param e the e
* /
@UiHandler ( " createButton " )
void createDatasetEvent ( ClickEvent e ) {
String errorMessage = areProfileDataValid ( ) ;
if ( errorMessage ! = null ) {
alertOnCreate ( " Please check the inserted values and the mandatory fields [ " + errorMessage + " ] " , AlertType . ERROR , true ) ;
}
else {
2020-10-02 16:16:31 +02:00
//Set<String> tags = new HashSet<String>(tagsPanel.getTags());
2020-10-01 15:56:27 +02:00
List < OrganizationBean > groups = new ArrayList < OrganizationBean > ( ) ;
List < OrganizationBean > groupsToForceCreation = new ArrayList < OrganizationBean > ( ) ;
Map < String , List < String > > customFieldsMap = new HashMap < String , List < String > > ( ) ;
2020-10-09 11:50:09 +02:00
List < FileUploaded > listFilesUploaded = new ArrayList < FileUploaded > ( ) ;
2020-10-01 15:56:27 +02:00
// prepare custom fields
for ( MetaDataField metaField : listOfMetadataFields ) {
for ( MetaDataFieldSkeleton field : metaField . getListOfMetadataFields ( ) ) {
2020-10-09 11:50:09 +02:00
switch ( field . getField ( ) . getType ( ) ) {
case File :
DialogUpload dUpload = ( DialogUpload ) field . getHolder ( ) ;
//adding it only if exists
if ( dUpload . getFileUploadingState ( ) ! = null )
listFilesUploaded . add ( dUpload . getFileUploadingState ( ) . getFile ( ) ) ;
break ;
default :
List < String > valuesForField = field . getFieldCurrentValue ( ) ;
if ( ! valuesForField . isEmpty ( ) ) {
String key = field . getFieldNameQualified ( ) ;
List < String > valuesForThisField = null ;
if ( customFieldsMap . containsKey ( key ) )
valuesForThisField = customFieldsMap . get ( key ) ;
else
valuesForThisField = new ArrayList < String > ( ) ;
valuesForThisField . addAll ( valuesForField ) ;
customFieldsMap . put ( key , valuesForThisField ) ;
// get also tag/group if it is the case for this field
// List<String> tagsField = field.getTagFromThisField();
// if(tagsField != null)
// tags.addAll(tagsField);
List < String > groupsTitle = field . getGroupTitleFromThisGroup ( ) ;
if ( groupsTitle ! = null ) {
for ( String groupTitle : groupsTitle ) {
if ( field . isGroupToForce ( ) )
groupsToForceCreation . add ( new OrganizationBean ( groupTitle , groupTitle , false , field . isPropagateUp ( ) ) ) ;
else
groups . add ( new OrganizationBean ( groupTitle , groupTitle , false , field . isPropagateUp ( ) ) ) ;
}
2020-10-01 15:56:27 +02:00
}
}
2020-10-09 11:50:09 +02:00
break ;
2020-10-01 15:56:27 +02:00
}
}
}
for ( CustomFieldEntry customEntry : customFieldEntriesList ) {
String key = customEntry . getKey ( ) ;
String value = customEntry . getValue ( ) ;
if ( value ! = null & & ! value . isEmpty ( ) ) {
List < String > valuesForThisField = null ;
if ( customFieldsMap . containsKey ( key ) )
valuesForThisField = customFieldsMap . get ( key ) ;
else
valuesForThisField = new ArrayList < String > ( ) ;
valuesForThisField . add ( value ) ;
customFieldsMap . put ( key , valuesForThisField ) ;
}
}
2020-10-09 11:50:09 +02:00
GenericDatasetBean gdb = new GenericDatasetBean ( ) ;
2020-10-19 18:04:22 +02:00
gdb . setMetadataProfileList ( metadataProfiles ) ;
gdb . setFormDataEntryFields ( customFieldsMap ) ;
2020-10-09 11:50:09 +02:00
gdb . setFilesUploaded ( listFilesUploaded ) ;
2020-10-12 16:44:58 +02:00
formDataBean = gdb ;
2020-10-01 15:56:27 +02:00
// alert
2020-10-13 14:30:24 +02:00
alertOnCreate ( DATA_FORM_FILLED_IN_CORRECTLY , AlertType . SUCCESS , false ) ;
2020-10-01 15:56:27 +02:00
createButton . setEnabled ( false ) ;
2020-10-12 16:44:58 +02:00
createButton . setVisible ( false ) ;
editButton . setVisible ( true ) ;
disableDatasetFields ( true ) ;
2020-10-09 11:50:09 +02:00
notifyValidForm ( gdb ) ;
2020-10-01 15:56:27 +02:00
}
}
2020-10-12 13:04:20 +02:00
2020-10-12 16:44:58 +02:00
/ * *
* Edits the button click handler .
*
* @param e the e
* /
@UiHandler ( " editButton " )
void editButtonClickHandler ( ClickEvent e ) {
formDataBean = null ;
createButton . setEnabled ( true ) ;
createButton . setVisible ( true ) ;
editButton . setVisible ( false ) ;
onCreateAlertBlock . setVisible ( false ) ;
disableDatasetFields ( false ) ;
notifyOnEditForm ( ) ;
}
2020-10-12 13:04:20 +02:00
/ * *
* Checks if is form data valid .
*
* @return true , if is form data valid
* /
public boolean isFormDataValid ( ) {
2020-10-20 15:20:41 +02:00
//means no error
if ( areProfileDataValid ( ) = = null ) {
//means created button already fired
if ( formDataBean ! = null ) {
return true ;
} else {
alertOnCreate ( " Please press the button 'Create' to confirm your data entries " , AlertType . ERROR , true ) ;
}
}
return false ;
2020-10-12 13:04:20 +02:00
}
2020-10-12 16:44:58 +02:00
/ * *
* Gets the form data bean .
*
* @return the form data bean
* /
public GenericDatasetBean getFormDataBean ( ) {
return formDataBean ;
}
2020-10-01 15:56:27 +02:00
/ * *
* Prepare the info icons of all core metadata info .
* /
private void prepareInfoIcons ( ) {
// tags
2020-10-02 16:16:31 +02:00
//tagsPanel.prepareIcon(popupOpenedIds);
2020-10-01 15:56:27 +02:00
// profiles (or types)
InfoIconsLabels . preparePopupPanelAndPopover (
InfoIconsLabels . PROFILES_INFO_ID_POPUP ,
InfoIconsLabels . PROFILES_INFO_TEXT ,
InfoIconsLabels . PROFILES_INFO_CAPTION ,
infoIconTypes ,
popoverTypes ,
focusPanelTypes ,
popupOpenedIds
) ;
// custom fields
InfoIconsLabels . preparePopupPanelAndPopover (
InfoIconsLabels . CUSTOM_FIELDS_INFO_ID_POPUP ,
InfoIconsLabels . CUSTOM_FIELDS_INFO_TEXT ,
InfoIconsLabels . CUSTOM_FIELDS_INFO_CAPTION ,
infoIconCustomFields ,
popoverCustomFields ,
focusPanelCustomFields ,
popupOpenedIds
) ;
}
/ * *
* Test if profile data are valid .
*
* @return the string
* /
private String areProfileDataValid ( ) {
for ( MetaDataField metaField : listOfMetadataFields ) {
for ( MetaDataFieldSkeleton field : metaField . getListOfMetadataFields ( ) ) {
field . removeError ( ) ;
String error = field . isFieldValueValid ( ) ;
if ( error ! = null ) {
field . showError ( ) ;
2020-10-09 11:50:09 +02:00
String errorMsg = field . getFieldNameOriginal ( ) + " is not valid. Suggestion: " + error ;
notifyValidationError ( null , errorMsg ) ;
return errorMsg ;
2020-10-01 15:56:27 +02:00
}
}
}
return null ;
}
/ * *
* On continue show alert box and enable buttons .
*
* @param text the text
* @param type the type
* @param hideAfterAWhile the hide after A while
* /
private void alertOnCreate ( String text , AlertType type , boolean hideAfterAWhile ) {
2020-10-07 11:15:48 +02:00
//Window.alert("Called alertOnCreate");
onCreateAlertBlock . setText ( text ) ;
onCreateAlertBlock . setType ( type ) ;
onCreateAlertBlock . setVisible ( true ) ;
createButton . setEnabled ( true ) ;
//goBackButtonSecondStep.setEnabled(true);
2020-10-01 15:56:27 +02:00
2020-10-07 11:15:48 +02:00
if ( hideAfterAWhile ) {
// hide after some seconds
Timer t = new Timer ( ) {
@Override
public void run ( ) {
onCreateAlertBlock . setVisible ( false ) ;
}
} ;
t . schedule ( 10000 ) ;
}
2020-10-01 15:56:27 +02:00
}
/ * *
* Reset form event .
2020-10-12 16:44:58 +02:00
*
* @param bool the bool
2020-10-01 15:56:27 +02:00
* /
2020-10-02 16:16:31 +02:00
/ * @UiHandler ( " resetButton " )
2020-10-01 15:56:27 +02:00
void resetFormEvent ( ClickEvent e ) {
// delete custom fields
for ( CustomFieldEntry customField : customFieldEntriesList ) {
customField . removeFromParent ( ) ;
}
customFieldEntriesList . clear ( ) ;
2020-10-02 16:16:31 +02:00
} * /
2020-10-01 15:56:27 +02:00
/ * *
* Disable dataset editable fields once the dataset has been successfully created .
* /
2020-10-12 16:44:58 +02:00
protected void disableDatasetFields ( boolean bool ) {
2020-10-01 15:56:27 +02:00
2020-10-02 16:16:31 +02:00
//tagsPanel.freeze();
2020-10-12 16:44:58 +02:00
addCustomFieldButton . setEnabled ( ! bool ) ;
metadataTypeListbox . setEnabled ( ! bool ) ;
2020-10-01 15:56:27 +02:00
for ( CustomFieldEntry ce : customFieldEntriesList )
2020-10-12 16:44:58 +02:00
ce . freeze ( ! bool ) ;
2020-10-01 15:56:27 +02:00
// disable profile fields
for ( MetaDataField metaField : listOfMetadataFields ) {
for ( MetaDataFieldSkeleton field : metaField . getListOfMetadataFields ( ) ) {
2020-10-12 16:44:58 +02:00
field . freeze ( bool ) ;
2020-10-01 15:56:27 +02:00
}
}
// freeze table of resources
if ( resourcesTwinPanel ! = null )
2020-10-12 16:44:58 +02:00
resourcesTwinPanel . freeze ( bool ) ;
2020-10-01 15:56:27 +02:00
}
/ * *
* change alert block behavior .
*
* @param textToShow the text to show
* @param type the type
* @param visible the visible
* /
private void setAlertBlock ( String textToShow , AlertType type , boolean visible ) {
infoBlock . setText ( textToShow ) ;
infoBlock . setType ( type ) ;
infoBlock . setVisible ( visible ) ;
}
2020-10-07 14:28:10 +02:00
/ * *
* Show custom fields entries .
*
* @param show the show
* /
public void showCustomFieldsEntries ( boolean show ) {
this . customFields . setVisible ( show ) ;
this . customFieldsGroup . setVisible ( show ) ;
}
/ * *
* Show selected profiles .
*
* @param show the show
* /
public void showSelectedProfiles ( boolean show ) {
this . selectedProfile . setVisible ( show ) ;
}
2020-10-09 11:50:09 +02:00
2020-10-12 13:04:20 +02:00
/ * *
* Adds the listener .
*
* @param listener the listener
* /
2020-10-09 11:50:09 +02:00
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . mpformbuilder . client . form . generic . GenericFormEvents . HasGenericFormListenerRegistration # addListener ( org . gcube . portlets . widgets . mpformbuilder . client . form . generic . GenericFormEvents . GenericFormEventsListener )
* /
@Override
public void addListener ( GenericFormEventsListener listener ) {
if ( listener ! = null ) {
if ( listenersGenericFormEvents . contains ( listener ) )
return ;
listenersGenericFormEvents . add ( listener ) ;
}
}
2020-10-12 13:04:20 +02:00
/ * *
* Removes the listener .
*
* @param listener the listener
* /
2020-10-09 11:50:09 +02:00
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . mpformbuilder . client . form . generic . GenericFormEvents . HasGenericFormListenerRegistration # removeListener ( org . gcube . portlets . widgets . mpformbuilder . client . form . generic . GenericFormEvents . GenericFormEventsListener )
* /
@Override
public void removeListener ( GenericFormEventsListener listener ) {
if ( listener ! = null )
listenersGenericFormEvents . remove ( listener ) ;
}
2020-10-08 17:05:36 +02:00
2020-10-09 11:50:09 +02:00
/ * *
* Notify valid form .
*
* @param genericDatasetBean the generic dataset bean
* /
private void notifyValidForm ( GenericDatasetBean genericDatasetBean ) {
for ( GenericFormEventsListener listener : listenersGenericFormEvents ) {
2020-10-12 13:04:20 +02:00
listener . onFormDataValid ( genericDatasetBean ) ;
2020-10-09 11:50:09 +02:00
}
}
2020-10-12 16:44:58 +02:00
/ * *
* Notify valid form .
*
* @param genericDatasetBean the generic dataset bean
* /
private void notifyOnEditForm ( ) {
for ( GenericFormEventsListener listener : listenersGenericFormEvents ) {
listener . onFormDataEdit ( ) ;
}
}
2020-10-09 11:50:09 +02:00
/ * *
* Notify validation error .
*
* @param throwable the throwable
* @param errorMsg the error msg
* /
private void notifyValidationError ( Throwable throwable , String errorMsg ) {
// listenersSize();
for ( GenericFormEventsListener listener : listenersGenericFormEvents ) {
listener . onValidationError ( throwable , errorMsg ) ;
}
}
/ * *
* Gets the creates the button .
*
* @return the creates the button
* /
2020-10-20 15:20:41 +02:00
// public Button getCreateButton() {
// return createButton;
// }
2020-10-09 16:34:04 +02:00
/ * *
* Gets the metadata profiles .
*
* @return the metadata profiles
* /
public List < MetaDataProfileBean > getMetadataProfiles ( ) {
return metadataProfiles ;
}
2020-10-01 15:56:27 +02:00
}