From 541c190820d9ad0a32b72573b503a1e239d6865f Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Mon, 27 Sep 2021 18:32:19 +0200 Subject: [PATCH] FileSet upload in progress --- .settings/org.eclipse.wst.common.component | 36 +++- .../client/GeoportalDataEntryService.java | 18 ++ .../GeoportalDataEntryServiceAsync.java | 6 + .../client/ui/edit/EditModeRecord.java | 23 +- .../client/ui/edit/EditModeRecord.ui.xml | 5 +- .../client/ui/edit/UpdateFileset.java | 199 ++++++++++++++++++ .../client/ui/edit/UpdateFileset.ui.xml | 29 +++ .../server/GeoportalDataEntryServiceImpl.java | 55 ++++- 8 files changed, 357 insertions(+), 14 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/UpdateFileset.java create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/UpdateFileset.ui.xml diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 3af9f7e..50f8241 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,5 +1,7 @@ - + + + @@ -7,7 +9,9 @@ - + + + @@ -15,7 +19,9 @@ - + + + @@ -23,7 +29,9 @@ - + + + @@ -31,7 +39,9 @@ - + + + @@ -42,7 +52,9 @@ uses - + + + @@ -50,7 +62,9 @@ - + + + @@ -58,7 +72,9 @@ - + + + @@ -66,7 +82,9 @@ - + + + diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java index e5edde1..768eefb 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java @@ -75,4 +75,22 @@ public interface GeoportalDataEntryService extends RemoteService { String getJSONRecord(String itemId, RECORD_TYPE recordType) throws Exception; ConcessioneDV updateRecord(String itemId, String jsonUpdate, RECORD_TYPE recordType) throws Exception; + + /** + * Read file set paths. + * + * @return the list + * @throws Exception the exception + */ + List readFileSetPaths() throws Exception; + + /** + * Gets the record. + * + * @param itemId the item id + * @param recordType the record type + * @return the record + * @throws Exception the exception + */ + ConcessioneDV getRecord(String itemId, RECORD_TYPE recordType) throws Exception; } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java index 24183fb..3143c1a 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java @@ -60,4 +60,10 @@ public interface GeoportalDataEntryServiceAsync void updateRecord(String itemId, String jsonUpdate, RECORD_TYPE recordType, AsyncCallback callback); + + + void readFileSetPaths(AsyncCallback> callback); + + + void getRecord(String itemId, RECORD_TYPE recordType, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.java index afe6fcd..e05ad80 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.java @@ -1,11 +1,13 @@ package org.gcube.portlets.user.geoportaldataentry.client.ui.edit; +import java.util.List; + import org.gcube.application.geoportalcommon.shared.products.BaseConcessioneDV; import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ACTION_ON_ITEM; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; -import org.gcube.portlets.user.geoportaldataentry.client.events.ActionOnItemEvent; import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalDataEntryApp; +import org.gcube.portlets.user.geoportaldataentry.client.events.ActionOnItemEvent; import org.gcube.portlets.user.geoportaldataentry.client.ui.edit.jseditor.JSONEditorWrapper; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon; @@ -80,9 +82,28 @@ public class EditModeRecord extends Composite { this.appManagerBus = appManagerBus; instanceJSONEditor(); + instanceUpdateFilesetEditor(); bindEvents(); } + private void instanceUpdateFilesetEditor() { + GeoPortalDataEntryApp.geoportalDataEntryService.readFileSetPaths(new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + + } + + @Override + public void onSuccess(List listFileSetPaths) { + UpdateFileset updateFileset = new UpdateFileset(selectedConcessione, recordType, listFileSetPaths); + filesUpdatePanel.add(updateFileset); + } + }); + + } + private void instanceJSONEditor() { rawUpdatePanel.clear(); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.ui.xml index ceab188..aa39d47 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.ui.xml +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.ui.xml @@ -24,7 +24,7 @@ Source Project Editor - You can update the Source Project by editing its JSON model + You can update the Source Project by editing its JSON model data displayed in the following Editor.

@@ -54,8 +54,7 @@ Update the file/s - By choosing a section (e.g. "RELAZIONE di - SCAVO") and + By choosing a section (e.g. "relazione") and uploading new file/s the old one/s will be replaced diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/UpdateFileset.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/UpdateFileset.java new file mode 100644 index 0000000..b73bf5c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/UpdateFileset.java @@ -0,0 +1,199 @@ +package org.gcube.portlets.user.geoportaldataentry.client.ui.edit; + +import java.util.List; + +import org.gcube.application.geoportalcommon.shared.products.BaseConcessioneDV; +import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; +import org.gcube.application.geoportalcommon.shared.products.content.WorkspaceContentDV; +import org.gcube.application.geoportalcommon.shared.products.model.AbstractRelazioneScavoDV; +import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; +import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalDataEntryApp; +import org.gcube.portlets.widgets.mpformbuilder.client.ui.upload.MultipleDilaogUpload; + +import com.github.gwtbootstrap.client.ui.ControlGroup; +import com.github.gwtbootstrap.client.ui.Label; +import com.github.gwtbootstrap.client.ui.ListBox; +import com.github.gwtbootstrap.client.ui.constants.LabelType; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ChangeHandler; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * The Class UpdateFileset. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Sep 27, 2021 + */ +public class UpdateFileset extends Composite { + + private static UpdateFilesetUiBinder uiBinder = GWT.create(UpdateFilesetUiBinder.class); + + /** + * The Interface UpdateFilesetUiBinder. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Sep 27, 2021 + */ + interface UpdateFilesetUiBinder extends UiBinder { + } + + @UiField + ListBox listBoxPaths; + + @UiField + ListBox listBoxIndex; + + @UiField + ControlGroup cgSelectFile; + + @UiField + HTMLPanel uploadFileContainer; + + private List listFileSetPaths; + + private boolean placeholderRemoved = false; + + private String recordId; + + private BaseConcessioneDV selectedConcessione; + + private ConcessioneDV fullConcessione; + + private RECORD_TYPE recordType; + + /** + * Instantiates a new update fileset. + * + * @param listFileSetPaths the list file set paths + */ + public UpdateFileset(BaseConcessioneDV selectedConcessione, RECORD_TYPE recordType, List listFileSetPaths) { + initWidget(uiBinder.createAndBindUi(this)); + this.selectedConcessione = selectedConcessione; + this.recordType = recordType; + this.listFileSetPaths = listFileSetPaths; + listBoxPaths.addItem("Select a section..."); + for (String path : listFileSetPaths) { + listBoxPaths.addItem(path); + } + + // add handler on select + listBoxPaths.addChangeHandler(new ChangeHandler() { + + @Override + public void onChange(ChangeEvent event) { + GWT.log("Profile type selection changed..."); + cgSelectFile.setVisible(false); + + if (!placeholderRemoved) { + listBoxPaths.removeItem(0); // this is the placeholder + placeholderRemoved = true; + } + showUploadFileGUI(); + } + + }); + + GeoPortalDataEntryApp.geoportalDataEntryService.getRecord(selectedConcessione.getItemId(), recordType, + new AsyncCallback() { + + @Override + public void onSuccess(ConcessioneDV theRecord) { + fullConcessione = theRecord; + } + + @Override + public void onFailure(Throwable caught) { + Window.alert(caught.getMessage()); + } + }); + + } + + /** + * Show upload file GUI. + */ + private void showUploadFileGUI() { + uploadFileContainer.setVisible(true); + uploadFileContainer.clear(); + + listBoxIndex.clear(); + cgSelectFile.setVisible(true); + + if (listBoxPaths.getSelectedItemText().contains("abstract_relazione")) { + AbstractRelazioneScavoDV ar = fullConcessione.getAbstractRelazioneScavo(); + if (ar == null) { + showMessage("abstract_relazione " + " NOT AVAILABLE", LabelType.WARNING); + return; + } + fillListBoxToBeReplaced("abstract_relazione", ar.getListWsContent()); + } else if (listBoxPaths.getSelectedItemText().contains("immagini")) { + List listImmagini = fullConcessione.getImmaginiRappresentative(); + if (listImmagini == null || listImmagini.isEmpty()) { + showMessage("immagini " + " NOT AVAILABLE", LabelType.WARNING); + return; + } + for (UploadedImageDV uploadedImageDV : listImmagini) { + fillListBoxToBeReplaced("immagini", uploadedImageDV.getListWsContent()); + } + + } + + if (listBoxIndex.getItemCount() > 1) { + listBoxIndex.addChangeHandler(new ChangeHandler() { + + @Override + public void onChange(ChangeEvent event) { + showFileUploadInteraction(); + } + }); + } + + } + + private void fillListBoxToBeReplaced(String section, List listWSC) { + + listBoxIndex.clear(); + + listBoxIndex.addItem("Select a file..."); + + if (listWSC == null || listWSC.isEmpty()) { + showMessage(section + " DOES NOT CONTAIN FILES", LabelType.WARNING); + return; + } + + for (WorkspaceContentDV wsContent : listWSC) { + String name = wsContent.getName() == null || wsContent.getName().isEmpty() ? wsContent.getLink() + : wsContent.getName(); + listBoxIndex.addItem(name); + } + } + + private void showFileUploadInteraction() { + uploadFileContainer.clear(); + HTML label = new HTML(); + label.setHTML("Going to replace the file into section: " + listBoxIndex.getSelectedItemText() + " with"); + + uploadFileContainer.add(label); + MultipleDilaogUpload holder = new MultipleDilaogUpload(); + uploadFileContainer.add(holder); + } + + private void showMessage(String txt, LabelType type) { + Label l = new Label(); + l.setType(type); + l.setText(txt); + uploadFileContainer.add(l); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/UpdateFileset.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/UpdateFileset.ui.xml new file mode 100644 index 0000000..a161c10 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/UpdateFileset.ui.xml @@ -0,0 +1,29 @@ + + + + .important { + font-weight: bold; + } + + + + + + Section + + + + + + Select File to be replaced + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java index 6938db8..12bc97a 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java @@ -672,7 +672,7 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen Concessione concessione = clientMongo.getById(itemId); return serviceUtil.toJSON(concessione); } - + return null; } catch (Exception e) { @@ -681,4 +681,57 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen "Error occurred on reading the JSON project with id: " + itemId + ". Error: " + e.getMessage()); } } + + + /** + * Gets the record. + * + * @param itemId the item id + * @param recordType the record type + * @return the record + * @throws Exception the exception + */ + @Override + public ConcessioneDV getRecord(String itemId, RECORD_TYPE recordType) throws Exception { + LOG.info("getRecord called with itemId: " + itemId + ", recordType: " + recordType); + try { + + if (itemId == null) + throw new Exception("Item id is null"); + + if (recordType.equals(RECORD_TYPE.CONCESSIONE)) { + SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); + MongoServiceUtil serviceUtil = new MongoServiceUtil(); + MongoConcessioni clientMongo = serviceUtil.getInstanceMongoConcessioni(); + Concessione concessione = clientMongo.getById(itemId); + return ConvertToDataViewModel.toConcessione(concessione); + } + + return null; + + } catch (Exception e) { + LOG.error("Error on reading the record with item id: " + itemId, e); + throw new Exception( + "Error occurred on reading the record with id: " + itemId + ". Error: " + e.getMessage()); + } + } + + /** + * Read file set paths. + * + * @return the list + * @throws Exception the exception + */ + @Override + public List readFileSetPaths() throws Exception { + LOG.info("readFileSetPaths called"); + List fileSetPaths = new ArrayList(); + fileSetPaths.add(Concessione.Paths.ABSTRACT_RELAZIONE); + fileSetPaths.add(Concessione.Paths.RELAZIONE); + fileSetPaths.add(Concessione.Paths.IMMAGINI); + fileSetPaths.add(Concessione.Paths.POSIZIONAMENTO); + fileSetPaths.add(Concessione.Paths.PIANTE); + return fileSetPaths; + + } }