teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5861: * Software engineering by Intevation GmbH teichmann@5861: * teichmann@5861: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5861: * documentation coming with Dive4Elements River for details. teichmann@5861: */ teichmann@5861: teichmann@5835: package org.dive4elements.river.client.server; sascha@603: sascha@604: import java.io.InputStream; sascha@604: import java.io.IOException; sascha@604: sascha@604: import org.w3c.dom.Document; sascha@604: import org.w3c.dom.Element; sascha@604: import org.w3c.dom.NodeList; sascha@604: ingo@1367: import org.apache.log4j.Logger; ingo@1367: sascha@603: import com.google.gwt.user.server.rpc.RemoteServiceServlet; sascha@603: sascha@604: import org.apache.commons.lang.StringEscapeUtils; sascha@604: teichmann@5835: import org.dive4elements.river.client.client.services.ReportService; sascha@603: teichmann@5835: import org.dive4elements.artifacts.common.utils.XMLUtils; teichmann@5835: import org.dive4elements.artifacts.common.utils.ClientProtocolUtils; sascha@604: teichmann@5835: import org.dive4elements.artifacts.httpclient.http.HttpClient; teichmann@5835: import org.dive4elements.artifacts.httpclient.http.HttpClientImpl; sascha@604: sascha@603: public class ReportServiceImpl sascha@603: extends RemoteServiceServlet sascha@603: implements ReportService sascha@603: { ingo@1367: private static final Logger logger = ingo@1367: Logger.getLogger(ReportServiceImpl.class); ingo@1367: ingo@1367: sascha@603: @Override sascha@603: public String report( sascha@603: String collectionId, sascha@603: String locale, sascha@603: String out sascha@603: ) { ingo@1367: logger.info("report: " + collectionId + " " + out); sascha@604: raimund@1425: String url = getServletContext().getInitParameter("server-url"); raimund@1425: sascha@604: Document request = ClientProtocolUtils.newOutCollectionDocument( sascha@604: collectionId, sascha@604: out, sascha@604: "report"); sascha@604: sascha@604: InputStream in = null; sascha@604: try { sascha@604: HttpClient client = new HttpClientImpl(url, locale); sascha@604: in = client.collectionOut(request, collectionId, out); sascha@604: sascha@604: if (in == null) { ingo@1367: logger.debug("report: no report"); sascha@604: return null; sascha@604: } sascha@604: sascha@604: Document report = XMLUtils.parseDocument(in); sascha@604: sascha@604: return buildReport(report); sascha@604: } sascha@604: catch (IOException ioe) { sascha@604: ioe.printStackTrace(); sascha@604: } sascha@604: catch (Exception e) { sascha@604: e.printStackTrace(); sascha@604: } sascha@604: finally { sascha@604: if (in != null) { sascha@604: try { sascha@604: in.close(); sascha@604: } sascha@604: catch (IOException ioe) { sascha@604: } sascha@604: } sascha@604: } sascha@604: sascha@604: return "error processing error report"; sascha@604: } sascha@604: felix@4591: felix@4591: /** Returns String containing markup that shows the report message. */ sascha@604: protected static String buildReport(Document document) { sascha@604: sascha@604: NodeList problems = document.getElementsByTagName("problem"); sascha@604: sascha@604: StringBuilder global = new StringBuilder(); sascha@604: StringBuilder kms = new StringBuilder(); sascha@604: sascha@604: for (int i = 0, N = problems.getLength(); i < N; ++i) { sascha@604: sascha@604: Element element = (Element)problems.item(i); sascha@604: sascha@604: String km = element.getAttribute("km"); sascha@604: String msg = element.getTextContent(); sascha@604: sascha@604: if (km.length() > 0) { sascha@1609: kms.append("
  • KM ") sascha@604: .append(StringEscapeUtils.escapeHtml(km)) sascha@604: .append(": ") sascha@604: .append(StringEscapeUtils.escapeHtml(msg)) sascha@604: .append("
  • "); sascha@604: } sascha@604: else { sascha@604: global.append("
  • ") sascha@604: .append(StringEscapeUtils.escapeHtml(msg)) sascha@604: .append("
  • "); sascha@604: } sascha@604: } sascha@604: sascha@604: StringBuilder sb = new StringBuilder(""); sascha@604: sascha@604: return sb.toString(); sascha@603: } sascha@603: } sascha@603: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :