/layers-service/src/main/java/org/ala/layers/web/LayersService.java

http://alageospatialportal.googlecode.com/ · Java · 197 lines · 127 code · 16 blank · 54 comment · 6 complexity · 32978c5aaf8f8476f343b68f461c94d4 MD5 · raw file

  1. /**************************************************************************
  2. * Copyright (C) 2010 Atlas of Living Australia
  3. * All Rights Reserved.
  4. *
  5. * The contents of this file are subject to the Mozilla Public
  6. * License Version 1.1 (the "License"); you may not use this file
  7. * except in compliance with the License. You may obtain a copy of
  8. * the License at http://www.mozilla.org/MPL/
  9. *
  10. * Software distributed under the License is distributed on an "AS
  11. * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  12. * implied. See the License for the specific language governing
  13. * rights and limitations under the License.
  14. ***************************************************************************/
  15. package org.ala.layers.web;
  16. import java.io.BufferedWriter;
  17. import java.io.OutputStreamWriter;
  18. import java.net.URI;
  19. import java.util.List;
  20. import javax.annotation.Resource;
  21. import javax.servlet.http.HttpServletRequest;
  22. import javax.servlet.http.HttpServletResponse;
  23. import org.ala.layers.dao.LayerDAO;
  24. import org.ala.layers.dto.Layer;
  25. import org.apache.commons.lang.StringEscapeUtils;
  26. import org.apache.commons.lang.StringUtils;
  27. import org.apache.log4j.Logger;
  28. import org.springframework.stereotype.Controller;
  29. import org.springframework.web.bind.annotation.PathVariable;
  30. import org.springframework.web.bind.annotation.RequestMapping;
  31. import org.springframework.web.bind.annotation.RequestMethod;
  32. import org.springframework.web.bind.annotation.RequestParam;
  33. import org.springframework.web.bind.annotation.ResponseBody;
  34. import org.springframework.web.servlet.ModelAndView;
  35. /**
  36. *
  37. * @author jac24n
  38. */
  39. @Controller
  40. public class LayersService {
  41. /**
  42. * Log4j instance
  43. */
  44. protected Logger logger = Logger.getLogger(this.getClass());
  45. @Resource(name = "layerDao")
  46. private LayerDAO layerDao;
  47. /**
  48. * This method returns all layers
  49. *
  50. * @param req
  51. * @return
  52. */
  53. @RequestMapping(value = "/layers", method = RequestMethod.GET)
  54. public @ResponseBody
  55. List<Layer> layerObjects(HttpServletRequest req) {
  56. logger.info("Retriving enabled layers");
  57. return layerDao.getLayers();
  58. }
  59. /**
  60. * This method returns a single layer, provided an id
  61. *
  62. * @param req
  63. * @return
  64. */
  65. @RequestMapping(value = "/layer/{id}", method = RequestMethod.GET)
  66. public @ResponseBody
  67. Layer layerObject(@PathVariable("id") String id, HttpServletRequest req) {
  68. Layer l = null;
  69. try {
  70. l = layerDao.getLayerById(Integer.parseInt(id));
  71. } catch (Exception e) {
  72. }
  73. if (l == null) {
  74. l = layerDao.getLayerByName(id);
  75. }
  76. return l;
  77. }
  78. /**
  79. * This method returns all layers
  80. *
  81. * @param req
  82. * @return
  83. */
  84. @RequestMapping(value = "/layers/search", method = RequestMethod.GET)
  85. public @ResponseBody
  86. List<Layer> layerObjects(@RequestParam("q") String q, HttpServletRequest req) {
  87. logger.info("search enabled layers for " + q);
  88. return layerDao.getLayersByCriteria(q);
  89. }
  90. @RequestMapping(value = "/layers/grids", method = RequestMethod.GET)
  91. public @ResponseBody
  92. List<Layer> gridsLayerObjects(HttpServletRequest req) {
  93. // String query =
  94. // "SELECT * FROM layers WHERE enabled='TRUE' and type='Environmental';";
  95. // ResultSet r = DBConnection.query(query);
  96. // return Utils.resultSetToJSON(r);
  97. return layerDao.getLayersByEnvironment();
  98. }
  99. @RequestMapping(value = "/layers/shapes", method = RequestMethod.GET)
  100. public @ResponseBody
  101. List<Layer> shapesLayerObjects(HttpServletRequest req) {
  102. // String query =
  103. // "SELECT * FROM layers WHERE enabled='TRUE' and type='Contextual';";
  104. // ResultSet r = DBConnection.query(query);
  105. // return Utils.resultSetToJSON(r);
  106. return layerDao.getLayersByContextual();
  107. }
  108. /**
  109. * Return layers list if RIF-CS XML format
  110. * @param req
  111. * @param res
  112. * @throws Exception
  113. */
  114. @RequestMapping(value = "/layers/rif-cs", method = RequestMethod.GET)
  115. public void layersRifCs(HttpServletRequest req, HttpServletResponse res) throws Exception {
  116. res.setContentType("text/xml");
  117. // Build XML by hand here because JSP processing seems to omit CDATA sections from the output
  118. StringBuilder sb = new StringBuilder();
  119. sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
  120. sb.append("<registryObjects xmlns=\"http://ands.org.au/standards/rif-cs/registryObjects\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://ands.org.au/standards/rif-cs/registryObjects http://services.ands.org.au/documentation/rifcs/schema/registryObjects.xsd\">");
  121. for (Layer layer: layerDao.getLayers()) {
  122. sb.append("<registryObject group=\"Atlas of Living Australia\">");
  123. sb.append("<key>ala.org.au/uid_" + layer.getUid() + "</key>");
  124. sb.append("<originatingSource><![CDATA[" + layer.getMetadatapath() + "]]></originatingSource>");
  125. sb.append("<collection type=\"dataset\">");
  126. sb.append("<identifier type=\"local\">ala.org.au/uid_" + layer.getUid() + "</identifier>");
  127. sb.append("<name type=\"abbreviated\">");
  128. sb.append("<namePart>" + layer.getName() + "</namePart>");
  129. sb.append("</name>");
  130. sb.append("<name type=\"alternative\">");
  131. sb.append("<namePart><![CDATA[" + layer.getDescription() + "]]></namePart>");
  132. sb.append("</name>");
  133. sb.append("<name type=\"primary\">");
  134. sb.append("<namePart><![CDATA[" + layer.getDescription() + "]]></namePart>");
  135. sb.append("</name>");
  136. sb.append("<location>");
  137. sb.append("<address>");
  138. sb.append("<electronic type=\"url\">");
  139. sb.append("<value>http://spatial.ala.org.au/layers</value>");
  140. sb.append("</electronic>");
  141. sb.append("</address>");
  142. sb.append("</location>");
  143. sb.append("<relatedObject>");
  144. sb.append("<key>Contributor:Atlas of Living Australia</key>");
  145. sb.append("<relation type=\"hasCollector\" />");
  146. sb.append("</relatedObject>");
  147. sb.append("<subject type=\"anzsrc-for\">0502</subject>");
  148. sb.append("<subject type=\"local\">" + layer.getClassification1() + "</subject>");
  149. if (!StringUtils.isEmpty(layer.getClassification2())) {
  150. sb.append("<subject type=\"local\">" + layer.getClassification2() + "</subject>");
  151. }
  152. sb.append("<description type=\"full\"><![CDATA[" + layer.getNotes() + "]]></description>");
  153. sb.append("<relatedInfo type=\"website\">");
  154. sb.append("<identifier type=\"uri\"><![CDATA[" + layer.getMetadatapath() + "]]></identifier>");
  155. sb.append("<title>Further metadata</title>");
  156. sb.append("</relatedInfo>");
  157. sb.append("<relatedInfo type=\"website\">");
  158. sb.append("<identifier type=\"uri\"><![CDATA[" + layer.getSource_link() + "]]></identifier>");
  159. sb.append("<title>Original source of this data</title>");
  160. sb.append("</relatedInfo>");
  161. sb.append("<rights>");
  162. sb.append("<licence ");
  163. if (!StringUtils.isEmpty(layer.getLicence_link())) {
  164. sb.append("rightsUri=\"" + StringEscapeUtils.escapeXml(layer.getLicence_link()) + "\">");
  165. } else {
  166. sb.append(">");
  167. }
  168. sb.append("<![CDATA[" + layer.getLicence_notes() + "]]></licence>");
  169. sb.append("</rights>");
  170. sb.append("<coverage>");
  171. sb.append("<spatial type=\"iso19139dcmiBox\">northlimit=" + layer.getMaxlatitude() + "; southlimit=" + layer.getMinlatitude() + "; westlimit=" + layer.getMinlongitude() + "; eastLimit=" + layer.getMaxlongitude()+ "; projection=WGS84</spatial>");
  172. sb.append("</coverage>");
  173. sb.append("</collection>");
  174. sb.append("</registryObject>");
  175. }
  176. sb.append("</registryObjects>");
  177. res.getWriter().append(sb.toString());
  178. res.getWriter().flush();
  179. res.getWriter().close();
  180. }
  181. }