package org.gcube.portlets.user.geoportaldataentry.client; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.TreeMap; 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; import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaDataEntryMainForm; import org.gcube.portlets.user.geoportaldataentry.client.ui.GeonaMainPanel; import org.gcube.portlets.user.geoportaldataentry.client.ui.card.GeoNaFormCardModel; import org.gcube.portlets.user.geoportaldataentry.client.ui.utils.LoaderIcon; import org.gcube.portlets.user.geoportaldataentry.shared.GeonaISConfig; import org.gcube.portlets.widgets.mpformbuilder.client.MetadataProfileFormBuilderServiceAsync; import org.gcube.portlets.widgets.mpformbuilder.client.form.generic.CreateMetadataForm; import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean; import com.github.gwtbootstrap.client.ui.Alert; 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.shared.HandlerManager; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.RootPanel; /** * Entry point classes define onModuleLoad(). */ public class GeoPortalDataEntryApp implements EntryPoint { /** * 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. */ private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class); private final HandlerManager appManagerBus = new HandlerManager(null); private LinkedHashMap mapForms = new LinkedHashMap(); private GeonaDataEntryMainForm geoNaMainForm; private Collection orderedCards; private GeonaMainPanel mainPanel; //private List orderedListMetadataProfilesForGeona = null; /** * This is the entry point method. */ public void onModuleLoad() { mainPanel = new GeonaMainPanel(appManagerBus); mainPanel.setLoaderVisible("Loading...", true); geoNaMainForm = new GeonaDataEntryMainForm(appManagerBus); GreetingServiceAsync.Util.getInstance().getGeonaInitConfig(new AsyncCallback() { @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) { MetadataProfileFormBuilderServiceAsync.Util.getInstance().getProfilesInTheScope(scope, secondaryType, new AsyncCallback>() { @Override public void onSuccess(List result) { orderedCards = setGeoNaFormsOrder(result); //ordered values buildNewCards(orderedCards); } @Override public void onFailure(Throwable caught) { } }); } private void buildNewCards(Collection orderedCards) { mainPanel.setLoaderVisible("Loading...", true); resetUI(); //ordered values for (GeoNaFormCardModel geonaForm : orderedCards) { //TODO TO TEST //if(geonaForm.getFormCardTitle().equals(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO)){ 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); //} } mainPanel.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(); GeoNaFormCardModel geonaForm = new GeoNaFormCardModel(metaDataProfileBean, null, null); 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.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())) { 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 { //adding to unknown list listUnknownType.add(geonaForm); } } //adding unknown types for (GeoNaFormCardModel geoNaFormCardModel : listUnknownType) { Integer highestKey = treemapOrderedGeoNaProfiles.lastKey(); highestKey++; treemapOrderedGeoNaProfiles.put(highestKey, geoNaFormCardModel); } GWT.log("Map size: "+treemapOrderedGeoNaProfiles.size()); return treemapOrderedGeoNaProfiles.values(); } private void bindEvents() { appManagerBus.addHandler(SaveGeonaDataFormsEvent.TYPE, new SaveGeonaDataFormsHandler() { @Override public void onSave(SaveGeonaDataFormsEvent saveGeonaDataFormsEvent) { if(saveGeonaDataFormsEvent.getListGeonaDataForms()!=null) { final Modal modal = new Modal(true); modal.setCloseVisible(false); final LoaderIcon loader = new LoaderIcon(); loader.setText("Trying to save the data, please wait..."); modal.add(loader); GreetingServiceAsync.Util.getInstance().saveGeonaDataForms(saveGeonaDataFormsEvent.getListGeonaDataForms(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { modal.remove(loader); Alert alert = new Alert(caught.getMessage()); alert.setType(AlertType.ERROR); alert.setClose(false); modal.add(alert); modal.setCloseVisible(true); //resetUI(); } @Override public void onSuccess(String result) { modal.remove(loader); Alert alert = new Alert(result); alert.setType(AlertType.INFO); alert.setClose(false); modal.add(alert); modal.setCloseVisible(true); //resetUI(); } }); modal.show(); } } }); appManagerBus.addHandler(CreateNewProjectEvent.TYPE, new CreateNewProjectEventHandler() { @Override public void onCreateNewProject(CreateNewProjectEvent newProjectEvent) { //means the form was not submitted if(mapForms.size()>0) { boolean confirm = Window.confirm("Creating a new project, the current project (is not saved) and will be lost, Confirm?"); if(confirm) buildNewCards(orderedCards); }else buildNewCards(orderedCards); } }); } }