private Bundle addBundle(final View view, final String bundleid) { Bundle bundle = view.getBundleByName(bundleid); if (bundle == null) { log.info("Bundle with id:", bundleid, "not found in currentView - adding"); if (!bundleCache.containsKey(bundleid)) { log.warn("Trying to add bundle that isn't loaded:", bundleid, "- Skipping it!"); return null; } bundle = bundleCache.get(bundleid).clone(); view.addBundle(bundle); } return bundle; }
public void handleAction(ActionParameters params) throws ActionException { final User user = params.getUser(); // Parse stuff sent by JS final JSONObject publisherData = getPublisherInput(params.getRequiredParam(KEY_PUBDATA)); final View currentView = getBaseView(publisherData, user); final Bundle mapFullBundle = currentView.getBundleByName(ViewModifier.BUNDLE_MAPFULL); if (mapFullBundle == null) { throw new ActionParamsException("Could find mapfull bundle from view:" + currentView.getId()); } // Setup user try { JSONObject userJson = new JSONObject(); userJson.put(KEY_FIRSTNAME, user.getFirstname()); userJson.put(KEY_LASTNAME, user.getLastname()); userJson.put(KEY_NICKNAME, user.getScreenname()); userJson.put(KEY_LOGINNAME, user.getEmail()); JSONHelper.putValue(mapFullBundle.getConfigJSON(), KEY_USER, userJson); // mapfullTemplateConfig.put(KEY_USER, userJson); } catch (JSONException jsonex) { log.error("Could not create user object:", user, "- Error:", jsonex.getMessage()); throw new ActionParamsException("User data problem"); } // setup basic info about view final String domain = JSONHelper.getStringFromJSON(publisherData, KEY_DOMAIN, null); if (domain == null) { throw new ActionParamsException("Domain missing"); } final String name = JSONHelper.getStringFromJSON( publisherData, KEY_NAME, "Published map " + System.currentTimeMillis()); final String language = JSONHelper.getStringFromJSON( publisherData, KEY_LANGUAGE, PropertyUtil.getDefaultLanguage()); currentView.setPubDomain(domain); currentView.setName(name); currentView.setType(params.getHttpParam(ViewTypes.VIEW_TYPE, ViewTypes.PUBLISHED)); currentView.setCreator(user.getId()); currentView.setIsPublic(true); // application/page/developmentPath should be configured to publish template view currentView.setLang(language); // setup map state setupMapState(mapFullBundle, publisherData, user); // setup infobox final JSONObject tmpInfoboxState = publisherData.optJSONObject(ViewModifier.BUNDLE_INFOBOX); if (tmpInfoboxState != null) { final Bundle infoboxTemplateBundle = currentView.getBundleByName(ViewModifier.BUNDLE_INFOBOX); if (infoboxTemplateBundle != null) { infoboxTemplateBundle.setState(tmpInfoboxState.toString()); } else { log.warn( "Publisher sent state for infobox, but infobox isn't available in template view! State:", tmpInfoboxState); } } // Setup publishedmyplaces2 bundle if user has configured it/has permission to do so if (user.hasAnyRoleIn(drawToolsEnabledRoles)) { setupBundle(currentView, publisherData, ViewModifier.BUNDLE_PUBLISHEDMYPLACES2); } // Setup toolbar bundle if user has configured it setupBundle(currentView, publisherData, ViewModifier.BUNDLE_TOOLBAR); // Setup thematic map/published grid bundle final JSONObject gridState = publisherData.optJSONObject(KEY_GRIDSTATE); log.debug("Grid state:", gridState); if (gridState != null) { final Bundle gridBundle = addBundle(currentView, ViewModifier.BUNDLE_PUBLISHEDGRID); log.debug("Grid bundle added:", gridBundle); mergeBundleConfiguration(gridBundle, null, gridState); } log.debug("Save view:", currentView); final View newView = saveView(currentView); log.debug("Published a map:", newView); try { JSONObject newViewJson = new JSONObject(newView.toString()); ResponseHelper.writeResponse(params, newViewJson); } catch (JSONException je) { log.error(je, "Could not create JSON response."); ResponseHelper.writeResponse(params, false); } }