198 lines
5.8 KiB
Java
198 lines
5.8 KiB
Java
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.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.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
|
|
FlowPanel rawUpdatePanel;
|
|
|
|
@UiField
|
|
FlowPanel 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<Widget, EditModeRecord> {
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
|
|
instanceJSONEditor();
|
|
instanceUpdateFilesetEditor();
|
|
bindEvents();
|
|
}
|
|
|
|
private void instanceUpdateFilesetEditor() {
|
|
GeoPortalDataEntryApp.geoportalDataEntryService.readFileSetPaths(new AsyncCallback<FileSetPathsDV>() {
|
|
|
|
@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<String>() {
|
|
|
|
@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<ConcessioneDV>() {
|
|
|
|
@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<ConcessioneDV>(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<ConcessioneDV>(null, ACTION_ON_ITEM.UPDATED_RECORD));
|
|
}
|
|
});
|
|
|
|
}
|
|
});
|
|
|
|
}
|
|
}
|