From 30cedd93766efb4ae8fbbed9f30e604649ff4033 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 5 Aug 2021 16:49:04 +0200 Subject: [PATCH] Delete Operation done --- .../client/GeoPortalDataEntryApp.java | 565 +++++++++++------- .../client/GeoportalDataEntryService.java | 22 +- .../GeoportalDataEntryServiceAsync.java | 8 +- .../client/ui/GeonaMainPanel.java | 101 ---- .../client/ui/GeonaMainPanel.ui.xml | 28 - .../client/ui/GeonaMainTabPanel.java | 142 +++++ .../client/ui/GeonaMainTabPanel.ui.xml | 52 ++ .../client/ui/GeonaNavigationBar.java | 74 --- .../client/ui/GeonaNavigationBar.ui.xml | 20 - .../client/ui/GeonaRecordsPaginatedView.java | 26 +- .../client/ui/table/ItemsTable.java | 33 - .../client/ui/utils/DialogConfirm.java | 152 +++++ .../client/ui/utils/NewBrowserWindow.java | 30 + .../server/GeoportalDataEntryServiceImpl.java | 64 +- .../server/SessionUtil.java | 85 ++- 15 files changed, 868 insertions(+), 534 deletions(-) delete mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainPanel.java delete mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainPanel.ui.xml create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml delete mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaNavigationBar.java delete mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaNavigationBar.ui.xml create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/utils/DialogConfirm.java create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/utils/NewBrowserWindow.java diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java index 7bac626..03ef45b 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoPortalDataEntryApp.java @@ -8,22 +8,28 @@ import java.util.List; import java.util.TreeMap; import org.gcube.application.geoportalcommon.shared.GeoNaItemRef; +import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; +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.events.ActionOnItemEvent; +import org.gcube.portlets.user.geoportaldataentry.client.events.ActionOnItemEventHandler; 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.GetListOfRecordsEvent; import org.gcube.portlets.user.geoportaldataentry.client.events.GetListOfRecordsEventHandler; import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsEvent; import org.gcube.portlets.user.geoportaldataentry.client.events.SaveGeonaDataFormsHandler; -import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaMainPanel; +import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaMainTabPanel; import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaRecordsPaginatedView; import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel; import org.gcube.portlets.user.geoportaldataentry.client.ui.form.GeonaDataEntryMainForm; import org.gcube.portlets.user.geoportaldataentry.client.ui.report.ReportTemplateToHTML; import org.gcube.portlets.user.geoportaldataentry.client.ui.table.ItemsTable.DISPLAY_FIELD; +import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.DialogConfirm; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.HTMLUtil.HTML_TAG; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon; +import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.NewBrowserWindow; import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject; import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig; @@ -36,6 +42,8 @@ import com.github.gwtbootstrap.client.ui.Modal; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.core.client.EntryPoint; 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.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -48,7 +56,6 @@ import com.google.gwt.user.client.ui.VerticalPanel; * Entry point classes define onModuleLoad(). */ public class GeoPortalDataEntryApp implements EntryPoint { - /** * The message displayed to the user when the server cannot be reached or @@ -67,27 +74,27 @@ public class GeoPortalDataEntryApp implements EntryPoint { private final HandlerManager appManagerBus = new HandlerManager(null); private LinkedHashMap mapForms = new LinkedHashMap(); - + private GeonaDataEntryMainForm geoNaMainForm; - + private Collection orderedCards; - - private GeonaMainPanel mainPanel; - + + private GeonaMainTabPanel mainTabPanel; + private LinkedHashMap> savedMap = new LinkedHashMap>(); - + private boolean projectSavedWithSuccess; - + /** * This is the entry point method. */ public void onModuleLoad() { - - mainPanel = new GeonaMainPanel(appManagerBus); - mainPanel.setLoaderVisible("Loading...", true); - + + mainTabPanel = new GeonaMainTabPanel(appManagerBus); + mainTabPanel.setLoaderVisible("Loading...", true); + geoNaMainForm = new GeonaDataEntryMainForm(appManagerBus); - + GeoportalDataEntryServiceAsync.Util.getInstance().getGeonaInitConfig(new AsyncCallback() { @Override @@ -97,131 +104,137 @@ public class GeoPortalDataEntryApp implements EntryPoint { @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) { - - MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScope(scope, secondaryType, new AsyncCallback>() { - - @Override - public void onSuccess(List result) { - GWT.log("Returned "+result.size()+ "profile/s"); - orderedCards = setGeoNaFormsOrder(result); - //ordered values - buildNewCards(orderedCards); - } - - @Override - public void onFailure(Throwable caught) { - } - }); - } - - private void buildNewCards(Collection orderedCards) { - projectSavedWithSuccess = false; //resetting state of saving - mainPanel.setFormPanelVisible(true); - mainPanel.setLoaderVisible("Loading...", true); - resetUI(); - //ordered values - for (GeoNaFormCardModel geonaForm : orderedCards) { - - //TODO TO TEST - //if(geonaForm.getFormCardTitle().equals(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE)){ - GWT.log("Adding card: "+geonaForm.getFormCardTitle()); - 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); - - //} + 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(); + mainTabPanel.addFormPanel(geoNaMainForm); + RootPanel.get(DIV_PORTLET_ID).add(mainTabPanel); + } + + private void callGetMetadataProfiles(String scope, String secondaryType) { + + MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScope(scope, secondaryType, + new AsyncCallback>() { + + @Override + public void onSuccess(List result) { + GWT.log("Returned " + result.size() + "profile/s"); + orderedCards = setGeoNaFormsOrder(result); + // ordered values + buildNewCards(orderedCards); + } + + @Override + public void onFailure(Throwable caught) { + } + }); + } + + private void buildNewCards(Collection orderedCards) { + projectSavedWithSuccess = false; // resetting state of saving + mainTabPanel.setLoaderVisible("Loading...", true); + resetUI(); + // ordered values + for (GeoNaFormCardModel geonaForm : orderedCards) { + + // TODO TO TEST + // if(geonaForm.getFormCardTitle().equals(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE)){ + + GWT.log("Adding card: " + geonaForm.getFormCardTitle()); + 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); + + // } } geoNaMainForm.enableButtonSave(true); - mainPanel.setLoaderVisible("", false); + mainTabPanel.setLoaderVisible("", false); } - + private void resetUI() { geoNaMainForm.reset(); mapForms.clear(); } - + private Collection setGeoNaFormsOrder(List listMetadataProfilesForGeona) { - + TreeMap treemapOrderedGeoNaProfiles = new TreeMap(); - + List listUnknownType = new ArrayList(); for (MetaDataProfileBean metaDataProfileBean : listMetadataProfilesForGeona) { - + String theMetaType = metaDataProfileBean.getType().toLowerCase(); - GWT.log("Building form card for type: "+theMetaType); + GWT.log("Building form card for type: " + theMetaType); GeoNaFormCardModel geonaForm = new GeoNaFormCardModel(metaDataProfileBean, null, null); - - if(theMetaType.contains(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO.getKey().toLowerCase())) { + + if (theMetaType.contains(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO.getKey().toLowerCase())) { geonaForm.setFormCardTitle(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO); - treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO.getOrder(), geonaForm); - }else if(theMetaType.contains(ConcessioniFormCardTitle.ABSTRACT_RELAZIONE_DI_SCAVO.getKey().toLowerCase())) { + treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO.getOrder(), + geonaForm); + } else if (theMetaType + .contains(ConcessioniFormCardTitle.ABSTRACT_RELAZIONE_DI_SCAVO.getKey().toLowerCase())) { geonaForm.setFormCardTitle(ConcessioniFormCardTitle.ABSTRACT_RELAZIONE_DI_SCAVO); - treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.ABSTRACT_RELAZIONE_DI_SCAVO.getOrder(), geonaForm); - }else if(theMetaType.contains(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO.getKey().toLowerCase())) { + treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.ABSTRACT_RELAZIONE_DI_SCAVO.getOrder(), + geonaForm); + } else if (theMetaType.contains(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO.getKey().toLowerCase())) { geonaForm.setFormCardTitle(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO); treemapOrderedGeoNaProfiles.put(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO.getOrder(), geonaForm); - }else if(theMetaType.contains(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE.getKey().toLowerCase())) { + } 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())) { + 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())) { + 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 { - //adding to unknown list + } else { + // adding to unknown list listUnknownType.add(geonaForm); } } - - //adding unknown types + + // adding unknown types for (GeoNaFormCardModel geoNaFormCardModel : listUnknownType) { Integer highestKey = treemapOrderedGeoNaProfiles.lastKey(); highestKey++; treemapOrderedGeoNaProfiles.put(highestKey, geoNaFormCardModel); } - - GWT.log("Map size: "+treemapOrderedGeoNaProfiles.size()); + + GWT.log("Map size: " + treemapOrderedGeoNaProfiles.size()); return treemapOrderedGeoNaProfiles.values(); - + } - - + private void bindEvents() { - + appManagerBus.addHandler(SaveGeonaDataFormsEvent.TYPE, new SaveGeonaDataFormsHandler() { - + @Override public void onSave(final SaveGeonaDataFormsEvent saveGeonaDataFormsEvent) { - + geoNaMainForm.enableButtonSave(false); - - if(saveGeonaDataFormsEvent.getListGeonaDataForms()!=null) { - + + if (saveGeonaDataFormsEvent.getListGeonaDataForms() != null) { + final Modal modal = new Modal(true); modal.setCloseVisible(false); modal.setTitle("Saving project..."); @@ -234,110 +247,120 @@ public class GeoPortalDataEntryApp implements EntryPoint { modalContainerPanel.add(loader); modal.add(modalContainerPanel); - GeoportalDataEntryServiceAsync.Util.getInstance().saveGeonaDataForms(saveGeonaDataFormsEvent.getListGeonaDataForms(), new AsyncCallback() { + GeoportalDataEntryServiceAsync.Util.getInstance().saveGeonaDataForms( + saveGeonaDataFormsEvent.getListGeonaDataForms(), new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - modalContainerPanel.clear(); - modal.setCloseVisible(true); - try { - modal.remove(loader); - }catch (Exception e) { - } - Alert alert = new Alert(caught.getMessage()); - alert.setType(AlertType.ERROR); - alert.setClose(false); - modal.add(alert); - //resetUI(); - geoNaMainForm.enableButtonSave(true); - } - - @Override - public void onSuccess(CommitReport result) { - modalContainerPanel.clear(); - modal.setCloseVisible(true); - HTML recordPublished = new HTML(); - switch (result.getState()) { - case OK: - String success = HTMLUtil.getHTMLElement(HTML_TAG.span, 14, "32CD32", null, "SUCCESS"); - recordPublished.setHTML("Record Published with "+success); - projectSavedWithSuccess = true; - String msg = result.getMsg()!=null?result.getMsg():"Record published with success"; - geoNaMainForm.showAlertOnSaveAction(msg, AlertType.SUCCESS, true); - purgeFileUploaded(); - break; - case WARN: - String warning = HTMLUtil.getHTMLElement(HTML_TAG.span, 14, "FF8000", null, "WARNING"); - recordPublished.setHTML("Record Published with "+warning); - geoNaMainForm.enableButtonSave(true); - break; - case ERROR: - String error = HTMLUtil.getHTMLElement(HTML_TAG.span, 14, "FF0000", "bold", "ERROR"); - recordPublished.setHTML(error+" on publishing the Record"); - geoNaMainForm.enableButtonSave(true); - break; - default: - break; - } - - modalContainerPanel.add(recordPublished); - - if(result.getMongoId()!=null) { - modalContainerPanel.add(new HTML("Record id: "+(result.getMongoId()))); - - try { - savedMap.put(result.getMongoId(), saveGeonaDataFormsEvent.getListGeonaDataForms()); - }catch (Exception e) { - // TODO: handle exception + @Override + public void onFailure(Throwable caught) { + modalContainerPanel.clear(); + modal.setCloseVisible(true); + try { + modal.remove(loader); + } catch (Exception e) { + } + Alert alert = new Alert(caught.getMessage()); + alert.setType(AlertType.ERROR); + alert.setClose(false); + modal.add(alert); + // resetUI(); + geoNaMainForm.enableButtonSave(true); } - - final HorizontalPanel hpGetLink = new HorizontalPanel(); - final LoaderIcon lc = new LoaderIcon("Get link..."); - hpGetLink.add(lc); - modalContainerPanel.add(hpGetLink); - GeoportalDataEntryServiceAsync.Util.getInstance().getLinksFor(result.getMongoId(), "concessione", new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - hpGetLink.clear(); - - } - - @Override - public void onSuccess(GeoNaItemRef result) { - hpGetLink.clear(); - String theURL = result.getRestrictedLink().getShortURL()!=null?result.getRestrictedLink().getShortURL():result.getRestrictedLink().getCompleteURL(); - String htmlLink = "
Go to record: "+theURL+"
"; - HTML html = new HTML(htmlLink); - hpGetLink.add(html); - //modal.add(html); - } - }); - } - - //geoNaMainForm.enableButtonSave(true); - //resetUI(); - - if(result.getReport()!=null) { - modalContainerPanel.add(new ReportTemplateToHTML(result.getReport())); - } - - } - }); - + @Override + public void onSuccess(CommitReport result) { + modalContainerPanel.clear(); + modal.setCloseVisible(true); + HTML recordPublished = new HTML(); + switch (result.getState()) { + case OK: + String success = HTMLUtil.getHTMLElement(HTML_TAG.span, 14, "32CD32", null, + "SUCCESS"); + recordPublished.setHTML("Record Published with " + success); + projectSavedWithSuccess = true; + String msg = result.getMsg() != null ? result.getMsg() + : "Record published with success"; + geoNaMainForm.showAlertOnSaveAction(msg, AlertType.SUCCESS, true); + purgeFileUploaded(); + break; + case WARN: + String warning = HTMLUtil.getHTMLElement(HTML_TAG.span, 14, "FF8000", null, + "WARNING"); + recordPublished.setHTML("Record Published with " + warning); + geoNaMainForm.enableButtonSave(true); + break; + case ERROR: + String error = HTMLUtil.getHTMLElement(HTML_TAG.span, 14, "FF0000", "bold", + "ERROR"); + recordPublished.setHTML(error + " on publishing the Record"); + geoNaMainForm.enableButtonSave(true); + break; + default: + break; + } + + modalContainerPanel.add(recordPublished); + + if (result.getMongoId() != null) { + modalContainerPanel.add(new HTML("Record id: " + (result.getMongoId()))); + + try { + savedMap.put(result.getMongoId(), + saveGeonaDataFormsEvent.getListGeonaDataForms()); + } catch (Exception e) { + // TODO: handle exception + } + + final HorizontalPanel hpGetLink = new HorizontalPanel(); + final LoaderIcon lc = new LoaderIcon("Get link..."); + hpGetLink.add(lc); + modalContainerPanel.add(hpGetLink); + GeoportalDataEntryServiceAsync.Util.getInstance().getLinksFor( + result.getMongoId(), RECORD_TYPE.CONCESSIONE, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + hpGetLink.clear(); + + } + + @Override + public void onSuccess(GeoNaItemRef result) { + hpGetLink.clear(); + String theURL = result.getRestrictedLink().getShortURL() != null + ? result.getRestrictedLink().getShortURL() + : result.getRestrictedLink().getCompleteURL(); + String htmlLink = "
Go to record: " + theURL + "
"; + HTML html = new HTML(htmlLink); + hpGetLink.add(html); + // modal.add(html); + } + }); + } + + // geoNaMainForm.enableButtonSave(true); + // resetUI(); + + if (result.getReport() != null) { + modalContainerPanel.add(new ReportTemplateToHTML(result.getReport())); + } + + } + }); + modal.show(); - }else + } else geoNaMainForm.enableButtonSave(true); - + } }); - + appManagerBus.addHandler(CreateNewProjectEvent.TYPE, new CreateNewProjectEventHandler() { - + @Override public void onCreateNewProject(CreateNewProjectEvent newProjectEvent) { - + // means the form was not submitted if (savedMap.size() == 0) { boolean confirm = Window.confirm( @@ -345,10 +368,10 @@ public class GeoPortalDataEntryApp implements EntryPoint { if (confirm) buildNewCards(orderedCards); } else if (projectSavedWithSuccess) { - //means the project has been saved + // means the project has been saved buildNewCards(orderedCards); } else { - //means the project reported one ore more errors after the submit + // means the project reported one ore more errors after the submit boolean confirm = Window.confirm("Creating a new project, the web-forms will be cleaned, Confirm?"); if (confirm) buildNewCards(orderedCards); @@ -356,37 +379,159 @@ public class GeoPortalDataEntryApp implements EntryPoint { } }); - + appManagerBus.addHandler(GetListOfRecordsEvent.TYPE, new GetListOfRecordsEventHandler() { - + @Override public void onGetList(GetListOfRecordsEvent getListOfRecordsEvent) { - - GeonaRecordsPaginatedView grpw = new GeonaRecordsPaginatedView(appManagerBus,RECORD_TYPE.CONCESSIONE,null, DISPLAY_FIELD.NAME); - mainPanel.showListOfConcessioniView(grpw); + + GeonaRecordsPaginatedView grpw = new GeonaRecordsPaginatedView(appManagerBus, RECORD_TYPE.CONCESSIONE, + null, DISPLAY_FIELD.NAME); + mainTabPanel.showListOfConcessioniView(grpw); + } + }); + + appManagerBus.addHandler(ActionOnItemEvent.TYPE, new ActionOnItemEventHandler() { + + @Override + public void onDoActionFired(ActionOnItemEvent showItemEvent) { + + if (showItemEvent != null) { + + ACTION_ON_ITEM action = showItemEvent.getAction(); + List items = showItemEvent.getSelectItems(); + + if (items == null) + return; + + T item = items.get(0); + + if (item == null) + return; + + if (item instanceof ConcessioneDV) { + + final ConcessioneDV concessione = (ConcessioneDV) item; + GWT.log("ActionOnItemEvente item: " + concessione); + + switch (action) { + case SHOW_ON_MAP: + final Modal modal = new Modal(true, true); + modal.setCloseVisible(true); + final HorizontalPanel hpGetLink = new HorizontalPanel(); + final LoaderIcon lc = new LoaderIcon("Get link..."); + hpGetLink.add(lc); + modal.add(hpGetLink); + final NewBrowserWindow newBrowserWindow = NewBrowserWindow.open("", "_blank", ""); + + GeoportalDataEntryServiceAsync.Util.getInstance().getLinksFor(concessione.getItemId(), + RECORD_TYPE.CONCESSIONE, new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + hpGetLink.clear(); + Alert alert = new Alert(caught.getMessage(), AlertType.ERROR); + alert.setClose(false); + hpGetLink.add(alert); + newBrowserWindow.close(); + } + + @Override + public void onSuccess(GeoNaItemRef result) { + String theURL = result.getRestrictedLink().getShortURL() != null + ? result.getRestrictedLink().getShortURL() + : result.getRestrictedLink().getCompleteURL(); + newBrowserWindow.setUrl(theURL); + modal.hide(); + } + }); + + modal.show(); + + break; + case REMOVE: + + String htmlMsg = "Going to delete the project with:"; + htmlMsg += "
    "; + htmlMsg += "
  • id: " + concessione.getItemId() + "
  • "; + htmlMsg += "
  • name: " + concessione.getNome() + "
  • "; + htmlMsg += "
"; + htmlMsg += "
"; + htmlMsg += "This operation cannot be undone. Would you like to proceed?"; + + final DialogConfirm dialog = new DialogConfirm(null, "Delete Confirm?", htmlMsg); + dialog.center(); + + dialog.getYesButton().addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + dialog.hide(); + final Modal modal = new Modal(true, true); + modal.setCloseVisible(true); + final HorizontalPanel hp = new HorizontalPanel(); + final LoaderIcon lc = new LoaderIcon("Deleting Project..."); + hp.add(lc); + modal.add(hp); + + GeoportalDataEntryServiceAsync.Util.getInstance().deleteRecord( + concessione.getItemId(), RECORD_TYPE.CONCESSIONE, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + hp.clear(); + Alert alert = new Alert(caught.getMessage(), AlertType.ERROR); + alert.setClose(false); + hp.add(alert); + + } + + @Override + public void onSuccess(Boolean result) { + if (result) { + hp.clear(); + Alert alert = new Alert("Project '" + concessione.getNome() + + "' deleted correclty", AlertType.INFO); + alert.setClose(false); + hp.add(alert); + + appManagerBus.fireEvent( + new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE)); + } + + } + }); + modal.show(); + } + }); + + default: + break; + } + } + + } + } }); } - private void purgeFileUploaded() { - + MetadataProfileFormBuilderServiceAsync.Util.getInstance().purgeFilesUploaded(new AsyncCallback() { @Override public void onFailure(Throwable caught) { - //silent - + // silent + } @Override public void onSuccess(Integer result) { - GWT.log("Purged "+result+" file/s uploaded"); - + GWT.log("Purged " + result + " file/s uploaded"); + } }); } - - } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java index 8b6fba5..cfefca8 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryService.java @@ -3,6 +3,7 @@ package org.gcube.portlets.user.geoportaldataentry.client; import java.util.List; import org.gcube.application.geoportalcommon.shared.GeoNaItemRef; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject; import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig; @@ -16,7 +17,7 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * - * Aug 4, 2021 + * Aug 4, 2021 */ @RemoteServiceRelativePath("geoportaldataentryservice") public interface GeoportalDataEntryService extends RemoteService { @@ -40,21 +41,30 @@ public interface GeoportalDataEntryService extends RemoteService { /** * Gets the links for. * - * @param itemId the item id + * @param itemId the item id * @param recordType the record type * @return the links for * @throws Exception the exception */ - GeoNaItemRef getLinksFor(String itemId, String recordType) throws Exception; - + GeoNaItemRef getLinksFor(String itemId, RECORD_TYPE recordType) throws Exception; /** * Gets the list concessioni. * - * @param start the start + * @param start the start * @param offset the offset + * @param reloadFromService the reload from service * @return the list concessioni * @throws Exception the exception */ - SearchedData getListConcessioni(Integer start, Integer offset) throws Exception; + SearchedData getListConcessioni(Integer start, Integer offset, boolean reloadFromService) throws Exception; + + /** + * Delete record. + * + * @param itemId the item id + * @param recordType the record type + * @return true, if successful + */ + boolean deleteRecord(String itemId, RECORD_TYPE recordType) throws Exception; } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java index 902f1c4..a263630 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/GeoportalDataEntryServiceAsync.java @@ -3,6 +3,7 @@ package org.gcube.portlets.user.geoportaldataentry.client; import java.util.List; import org.gcube.application.geoportalcommon.shared.GeoNaItemRef; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.GeoNaFormDataObject; import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig; @@ -43,8 +44,11 @@ public interface GeoportalDataEntryServiceAsync void getGeonaInitConfig(AsyncCallback callback); - void getLinksFor(String itemId, String recordType, AsyncCallback callback); + void getLinksFor(String itemId, RECORD_TYPE recordType, AsyncCallback callback); - void getListConcessioni(Integer start, Integer offset, AsyncCallback callback); + void getListConcessioni(Integer start, Integer offset, boolean reloadFromService, AsyncCallback callback); + + + void deleteRecord(String itemId, RECORD_TYPE recordType, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainPanel.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainPanel.java deleted file mode 100644 index 652b6bb..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainPanel.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.gcube.portlets.user.geoportaldataentry.client.ui; - -import org.gcube.portlets.user.geoportaldataentry.client.ui.form.GeonaDataEntryMainForm; -import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon; - -import com.google.gwt.core.client.GWT; -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.ui.Composite; -import com.google.gwt.user.client.ui.HTMLPanel; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.user.client.ui.Widget; - -/** - * The Class GeonaMainPanel. - * - * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) - * - * Oct 13, 2020 - */ -public class GeonaMainPanel extends Composite { - - /** The geona main form panel. */ - @UiField - HTMLPanel geonaMainFormPanel; - - @UiField - HTMLPanel geonaListOfConcessioniPanel; - - /** The loader. */ - @UiField - LoaderIcon loader; - - @UiField - GeonaNavigationBar geonaNavigationBar; - - private HandlerManager appManagerBus; - - /** The ui binder. */ - private static GeonaMainPanelUiBinder uiBinder = GWT.create(GeonaMainPanelUiBinder.class); - - /** - * The Interface GeonaMainPanelUiBinder. - * - * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) - * - * Oct 13, 2020 - */ - interface GeonaMainPanelUiBinder extends UiBinder { - } - - /** - * Instantiates a new geona main panel. - * - * @param appManagerBus - */ - public GeonaMainPanel(HandlerManager appManagerBus) { - initWidget(uiBinder.createAndBindUi(this)); - this.appManagerBus = appManagerBus; - geonaNavigationBar.setAppManagerBus(appManagerBus); - } - - /** - * Adds the form panel. - * - * @param formPanel the form panel - */ - public void addFormPanel(GeonaDataEntryMainForm formPanel) { - geonaListOfConcessioniPanel.setVisible(false); - geonaMainFormPanel.add(formPanel); - geonaMainFormPanel.setVisible(true); - } - - public void showListOfConcessioniView(GeonaRecordsPaginatedView grpw) { - setFormPanelVisible(false); - geonaListOfConcessioniPanel.clear(); - VerticalPanel htmllPanel = new VerticalPanel(); - htmllPanel.add(grpw.getCellPanel()); - htmllPanel.add(grpw.getPagerPanel()); - geonaListOfConcessioniPanel.add(htmllPanel); - } - - /** - * Sets the loader visible. - * - * @param txtHTML the txt HTML - * @param visible the visible - */ - public void setLoaderVisible(String txtHTML, boolean visible) { - loader.setText(txtHTML); - loader.setVisible(visible); - } - - public void setFormPanelVisible(boolean bool) { - geonaMainFormPanel.setVisible(bool); - geonaListOfConcessioniPanel.setVisible(!bool); - - } - -} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainPanel.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainPanel.ui.xml deleted file mode 100644 index bec763b..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainPanel.ui.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - .important { - font-weight: bold; - } - - .custom-page-header { - padding: 10px; - background-color: #f5f5f5; - margin-bottom: 10px; - border: 1px solid #eee; - } - - - GeoNa - - - - - - \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java new file mode 100644 index 0000000..d934650 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java @@ -0,0 +1,142 @@ +package org.gcube.portlets.user.geoportaldataentry.client.ui; + +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; +import org.gcube.portlets.user.geoportaldataentry.client.events.CreateNewProjectEvent; +import org.gcube.portlets.user.geoportaldataentry.client.events.GetListOfRecordsEvent; +import org.gcube.portlets.user.geoportaldataentry.client.ui.form.GeonaDataEntryMainForm; +import org.gcube.portlets.user.geoportaldataentry.client.ui.table.ItemsTable.DISPLAY_FIELD; +import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon; + +import com.github.gwtbootstrap.client.ui.NavLink; +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.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * The Class GeonaMainTabPanel. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 5, 2021 + */ +public class GeonaMainTabPanel extends Composite { + + private static GeonaMainTabPanelUiBinder uiBinder = GWT.create(GeonaMainTabPanelUiBinder.class); + + /** + * The Interface GeonaMainTabPanelUiBinder. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Aug 5, 2021 + */ + interface GeonaMainTabPanelUiBinder extends UiBinder { + } + + /** The geona main form panel. */ + @UiField + HTMLPanel geonaMainFormPanel; + + @UiField + HTMLPanel geonaListOfConcessioniPanel; + + /** The loader. */ + @UiField + LoaderIcon loader; + + @UiField + NavLink buttCreateNewProject; + + @UiField + NavLink buttonReloadConcessioni; + + @UiField + Tab tabNewProject; + + @UiField + Tab tabGetListOfProjects; + + private HandlerManager appManagerBus; + + /** + * Instantiates a new geona main tab panel. + * + * @param appManagerBus the first name + */ + public GeonaMainTabPanel(HandlerManager appManagerBus) { + initWidget(uiBinder.createAndBindUi(this)); + this.appManagerBus = appManagerBus; + bindEvents(); + + } + + private void bindEvents() { + + buttCreateNewProject.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + appManagerBus.fireEvent(new CreateNewProjectEvent()); + + } + }); + + buttonReloadConcessioni.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE)); + + } + }); + + tabGetListOfProjects.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + GeonaRecordsPaginatedView grpw = new GeonaRecordsPaginatedView(appManagerBus, RECORD_TYPE.CONCESSIONE, + null, DISPLAY_FIELD.NAME); + showListOfConcessioniView(grpw); + + } + }); + + } + + /** + * Adds the form panel. + * + * @param formPanel the form panel + */ + public void addFormPanel(GeonaDataEntryMainForm formPanel) { + geonaMainFormPanel.add(formPanel); + } + + public void showListOfConcessioniView(GeonaRecordsPaginatedView grpw) { + geonaListOfConcessioniPanel.clear(); + VerticalPanel htmllPanel = new VerticalPanel(); + htmllPanel.add(grpw.getCellPanel()); + htmllPanel.add(grpw.getPagerPanel()); + geonaListOfConcessioniPanel.add(htmllPanel); + } + + /** + * Sets the loader visible. + * + * @param txtHTML the txt HTML + * @param visible the visible + */ + public void setLoaderVisible(String txtHTML, boolean visible) { + loader.setText(txtHTML); + loader.setVisible(visible); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml new file mode 100644 index 0000000..9982f00 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.ui.xml @@ -0,0 +1,52 @@ + + + + + .important { + font-weight: bold; + } + + .custom-page-header { + padding: 10px; + background-color: #f5f5f5; + margin-bottom: 10px; + border: 1px solid #eee; + } + + + GeoNa + + + + New Project + + Create New Project + + + + + + + + + + List of Projects + + Reload Projects + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaNavigationBar.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaNavigationBar.java deleted file mode 100644 index 53b2b01..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaNavigationBar.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.gcube.portlets.user.geoportaldataentry.client.ui; - -import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; -import org.gcube.portlets.user.geoportaldataentry.client.events.CreateNewProjectEvent; -import org.gcube.portlets.user.geoportaldataentry.client.events.GetListOfRecordsEvent; - -import com.github.gwtbootstrap.client.ui.NavLink; -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.EventBus; -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.ui.Composite; -import com.google.gwt.user.client.ui.Widget; - -public class GeonaNavigationBar extends Composite { - - private static GeonaNavigationBarUiBinder uiBinder = GWT.create(GeonaNavigationBarUiBinder.class); - - interface GeonaNavigationBarUiBinder extends UiBinder { - } - - private EventBus eventBus; - - public GeonaNavigationBar() { - initWidget(uiBinder.createAndBindUi(this)); - bindEvents(); - } - - private void bindEvents() { - linkCreateNewProject.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - appManagerBus.fireEvent(new CreateNewProjectEvent()); - - } - }); - - linkGetListOfRecords.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE)); - - } - }); - - } - - @UiField - NavLink linkCreateNewProject; - - @UiField - NavLink linkGetListOfRecords; - - private HandlerManager appManagerBus; - - public GeonaNavigationBar(String firstName) { - initWidget(uiBinder.createAndBindUi(this)); - } - - /** - * Sets the app manager bus. - * - * @param appManagerBus the new app manager bus - */ - public void setAppManagerBus(HandlerManager appManagerBus) { - this.appManagerBus = appManagerBus; - } - -} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaNavigationBar.ui.xml b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaNavigationBar.ui.xml deleted file mode 100644 index 6a54199..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaNavigationBar.ui.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - .important { - font-weight: bold; - } - - - - - Create new Project - Get List of Concessioni - - - - \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaRecordsPaginatedView.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaRecordsPaginatedView.java index 8739d92..37e0b0e 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaRecordsPaginatedView.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaRecordsPaginatedView.java @@ -69,7 +69,7 @@ public class GeonaRecordsPaginatedView { orginalLoadingIndicator = itemsTable.getCellTable().getLoadingIndicator(); initPagination(ITEMS_PER_PAGE); // loadNewPage(ITEM_START_INDEX, ITEMS_PER_PAGE, false); - loadItemsForStatus(recordType); + loadItemsForType(recordType); } /** @@ -114,8 +114,10 @@ public class GeonaRecordsPaginatedView { * @param startIdx the start idx * @param limit the limit * @param resetStore the reset store + * @param invalidCache the invalid cache */ - private void loadNewPage(final int startIdx, final int limit, final boolean resetStore) { + private void loadNewPage(final int startIdx, final int limit, final boolean resetStore, + final boolean invalidCache) { // initFirstRangeChanged = resetStore; GWT.log("loadNewPage with parameters [startIdx: " + startIdx + ", limit: " + limit + ", resetStore:" + resetStore + "]"); @@ -131,18 +133,18 @@ public class GeonaRecordsPaginatedView { getTableDataProvider().updateRowCount(ITEMS_PER_PAGE, false); } - loadItemsForStatus(newStartIndex, limit, serverStartIndex); + loadConcessioni(newStartIndex, limit, serverStartIndex, invalidCache); } /** - * Load items for status. + * Load items for type. * * @param recordType the record type */ - public void loadItemsForStatus(RECORD_TYPE recordType) { + public void loadItemsForType(RECORD_TYPE recordType) { this.recordType = recordType; getCellTable().setVisibleRangeAndClearData(new Range(ITEM_START_INDEX, ITEMS_PER_PAGE), false); - loadNewPage(ITEM_START_INDEX, ITEMS_PER_PAGE, true); + loadNewPage(ITEM_START_INDEX, ITEMS_PER_PAGE, true, true); } /** @@ -185,20 +187,20 @@ public class GeonaRecordsPaginatedView { } /** - * Load items for status. + * Load concessioni. * * @param the generic type * @param newStartIndex the new start index * @param limit the limit * @param serverIndex the server index */ - private void loadItemsForStatus(int newStartIndex, int limit, int serverIndex) { + private void loadConcessioni(int newStartIndex, int limit, int serverIndex, boolean invalidCache) { showLoading(true); GWT.log("calling loadItemsForStatus with parameters [startIndex: " + newStartIndex + ", limit: " + limit + ", serverIndex:" + serverIndex + "]"); - GeoPortalDataEntryApp.greetingService.getListConcessioni(newStartIndex, limit, + GeoPortalDataEntryApp.greetingService.getListConcessioni(newStartIndex, limit, invalidCache, new AsyncCallback() { @Override @@ -242,7 +244,7 @@ public class GeonaRecordsPaginatedView { public List getSelectItems() { return itemsTable.getSelectedItems(); } - + // int latestRangeStart = -1; // int latestRangeLenght = -1; @@ -269,7 +271,7 @@ public class GeonaRecordsPaginatedView { int start = range.getStart(); int length = range.getLength(); - + // if(latestRangeStart!=start || latestRangeLenght!=length) { // GWT.log("ranges really changed"); // latestRangeStart = start; @@ -285,7 +287,7 @@ public class GeonaRecordsPaginatedView { return; } GWT.log("Range changed: " + start + " " + length + " visible count: " + display.getVisibleItemCount()); - loadNewPage(start, length, false); + loadNewPage(start, length, false, false); // eventBus.fireEvent(new TableRangeViewChangedEvent(start, length)); } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/table/ItemsTable.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/table/ItemsTable.java index c226a1b..fbc93e6 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/table/ItemsTable.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/table/ItemsTable.java @@ -113,25 +113,6 @@ public class ItemsTable extends AbstractItemsCellTable< this.isAsyncronusTable = dataProvider instanceof ListDataProvider ? false : true; setEmptyTableMessage(NO_DATA); -// final CheckboxCell cellCheckBox = new CheckboxCell(true, false); -// Column checkColumn = new Column(cellCheckBox) { -// @Override -// public Boolean getValue(T object) { -// // Get the value from the selection model. -// return theSelectionModel.isSelected(object); -// } -// -// @Override -// public void render(Context context, T object, SafeHtmlBuilder sb) { -// super.render(context, object, sb); -// GWT.log("added checkbox: " + cellCheckBox + " to object: " + object); -// } -// -// }; -// -// sortedCellTable.addColumn(checkColumn, "", false); -// sortedCellTable.setColumnWidth(checkColumn, 40, Unit.PX); - if (this.displayFields.contains(DISPLAY_FIELD.NAME)) { // NAME @@ -418,20 +399,6 @@ public class ItemsTable extends AbstractItemsCellTable< } -// /** -// * To date format string. -// * -// * @param dateTime the date time -// * @return the string -// */ -// public static Date toDisplayDate(Date dateTime) { -// -// if(dateTime==null) -// return null; -// -// return new Date(dtformat.format(dateTime)); -// } - private String toDisplayAuthors(List authors) { String toDisplay = ""; if (authors == null) diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/utils/DialogConfirm.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/utils/DialogConfirm.java new file mode 100644 index 0000000..d3e856f --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/utils/DialogConfirm.java @@ -0,0 +1,152 @@ +/** + * + */ +package org.gcube.portlets.user.geoportaldataentry.client.ui.utils; + + + + +import org.gcube.portlets.user.geoportaldataentry.client.resource.Images; + +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.DialogBox; +import com.google.gwt.user.client.ui.DockPanel; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HasHorizontalAlignment; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + + +/** + * The Class DialogConfirm. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 19, 2015 + */ +public class DialogConfirm extends DialogBox implements ClickHandler { + + private DockPanel dock = new DockPanel(); + private Button yesButton; + private VerticalPanel vpContainer; + private ImageResource loading = Images.ICONS.loading(); + private HorizontalPanel hpButtons = new HorizontalPanel(); + private Button noButton; + /** + * Instantiates a new dialog confirm. + * + * @param img the img + * @param caption the caption + * @param text the text + */ + public DialogConfirm(Image img, String caption, String text) { + //getElement().setClassName("gwt-DialogBoxNew"); + dock.setSpacing(4); + dock.setWidth("100%"); + setText(caption); +// setHeading(caption); + + yesButton = new Button("Yes"); + noButton = new Button("No", this); + + noButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + hide(); + } + }); + + vpContainer = new VerticalPanel(); + vpContainer.getElement().getStyle().setMargin(20.0, Unit.PX); + vpContainer.add(new HTML(text)); + hpButtons = new HorizontalPanel(); + hpButtons.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); +// hpButtons.getElement().getStyle().setMarginTop(20.0, Unit.PX); + hpButtons.setSpacing(3); + yesButton.getElement().getStyle().setMarginRight(20.0, Unit.PX); + hpButtons.add(yesButton); + hpButtons.add(noButton); + + dock.add(hpButtons, DockPanel.SOUTH); + dock.setCellHorizontalAlignment(hpButtons, DockPanel.ALIGN_CENTER); + + if (img != null) + dock.add(img, DockPanel.WEST); + + dock.add(vpContainer, DockPanel.CENTER); + setWidget(dock); +// add(dock); + } + + /* + * (non-Javadoc) + * + * @see + * com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event + * .dom.client.ClickEvent) + */ + @Override + public void onClick(ClickEvent event) { +// hide(); + } + + /** + * Loader. + * + * @param message the message + */ + public void loader(String message){ + try{ + dock.remove(hpButtons); + }catch(Exception e){} + vpContainer.clear(); + HorizontalPanel hpMask = new HorizontalPanel(); + hpMask.add(new Image(loading)); + HTML html = new HTML(message); + html.getElement().getStyle().setMarginLeft(5, Unit.PX); + hpMask.add(html); + vpContainer.add(hpMask); + } + + /** + * Adds the to center panel. + * + * @param w the w + */ + public void addToCenterPanel(Widget w) { + vpContainer.add(w); + } + + /** + * Gets the dock. + * + * @return the dock + */ + public DockPanel getDock() { + return dock; + } + + /** + * Gets the yes button. + * + * @return the yes button + */ + public Button getYesButton() { + return yesButton; + } + + /** + * Gets the no button. + * + * @return the no button + */ + public Button getNoButton() { + return noButton; + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/utils/NewBrowserWindow.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/utils/NewBrowserWindow.java new file mode 100644 index 0000000..6cc3d1f --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/utils/NewBrowserWindow.java @@ -0,0 +1,30 @@ +package org.gcube.portlets.user.geoportaldataentry.client.ui.utils; + +import com.google.gwt.core.client.JavaScriptObject; + +/** + * @author Francesco Mangiacrapa francesco.mangiacrapa{@literal @}isti.cnr.it + * Sep 4, 2013 + * + */ +public final class NewBrowserWindow extends JavaScriptObject { + // All types that extend JavaScriptObject must have a protected, + // no-args constructor. + protected NewBrowserWindow() { + } + + public static native NewBrowserWindow open(String url, String target, + String options) /*-{ + return $wnd.open(url, target, options); + }-*/; + + public native void close() /*-{ + this.close(); + }-*/; + + public native void setUrl(String url) /*-{ + if (this.location) { + this.location = url; + } + }-*/; +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java index d5c9342..27634c5 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java @@ -16,9 +16,11 @@ import org.gcube.application.geoportal.common.rest.MongoConcessioni; import org.gcube.application.geoportal.common.rest.TempFile; import org.gcube.application.geoportalcommon.ConvertToDataViewModel; import org.gcube.application.geoportalcommon.GeoportalCommon; +import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile; import org.gcube.application.geoportalcommon.shared.GeoNaItemRef; import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataentry.client.ConcessioniFormCardTitle; +import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryService; import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport.STATE; @@ -391,12 +393,13 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen * @throws Exception the exception */ @Override - public GeoNaItemRef getLinksFor(String itemId, String recordType) throws Exception { + public GeoNaItemRef getLinksFor(String itemId, RECORD_TYPE recordType) throws Exception { LOG.info("getLinksFor called"); SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); - GeoportalCommon gc = new GeoportalCommon(); - GeoNaItemRef item = new GeoNaItemRef(itemId, recordType.toLowerCase()); + GeoNaDataViewerProfile grViewerProfile = SessionUtil.getGeportalViewerResourceProfile(getThreadLocalRequest()); + GeoportalCommon gc = new GeoportalCommon(grViewerProfile); + GeoNaItemRef item = new GeoNaItemRef(itemId, recordType.toString().toLowerCase()); item = gc.getPublicLinksFor(item); LOG.info("Returning: " + item); return item; @@ -405,17 +408,20 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen /** * Gets the list concessioni. * - * @param start the start - * @param offset the offset + * @param start the start + * @param limit the limit + * @param reloadFromService if true, ignore the concessioni saved in session and + * reload them from service * @return the list concessioni * @throws Exception the exception */ @Override - public SearchedData getListConcessioni(Integer start, Integer limit) throws Exception { - LOG.info("getListConcessioni called wit start: "+start + ", limit: "+limit); + public SearchedData getListConcessioni(Integer start, Integer limit, boolean reloadFromService) throws Exception { + LOG.info("getListConcessioni called wit start: " + start + ", limit: " + limit); try { - List listOfConcessioni = SessionUtil.getListOfConcessioni(getThreadLocalRequest()); + List listOfConcessioni = SessionUtil.getListOfConcessioni(getThreadLocalRequest(), + reloadFromService); int listConcessioniSize = listOfConcessioni.size(); List toReturn = new ArrayList(); @@ -425,27 +431,17 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen toReturn.addAll(listOfConcessioni); startIndex = 0; limitIndex = listConcessioniSize; - }else { -// if (start < 0) -// start = 0; -// -// if (start > listConcessioniSize) -// start = listConcessioniSize; -// -// if (limit > listConcessioniSize) -// limit = listConcessioniSize; - + } else { startIndex = start; limitIndex = start + limit; - if(limitIndex>listConcessioniSize) { + if (limitIndex > listConcessioniSize) { limitIndex = listConcessioniSize; } } - + SearchedData searchedData = new SearchedData(start, limit, startIndex, false); searchedData.setTotalItems(listConcessioniSize); - toReturn = listOfConcessioni.subList(startIndex, limitIndex); List toReturnList = new ArrayList(toReturn.size()); @@ -456,7 +452,7 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen } searchedData.setData(toReturnList); - + if (listConcessioniSize == limit || listConcessioniSize == 0) { LOG.debug("Page completed returning " + listConcessioniSize + " items"); int newOffset = startIndex + start; @@ -502,4 +498,28 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen } } } + + @Override + public boolean deleteRecord(String itemId, RECORD_TYPE recordType) throws Exception { + try { + + if (itemId == null) + throw new Exception("Item id is null"); + + if (recordType.equals(RECORD_TYPE.CONCESSIONE)) { + SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); + ServiceUtil serviceUtil = new ServiceUtil(); + MongoConcessioni clientMongo = serviceUtil.getInstanceMongoConcessioni(); + clientMongo.deleteById(itemId); + return true; + } + + return false; + + } catch (Exception e) { + LOG.error("Error on deleting the project with item id: " + itemId, e); + throw new Exception( + "Error occurred on deleting the project with id: " + itemId + ". Error: " + e.getMessage()); + } + } } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java index 3a06bde..735e6d3 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java @@ -12,6 +12,8 @@ import javax.servlet.http.HttpSession; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.rest.MongoConcessioni; +import org.gcube.application.geoportalcommon.GeoportalCommon; +import org.gcube.application.geoportalcommon.shared.GeoNaDataViewerProfile; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; @@ -26,16 +28,16 @@ import org.slf4j.LoggerFactory; import com.liferay.portal.service.UserLocalServiceUtil; - /** * The Class SessionUtil. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * - * Oct 20, 2020 + * Oct 20, 2020 */ public class SessionUtil { + private static final String GEONA_DATAVIEWER_PROFILE = "GEONA_DATAVIEWER_PROFILE"; private static final String LIST_OF_CONCESSIONI = "LIST_OF_CONCESSIONI"; /** The log. */ private static Logger LOG = LoggerFactory.getLogger(SessionUtil.class); @@ -49,7 +51,7 @@ public class SessionUtil { try { UserLocalServiceUtil.getService(); return true; - }catch (Exception ex) { + } catch (Exception ex) { LOG.debug("Development Mode ON"); return false; } @@ -61,9 +63,9 @@ public class SessionUtil { * @param request the request * @return a GcubeUser object */ - public static GCubeUser getCurrentUser(HttpServletRequest request){ + public static GCubeUser getCurrentUser(HttpServletRequest request) { - if(request == null) + if (request == null) throw new IllegalArgumentException("HttpServletRequest is null!"); PortalContext pContext = PortalContext.getConfiguration(); @@ -75,26 +77,27 @@ public class SessionUtil { /** * Retrieve the current scope by using the portal manager. * - * @param request the request - * @param setContextsInThread set the scope and the security token into current thread + * @param request the request + * @param setContextsInThread set the scope and the security token into current + * thread * @return a GcubeUser object */ - public static String getCurrentContext(HttpServletRequest request, boolean setContextsInThread){ + public static String getCurrentContext(HttpServletRequest request, boolean setContextsInThread) { - if(request == null) + if (request == null) throw new IllegalArgumentException("HttpServletRequest is null!"); PortalContext pContext = PortalContext.getConfiguration(); String context = pContext.getCurrentScope(request); - - if(setContextsInThread) { + + if (setContextsInThread) { GCubeUser user = getCurrentUser(request); String token = pContext.getCurrentUserToken(context, user.getUsername()); - - if(context!=null) + + if (context != null) ScopeProvider.instance.set(context); - - if(token!=null) + + if (token != null) SecurityTokenProvider.instance.set(token); } @@ -107,11 +110,11 @@ public class SessionUtil { * @param scope the scope * @return the group from scope * @throws UserManagementSystemException the user management system exception - * @throws GroupRetrievalFault the group retrieval fault + * @throws GroupRetrievalFault the group retrieval fault */ - public static GCubeGroup getGroupFromScope(String scope) throws UserManagementSystemException, GroupRetrievalFault{ + public static GCubeGroup getGroupFromScope(String scope) throws UserManagementSystemException, GroupRetrievalFault { - if(scope == null || scope.isEmpty()) + if (scope == null || scope.isEmpty()) throw new IllegalArgumentException("Scope is missing here!!"); GroupManager gm = new LiferayGroupManager(); @@ -119,18 +122,24 @@ public class SessionUtil { return gm.getGroup(groupId); } - /** * Gets the list of concessioni. * * @param httpServletRequest the http servlet request + * @param reloadFromService the reload from service * @return the list of concessioni * @throws Exception the exception */ - public static List getListOfConcessioni(HttpServletRequest httpServletRequest) throws Exception { + public static List getListOfConcessioni(HttpServletRequest httpServletRequest, + boolean reloadFromService) throws Exception { HttpSession session = httpServletRequest.getSession(); List listOfConcessioni = (List) session.getAttribute(LIST_OF_CONCESSIONI); + + // setting null to force reloading from service + if (reloadFromService) + listOfConcessioni = null; + if (listOfConcessioni == null) { listOfConcessioni = new ArrayList(); LOG.info("Loading list of concessione from client mongo"); @@ -142,16 +151,40 @@ public class SessionUtil { while (concessioni.hasNext()) { Concessione concessione = (Concessione) concessioni.next(); listOfConcessioni.add(concessione); - + } } - LOG.debug("Got list of concessioni from client mongo: "+listOfConcessioni); + LOG.debug("Got list of concessioni from client mongo: " + listOfConcessioni); session.setAttribute(LIST_OF_CONCESSIONI, listOfConcessioni); - LOG.info("Saved in session list of concessioni from client mongo with size: "+listOfConcessioni.size()); - }else + LOG.info("Saved in session list of concessioni from client mongo with size: " + listOfConcessioni.size()); + } else LOG.info("list of concessioni presents in session"); - - LOG.info("read list of concessioni with size: "+listOfConcessioni.size()); + + LOG.info("read list of concessioni with size: " + listOfConcessioni.size()); return listOfConcessioni; } + + + /** + * Gets the geportal viewer resource profile. + * + * @param httpServletRequest the http servlet request + * @return the geportal viewer resource profile + * @throws Exception the exception + */ + public static GeoNaDataViewerProfile getGeportalViewerResourceProfile(HttpServletRequest httpServletRequest) + throws Exception { + HttpSession session = httpServletRequest.getSession(); + GeoNaDataViewerProfile geoNaDataViewerProfile = (GeoNaDataViewerProfile) session + .getAttribute(GEONA_DATAVIEWER_PROFILE); + + if (geoNaDataViewerProfile == null) { + GeoportalCommon gc = new GeoportalCommon(); + geoNaDataViewerProfile = gc.getGeoNaDataViewProfile(null); + session.setAttribute(GEONA_DATAVIEWER_PROFILE, geoNaDataViewerProfile); + } + + return geoNaDataViewerProfile; + + } }