geoportal-data-entry-app/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/edit/EditModeRecord.java

240 lines
7.4 KiB
Java
Raw Normal View History

package org.gcube.portlets.user.geoportaldataentry.client.ui.edit;
2022-09-14 10:21:13 +02:00
import java.util.Arrays;
import java.util.List;
import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV;
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
2022-09-14 10:21:13 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.ACTION_PERFORMED_ON_ITEM;
import org.gcube.portlets.user.geoportaldataentry.client.GeoPortalDataEntryApp;
2022-09-14 10:21:13 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.events.OperationPerformedOnItemEvent;
import org.gcube.portlets.user.geoportaldataentry.client.events.OperationPerformedOnItemEventHandler;
2021-09-22 11:38:52 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.ui.edit.jseditor.JSONEditorWrapper;
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.DialogInform;
2021-09-22 11:38:52 +02:00
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
2021-09-22 11:38:52 +02:00
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.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Style.Visibility;
2021-09-22 11:38:52 +02:00
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
2021-09-27 15:28:36 +02:00
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;
2021-09-22 11:38:52 +02:00
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.HTMLPanel;
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);
2021-09-22 11:38:52 +02:00
@UiField
Tab tabRawUpdate;
2021-09-29 16:13:39 +02:00
@UiField
Tab tabUploadFiles;
2021-09-22 11:38:52 +02:00
@UiField
FlowPanel rawUpdatePanel;
@UiField
HTMLPanel filesUpdatePanel;
2021-09-22 11:38:52 +02:00
@UiField
Button buttonJSONUpdate;
private ResultDocumentDV selectedProject;
2021-09-22 11:38:52 +02:00
private JSONEditorWrapper jsEditor;
2021-09-27 15:28:36 +02:00
private HandlerManager appManagerBus;
private final HandlerManager editorManagerBus = new HandlerManager(null);
2021-09-27 15:28:36 +02:00
/**
* The Interface EditModeRecordUiBinder.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Sep 17, 2021
*/
interface EditModeRecordUiBinder extends UiBinder<Widget, EditModeRecord> {
}
2022-09-23 15:40:11 +02:00
public EditModeRecord(HandlerManager appManagerBus, ResultDocumentDV selectedProject) {
initWidget(uiBinder.createAndBindUi(this));
this.selectedProject = selectedProject;
2021-09-27 15:28:36 +02:00
this.appManagerBus = appManagerBus;
2021-09-29 16:13:39 +02:00
this.filesUpdatePanel.setHeight("490px");
// filesUpdatePanel.getElement().getStyle().setProperty("maxHeight", "550px");
2021-09-22 11:38:52 +02:00
// TODO Must be instanceUpdateFilesetEditor
tabUploadFiles.asWidget().getElement().getStyle().setVisibility(Visibility.HIDDEN);
2021-09-22 11:38:52 +02:00
instanceJSONEditor();
2021-09-27 18:32:19 +02:00
instanceUpdateFilesetEditor();
2021-09-22 11:38:52 +02:00
bindEvents();
}
2021-09-27 18:32:19 +02:00
private void instanceUpdateFilesetEditor() {
// Window.alert("instanceUpdateFilesetEditor must be revisited");
2021-09-27 18:32:19 +02:00
/*
* 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(editorManagerBus, selectedProject,
* recordType, fileSetPaths.getFileSetPaths());
* filesUpdatePanel.add(updateFileset); } });
*/
2021-09-27 18:32:19 +02:00
}
public void noUpdateMode() {
buttonJSONUpdate.setVisible(false);
}
2021-09-22 11:38:52 +02:00
private void instanceJSONEditor() {
2021-09-27 15:28:36 +02:00
2021-09-22 11:38:52 +02:00
rawUpdatePanel.clear();
final FlowPanel fp = new FlowPanel();
2021-09-22 11:38:52 +02:00
fp.getElement().setId("jsoneditor" + Random.nextInt());
fp.setHeight("410px");
rawUpdatePanel.add(fp);
2021-09-27 15:28:36 +02:00
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute() {
2021-09-22 11:38:52 +02:00
GeoPortalDataEntryApp.geoportalDataEntryService.getJSONDocumentInTheProject(
selectedProject.getProfileID(), selectedProject.getId(), new AsyncCallback<String>() {
2021-09-22 11:38:52 +02:00
@Override
public void onSuccess(String jsonData) {
GWT.log("Instance JSON Editor with: " + jsonData);
jsEditor = JSONEditorWrapper.init(fp.getElement().getId());
jsEditor.setName(selectedProject.getId());
jsEditor.set(jsonData);
new Timer() {
@Override
public void run() {
jsEditor.setMode("tree");
}
}.schedule(200);
2021-09-22 11:38:52 +02:00
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
});
};
});
2021-09-22 11:38:52 +02:00
}
/**
* Bind events.
*/
private void bindEvents() {
2021-09-22 11:38:52 +02:00
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(selectedProject.getProfileID(),
selectedProject.getId(), jsEditor.getText(), new AsyncCallback<ProjectDV>() {
@Override
public void onFailure(Throwable caught) {
buttonJSONUpdate.setEnabled(true);
try {
rawUpdatePanel.getElement().removeClassName("disable-div");
tabRawUpdate.remove(loader);
} catch (Exception e) {
// TODO: handle exception
}
2022-09-14 10:21:13 +02:00
editorManagerBus.fireEvent(new OperationPerformedOnItemEvent<ResultDocumentDV>(
selectedProject.getProfileID(), Arrays.asList(selectedProject),
ACTION_PERFORMED_ON_ITEM.UPDATED_PROJECT));
2021-09-22 11:38:52 +02:00
}
@Override
public void onSuccess(ProjectDV result) {
buttonJSONUpdate.setEnabled(true);
try {
rawUpdatePanel.getElement().removeClassName("disable-div");
tabRawUpdate.remove(loader);
} catch (Exception e) {
// TODO: handle exception
}
DialogInform di = new DialogInform(null, "Project updated!",
"Project ID '" + result.getId() + "' updated correctly");
di.setZIndex(100000);
di.center();
2022-09-14 10:21:13 +02:00
editorManagerBus.fireEvent(new OperationPerformedOnItemEvent<ResultDocumentDV>(
selectedProject.getProfileID(), Arrays.asList(selectedProject),
ACTION_PERFORMED_ON_ITEM.UPDATED_PROJECT));
}
});
}
});
2022-09-14 10:21:13 +02:00
editorManagerBus.addHandler(OperationPerformedOnItemEvent.TYPE, new OperationPerformedOnItemEventHandler() {
@Override
public <T extends DocumentDV> void onDoActionPerformedFired(
OperationPerformedOnItemEvent<T> actionPerformedOnItemEvent) {
ACTION_PERFORMED_ON_ITEM action = actionPerformedOnItemEvent.getAction();
List<T> items = actionPerformedOnItemEvent.getSelectItems();
if (items != null) {
instanceJSONEditor();
appManagerBus.fireEvent(new OperationPerformedOnItemEvent<ResultDocumentDV>(
2022-09-14 10:21:13 +02:00
selectedProject.getProfileID(), (List<ResultDocumentDV>) items, action));
}
}
});
}
}