metadata-profile-form-build.../src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.java

1022 lines
30 KiB
Java
Raw Normal View History

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;
2022-03-07 16:42:24 +01:00
import java.util.LinkedHashMap;
2020-10-01 15:56:27 +02:00
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.CloseCreationFormProfileEvent;
import org.gcube.portlets.widgets.mpformbuilder.client.events.CloseCreationFormProfileEventHandler;
import org.gcube.portlets.widgets.mpformbuilder.client.events.DeleteCustomFieldProfileEvent;
import org.gcube.portlets.widgets.mpformbuilder.client.events.DeleteCustomFieldProfileEventHandler;
2020-10-01 15:56:27 +02:00
import org.gcube.portlets.widgets.mpformbuilder.client.form.MetaDataField;
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;
2024-02-05 14:10:57 +01:00
import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.CustomFieldEntryProfile;
2020-10-01 15:56:27 +02:00
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.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;
import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean;
2024-02-02 17:00:07 +01:00
import org.gcube.portlets.widgets.mpformbuilder.shared.catalogue.OrganizationBeanProfile;
2020-10-01 15:56:27 +02:00
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;
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;
/**
* Create metadata form for ckan product.
2023-03-15 11:59:25 +01:00
*
2020-10-01 15:56:27 +02:00
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
*/
2023-03-15 11:59:25 +01: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. */
2023-03-15 11:59:25 +01:00
private static EditMetadataFormUiBinder uiBinder = GWT.create(EditMetadataFormUiBinder.class);
2020-10-01 15:56:27 +02:00
2020-10-12 13:04:20 +02:00
/** The listeners generic form events. */
private List<GenericFormEventsListener> listenersGenericFormEvents = new ArrayList<GenericFormEventsListener>();
2023-03-15 11:59:25 +01:00
2020-10-01 15:56:27 +02:00
/**
* The Interface EditMetadataFormUiBinder.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
2023-03-15 11:59:25 +01:00
* Oct 1, 2020
2020-10-01 15:56:27 +02:00
*/
2023-03-15 11:59:25 +01:00
interface EditMetadataFormUiBinder extends UiBinder<Widget, CreateMetadataForm> {
2020-10-01 15:56:27 +02:00
}
2020-10-07 14:28:10 +02:00
/** The create dataset main panel. */
2023-03-15 11:59:25 +01:00
@UiField
HTMLPanel createDatasetMainPanel;
2020-10-07 14:28:10 +02:00
/** The custom fields. */
2023-03-15 11:59:25 +01:00
@UiField
ControlGroup customFields;
2020-10-07 14:28:10 +02:00
/** The custom fields group. */
2023-03-15 11:59:25 +01:00
@UiField
ControlGroup customFieldsGroup;
2020-10-07 14:28:10 +02:00
/** The add custom field button. */
2023-03-15 11:59:25 +01:00
@UiField
Button addCustomFieldButton;
2020-10-07 14:28:10 +02:00
/** The create button. */
2023-03-15 11:59:25 +01:00
@UiField
Button createButton;
/** The create button. */
2023-03-15 11:59:25 +01:00
@UiField
Button editButton;
2020-10-07 14:28:10 +02:00
2023-03-15 11:59:25 +01:00
/** The info block. */
2020-10-02 16:16:31 +02:00
// @UiField Button resetButton;
2023-03-15 11:59:25 +01:00
@UiField
AlertBlock infoBlock;
2020-10-07 14:28:10 +02:00
/** The on continue alert block. */
2023-03-15 11:59:25 +01:00
@UiField
AlertBlock onContinueAlertBlock;
2020-10-07 14:28:10 +02:00
/** The on create alert block. */
2023-03-15 11:59:25 +01:00
@UiField
AlertBlock onCreateAlertBlock;
2020-10-07 14:28:10 +02:00
/** The metadata fields panel. */
2023-03-15 11:59:25 +01:00
@UiField
VerticalPanel metadataFieldsPanel;
@UiField
VerticalPanel filesUploadedPanel;
2020-10-07 14:28:10 +02:00
/** The metadata type listbox. */
2023-03-15 11:59:25 +01:00
@UiField
ListBox metadataTypeListbox;
2020-10-07 14:28:10 +02:00
/** The form first step. */
2023-03-15 11:59:25 +01:00
@UiField
Form formFirstStep;
2020-10-07 14:28:10 +02:00
/** The form third step. */
2023-03-15 11:59:25 +01:00
@UiField
Form formThirdStep;
2020-10-07 14:28:10 +02:00
2023-03-15 11:59:25 +01:00
/** The selected profile. */
2020-10-02 16:16:31 +02:00
// @UiField Button continueButton;
2023-03-15 11:59:25 +01:00
@UiField
Paragraph selectedProfile;
2020-10-07 14:28:10 +02:00
/** The loader profiles. */
2023-03-15 11:59:25 +01:00
@UiField
LoaderIcon loaderProfiles;
2020-10-07 14:28:10 +02:00
/** The loader profile information. */
2023-03-15 11:59:25 +01: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
2023-03-15 11:59:25 +01:00
@UiField
Icon infoIconTypes;
2020-10-07 14:28:10 +02:00
/** The focus panel types. */
2023-03-15 11:59:25 +01:00
@UiField
FocusPanel focusPanelTypes;
2020-10-07 14:28:10 +02:00
/** The popover types. */
2023-03-15 11:59:25 +01:00
@UiField
Popover popoverTypes;
2020-10-07 14:28:10 +02:00
/** The info icon custom fields. */
2023-03-15 11:59:25 +01:00
@UiField
Icon infoIconCustomFields;
2020-10-07 14:28:10 +02:00
/** The focus panel custom fields. */
2023-03-15 11:59:25 +01:00
@UiField
FocusPanel focusPanelCustomFields;
2020-10-07 14:28:10 +02:00
/** The popover custom fields. */
2023-03-15 11:59:25 +01:00
@UiField
Popover popoverCustomFields;
2020-10-07 14:28:10 +02:00
/** The metadata types control group. */
2023-03-15 11:59:25 +01:00
@UiField
ControlGroup metadataTypesControlGroup;
2020-10-12 13:04:20 +02:00
/** The custom legend. */
2023-03-15 11:59:25 +01:00
@UiField
CustomLegend customLegend;
2020-10-07 14:28:10 +02:00
/** The form builder service. */
2023-03-15 11:59:25 +01:00
private final MetadataProfileFormBuilderServiceAsync formBuilderService = GWT
.create(MetadataProfileFormBuilderService.class);
2020-10-01 15:56:27 +02:00
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.";
2023-03-15 11:59:25 +01:00
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!";
2023-03-15 11:59:25 +01:00
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!";
2023-03-15 11:59:25 +01:00
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);
2023-03-15 11:59:25 +01:00
2020-10-20 15:20:41 +02:00
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)
2024-02-05 14:10:57 +01:00
private List<CustomFieldEntryProfile> customFieldEntriesList = new ArrayList<CustomFieldEntryProfile>();
2020-10-01 15:56:27 +02:00
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
2023-03-15 11:59:25 +01:00
// private DatasetBean receivedBean;
2020-10-01 15:56:27 +02:00
2020-10-07 14:28:10 +02:00
/** The owner. */
2020-10-01 15:56:27 +02:00
// the owner
private String owner;
2023-03-15 11:59:25 +01:00
2020-10-07 14:28:10 +02:00
/** The resources twin panel. */
2020-10-01 15:56:27 +02:00
// resource table
2024-02-15 16:27:39 +01:00
//private TwinColumnSelectionMainPanel resourcesTwinPanel;
2020-10-01 15:56:27 +02:00
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>();
2023-03-15 11:59:25 +01:00
2020-10-07 14:28:10 +02:00
/** The scope. */
2020-10-01 15:56:27 +02:00
private String scope;
2023-03-15 11:59:25 +01:00
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-12 13:04:20 +02:00
/** The metadata profiles. */
private List<MetaDataProfileBean> metadataProfiles;
/** The form data bean. */
private GenericDatasetBean formDataBean;
2022-03-03 18:42:59 +01:00
private OPERATION operationPerfom;
2023-03-15 11:59:25 +01:00
/**
* The Enum OPERATION.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Mar 15, 2023
*/
2023-03-15 11:59:25 +01:00
public enum OPERATION {
NEW, UPDATE
}
private UploadedFilesBrowse uploadedFileBrowse;
2022-03-03 18:42:59 +01:00
2020-10-01 15:56:27 +02:00
/**
* Invoked in the most general case.
*
2023-03-15 11:59:25 +01:00
* @param scope the scope
2020-10-01 15:56:27 +02:00
* @param genericResourceSecondaryType the generic resource secondary type
2023-03-15 11:59:25 +01:00
* @param eventBus the event bus
2020-10-01 15:56:27 +02:00
*/
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);
2023-03-15 11:59:25 +01:00
MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScope(scope,
genericResourceSecondaryType, new AsyncCallback<List<MetaDataProfileBean>>() {
2020-10-01 15:56:27 +02:00
2023-03-15 11:59:25 +01:00
@Override
public void onFailure(Throwable caught) {
}
@Override
public void onSuccess(List<MetaDataProfileBean> profiles) {
createDatasetFormBody(profiles, null);
showLoadingProfiles(false);
}
});
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.
*
2023-03-15 11:59:25 +01:00
* @param profiles the profiles
* @param eventBus the event bus
* @param operation the operation
2020-10-01 15:56:27 +02:00
*/
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);
2023-03-15 11:59:25 +01:00
createDatasetFormBody(profiles, null);
showLoadingProfiles(false);
}
/**
* Instantiates a new creates the metadata form.
2023-03-15 11:59:25 +01:00
*
* @param profiles the profiles
* @param eventBus the event bus
* @param operation the operation
* @param listFileUploaded the list file uploaded
*/
public CreateMetadataForm(List<MetaDataProfileBean> profiles, HandlerManager eventBus, OPERATION operation,
List<? extends FileUploaded> listFileUploaded) {
2023-03-15 11:59:25 +01:00
this(eventBus);
this.operationPerfom = operation;
showLoadingProfiles(true);
createDatasetFormBody(profiles, listFileUploaded);
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.
*
* @param eventBus the event bus
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);
}
2023-03-15 11:59:25 +01:00
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
uiBus.addHandler(DeleteCustomFieldProfileEvent.TYPE, new DeleteCustomFieldProfileEventHandler() {
2020-10-01 15:56:27 +02:00
@Override
public void onRemoveEntry(DeleteCustomFieldProfileEvent event) {
2020-10-01 15:56:27 +02:00
customFieldEntriesList.remove(event.getRemovedEntry());
customFields.remove(event.getRemovedEntry());
}
});
// on close form
uiBus.addHandler(CloseCreationFormProfileEvent.TYPE, new CloseCreationFormProfileEventHandler() {
2020-10-01 15:56:27 +02:00
@Override
public void onClose(CloseCreationFormProfileEvent event) {
2020-10-01 15:56:27 +02:00
InfoIconsLabels.closeDialogBox(popupOpenedIds);
}
});
}
/**
* Creates the dataset form body.
*
2023-03-15 11:59:25 +01:00
* @param profiles the profiles
* @param listFileUploaded the list file uploaded
2020-10-01 15:56:27 +02:00
*/
private void createDatasetFormBody(final List<MetaDataProfileBean> profiles,
List<? extends FileUploaded> listFileUploaded) {
2020-10-01 15:56:27 +02:00
2023-03-15 11:59:25 +01:00
if (profiles == null) {
2020-10-01 15:56:27 +02:00
setAlertBlock("An unknow error occurred while retrieving types, sorry", AlertType.ERROR, true);
2023-03-15 11:59:25 +01:00
} else {
this.metadataProfiles = profiles;
2023-03-15 11:59:25 +01:00
prepareMetadataList(profiles, listFileUploaded);
2020-10-01 15:56:27 +02:00
metadataTypeListbox.setEnabled(true);
}
}
/**
* Add the items to the listbox and put data into the metadataPanel.
*
2023-03-15 11:59:25 +01:00
* @param profiles the profiles
* @param listFileUploaded the file uploaded
2020-10-01 15:56:27 +02:00
*/
private void prepareMetadataList(final List<MetaDataProfileBean> profiles,
2024-02-20 15:18:24 +01:00
final List<? extends FileUploaded> listFileUploaded) {
2023-03-15 11:59:25 +01:00
if (profiles != null && !profiles.isEmpty()) {
GWT.log("Building form/s for profile/s: " + profiles);
2020-10-01 15:56:27 +02:00
2023-03-15 11:59:25 +01:00
if (profiles.size() > 1)
2020-10-08 16:06:21 +02:00
showChooseProfileForm(true);
2023-03-15 11:59:25 +01:00
for (MetaDataProfileBean metadataBean : profiles) {
2020-10-01 15:56:27 +02:00
metadataTypeListbox.addItem(metadataBean.getType());
}
2023-03-15 11:59:25 +01: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();
2023-03-15 11:59:25 +01:00
if (selectedItemText.equals(NONE_PROFILE)) {
2020-10-02 16:16:31 +02:00
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);
2023-03-15 11:59:25 +01:00
// receivedBean.setChosenType(null);
} else {
// receivedBean.setChosenType(selectedItemText);
2020-10-02 16:16:31 +02:00
showLoadingProfileInformation(true);
formThirdStep.setVisible(true);
2023-03-15 11:59:25 +01:00
customLegend.setText("Insert Information for: " + metadataTypeListbox.getSelectedItemText(),
true);
2020-10-02 16:16:31 +02:00
selectedProfile.setText("Selected Profile is " + metadataTypeListbox.getSelectedItemText());
2023-03-15 11:59:25 +01:00
addFields(selectedItemText, profiles, listFileUploaded);
2020-10-02 16:16:31 +02:00
showLoadingProfileInformation(false);
}
}
});
2023-03-15 11:59:25 +01:00
} else {
2020-10-01 15:56:27 +02:00
// just hide this listbox
metadataTypesControlGroup.setVisible(false);
metadataFieldsPanel.clear();
listOfMetadataFields.clear();
2023-03-15 11:59:25 +01:00
// receivedBean.setChosenType(null);
2020-10-01 15:56:27 +02:00
}
2023-03-15 11:59:25 +01: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.
*
2023-03-15 11:59:25 +01:00
* @param selectedItem the selected item
* @param listProfiles the list profiles
* @param listFileUploaded the list file uploaded
2020-10-01 15:56:27 +02:00
*/
2023-03-15 11:59:25 +01:00
protected void addFields(String selectedItem, List<MetaDataProfileBean> listProfiles,
List<? extends FileUploaded> listFileUploaded) {
2020-10-01 15:56:27 +02:00
2023-03-15 11:59:25 +01:00
for (MetaDataProfileBean bean : listProfiles) {
if (bean.getType().equals(selectedItem)) {
2020-10-01 15:56:27 +02:00
// 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());
2023-03-15 11:59:25 +01:00
if (categories == null || categories.isEmpty()) {
2020-10-01 15:56:27 +02:00
for (MetadataFieldWrapper field : fields) {
2023-03-15 11:59:25 +01:00
/*
* 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); }
*/
2020-10-01 15:56:27 +02:00
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);
}
}
2023-03-15 11:59:25 +01:00
} else {
2020-10-01 15:56:27 +02:00
2023-03-15 11:59:25 +01:00
// create the categories, then parse the fields. Fields do not belonging to a
// category are put at the end
2020-10-01 15:56:27 +02:00
for (CategoryWrapper categoryWrapper : categories) {
2023-03-15 11:59:25 +01:00
if (categoryWrapper.getFieldsForThisCategory() != null
&& categoryWrapper.getFieldsForThisCategory().size() > 0) {
CategoryPanel cp = new CategoryPanel(categoryWrapper.getTitle(),
categoryWrapper.getDescription());
List<MetadataFieldWrapper> fieldsForThisCategory = categoryWrapper
.getFieldsForThisCategory();
2020-10-01 15:56:27 +02:00
fields.removeAll(fieldsForThisCategory);
for (MetadataFieldWrapper metadataFieldWrapper : fieldsForThisCategory) {
2023-03-15 11:59:25 +01:00
/*
* 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); }
*/
2020-10-01 15:56:27 +02:00
MetaDataField fieldWidget;
try {
2023-03-15 11:59:25 +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) {
2023-03-15 11:59:25 +01:00
/*
* 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); }
*/
2020-10-01 15:56:27 +02:00
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);
}
}
2023-03-15 11:59:25 +01:00
if (listFileUploaded != null && listFileUploaded.size() > 0) {
filesUploadedPanel.setVisible(true);
uploadedFileBrowse = new UploadedFilesBrowse(listFileUploaded);
filesUploadedPanel.add(uploadedFileBrowse);
}
}
2020-10-01 15:56:27 +02:00
/**
* Adds the custom field event.
*
* @param e the e
*/
@UiHandler("addCustomFieldButton")
2023-03-15 11:59:25 +01:00
void addCustomFieldEvent(ClickEvent e) {
2020-10-01 15:56:27 +02:00
2024-02-05 14:10:57 +01:00
CustomFieldEntryProfile toAdd = new CustomFieldEntryProfile(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")
2023-03-15 11:59:25 +01:00
void createDatasetEvent(ClickEvent e) {
2020-10-01 15:56:27 +02:00
String errorMessage = areProfileDataValid();
2023-03-15 11:59:25 +01:00
if (errorMessage != null) {
alertOnCreate("Please check the inserted values and the mandatory fields [" + errorMessage + "]",
AlertType.ERROR, true);
} else {
2020-10-01 15:56:27 +02:00
2023-03-15 11:59:25 +01:00
// Set<String> tags = new HashSet<String>(tagsPanel.getTags());
2024-02-02 17:00:07 +01:00
List<OrganizationBeanProfile> groups = new ArrayList<OrganizationBeanProfile>();
List<OrganizationBeanProfile> groupsToForceCreation = new ArrayList<OrganizationBeanProfile>();
2022-03-07 16:42:24 +01:00
LinkedHashMap<String, List<String>> customFieldsMap = new LinkedHashMap<String, List<String>>();
List<FileUploaded> listFilesUploaded = new ArrayList<FileUploaded>();
2020-10-01 15:56:27 +02:00
// prepare custom fields
for (MetaDataField metaField : listOfMetadataFields) {
2023-03-15 11:59:25 +01:00
2020-10-01 15:56:27 +02:00
for (MetaDataFieldSkeleton field : metaField.getListOfMetadataFields()) {
2023-03-15 11:59:25 +01:00
switch (field.getField().getType()) {
case File:
DialogUpload dUpload = (DialogUpload) field.getHolder();
2023-03-15 11:59:25 +01:00
// adding it only if exists
if (dUpload.getFileUploadingState() != null)
listFilesUploaded.add(dUpload.getFileUploadingState().getFile());
break;
default:
List<String> valuesForField = field.getFieldCurrentValue();
2023-03-15 11:59:25 +01:00
if (!valuesForField.isEmpty()) {
String key = field.getFieldNameQualified();
List<String> valuesForThisField = null;
2023-03-15 11:59:25 +01:00
if (customFieldsMap.containsKey(key))
valuesForThisField = customFieldsMap.get(key);
else
valuesForThisField = new ArrayList<String>();
2023-03-15 11:59:25 +01:00
valuesForThisField.addAll(valuesForField);
customFieldsMap.put(key, valuesForThisField);
2023-03-15 11:59:25 +01:00
// get also tag/group if it is the case for this field
// List<String> tagsField = field.getTagFromThisField();
// if(tagsField != null)
// tags.addAll(tagsField);
2023-03-15 11:59:25 +01:00
List<String> groupsTitle = field.getGroupTitleFromThisGroup();
2023-03-15 11:59:25 +01:00
if (groupsTitle != null) {
for (String groupTitle : groupsTitle) {
2023-03-15 11:59:25 +01:00
if (field.isGroupToForce())
2024-02-02 17:00:07 +01:00
groupsToForceCreation.add(new OrganizationBeanProfile(groupTitle, groupTitle, false,
2023-03-15 11:59:25 +01:00
field.isPropagateUp()));
else
2024-02-02 17:00:07 +01:00
groups.add(new OrganizationBeanProfile(groupTitle, groupTitle, false,
2023-03-15 11:59:25 +01:00
field.isPropagateUp()));
}
2020-10-01 15:56:27 +02:00
}
}
break;
2020-10-01 15:56:27 +02:00
}
}
}
2024-02-05 14:10:57 +01:00
for (CustomFieldEntryProfile customEntry : customFieldEntriesList) {
2020-10-01 15:56:27 +02:00
String key = customEntry.getKey();
String value = customEntry.getValue();
2023-03-15 11:59:25 +01:00
if (value != null && !value.isEmpty()) {
2020-10-01 15:56:27 +02:00
List<String> valuesForThisField = null;
2023-03-15 11:59:25 +01:00
if (customFieldsMap.containsKey(key))
2020-10-01 15:56:27 +02:00
valuesForThisField = customFieldsMap.get(key);
else
valuesForThisField = new ArrayList<String>();
valuesForThisField.add(value);
customFieldsMap.put(key, valuesForThisField);
}
}
2023-03-15 11:59:25 +01:00
GenericDatasetBean gdb = new GenericDatasetBean();
2020-10-19 18:04:22 +02:00
gdb.setMetadataProfileList(metadataProfiles);
gdb.setFormDataEntryFields(customFieldsMap);
2023-03-15 11:59:25 +01:00
// THIS IS TRUE IN UPDATE MODE
if (uploadedFileBrowse != null) {
List<FileUploaded> rFilesUploaded = uploadedFileBrowse.getListRemainingFileUploaded();
if (rFilesUploaded != null) {
GWT.log("Added to FilesUploaded the remaining (current content) files: " + rFilesUploaded);
listFilesUploaded.addAll(rFilesUploaded);
}
}
gdb.setFilesUploaded(listFilesUploaded);
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);
createButton.setVisible(false);
editButton.setVisible(true);
disableDatasetFields(true);
notifyValidForm(gdb);
2020-10-01 15:56:27 +02:00
}
}
2023-03-15 11:59:25 +01:00
/**
* Edits the button click handler.
*
* @param e the e
*/
@UiHandler("editButton")
2023-03-15 11:59:25 +01:00
void editButtonClickHandler(ClickEvent e) {
formDataBean = null;
createButton.setEnabled(true);
createButton.setVisible(true);
editButton.setVisible(false);
onCreateAlertBlock.setVisible(false);
disableDatasetFields(false);
notifyOnEditForm();
}
2023-03-15 11:59:25 +01:00
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
2023-03-15 11:59:25 +01:00
// means no error
if (areProfileDataValid() == null) {
// means created button already fired
if (formDataBean != null) {
2020-10-20 15:20:41 +02:00
return true;
2023-03-15 11:59:25 +01:00
} else {
2020-10-20 15:20:41 +02:00
alertOnCreate("Please press the button 'Create' to confirm your data entries", AlertType.ERROR, true);
}
}
return false;
2020-10-12 13:04:20 +02:00
}
2023-03-15 11:59:25 +01: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
2023-03-15 11:59:25 +01:00
// tagsPanel.prepareIcon(popupOpenedIds);
2020-10-01 15:56:27 +02:00
// profiles (or types)
2023-03-15 11:59:25 +01:00
InfoIconsLabels.preparePopupPanelAndPopover(InfoIconsLabels.PROFILES_INFO_ID_POPUP,
InfoIconsLabels.PROFILES_INFO_TEXT, InfoIconsLabels.PROFILES_INFO_CAPTION, infoIconTypes, popoverTypes,
focusPanelTypes, popupOpenedIds);
2020-10-01 15:56:27 +02:00
// custom fields
2023-03-15 11:59:25 +01:00
InfoIconsLabels.preparePopupPanelAndPopover(InfoIconsLabels.CUSTOM_FIELDS_INFO_ID_POPUP,
InfoIconsLabels.CUSTOM_FIELDS_INFO_TEXT, InfoIconsLabels.CUSTOM_FIELDS_INFO_CAPTION,
infoIconCustomFields, popoverCustomFields, focusPanelCustomFields, popupOpenedIds);
2020-10-01 15:56:27 +02:00
}
/**
* Test if profile data are valid.
*
* @return the string
*/
private String areProfileDataValid() {
for (MetaDataField metaField : listOfMetadataFields) {
2023-03-15 11:59:25 +01:00
2020-10-01 15:56:27 +02:00
for (MetaDataFieldSkeleton field : metaField.getListOfMetadataFields()) {
field.removeError();
2023-03-15 11:59:25 +01:00
2020-10-01 15:56:27 +02:00
String error = field.isFieldValueValid();
2023-03-15 11:59:25 +01:00
if (error != null) {
2020-10-01 15:56:27 +02:00
field.showError();
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.
*
2023-03-15 11:59:25 +01:00
* @param text the text
* @param type the type
2020-10-01 15:56:27 +02:00
* @param hideAfterAWhile the hide after A while
*/
2023-03-15 11:59:25 +01:00
private void alertOnCreate(String text, AlertType type, boolean hideAfterAWhile) {
// Window.alert("Called alertOnCreate");
2020-10-07 11:15:48 +02:00
onCreateAlertBlock.setText(text);
onCreateAlertBlock.setType(type);
onCreateAlertBlock.setVisible(true);
createButton.setEnabled(true);
2023-03-15 11:59:25 +01:00
// goBackButtonSecondStep.setEnabled(true);
2020-10-01 15:56:27 +02:00
2023-03-15 11:59:25 +01:00
if (hideAfterAWhile) {
2020-10-07 11:15:48 +02:00
// 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.
*
* @param bool the bool
2020-10-01 15:56:27 +02:00
*/
2023-03-15 11:59:25 +01:00
/*
* @UiHandler("resetButton") void resetFormEvent(ClickEvent e){
*
2024-02-05 14:10:57 +01:00
* // delete custom fields for (CustomFieldEntryProfile customField :
2023-03-15 11:59:25 +01:00
* customFieldEntriesList) { customField.removeFromParent(); }
* customFieldEntriesList.clear(); }
*/
2020-10-01 15:56:27 +02:00
/**
2023-03-15 11:59:25 +01:00
* Disable dataset editable fields once the dataset has been successfully
* created.
2020-10-01 15:56:27 +02:00
*/
protected void disableDatasetFields(boolean bool) {
2020-10-01 15:56:27 +02:00
2023-03-15 11:59:25 +01:00
// tagsPanel.freeze();
addCustomFieldButton.setEnabled(!bool);
metadataTypeListbox.setEnabled(!bool);
2020-10-01 15:56:27 +02:00
2024-02-05 14:10:57 +01:00
for (CustomFieldEntryProfile ce : customFieldEntriesList)
ce.freeze(!bool);
2020-10-01 15:56:27 +02:00
// disable profile fields
for (MetaDataField metaField : listOfMetadataFields) {
for (MetaDataFieldSkeleton field : metaField.getListOfMetadataFields()) {
field.freeze(bool);
2020-10-01 15:56:27 +02:00
}
2023-03-15 11:59:25 +01:00
2020-10-01 15:56:27 +02:00
}
2024-02-15 16:27:39 +01:00
// // freeze table of resources
// if (resourcesTwinPanel != null)
// resourcesTwinPanel.freeze(bool);
2023-03-15 11:59:25 +01:00
// TRUE in UPDATE MODE - freeze manage of current content (means file already
// uploaded)
2023-03-15 11:59:25 +01:00
if (uploadedFileBrowse != null) {
uploadedFileBrowse.enableManageOfContent(!bool);
}
2020-10-01 15:56:27 +02:00
}
/**
* change alert block behavior.
*
* @param textToShow the text to show
2023-03-15 11:59:25 +01:00
* @param type the type
* @param visible the visible
2020-10-01 15:56:27 +02:00
*/
2023-03-15 11:59:25 +01:00
private void setAlertBlock(String textToShow, AlertType type, boolean visible) {
2020-10-01 15:56:27 +02:00
infoBlock.setText(textToShow);
infoBlock.setType(type);
infoBlock.setVisible(visible);
}
2023-03-15 11:59:25 +01:00
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);
}
2023-03-15 11:59:25 +01:00
2020-10-07 14:28:10 +02:00
/**
* Show selected profiles.
*
* @param show the show
*/
public void showSelectedProfiles(boolean show) {
this.selectedProfile.setVisible(show);
}
2020-10-12 13:04:20 +02:00
/**
* Adds the listener.
*
* @param listener the listener
*/
2023-03-15 11:59:25 +01: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
*/
2023-03-15 11:59:25 +01: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);
}
2023-03-15 11:59:25 +01:00
/**
* Notify valid form.
*
* @param genericDatasetBean the generic dataset bean
*/
2023-03-15 11:59:25 +01:00
private void notifyValidForm(GenericDatasetBean genericDatasetBean) {
for (GenericFormEventsListener listener : listenersGenericFormEvents) {
2020-10-12 13:04:20 +02:00
listener.onFormDataValid(genericDatasetBean);
}
}
2023-03-15 11:59:25 +01:00
/**
* Notify valid form.
*/
2023-03-15 11:59:25 +01:00
private void notifyOnEditForm() {
for (GenericFormEventsListener listener : listenersGenericFormEvents) {
listener.onFormDataEdit();
}
}
/**
* Notify validation error.
*
* @param throwable the throwable
2023-03-15 11:59:25 +01:00
* @param errorMsg the error msg
*/
2023-03-15 11:59:25 +01:00
private void notifyValidationError(Throwable throwable, String errorMsg) {
// listenersSize();
for (GenericFormEventsListener listener : listenersGenericFormEvents) {
listener.onValidationError(throwable, errorMsg);
}
}
2023-03-15 11:59:25 +01:00
/**
* Gets the creates the button.
*
* @return the creates the button
*/
2020-10-20 15:20:41 +02:00
// public Button getCreateButton() {
// return createButton;
// }
2023-03-15 11:59:25 +01:00
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
}