package org.gcube.portlets.user.geoportaldataentry.client.ui.edit; import java.util.ArrayList; 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.LayerConcessioneDV; import org.gcube.application.geoportalcommon.shared.products.model.RelazioneScavoDV; 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.form.MetaDataField; import org.gcube.portlets.widgets.mpformbuilder.client.ui.metadata.MetaDataFieldSkeleton; import org.gcube.portlets.widgets.mpformbuilder.client.ui.upload.DialogUpload; import org.gcube.portlets.widgets.mpformbuilder.shared.GenericDatasetBean; import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.DataTypeWrapper; import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper; import org.gcube.portlets.widgets.mpformbuilder.shared.upload.FileUploaded; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.ControlGroup; import com.github.gwtbootstrap.client.ui.Controls; 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.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlexTable; 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 final String _FORM_FIELDS_SIZE = "740px"; 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 ControlGroup cgSelectFile; @UiField Controls controlsContent; @UiField HTMLPanel uploadFileContainer; @UiField Button buttonUpdate; private List listFileSetPaths; private boolean placeholderListBoxPaths = true; private BaseConcessioneDV selectedConcessione; private ConcessioneDV fullConcessione; private RECORD_TYPE recordType; private boolean placeholderListBoxIndex = true; private HandlerManager uiBus = new HandlerManager(null); private MetaDataField fieldUploadWidget; private Integer pathIndex = null; /** * 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); } listBoxPaths.setWidth(_FORM_FIELDS_SIZE); // add handler on select listBoxPaths.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { GWT.log("Profile type selection changed..."); cgSelectFile.setVisible(false); if (placeholderListBoxPaths) { listBoxPaths.removeItem(0); // this is the placeholder, removing it once placeholderListBoxPaths = false; } 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()); } }); buttonUpdate.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String errorMsg = checkValidUpload(); if (errorMsg == null) { List listFilesUploaded = new ArrayList(); List listMetaDataFieldSkeleton = fieldUploadWidget.getListOfMetadataFields(); for (MetaDataFieldSkeleton field : listMetaDataFieldSkeleton) { DialogUpload dUpload = (DialogUpload) field.getHolder(); // adding it only if exists if (dUpload.getFileUploadingState() != null) listFilesUploaded.add(dUpload.getFileUploadingState().getFile()); } GenericDatasetBean gdb = new GenericDatasetBean(); gdb.setFilesUploaded(listFilesUploaded); // adding it only if exists GWT.log("Section selected: " + listBoxPaths.getSelectedItemText()); GWT.log("Content index selected: " + pathIndex); GWT.log("FileUploaded selected: " + gdb.getFilesUploaded()); } else { Window.alert(errorMsg); } } }); } /** * Show upload file GUI. */ private void showUploadFileGUI() { uploadFileContainer.setVisible(true); buttonUpdate.setVisible(false); uploadFileContainer.clear(); controlsContent.clear(); placeholderListBoxIndex = true; fieldUploadWidget = null; pathIndex = null; // listBoxIndex.clear(); cgSelectFile.setVisible(true); ListBox listBoxContentIndex = new ListBox(); listBoxContentIndex.setWidth(_FORM_FIELDS_SIZE); listBoxContentIndex.addItem("Select a content..."); if (listBoxPaths.getSelectedItemText().contains("abstract_relazione")) { AbstractRelazioneScavoDV ar = fullConcessione.getAbstractRelazioneScavo(); if (ar == null) { showMessage("abstract_relazione" + " NOT AVAILABLE", LabelType.WARNING); return; } int posizIndex = 0; fillListBoxToBeReplaced(listBoxContentIndex, "abstract_relazione", posizIndex, ar.getTitolo(), ar.getListWsContent()); } else if (listBoxPaths.getSelectedItemText().contains("immagini")) { List listImmagini = fullConcessione.getImmaginiRappresentative(); if (listImmagini == null || listImmagini.isEmpty()) { showMessage("immagini" + " NOT AVAILABLE", LabelType.WARNING); return; } int posizIndex = 0; for (UploadedImageDV uploadedImageDV : listImmagini) { fillListBoxToBeReplaced(listBoxContentIndex, "immagini", posizIndex, uploadedImageDV.getTitolo(), uploadedImageDV.getListWsContent()); posizIndex++; } } else if (listBoxPaths.getSelectedItemText().contains("relazione")) { RelazioneScavoDV realzione = fullConcessione.getRelazioneScavo(); if (realzione == null || realzione.getListWsContent() == null) { showMessage("relazione" + " NOT AVAILABLE", LabelType.WARNING); return; } int posizIndex = 0; fillListBoxToBeReplaced(listBoxContentIndex, "relazione", posizIndex, realzione.getTitolo(), realzione.getListWsContent()); } else if (listBoxPaths.getSelectedItemText().contains("posizionamentoScavo")) { LayerConcessioneDV posiz = fullConcessione.getPosizionamentoScavo(); if (posiz == null || posiz.getListWsContent() == null || posiz.getListWsContent().isEmpty()) { showMessage("posizionamentoScavo" + " NOT AVAILABLE", LabelType.WARNING); return; } int posizIndex = 0; fillListBoxToBeReplaced(listBoxContentIndex, "posizionamentoScavo", posizIndex, posiz.getTitolo(), posiz.getListWsContent()); } else if (listBoxPaths.getSelectedItemText().contains("piante")) { List piante = fullConcessione.getPianteFineScavo(); if (piante == null || piante.isEmpty()) { showMessage("piante" + " NOT AVAILABLE", LabelType.WARNING); return; } int posizIndex = 0; for (LayerConcessioneDV lcDV : piante) { fillListBoxToBeReplaced(listBoxContentIndex, "piante", posizIndex, lcDV.getTitolo(), lcDV.getListWsContent()); posizIndex++; } } controlsContent.add(listBoxContentIndex); } private void fillListBoxToBeReplaced(ListBox listBoxContentIndex, String section, int posizIndex, String title, List listWSC) { if (listWSC == null || listWSC.isEmpty()) { showMessage(section + " DOES NOT CONTAIN FILES", LabelType.WARNING); return; } listBoxContentIndex.addItem(title, posizIndex + ""); // adding handler once if (posizIndex == 0) { listBoxContentIndex.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { if (placeholderListBoxIndex) { listBoxContentIndex.removeItem(0); // this is the placeholder, removing it once placeholderListBoxIndex = false; } showFileBrowseInteraction(listBoxContentIndex.getSelectedIndex(), listWSC); } }); } // } private void showFileBrowseInteraction(int pathContentIndex, List listWSC) { uploadFileContainer.clear(); pathIndex = pathContentIndex; if (listWSC.size() > 0) { FlexTable table = new FlexTable(); table.addStyleName("table-current-content"); table.setHTML(0, 0, "Current content:"); table.setHTML(1, 0, "Filename"); table.setHTML(1, 1, "MimeType"); table.setHTML(1, 2, "Link"); int i = 2; for (WorkspaceContentDV wsContent : listWSC) { table.setHTML(i, 0, wsContent.getName()); table.setHTML(i, 1, wsContent.getMimetype()); String link = "Download"; table.setHTML(i, 2, link); i++; } uploadFileContainer.add(table); } HTML label = new HTML(); label.getElement().getStyle().setMarginTop(10, Unit.PX); label.setHTML("With new content:"); uploadFileContainer.add(label); // mDU = new MultipleDilaogUpload(); MetadataFieldWrapper uploadField = new MetadataFieldWrapper(); uploadField.setFieldName("File"); uploadField.setMandatory(true); uploadField.setType(DataTypeWrapper.File); uploadField.setMaxOccurs(1000); try { fieldUploadWidget = new MetaDataField(uploadField, uiBus); // BrowseFilePanel fieldsetContent = new BrowseFilePanel(fieldUploadWidget); uploadFileContainer.add(fieldUploadWidget); buttonUpdate.setVisible(true); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Test if profile data are valid. * * @return the string */ private String checkValidUpload() { if (fieldUploadWidget == null) return "No file uploaded"; for (MetaDataFieldSkeleton field : fieldUploadWidget.getListOfMetadataFields()) { field.removeError(); String error = field.isFieldValueValid(); if (error != null) { field.showError(); String errorMsg = field.getFieldNameOriginal() + " is not valid. Suggestion: " + error; return errorMsg; } } return null; } private void showMessage(String txt, LabelType type) { Label l = new Label(); l.setType(type); l.setText(txt); uploadFileContainer.add(l); } }