package org.gcube.portlets.user.geoportaldataentry.client.ui.edit; import org.gcube.application.geoportalcommon.shared.products.BaseConcessioneDV; import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; import org.gcube.application.geoportalcommon.shared.products.paths.FileSetPathsDV; 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.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; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.Tab; 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.event.shared.HandlerManager; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Random; import com.google.gwt.user.client.Timer; 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.FlowPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Widget; /** * The Class EditModeRecord. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * * Sep 17, 2021 */ public class EditModeRecord extends Composite { private static EditModeRecordUiBinder uiBinder = GWT.create(EditModeRecordUiBinder.class); @UiField Tab tabRawUpdate; @UiField Tab tabUploadFiles; @UiField FlowPanel rawUpdatePanel; @UiField ScrollPanel filesUpdatePanel; @UiField Button buttonJSONUpdate; private BaseConcessioneDV selectedConcessione; private RECORD_TYPE recordType; private JSONEditorWrapper jsEditor; private HandlerManager appManagerBus; /** * The Interface EditModeRecordUiBinder. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * * Sep 17, 2021 */ interface EditModeRecordUiBinder extends UiBinder { } /** * Instantiates a new edits the mode record. * * @param appManagerBus the app manager bus * @param selectedConcessione the selected concessione * @param type the type */ public EditModeRecord(HandlerManager appManagerBus, BaseConcessioneDV selectedConcessione, RECORD_TYPE type) { initWidget(uiBinder.createAndBindUi(this)); this.selectedConcessione = selectedConcessione; this.recordType = type; this.appManagerBus = appManagerBus; this.filesUpdatePanel.setHeight("490px"); //filesUpdatePanel.getElement().getStyle().setProperty("maxHeight", "550px"); 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(FileSetPathsDV fileSetPaths) { UpdateFileset updateFileset = new UpdateFileset(selectedConcessione, recordType, fileSetPaths.getFileSetPaths()); filesUpdatePanel.add(updateFileset); } }); } private void instanceJSONEditor() { rawUpdatePanel.clear(); final FlowPanel fp = new FlowPanel(); fp.getElement().setId("jsoneditor" + Random.nextInt()); fp.setHeight("400px"); rawUpdatePanel.add(fp); GeoPortalDataEntryApp.geoportalDataEntryService.getJSONRecord(selectedConcessione.getItemId(), recordType, new AsyncCallback() { @Override public void onSuccess(String jsonData) { GWT.log("Instance JSON Editor with: " + jsonData); jsEditor = JSONEditorWrapper.init(fp.getElement().getId()); jsEditor.setName(selectedConcessione.getNome()); jsEditor.set(jsonData); new Timer() { @Override public void run() { jsEditor.setMode("tree"); } }.schedule(200); } @Override public void onFailure(Throwable caught) { Window.alert(caught.getMessage()); } }); } /** * Bind events. */ private void bindEvents() { buttonJSONUpdate.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { rawUpdatePanel.getElement().addClassName("disable-div"); buttonJSONUpdate.setEnabled(false); final LoaderIcon loader = new LoaderIcon("Updating the project..."); tabRawUpdate.add(loader); GeoPortalDataEntryApp.geoportalDataEntryService.updateRecord(selectedConcessione.getItemId(), jsEditor.getText(), recordType, new AsyncCallback() { @Override public void onFailure(Throwable caught) { buttonJSONUpdate.setEnabled(true); try { rawUpdatePanel.getElement().removeClassName("disable-div"); tabRawUpdate.remove(loader); } catch (Exception e) { // TODO: handle exception } appManagerBus.fireEvent( new ActionOnItemEvent(null, ACTION_ON_ITEM.UPDATED_RECORD)); } @Override public void onSuccess(ConcessioneDV result) { buttonJSONUpdate.setEnabled(true); try { rawUpdatePanel.getElement().removeClassName("disable-div"); tabRawUpdate.remove(loader); } catch (Exception e) { // TODO: handle exception } selectedConcessione = result; instanceJSONEditor(); Window.alert("Project '" + result.getNome() + "' updated correctly"); appManagerBus.fireEvent( new ActionOnItemEvent(null, ACTION_ON_ITEM.UPDATED_RECORD)); } }); } }); } }