From 77c41f2af2e2e5d10e3e5dea91f96d1318ebacd4 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Wed, 15 Mar 2023 11:59:25 +0100 Subject: [PATCH 1/4] #24515 First version implemented --- .../com.gwtplugins.gdt.eclipse.core.prefs | 5 +- .settings/org.eclipse.jdt.core.prefs | 4 +- .settings/org.eclipse.wst.common.component | 38 +- ....eclipse.wst.common.project.facet.core.xml | 1 - CHANGELOG.md | 7 + pom.xml | 4 +- ...etadataProfileFormBuilderServiceAsync.java | 22 +- .../form/generic/CreateMetadataForm.java | 594 ++++++++++-------- .../form/generic/CreateMetadataForm.ui.xml | 37 +- .../form/generic/UploadedFilesBrowse.java | 123 ++++ .../form/generic/UploadedFilesBrowse.ui.xml | 20 + .../ui/upload/MultipleDilaogUpload.java | 2 +- .../client/ui/utils/CustomLegend.java | 2 +- .../public/MetadataProfileFormBuilder.css | 9 +- .../shared/GenericDatasetBean.java | 38 +- .../shared/metadata/MetaDataProfileBean.java | 124 ++-- .../shared/upload/FileUploaded.java | 41 +- .../shared/upload/FileUploadedRemote.java | 57 ++ 18 files changed, 667 insertions(+), 461 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/UploadedFilesBrowse.java create mode 100644 src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/UploadedFilesBrowse.ui.xml create mode 100644 src/main/java/org/gcube/portlets/widgets/mpformbuilder/shared/upload/FileUploadedRemote.java diff --git a/.settings/com.gwtplugins.gdt.eclipse.core.prefs b/.settings/com.gwtplugins.gdt.eclipse.core.prefs index 692248e..f776ab6 100644 --- a/.settings/com.gwtplugins.gdt.eclipse.core.prefs +++ b/.settings/com.gwtplugins.gdt.eclipse.core.prefs @@ -1,4 +1,5 @@ eclipse.preferences.version=1 -lastWarOutDir=/home/francesco-mangiacrapa/git/metadata-profile-form-builder-widget/target/metadata-profile-form-builder-widget-0.1.0-SNAPSHOT -warSrcDir=src/main/webapp +jarsExcludedFromWebInfLib= +lastWarOutDir=/home/francesco-mangiacrapa/git/metadata-profile-form-builder-widget/target/metadata-profile-form-builder-widget-2.0.0 +warSrcDir= warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 43c8195..cac0df4 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,11 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 3e8e22b..18943d1 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,62 +1,56 @@ - - + + - - + + + - - - - - - - - - - - - - - + + + - + + - + + - + + - + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml index 5f50479..4d54987 100644 --- a/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -2,7 +2,6 @@ - diff --git a/CHANGELOG.md b/CHANGELOG.md index 5250696..f052204 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v2.1.0-SNAPSHOT] - 2023-02-01 + +#### Enhancements + +- [#23188] Improved Legend "is required field" +- [#24515] Managed the files already uploaded + ## [v2.0.0] - 2022-11-14 #### Enhancements diff --git a/pom.xml b/pom.xml index c9fb5cd..d5ffc28 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ org.gcube.portlets.widgets metadata-profile-form-builder-widget jar - 2.0.0 + 2.1.0-SNAPSHOT Metadata Profile Form Builder The Metadata Profile Form Builder is a widget able to build dynamically a web form by reading "gCube Metadata Profile/s" @@ -53,7 +53,7 @@ org.gcube.distribution maven-portal-bom - 3.6.4 + 3.7.0-SNAPSHOT pom import diff --git a/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/MetadataProfileFormBuilderServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/MetadataProfileFormBuilderServiceAsync.java index 56c7e93..550f41d 100644 --- a/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/MetadataProfileFormBuilderServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/MetadataProfileFormBuilderServiceAsync.java @@ -10,17 +10,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback; public interface MetadataProfileFormBuilderServiceAsync { - /** - * GWT-RPC service asynchronous (client-side) interface - * - * @see org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderService - */ - - void getProfilesInTheScope(String scope, String genericResourceSecondaryType, AsyncCallback> callback); - - void getProfileForMetadata(String metadata, - AsyncCallback callback); - /** * Utility class to get the RPC Async interface from client-side code */ @@ -39,6 +28,17 @@ public interface MetadataProfileFormBuilderServiceAsync { } } + /** + * GWT-RPC service asynchronous (client-side) interface + * + * @see org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderService + */ + + void getProfilesInTheScope(String scope, String genericResourceSecondaryType, + AsyncCallback> callback); + + void getProfileForMetadata(String metadata, AsyncCallback callback); + void getUploadStatus(String clientUploadKey, AsyncCallback asyncCallback); void purgeFilesUploaded(AsyncCallback callback); diff --git a/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.java b/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.java index c0c045d..6652b26 100644 --- a/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.java +++ b/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.java @@ -62,108 +62,135 @@ 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. + * * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) */ -public class CreateMetadataForm extends Composite implements HasGenericFormListenerRegistration{ +public class CreateMetadataForm extends Composite implements HasGenericFormListenerRegistration { /** The ui binder. */ - private static EditMetadataFormUiBinder uiBinder = GWT - .create(EditMetadataFormUiBinder.class); + private static EditMetadataFormUiBinder uiBinder = GWT.create(EditMetadataFormUiBinder.class); /** The listeners generic form events. */ private List listenersGenericFormEvents = new ArrayList(); + /** * The Interface EditMetadataFormUiBinder. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * - * Oct 1, 2020 + * Oct 1, 2020 */ - interface EditMetadataFormUiBinder extends - UiBinder { + interface EditMetadataFormUiBinder extends UiBinder { } /** The create dataset main panel. */ - @UiField HTMLPanel createDatasetMainPanel; - + @UiField + HTMLPanel createDatasetMainPanel; + /** The custom fields. */ - @UiField ControlGroup customFields; - + @UiField + ControlGroup customFields; + /** The custom fields group. */ - @UiField ControlGroup customFieldsGroup; - + @UiField + ControlGroup customFieldsGroup; + /** The add custom field button. */ - @UiField Button addCustomFieldButton; - - /** The create button. */ - @UiField Button createButton; - - /** The create button. */ - @UiField Button editButton; + @UiField + Button addCustomFieldButton; -/** The info block. */ + /** The create button. */ + @UiField + Button createButton; + + /** The create button. */ + @UiField + Button editButton; + + /** The info block. */ // @UiField Button resetButton; - @UiField AlertBlock infoBlock; - - /** The on continue alert block. */ - @UiField AlertBlock onContinueAlertBlock; - - /** The on create alert block. */ - @UiField AlertBlock onCreateAlertBlock; - - /** The metadata fields panel. */ - @UiField VerticalPanel metadataFieldsPanel; - - /** The metadata type listbox. */ - @UiField ListBox metadataTypeListbox; - - /** The form first step. */ - @UiField Form formFirstStep; - - /** The form third step. */ - @UiField Form formThirdStep; + @UiField + AlertBlock infoBlock; -/** The selected profile. */ + /** The on continue alert block. */ + @UiField + AlertBlock onContinueAlertBlock; + + /** The on create alert block. */ + @UiField + AlertBlock onCreateAlertBlock; + + /** The metadata fields panel. */ + @UiField + VerticalPanel metadataFieldsPanel; + + @UiField + VerticalPanel filesUploadedPanel; + + /** The metadata type listbox. */ + @UiField + ListBox metadataTypeListbox; + + /** The form first step. */ + @UiField + Form formFirstStep; + + /** The form third step. */ + @UiField + Form formThirdStep; + + /** The selected profile. */ // @UiField Button continueButton; - @UiField Paragraph selectedProfile; - + @UiField + Paragraph selectedProfile; + /** The loader profiles. */ - @UiField LoaderIcon loaderProfiles; - + @UiField + LoaderIcon loaderProfiles; + /** The loader profile information. */ - @UiField LoaderIcon loaderProfileInformation; - //@UiField TagsPanel tagsPanel; + @UiField + LoaderIcon loaderProfileInformation; + // @UiField TagsPanel tagsPanel; /** The info icon types. */ // info panels - @UiField Icon infoIconTypes; - + @UiField + Icon infoIconTypes; + /** The focus panel types. */ - @UiField FocusPanel focusPanelTypes; - + @UiField + FocusPanel focusPanelTypes; + /** The popover types. */ - @UiField Popover popoverTypes; - + @UiField + Popover popoverTypes; + /** The info icon custom fields. */ - @UiField Icon infoIconCustomFields; - + @UiField + Icon infoIconCustomFields; + /** The focus panel custom fields. */ - @UiField FocusPanel focusPanelCustomFields; - + @UiField + FocusPanel focusPanelCustomFields; + /** The popover custom fields. */ - @UiField Popover popoverCustomFields; - + @UiField + Popover popoverCustomFields; + /** The metadata types control group. */ - @UiField ControlGroup metadataTypesControlGroup; - + @UiField + ControlGroup metadataTypesControlGroup; + /** The custom legend. */ - @UiField CustomLegend customLegend; - + @UiField + CustomLegend customLegend; + /** The form builder service. */ - private final MetadataProfileFormBuilderServiceAsync formBuilderService = GWT.create(MetadataProfileFormBuilderService.class); + private final MetadataProfileFormBuilderServiceAsync formBuilderService = GWT + .create(MetadataProfileFormBuilderService.class); /** The Constant NONE_PROFILE. */ private static final String NONE_PROFILE = "none"; @@ -171,13 +198,13 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe /** The Constant ERROR_PRODUCT_CREATION. */ // error/info messages protected static final String ERROR_PRODUCT_CREATION = "There was an error while trying to publish your item."; - + /** The Constant PRODUCT_CREATED_OK. */ protected static final String PRODUCT_CREATED_OK = "Item correctly published!"; - + /** The Constant TRYING_TO_CREATE_PRODUCT. */ private static final String DATA_FORM_FILLED_IN_CORRECTLY = "Very well!!! Data form filled in correclty!"; - + /** The Constant MISSING_PUBLISH_RIGHTS. */ 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."; @@ -196,7 +223,7 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe /** The event bus. */ // event bus private HandlerManager uiBus = new HandlerManager(null); - + private HandlerManager appManagerBus; /** The custom field entries list. */ @@ -208,12 +235,12 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe private List listOfMetadataFields = new ArrayList(); // dataset metadata bean - //private DatasetBean receivedBean; + // private DatasetBean receivedBean; /** The owner. */ // the owner private String owner; - + /** The resources twin panel. */ // resource table private TwinColumnSelectionMainPanel resourcesTwinPanel; @@ -225,14 +252,13 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe /** The name title organization map. */ // map of organization name title private Map nameTitleOrganizationMap = new HashMap(); - + /** The scope. */ private String scope; - + /** The generic resource secondary type. */ private String genericResourceSecondaryType; - /** The metadata profiles. */ private List metadataProfiles; @@ -240,51 +266,74 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe private GenericDatasetBean formDataBean; private OPERATION operationPerfom; - - public enum OPERATION {NEW, UPDATE} + + public enum OPERATION { + NEW, UPDATE + } + + private UploadedFilesBrowse uploadedFileBrowse; /** * Invoked in the most general case. * - * @param scope the scope + * @param scope the scope * @param genericResourceSecondaryType the generic resource secondary type + * @param eventBus the event bus */ public CreateMetadataForm(String scope, String genericResourceSecondaryType, HandlerManager eventBus) { this(eventBus); this.scope = scope; this.genericResourceSecondaryType = genericResourceSecondaryType; showLoadingProfiles(true); - MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScope(scope, genericResourceSecondaryType, new AsyncCallback>() { + MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScope(scope, + genericResourceSecondaryType, new AsyncCallback>() { - @Override - public void onFailure(Throwable caught) { - } + @Override + public void onFailure(Throwable caught) { + } + + @Override + public void onSuccess(List profiles) { + createDatasetFormBody(profiles, null); + showLoadingProfiles(false); + } + + }); - @Override - public void onSuccess(List profiles) { - createDatasetFormBody(profiles); - showLoadingProfiles(false); - } - - }); - } - /** * Instantiates a new creates the dataset form. * - * @param profiles the profiles + * @param profiles the profiles + * @param eventBus the event bus + * @param operation the operation */ public CreateMetadataForm(List profiles, HandlerManager eventBus, OPERATION operation) { this(eventBus); this.operationPerfom = operation; showLoadingProfiles(true); - createDatasetFormBody(profiles); + createDatasetFormBody(profiles, null); + showLoadingProfiles(false); + } + + /** + * Instantiates a new creates the dataset form. + * + * @param profiles the profiles + * @param eventBus the event bus + * @param operation the operation + * @param listFileUploaded the list file uploaded + */ + public CreateMetadataForm(List profiles, HandlerManager eventBus, OPERATION operation, + List listFileUploaded) { + this(eventBus); + this.operationPerfom = operation; + showLoadingProfiles(true); + createDatasetFormBody(profiles, listFileUploaded); showLoadingProfiles(false); } - /** * Show choose profile form. * @@ -294,10 +343,10 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe formFirstStep.setVisible(bool); } - /** * Instantiates a new creates the dataset form. - * @param eventBus2 + * + * @param eventBus2 */ private CreateMetadataForm(HandlerManager eventBus) { initWidget(uiBinder.createAndBindUi(this)); @@ -309,7 +358,6 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe showCustomFieldsEntries(false); } - /** * Show loading profiles. * @@ -319,7 +367,7 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe loaderProfiles.setText("Loading Profiles..."); loaderProfiles.setVisible(bool); } - + /** * Show loading profile information. * @@ -330,7 +378,6 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe loaderProfileInformation.setVisible(bool); } - /** * Bind on events. */ @@ -357,38 +404,38 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe /** * Creates the dataset form body. * - * @param profiles the profiles + * @param profiles the profiles + * @param listFileUploaded the list file uploaded */ - private void createDatasetFormBody(final List profiles){ + private void createDatasetFormBody(final List profiles, List listFileUploaded) { - if(profiles == null){ + if (profiles == null) { setAlertBlock("An unknow error occurred while retrieving types, sorry", AlertType.ERROR, true); - } - else{ + } else { this.metadataProfiles = profiles; - prepareMetadataList(profiles); + prepareMetadataList(profiles, listFileUploaded); metadataTypeListbox.setEnabled(true); } } - /** * Add the items to the listbox and put data into the metadataPanel. * - * @param profiles the profiles + * @param profiles the profiles + * @param listFileUploaded the file uploaded */ - private void prepareMetadataList(final List profiles) { + private void prepareMetadataList(final List profiles, List listFileUploaded) { - if(profiles != null && !profiles.isEmpty()){ - GWT.log("Building form/s for profile/s: "+profiles); - - if(profiles.size()>1) + if (profiles != null && !profiles.isEmpty()) { + GWT.log("Building form/s for profile/s: " + profiles); + + if (profiles.size() > 1) showChooseProfileForm(true); - - for(MetaDataProfileBean metadataBean: profiles){ + + for (MetaDataProfileBean metadataBean : profiles) { metadataTypeListbox.addItem(metadataBean.getType()); } - + // add handler on select metadataTypeListbox.addChangeHandler(new ChangeHandler() { @@ -398,31 +445,32 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe String selectedItemText = metadataTypeListbox.getSelectedItemText(); metadataFieldsPanel.clear(); - if(selectedItemText.equals(NONE_PROFILE)){ + if (selectedItemText.equals(NONE_PROFILE)) { metadataFieldsPanel.setVisible(false); formThirdStep.setVisible(false); selectedProfile.setText("Selected Profile is " + NONE_PROFILE); - //receivedBean.setChosenType(null); - }else{ - //receivedBean.setChosenType(selectedItemText); + // receivedBean.setChosenType(null); + } else { + // receivedBean.setChosenType(selectedItemText); showLoadingProfileInformation(true); formThirdStep.setVisible(true); - customLegend.setText("Insert Information for: "+metadataTypeListbox.getSelectedItemText(), true); + customLegend.setText("Insert Information for: " + metadataTypeListbox.getSelectedItemText(), + true); selectedProfile.setText("Selected Profile is " + metadataTypeListbox.getSelectedItemText()); - addFields(selectedItemText, profiles); + addFields(selectedItemText, profiles, listFileUploaded); showLoadingProfileInformation(false); } } }); - - }else{ + + } else { // just hide this listbox metadataTypesControlGroup.setVisible(false); metadataFieldsPanel.clear(); listOfMetadataFields.clear(); - //receivedBean.setChosenType(null); + // receivedBean.setChosenType(null); } - + Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override @@ -441,13 +489,15 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe /** * Add fields of the selected metadata profile to the widget. * - * @param selectedItem the selected item - * @param listProfiles the list profiles + * @param selectedItem the selected item + * @param listProfiles the list profiles + * @param listFileUploaded the list file uploaded */ - protected void addFields(String selectedItem, List listProfiles) { + protected void addFields(String selectedItem, List listProfiles, + List listFileUploaded) { - for(MetaDataProfileBean bean: listProfiles){ - if(bean.getType().equals(selectedItem)){ + for (MetaDataProfileBean bean : listProfiles) { + if (bean.getType().equals(selectedItem)) { // clear old data listOfMetadataFields.clear(); @@ -458,17 +508,15 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe GWT.log("There are " + categories.size() + " categories for profile " + bean.getTitle()); - if(categories == null || categories.isEmpty()){ + 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); - }*/ - + /* + * 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 { fieldWidget = new MetaDataField(field, uiBus, operationPerfom); @@ -478,29 +526,31 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe GWT.log("Unable to build such widget", e); } } - }else{ + } else { - // create the categories, then parse the fields. Fields do not belonging to a category are put at the end + // 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 fieldsForThisCategory = categoryWrapper.getFieldsForThisCategory(); + if (categoryWrapper.getFieldsForThisCategory() != null + && categoryWrapper.getFieldsForThisCategory().size() > 0) { + CategoryPanel cp = new CategoryPanel(categoryWrapper.getTitle(), + categoryWrapper.getDescription()); + List 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); - }*/ - + + /* + * 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 { - fieldWidget = new MetaDataField(metadataFieldWrapper, uiBus,operationPerfom); + fieldWidget = new MetaDataField(metadataFieldWrapper, uiBus, operationPerfom); cp.addField(fieldWidget); listOfMetadataFields.add(fieldWidget); } catch (Exception e) { @@ -514,16 +564,14 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe // 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); - }*/ - + + /* + * 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 { fieldWidget = new MetaDataField(field, uiBus, operationPerfom); @@ -538,8 +586,13 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe metadataFieldsPanel.setVisible(true); } } - } + if (listFileUploaded != null && listFileUploaded.size() > 0) { + filesUploadedPanel.setVisible(true); + uploadedFileBrowse = new UploadedFilesBrowse(listFileUploaded); + filesUploadedPanel.add(uploadedFileBrowse); + } + } /** * Adds the custom field event. @@ -547,7 +600,7 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe * @param e the e */ @UiHandler("addCustomFieldButton") - void addCustomFieldEvent(ClickEvent e){ + void addCustomFieldEvent(ClickEvent e) { CustomFieldEntry toAdd = new CustomFieldEntry(uiBus, "", "", true); customFieldEntriesList.add(toAdd); @@ -555,23 +608,22 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe } - /** * Creates the dataset event. * * @param e the e */ @UiHandler("createButton") - void createDatasetEvent(ClickEvent e){ + 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{ + if (errorMessage != null) { + alertOnCreate("Please check the inserted values and the mandatory fields [" + errorMessage + "]", + AlertType.ERROR, true); + } else { - //Set tags = new HashSet(tagsPanel.getTags()); + // Set tags = new HashSet(tagsPanel.getTags()); List groups = new ArrayList(); List groupsToForceCreation = new ArrayList(); LinkedHashMap> customFieldsMap = new LinkedHashMap>(); @@ -579,42 +631,44 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe // prepare custom fields for (MetaDataField metaField : listOfMetadataFields) { - + for (MetaDataFieldSkeleton field : metaField.getListOfMetadataFields()) { - + switch (field.getField().getType()) { case File: DialogUpload dUpload = (DialogUpload) field.getHolder(); - //adding it only if exists - if(dUpload.getFileUploadingState()!=null) + // adding it only if exists + if (dUpload.getFileUploadingState() != null) listFilesUploaded.add(dUpload.getFileUploadingState().getFile()); break; default: List valuesForField = field.getFieldCurrentValue(); - if(!valuesForField.isEmpty()){ + if (!valuesForField.isEmpty()) { String key = field.getFieldNameQualified(); List valuesForThisField = null; - if(customFieldsMap.containsKey(key)) + if (customFieldsMap.containsKey(key)) valuesForThisField = customFieldsMap.get(key); else valuesForThisField = new ArrayList(); - + valuesForThisField.addAll(valuesForField); customFieldsMap.put(key, valuesForThisField); - + // get also tag/group if it is the case for this field // List tagsField = field.getTagFromThisField(); // if(tagsField != null) // tags.addAll(tagsField); - + List groupsTitle = field.getGroupTitleFromThisGroup(); - if(groupsTitle != null){ + if (groupsTitle != null) { for (String groupTitle : groupsTitle) { - if(field.isGroupToForce()) - groupsToForceCreation.add(new OrganizationBean(groupTitle, groupTitle, false, field.isPropagateUp())); + if (field.isGroupToForce()) + groupsToForceCreation.add(new OrganizationBean(groupTitle, groupTitle, false, + field.isPropagateUp())); else - groups.add(new OrganizationBean(groupTitle, groupTitle, false, field.isPropagateUp())); + groups.add(new OrganizationBean(groupTitle, groupTitle, false, + field.isPropagateUp())); } } } @@ -623,12 +677,12 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe } } - for(CustomFieldEntry customEntry : customFieldEntriesList){ + for (CustomFieldEntry customEntry : customFieldEntriesList) { String key = customEntry.getKey(); String value = customEntry.getValue(); - if(value != null && !value.isEmpty()){ + if (value != null && !value.isEmpty()) { List valuesForThisField = null; - if(customFieldsMap.containsKey(key)) + if (customFieldsMap.containsKey(key)) valuesForThisField = customFieldsMap.get(key); else valuesForThisField = new ArrayList(); @@ -637,10 +691,20 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe } } - + GenericDatasetBean gdb = new GenericDatasetBean(); gdb.setMetadataProfileList(metadataProfiles); gdb.setFormDataEntryFields(customFieldsMap); + + // THIS IS TRUE IN UPDATE MODE + if (uploadedFileBrowse != null) { + List 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; @@ -654,14 +718,14 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe notifyValidForm(gdb); } } - + /** * Edits the button click handler. * * @param e the e */ @UiHandler("editButton") - void editButtonClickHandler(ClickEvent e){ + void editButtonClickHandler(ClickEvent e) { formDataBean = null; createButton.setEnabled(true); createButton.setVisible(true); @@ -670,8 +734,7 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe disableDatasetFields(false); notifyOnEditForm(); } - - + /** * Checks if is form data valid. * @@ -679,19 +742,18 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe */ public boolean isFormDataValid() { - //means no error - if(areProfileDataValid() == null) { - //means created button already fired - if(formDataBean != null) { + // means no error + if (areProfileDataValid() == null) { + // means created button already fired + if (formDataBean != null) { return true; - }else { + } else { alertOnCreate("Please press the button 'Create' to confirm your data entries", AlertType.ERROR, true); } } return false; } - - + /** * Gets the form data bean. * @@ -707,30 +769,17 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe private void prepareInfoIcons() { // tags - //tagsPanel.prepareIcon(popupOpenedIds); - + // tagsPanel.prepareIcon(popupOpenedIds); // profiles (or types) - InfoIconsLabels.preparePopupPanelAndPopover( - InfoIconsLabels.PROFILES_INFO_ID_POPUP, - InfoIconsLabels.PROFILES_INFO_TEXT, - InfoIconsLabels.PROFILES_INFO_CAPTION, - infoIconTypes, - popoverTypes, - focusPanelTypes, - popupOpenedIds - ); + 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 - ); + InfoIconsLabels.preparePopupPanelAndPopover(InfoIconsLabels.CUSTOM_FIELDS_INFO_ID_POPUP, + InfoIconsLabels.CUSTOM_FIELDS_INFO_TEXT, InfoIconsLabels.CUSTOM_FIELDS_INFO_CAPTION, + infoIconCustomFields, popoverCustomFields, focusPanelCustomFields, popupOpenedIds); } /** @@ -741,13 +790,13 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe private String areProfileDataValid() { for (MetaDataField metaField : listOfMetadataFields) { - + for (MetaDataFieldSkeleton field : metaField.getListOfMetadataFields()) { field.removeError(); - + String error = field.isFieldValueValid(); - if(error != null){ + if (error != null) { field.showError(); String errorMsg = field.getFieldNameOriginal() + " is not valid. Suggestion: " + error; notifyValidationError(null, errorMsg); @@ -762,20 +811,20 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe /** * On continue show alert box and enable buttons. * - * @param text the text - * @param type the type + * @param text the text + * @param type the type * @param hideAfterAWhile the hide after A while */ - private void alertOnCreate(String text, AlertType type, boolean hideAfterAWhile){ - - //Window.alert("Called alertOnCreate"); + private void alertOnCreate(String text, AlertType type, boolean hideAfterAWhile) { + + // Window.alert("Called alertOnCreate"); onCreateAlertBlock.setText(text); onCreateAlertBlock.setType(type); onCreateAlertBlock.setVisible(true); createButton.setEnabled(true); - //goBackButtonSecondStep.setEnabled(true); + // goBackButtonSecondStep.setEnabled(true); - if(hideAfterAWhile){ + if (hideAfterAWhile) { // hide after some seconds Timer t = new Timer() { @@ -795,26 +844,25 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe * * @param bool the bool */ - /*@UiHandler("resetButton") - void resetFormEvent(ClickEvent e){ - - // delete custom fields - for (CustomFieldEntry customField : customFieldEntriesList) { - customField.removeFromParent(); - } - customFieldEntriesList.clear(); - }*/ + /* + * @UiHandler("resetButton") void resetFormEvent(ClickEvent e){ + * + * // delete custom fields for (CustomFieldEntry customField : + * customFieldEntriesList) { customField.removeFromParent(); } + * customFieldEntriesList.clear(); } + */ /** - * Disable dataset editable fields once the dataset has been successfully created. + * Disable dataset editable fields once the dataset has been successfully + * created. */ protected void disableDatasetFields(boolean bool) { - //tagsPanel.freeze(); + // tagsPanel.freeze(); addCustomFieldButton.setEnabled(!bool); metadataTypeListbox.setEnabled(!bool); - for(CustomFieldEntry ce: customFieldEntriesList) + for (CustomFieldEntry ce : customFieldEntriesList) ce.freeze(!bool); // disable profile fields @@ -822,29 +870,36 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe for (MetaDataFieldSkeleton field : metaField.getListOfMetadataFields()) { field.freeze(bool); } - + } // freeze table of resources - if(resourcesTwinPanel != null) + if (resourcesTwinPanel != null) resourcesTwinPanel.freeze(bool); + + // TRUE in UPDATE MODE - freeze manage of current content (means file already uploaded) + if (uploadedFileBrowse != null) { + + uploadedFileBrowse.enableManageOfContent(!bool); + + } } /** * change alert block behavior. * * @param textToShow the text to show - * @param type the type - * @param visible the visible + * @param type the type + * @param visible the visible */ - private void setAlertBlock(String textToShow, AlertType type, boolean visible){ + private void setAlertBlock(String textToShow, AlertType type, boolean visible) { infoBlock.setText(textToShow); infoBlock.setType(type); infoBlock.setVisible(visible); } - + /** * Show custom fields entries. * @@ -854,7 +909,7 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe this.customFields.setVisible(show); this.customFieldsGroup.setVisible(show); } - + /** * Show selected profiles. * @@ -864,14 +919,18 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe this.selectedProfile.setVisible(show); } - /** * Adds the listener. * * @param listener the listener */ - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.mpformbuilder.client.form.generic.GenericFormEvents.HasGenericFormListenerRegistration#addListener(org.gcube.portlets.widgets.mpformbuilder.client.form.generic.GenericFormEvents.GenericFormEventsListener) + /* + * (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) { @@ -883,14 +942,18 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe } } - /** * Removes the listener. * * @param listener the listener */ - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.mpformbuilder.client.form.generic.GenericFormEvents.HasGenericFormListenerRegistration#removeListener(org.gcube.portlets.widgets.mpformbuilder.client.form.generic.GenericFormEvents.GenericFormEventsListener) + /* + * (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) { @@ -898,44 +961,42 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe if (listener != null) listenersGenericFormEvents.remove(listener); } - - + /** * Notify valid form. * * @param genericDatasetBean the generic dataset bean */ - private void notifyValidForm(GenericDatasetBean genericDatasetBean){ + private void notifyValidForm(GenericDatasetBean genericDatasetBean) { for (GenericFormEventsListener listener : listenersGenericFormEvents) { listener.onFormDataValid(genericDatasetBean); } } - + /** * Notify valid form. * * @param genericDatasetBean the generic dataset bean */ - private void notifyOnEditForm(){ + private void notifyOnEditForm() { for (GenericFormEventsListener listener : listenersGenericFormEvents) { listener.onFormDataEdit(); } } - /** * Notify validation error. * * @param throwable the throwable - * @param errorMsg the error msg + * @param errorMsg the error msg */ - private void notifyValidationError(Throwable throwable, String errorMsg){ + private void notifyValidationError(Throwable throwable, String errorMsg) { // listenersSize(); for (GenericFormEventsListener listener : listenersGenericFormEvents) { listener.onValidationError(throwable, errorMsg); } } - + /** * Gets the creates the button. * @@ -944,8 +1005,7 @@ public class CreateMetadataForm extends Composite implements HasGenericFormListe // public Button getCreateButton() { // return createButton; // } - - + /** * Gets the metadata profiles. * diff --git a/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.ui.xml b/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.ui.xml index 9ecca45..7f1b430 100644 --- a/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/CreateMetadataForm.ui.xml @@ -59,10 +59,6 @@ Choose a Profile - - - - @@ -91,18 +87,11 @@ - - - - - - - @@ -112,14 +101,6 @@ - - - - - - - - Insert Information @@ -135,6 +116,9 @@ + + - - - - - - - - - Create Edit - - - - - diff --git a/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/UploadedFilesBrowse.java b/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/UploadedFilesBrowse.java new file mode 100644 index 0000000..5cebe5f --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/mpformbuilder/client/form/generic/UploadedFilesBrowse.java @@ -0,0 +1,123 @@ +package org.gcube.portlets.widgets.mpformbuilder.client.form.generic; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + +import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded; + +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.constants.IconType; +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.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.FlexTable; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; + +public class UploadedFilesBrowse extends Composite { + + private static UploadedFilesBrowseUiBinder uiBinder = GWT.create(UploadedFilesBrowseUiBinder.class); + + interface UploadedFilesBrowseUiBinder extends UiBinder { + } + + private List listFileUploaded; + // private HashMap mapForCCUploading; + + @UiField + HTMLPanel uploadFileContainer; + + private FlexTable table = new FlexTable(); + + private List