2020-10-07 17:04:13 +02:00
|
|
|
package org.gcube.portlets.user.geoportaldataentry.client;
|
|
|
|
|
2020-10-12 16:46:17 +02:00
|
|
|
import java.util.ArrayList;
|
2020-10-08 16:06:58 +02:00
|
|
|
import java.util.Arrays;
|
2020-10-12 13:04:01 +02:00
|
|
|
import java.util.Collection;
|
|
|
|
import java.util.LinkedHashMap;
|
2020-10-08 16:06:58 +02:00
|
|
|
import java.util.List;
|
2020-10-09 16:34:23 +02:00
|
|
|
import java.util.TreeMap;
|
2020-10-08 16:06:58 +02:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataentry.client.events.CreateNewProjectEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataentry.client.events.CreateNewProjectEventHandler;
|
|
|
|
import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsHandler;
|
2020-10-08 16:06:58 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaDataEntryMainForm;
|
2020-10-13 11:52:50 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaMainPanel;
|
2020-10-12 13:04:01 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel;
|
2020-10-20 09:58:56 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon;
|
2020-10-21 16:52:07 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport;
|
2020-11-02 16:48:33 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject;
|
2020-10-21 15:36:50 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig;
|
2020-10-08 16:06:58 +02:00
|
|
|
import org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderServiceAsync;
|
2020-10-08 15:09:25 +02:00
|
|
|
import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm;
|
2020-10-08 16:06:58 +02:00
|
|
|
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
|
2020-10-07 17:04:13 +02:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
import com.github.gwtbootstrap.client.ui.Alert;
|
|
|
|
import com.github.gwtbootstrap.client.ui.Modal;
|
|
|
|
import com.github.gwtbootstrap.client.ui.constants.AlertType;
|
2020-10-07 17:04:13 +02:00
|
|
|
import com.google.gwt.core.client.EntryPoint;
|
|
|
|
import com.google.gwt.core.client.GWT;
|
2020-10-08 15:09:25 +02:00
|
|
|
import com.google.gwt.event.shared.HandlerManager;
|
2020-10-20 09:58:56 +02:00
|
|
|
import com.google.gwt.user.client.Window;
|
2020-10-08 16:06:58 +02:00
|
|
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
2020-11-06 11:27:57 +01:00
|
|
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
2020-10-07 17:04:13 +02:00
|
|
|
import com.google.gwt.user.client.ui.RootPanel;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Entry point classes define <code>onModuleLoad()</code>.
|
|
|
|
*/
|
|
|
|
public class GeoPortalDataEntryApp implements EntryPoint {
|
2020-10-21 15:36:50 +02:00
|
|
|
|
|
|
|
|
2020-10-08 15:09:25 +02:00
|
|
|
/**
|
|
|
|
* The message displayed to the user when the server cannot be reached or
|
|
|
|
* returns an error.
|
|
|
|
*/
|
|
|
|
private static final String SERVER_ERROR = "An error occurred while "
|
|
|
|
+ "attempting to contact the server. Please check your network " + "connection and try again.";
|
|
|
|
|
|
|
|
private static final String DIV_PORTLET_ID = "geoportal-data-entry";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a remote service proxy to talk to the server-side Greeting service.
|
|
|
|
*/
|
2020-10-22 16:50:14 +02:00
|
|
|
private final GeoportalDataEntryServiceAsync greetingService = GWT.create(GeoportalDataEntryService.class);
|
2020-10-08 15:09:25 +02:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
private final HandlerManager appManagerBus = new HandlerManager(null);
|
2020-10-09 16:34:23 +02:00
|
|
|
|
2020-10-12 16:46:17 +02:00
|
|
|
private LinkedHashMap<String, GeoNaFormCardModel> mapForms = new LinkedHashMap<String, GeoNaFormCardModel>();
|
2020-10-09 16:34:23 +02:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
private GeonaDataEntryMainForm geoNaMainForm;
|
|
|
|
|
|
|
|
private Collection<GeoNaFormCardModel> orderedCards;
|
|
|
|
|
|
|
|
private GeonaMainPanel mainPanel;
|
|
|
|
|
2020-11-02 16:48:33 +01:00
|
|
|
private LinkedHashMap<Long, List<GeoNaFormDataObject>> savedMap = new LinkedHashMap<Long, List<GeoNaFormDataObject>>();
|
|
|
|
|
2020-11-06 11:27:57 +01:00
|
|
|
private boolean projectSavedWithSuccess;
|
2020-10-09 16:34:23 +02:00
|
|
|
|
2020-10-08 15:09:25 +02:00
|
|
|
/**
|
|
|
|
* This is the entry point method.
|
|
|
|
*/
|
|
|
|
public void onModuleLoad() {
|
2020-10-19 12:20:38 +02:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
mainPanel = new GeonaMainPanel(appManagerBus);
|
2020-10-13 11:52:50 +02:00
|
|
|
mainPanel.setLoaderVisible("Loading...", true);
|
2020-10-08 16:06:58 +02:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
geoNaMainForm = new GeonaDataEntryMainForm(appManagerBus);
|
2020-10-08 16:06:58 +02:00
|
|
|
|
2020-10-22 16:50:14 +02:00
|
|
|
GeoportalDataEntryServiceAsync.Util.getInstance().getGeonaInitConfig(new AsyncCallback<GeonaISConfig>() {
|
2020-10-21 15:36:50 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(Throwable caught) {
|
|
|
|
Window.alert(ConstantsGeoPortalDataEntryApp.ERROR_ON_INIZIALITAION_STAGE_PLEASE_CONTACT_THE_SUPPORT);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onSuccess(GeonaISConfig result) {
|
|
|
|
|
|
|
|
if(result!=null && result.getgRSecondaryType()!=null && result.getScope()!=null) {
|
|
|
|
callGetMetadataProfiles(result.getScope(), result.getgRSecondaryType());
|
|
|
|
}else
|
|
|
|
Window.alert(ConstantsGeoPortalDataEntryApp.ERROR_ON_INIZIALITAION_STAGE_PLEASE_CONTACT_THE_SUPPORT);
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
bindEvents();
|
|
|
|
mainPanel.addFormPanel(geoNaMainForm);
|
|
|
|
RootPanel.get(DIV_PORTLET_ID).add(mainPanel);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void callGetMetadataProfiles(String scope, String secondaryType) {
|
|
|
|
|
2020-10-08 16:06:58 +02:00
|
|
|
MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScope(scope, secondaryType, new AsyncCallback<List<MetaDataProfileBean>>() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onSuccess(List<MetaDataProfileBean> result) {
|
2020-10-20 09:58:56 +02:00
|
|
|
orderedCards = setGeoNaFormsOrder(result);
|
2020-10-12 13:04:01 +02:00
|
|
|
//ordered values
|
2020-10-20 09:58:56 +02:00
|
|
|
buildNewCards(orderedCards);
|
2020-10-08 16:06:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(Throwable caught) {
|
|
|
|
}
|
|
|
|
});
|
2020-10-08 15:09:25 +02:00
|
|
|
}
|
2020-10-09 16:34:23 +02:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
private void buildNewCards(Collection<GeoNaFormCardModel> orderedCards) {
|
2020-11-06 11:27:57 +01:00
|
|
|
projectSavedWithSuccess = false; //resetting state of saving
|
2020-10-20 09:58:56 +02:00
|
|
|
mainPanel.setLoaderVisible("Loading...", true);
|
|
|
|
resetUI();
|
|
|
|
//ordered values
|
|
|
|
for (GeoNaFormCardModel geonaForm : orderedCards) {
|
2020-10-20 15:25:26 +02:00
|
|
|
|
|
|
|
//TODO TO TEST
|
2020-10-30 15:37:08 +01:00
|
|
|
//if(geonaForm.getFormCardTitle().equals(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO)){
|
2020-10-20 15:25:26 +02:00
|
|
|
|
|
|
|
CreateMetadataForm baseForm = new CreateMetadataForm(Arrays.asList(geonaForm.getMetadataProfileBean()),appManagerBus);
|
|
|
|
geonaForm.setMetadataForm(baseForm);
|
|
|
|
String key = geonaForm.getMetadataProfileBean().getType();
|
|
|
|
if(geonaForm.getFormCardTitle()!=null) {
|
|
|
|
key = geonaForm.getFormCardTitle().getTitle();
|
|
|
|
}
|
|
|
|
geoNaMainForm.addForm(key, geonaForm);
|
|
|
|
mapForms.put(key, geonaForm);
|
|
|
|
|
|
|
|
//}
|
2020-10-20 09:58:56 +02:00
|
|
|
}
|
|
|
|
mainPanel.setLoaderVisible("", false);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void resetUI() {
|
|
|
|
geoNaMainForm.reset();
|
|
|
|
mapForms.clear();
|
|
|
|
}
|
|
|
|
|
2020-10-12 13:04:01 +02:00
|
|
|
private Collection<GeoNaFormCardModel> setGeoNaFormsOrder(List<MetaDataProfileBean> listMetadataProfilesForGeona) {
|
2020-10-09 16:34:23 +02:00
|
|
|
|
2020-10-12 13:04:01 +02:00
|
|
|
TreeMap<Integer, GeoNaFormCardModel> treemapOrderedGeoNaProfiles = new TreeMap<Integer, GeoNaFormCardModel>();
|
2020-10-12 16:46:17 +02:00
|
|
|
|
|
|
|
List<GeoNaFormCardModel> listUnknownType = new ArrayList<GeoNaFormCardModel>();
|
2020-10-12 13:04:01 +02:00
|
|
|
|
2020-10-09 16:34:23 +02:00
|
|
|
for (MetaDataProfileBean metaDataProfileBean : listMetadataProfilesForGeona) {
|
|
|
|
|
|
|
|
String theMetaType = metaDataProfileBean.getType().toLowerCase();
|
2020-10-12 13:04:01 +02:00
|
|
|
GeoNaFormCardModel geonaForm = new GeoNaFormCardModel(metaDataProfileBean, null, null);
|
2020-10-09 16:34:23 +02:00
|
|
|
|
2020-10-13 11:52:50 +02:00
|
|
|
if(theMetaType.contains(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO.getKey().toLowerCase())) {
|
|
|
|
geonaForm.setFormCardTitle(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO);
|
|
|
|
treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO.getOrder(), geonaForm);
|
2020-10-20 11:49:23 +02:00
|
|
|
}else if(theMetaType.contains(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO.getKey().toLowerCase())) {
|
|
|
|
geonaForm.setFormCardTitle(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO);
|
|
|
|
treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO.getOrder(), geonaForm);
|
2020-10-12 13:04:01 +02:00
|
|
|
}else if(theMetaType.contains(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE.getKey().toLowerCase())) {
|
|
|
|
geonaForm.setFormCardTitle(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE);
|
|
|
|
treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE.getOrder(), geonaForm);
|
|
|
|
}else if(theMetaType.contains(ConcessioniFormCardTitle.POSIZIONAMENTO_DELL_AREA_DI_INDAGINE.getKey().toLowerCase())) {
|
|
|
|
geonaForm.setFormCardTitle(ConcessioniFormCardTitle.POSIZIONAMENTO_DELL_AREA_DI_INDAGINE);
|
|
|
|
treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.POSIZIONAMENTO_DELL_AREA_DI_INDAGINE.getOrder(), geonaForm);
|
|
|
|
}else if(theMetaType.contains(ConcessioniFormCardTitle.PIANTA_DI_FINE_SCAVO.getKey().toLowerCase())) {
|
|
|
|
geonaForm.setFormCardTitle(ConcessioniFormCardTitle.PIANTA_DI_FINE_SCAVO);
|
|
|
|
treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.PIANTA_DI_FINE_SCAVO.getOrder(), geonaForm);
|
|
|
|
}else {
|
2020-10-12 16:46:17 +02:00
|
|
|
//adding to unknown list
|
|
|
|
listUnknownType.add(geonaForm);
|
2020-10-09 16:34:23 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-12 16:46:17 +02:00
|
|
|
//adding unknown types
|
|
|
|
for (GeoNaFormCardModel geoNaFormCardModel : listUnknownType) {
|
|
|
|
Integer highestKey = treemapOrderedGeoNaProfiles.lastKey();
|
|
|
|
highestKey++;
|
|
|
|
treemapOrderedGeoNaProfiles.put(highestKey, geoNaFormCardModel);
|
|
|
|
}
|
|
|
|
|
2020-10-12 13:04:01 +02:00
|
|
|
GWT.log("Map size: "+treemapOrderedGeoNaProfiles.size());
|
|
|
|
return treemapOrderedGeoNaProfiles.values();
|
2020-10-09 16:34:23 +02:00
|
|
|
|
|
|
|
}
|
2020-10-20 09:58:56 +02:00
|
|
|
|
|
|
|
|
|
|
|
private void bindEvents() {
|
|
|
|
|
|
|
|
appManagerBus.addHandler(SaveGeonaDataFormsEvent.TYPE, new SaveGeonaDataFormsHandler() {
|
|
|
|
|
|
|
|
@Override
|
2020-11-02 16:48:33 +01:00
|
|
|
public void onSave(final SaveGeonaDataFormsEvent saveGeonaDataFormsEvent) {
|
2020-10-20 09:58:56 +02:00
|
|
|
|
2020-10-21 16:16:53 +02:00
|
|
|
geoNaMainForm.enableButtonSave(false);
|
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
if(saveGeonaDataFormsEvent.getListGeonaDataForms()!=null) {
|
|
|
|
|
|
|
|
final Modal modal = new Modal(true);
|
|
|
|
modal.setCloseVisible(false);
|
2020-11-06 11:27:57 +01:00
|
|
|
modal.setTitle("Saving project...");
|
|
|
|
modal.hide(false);
|
|
|
|
final HorizontalPanel modalContainerPanel = new HorizontalPanel();
|
2020-10-20 09:58:56 +02:00
|
|
|
final LoaderIcon loader = new LoaderIcon();
|
|
|
|
loader.setText("Trying to save the data, please wait...");
|
2020-11-06 11:27:57 +01:00
|
|
|
modalContainerPanel.add(loader);
|
|
|
|
modal.add(modalContainerPanel);
|
|
|
|
|
2020-10-22 16:50:14 +02:00
|
|
|
GeoportalDataEntryServiceAsync.Util.getInstance().saveGeonaDataForms(saveGeonaDataFormsEvent.getListGeonaDataForms(), new AsyncCallback<CommitReport>() {
|
2020-10-20 09:58:56 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(Throwable caught) {
|
2020-11-06 11:27:57 +01:00
|
|
|
modalContainerPanel.clear();
|
|
|
|
modal.setCloseVisible(true);
|
2020-10-22 18:37:04 +02:00
|
|
|
try {
|
|
|
|
modal.remove(loader);
|
|
|
|
}catch (Exception e) {
|
|
|
|
}
|
2020-10-20 09:58:56 +02:00
|
|
|
Alert alert = new Alert(caught.getMessage());
|
|
|
|
alert.setType(AlertType.ERROR);
|
|
|
|
alert.setClose(false);
|
|
|
|
modal.add(alert);
|
2020-10-20 11:49:23 +02:00
|
|
|
//resetUI();
|
2020-10-21 16:16:53 +02:00
|
|
|
geoNaMainForm.enableButtonSave(true);
|
2020-10-20 09:58:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2020-10-21 16:52:07 +02:00
|
|
|
public void onSuccess(CommitReport result) {
|
2020-10-22 18:37:04 +02:00
|
|
|
try {
|
|
|
|
modal.remove(loader);
|
|
|
|
}catch (Exception e) {
|
|
|
|
}
|
2020-10-21 16:52:07 +02:00
|
|
|
Alert alert = new Alert(result.getMsg());
|
|
|
|
switch (result.getState()) {
|
|
|
|
case OK:
|
|
|
|
alert.setType(AlertType.SUCCESS);
|
2020-11-06 11:27:57 +01:00
|
|
|
projectSavedWithSuccess = true;
|
2020-10-22 15:31:59 +02:00
|
|
|
purgeFileUploaded();
|
2020-10-21 16:52:07 +02:00
|
|
|
break;
|
|
|
|
case WARN:
|
|
|
|
alert.setType(AlertType.WARNING);
|
2020-11-02 17:31:11 +01:00
|
|
|
geoNaMainForm.enableButtonSave(true);
|
2020-10-21 16:52:07 +02:00
|
|
|
break;
|
|
|
|
case ERROR:
|
|
|
|
alert.setType(AlertType.ERROR);
|
2020-11-02 17:31:11 +01:00
|
|
|
geoNaMainForm.enableButtonSave(true);
|
2020-10-21 16:52:07 +02:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2020-10-20 09:58:56 +02:00
|
|
|
alert.setClose(false);
|
|
|
|
modal.add(alert);
|
2020-11-06 11:27:57 +01:00
|
|
|
|
2020-11-02 16:48:33 +01:00
|
|
|
try {
|
|
|
|
savedMap.put(result.getRecordId(), saveGeonaDataFormsEvent.getListGeonaDataForms());
|
|
|
|
}catch (Exception e) {
|
|
|
|
// TODO: handle exception
|
|
|
|
}
|
2020-11-02 17:31:11 +01:00
|
|
|
//geoNaMainForm.enableButtonSave(true);
|
2020-10-20 11:49:23 +02:00
|
|
|
//resetUI();
|
2020-10-22 15:31:59 +02:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
}
|
|
|
|
});
|
2020-10-20 11:49:23 +02:00
|
|
|
|
|
|
|
modal.show();
|
2020-10-21 16:16:53 +02:00
|
|
|
}else
|
|
|
|
geoNaMainForm.enableButtonSave(true);
|
2020-10-20 09:58:56 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
appManagerBus.addHandler(CreateNewProjectEvent.TYPE, new CreateNewProjectEventHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onCreateNewProject(CreateNewProjectEvent newProjectEvent) {
|
|
|
|
|
2020-11-06 11:27:57 +01:00
|
|
|
// means the form was not submitted
|
|
|
|
if (savedMap.size() == 0) {
|
|
|
|
boolean confirm = Window.confirm(
|
|
|
|
"Creating a new project, the current project (is not saved) and will be lost, Confirm?");
|
|
|
|
if (confirm)
|
2020-10-20 09:58:56 +02:00
|
|
|
buildNewCards(orderedCards);
|
2020-11-06 11:27:57 +01:00
|
|
|
} else if (projectSavedWithSuccess) {
|
|
|
|
//means the project has been saved
|
|
|
|
buildNewCards(orderedCards);
|
|
|
|
} else {
|
|
|
|
//means the project reported one ore more errors after the submit
|
2020-11-02 16:48:33 +01:00
|
|
|
boolean confirm = Window.confirm("Creating a new project, the web-forms will be cleaned, Confirm?");
|
2020-11-06 11:27:57 +01:00
|
|
|
if (confirm)
|
2020-11-02 16:48:33 +01:00
|
|
|
buildNewCards(orderedCards);
|
|
|
|
}
|
2020-11-06 11:27:57 +01:00
|
|
|
|
2020-10-20 09:58:56 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2020-10-22 15:31:59 +02:00
|
|
|
|
|
|
|
private void purgeFileUploaded() {
|
|
|
|
|
|
|
|
MetadataProfileFormBuilderServiceAsync.Util.getInstance().purgeFilesUploaded(new AsyncCallback<Integer>() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(Throwable caught) {
|
|
|
|
//silent
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onSuccess(Integer result) {
|
|
|
|
GWT.log("Purged "+result+" file/s uploaded");
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2020-10-09 16:34:23 +02:00
|
|
|
|
2020-10-07 17:04:13 +02:00
|
|
|
}
|