In many cases you may want to translate a cql filter into its xml representation.
For example cql filter -->
ID > 5
would be tranlated to-->
We are going to create a Java servlet to get the cql filter as parameter and output its xml represantation.
CODE for our servlet
For example cql filter -->
ID > 5
would be tranlated to-->
<?xml version="1.0" encoding="UTF-8"?> <ogc:PropertyIsGreaterThan xmlns="http://www.opengis.net/ogc" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"> <ogc:PropertyName>ID</ogc:PropertyName> <ogc:Literal>5</ogc:Literal> </ogc:PropertyIsGreaterThan>
We are going to create a Java servlet to get the cql filter as parameter and output its xml represantation.
CODE for our servlet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | /** * Servlet to convert a cql syntax like query * to xml ogc compatitable format * and send it back to the client for further manipulation * * @parameter String accepts one parameter which is the cql filter * @returns XML String which is the ogc xml representation of the supplied cql * If the cql syntax is false returns the error code and info */ package freeopengis.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.xml.transform.TransformerException; import org.geotools.filter.FilterTransformer; import org.opengis.filter.Filter; import org.geotools.filter.text.cql2.CQL; import org.geotools.filter.text.cql2.CQLException; import org.geotools.filter.text.ecql.ECQL; /** * * @author pt */@WebServlet(name = "CqlToXmlFilter", urlPatterns = {"/cqltoxmlfilter"}) public class CqlToXmlFilter extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=UTF-8"; private static final Logger logger = LoggerFactory.getLogger(CqlToXmlFilter.class); private static final long serialVersionUID = 1L; @Override public void init(ServletConfig config) throws ServletException { super.init(config); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); try { //get the cql string as paramater. String cqlQuery = request.getParameter("cqlQuery"); //e.g --> String cqlQuery = "id is not null"; logger.debug(cqlQuery); //In some cases CQL class does not support the cql syntax. Such case is when using IN operator // In such cases we need to use the ECQL class // to support the IN operator. Boolean b = cqlQuery.matches("(?i).* in .*"); Filter filter; if (b==true) { filter = ECQL.toFilter(cqlQuery); } else { filter = CQL.toFilter(cqlQuery); } FilterTransformer transform = new FilterTransformer(); transform.setIndentation(2); String xml = transform.transform( filter ); out.println(xml); out.flush(); out.close(); } catch (CQLException | TransformerException ex) { logger.error("error = ", ex); out.println(ex); out.flush(); out.close(); } } } |
No comments:
Post a Comment