private List<String> rebuildAttributes(SimpleFeatureType sft) { Layer layer = applicationLayer.getService().getSingleLayer(applicationLayer.getLayerName()); List<String> attributesToRetain = new ArrayList<String>(); for (AttributeDescriptor ad : sft.getAttributes()) { String name = ad.getName(); String fullName = sft.getId() + ":" + name; // if attribute already added return. if (attributesToRetain.contains(fullName)) { return attributesToRetain; } attributesToRetain.add(fullName); // Used for display in JSP if (StringUtils.isNotBlank(ad.getAlias())) { attributeAliases.put(fullName, ad.getAlias()); } if (applicationLayer.getAttribute(sft, name) == null) { ConfiguredAttribute ca = new ConfiguredAttribute(); // default visible if not geometry type // and not a attribute of a related featuretype boolean defaultVisible = true; if (layer.getFeatureType().getId() != sft.getId() || AttributeDescriptor.GEOMETRY_TYPES.contains(ad.getType())) { defaultVisible = false; } ca.setVisible(defaultVisible); ca.setAttributeName(name); ca.setFeatureType(sft); applicationLayer.getAttributes().add(ca); Stripersist.getEntityManager().persist(ca); if (!"save".equals(getContext().getEventName())) { String message = "Nieuw attribuut \"{0}\" gevonden in "; if (layer.getFeatureType().getId() != sft.getId()) { message += "gekoppelde "; } message += "attribuutbron"; if (layer.getFeatureType().getId() == sft.getId()) { message += ": wordt zichtbaar na opslaan"; } getContext().getMessages().add(new SimpleMessage(message, name)); } } } if (sft.getRelations() != null) { for (FeatureTypeRelation rel : sft.getRelations()) { attributesToRetain.addAll(rebuildAttributes(rel.getForeignFeatureType())); } } return attributesToRetain; }
private static void initializeMap() { columnToKey.put(10, "term"); columnToKey.put(12, "chief"); columnToKey.put(17, "petitioner"); columnToKey.put(19, "respondent"); columnToKey.put(41, "issueArea"); columnToKey.put(42, "decisionDirection"); columnToKey.put(46, "lawType"); }
@DontValidate public Resolution edit() throws JSONException { if (applicationLayer != null) { details = new HashMap(); for (Map.Entry<String, ClobElement> e : applicationLayer.getDetails().entrySet()) { details.put(e.getKey(), e.getValue().getValue()); } groupsRead.addAll(applicationLayer.getReaders()); groupsWrite.addAll(applicationLayer.getWriters()); // Fill visible checkboxes for (ConfiguredAttribute ca : applicationLayer.getAttributes()) { if (ca.isVisible()) { selectedAttributes.add(ca.getFullName()); } } } return new ForwardResolution(JSP); }
@Before public void synchronizeFeatureTypeAndLoadInfo() throws JSONException { Layer layer = applicationLayer.getService().getSingleLayer(applicationLayer.getLayerName()); if (layer == null) { getContext() .getValidationErrors() .addGlobalError( new SimpleError( "Laag niet gevonden bij originele service - verwijder deze laag uit niveau")); return; } for (StyleLibrary sld : layer.getService().getStyleLibraries()) { Map style = new HashMap(); JSONObject styleTitleJson = new JSONObject(); style.put("id", "sld:" + sld.getId()); style.put( "title", "SLD stijl: " + sld.getTitle() + (sld.isDefaultStyle() ? " (standaard)" : "")); // Find stuff for layerName if (sld.getNamedLayerUserStylesJson() != null) { JSONObject sldNamedLayerJson = new JSONObject(sld.getNamedLayerUserStylesJson()); if (sldNamedLayerJson.has(layer.getName())) { JSONObject namedLayer = sldNamedLayerJson.getJSONObject(layer.getName()); if (namedLayer.has("title")) { styleTitleJson.put("namedLayerTitle", namedLayer.get("title")); } JSONArray userStyles = namedLayer.getJSONArray("styles"); if (userStyles.length() > 0) { JSONObject userStyle = userStyles.getJSONObject(0); if (userStyle.has("title")) { styleTitleJson.put("styleTitle", userStyle.get("title")); } } } } styles.add(style); stylesTitleJson.put((String) style.get("id"), styleTitleJson); } if (layer.getDetails().containsKey(Layer.DETAIL_WMS_STYLES)) { JSONArray wmsStyles = new JSONArray(layer.getDetails().get(Layer.DETAIL_WMS_STYLES).getValue()); for (int i = 0; i < wmsStyles.length(); i++) { JSONObject wmsStyle = wmsStyles.getJSONObject(i); Map style = new HashMap(); style.put("id", "wms:" + wmsStyle.getString("name")); style.put( "title", "WMS server stijl: " + wmsStyle.getString("name") + " (" + wmsStyle.getString("title") + ")"); JSONObject styleTitleJson = new JSONObject(); styleTitleJson.put("styleTitle", wmsStyle.getString("title")); styles.add(style); stylesTitleJson.put((String) style.get("id"), styleTitleJson); } } if (!styles.isEmpty()) { List<Map> temp = new ArrayList(); Map s = new HashMap(); s.put("id", "registry_default"); s.put("title", "In gegevensregister als standaard ingestelde SLD"); temp.add(s); s = new HashMap(); s.put("id", "none"); s.put("title", "Geen: standaard stijl van WMS service zelf"); temp.add(s); temp.addAll(styles); styles = temp; } // Synchronize configured attributes with layer feature type if (layer.getFeatureType() == null || layer.getFeatureType().getAttributes().isEmpty()) { applicationLayer.getAttributes().clear(); } else { List<String> attributesToRetain = new ArrayList(); SimpleFeatureType sft = layer.getFeatureType(); editable = sft.isWriteable(); // Rebuild ApplicationLayer.attributes according to Layer FeatureType // New attributes are added at the end of the list; the original // order is only used when the Application.attributes list is empty // So a feature for reordering attributes per applicationLayer is // possible. // New Attributes from a join or related featureType are added at the // end of the list. attributesToRetain = rebuildAttributes(sft); // JSON info about attributed required for editing makeAttributeJSONArray(layer.getFeatureType()); // Remove ConfiguredAttributes which are no longer present List<ConfiguredAttribute> attributesToRemove = new ArrayList(); for (ConfiguredAttribute ca : applicationLayer.getAttributes()) { if (ca.getFeatureType() == null) { ca.setFeatureType(layer.getFeatureType()); } if (!attributesToRetain.contains(ca.getFullName())) { // Do not modify list we are iterating over attributesToRemove.add(ca); if (!"save".equals(getContext().getEventName())) { getContext() .getMessages() .add( new SimpleMessage( "Attribuut \"{0}\" niet meer beschikbaar in attribuutbron: wordt verwijderd na opslaan", ca.getAttributeName())); } } } for (ConfiguredAttribute ca : attributesToRemove) { applicationLayer.getAttributes().remove(ca); Stripersist.getEntityManager().remove(ca); } } }
public void doProcess(HttpServletRequest req, HttpServletResponse res, boolean isPost) { StringBuffer bodyContent = null; OutputStream out = null; PrintWriter writer = null; String serviceKey = null; try { BufferedReader in = req.getReader(); String line = null; while ((line = in.readLine()) != null) { if (bodyContent == null) bodyContent = new StringBuffer(); bodyContent.append(line); } } catch (Exception e) { } try { if (requireSession) { // check to see if there was a session created for this request // if not assume it was from another domain and blow up // Wrap this to prevent Portlet exeptions HttpSession session = req.getSession(false); if (session == null) { res.setStatus(HttpServletResponse.SC_FORBIDDEN); return; } } serviceKey = req.getParameter("id"); // only to preven regressions - Remove before 1.0 if (serviceKey == null) serviceKey = req.getParameter("key"); // check if the services have been loaded or if they need to be reloaded if (services == null || configUpdated()) { getServices(res); } String urlString = null; String xslURLString = null; String userName = null; String password = null; String format = "json"; String callback = req.getParameter("callback"); String urlParams = req.getParameter("urlparams"); String countString = req.getParameter("count"); // encode the url to prevent spaces from being passed along if (urlParams != null) { urlParams = urlParams.replace(' ', '+'); } try { if (services.has(serviceKey)) { JSONObject service = services.getJSONObject(serviceKey); // default to the service default if no url parameters are specified if (urlParams == null && service.has("defaultURLParams")) { urlParams = service.getString("defaultURLParams"); } String serviceURL = service.getString("url"); // build the URL if (urlParams != null && serviceURL.indexOf("?") == -1) { serviceURL += "?"; } else if (urlParams != null) { serviceURL += "&"; } String apikey = ""; if (service.has("username")) userName = service.getString("username"); if (service.has("password")) password = service.getString("password"); if (service.has("apikey")) apikey = service.getString("apikey"); urlString = serviceURL + apikey; if (urlParams != null) urlString += "&" + urlParams; if (service.has("xslStyleSheet")) { xslURLString = service.getString("xslStyleSheet"); } } // code for passing the url directly through instead of using configuration file else if (req.getParameter("url") != null) { String serviceURL = req.getParameter("url"); // build the URL if (urlParams != null && serviceURL.indexOf("?") == -1) { serviceURL += "?"; } else if (urlParams != null) { serviceURL += "&"; } urlString = serviceURL; if (urlParams != null) urlString += urlParams; } else { writer = res.getWriter(); if (serviceKey == null) writer.write("XmlHttpProxyServlet Error: id parameter specifying serivce required."); else writer.write( "XmlHttpProxyServlet Error : service for id '" + serviceKey + "' not found."); writer.flush(); return; } } catch (Exception ex) { getLogger().severe("XmlHttpProxyServlet Error loading service: " + ex); } Map paramsMap = new HashMap(); paramsMap.put("format", format); // do not allow for xdomain unless the context level setting is enabled. if (callback != null && allowXDomain) { paramsMap.put("callback", callback); } if (countString != null) { paramsMap.put("count", countString); } InputStream xslInputStream = null; if (urlString == null) { writer = res.getWriter(); writer.write( "XmlHttpProxyServlet parameters: id[Required] urlparams[Optional] format[Optional] callback[Optional]"); writer.flush(); return; } // default to JSON res.setContentType(responseContentType); out = res.getOutputStream(); // get the stream for the xsl stylesheet if (xslURLString != null) { // check the web root for the resource URL xslURL = null; xslURL = ctx.getResource(resourcesDir + "xsl/" + xslURLString); // if not in the web root check the classpath if (xslURL == null) { xslURL = XmlHttpProxyServlet.class.getResource(classpathResourcesDir + "xsl/" + xslURLString); } if (xslURL != null) { xslInputStream = xslURL.openStream(); } else { String message = "Could not locate the XSL stylesheet provided for service id " + serviceKey + ". Please check the XMLHttpProxy configuration."; getLogger().severe(message); try { out.write(message.getBytes()); out.flush(); return; } catch (java.io.IOException iox) { } } } if (!isPost) { xhp.doGet(urlString, out, xslInputStream, paramsMap, userName, password); } else { if (bodyContent == null) getLogger() .info( "XmlHttpProxyServlet attempting to post to url " + urlString + " with no body content"); xhp.doPost( urlString, out, xslInputStream, paramsMap, bodyContent.toString(), req.getContentType(), userName, password); } } catch (Exception iox) { iox.printStackTrace(); getLogger().severe("XmlHttpProxyServlet: caught " + iox); try { writer = res.getWriter(); writer.write(iox.toString()); writer.flush(); } catch (java.io.IOException ix) { ix.printStackTrace(); } return; } finally { try { if (out != null) out.close(); if (writer != null) writer.close(); } catch (java.io.IOException iox) { } } }