public void printBrowserForm(PrintWriter pw, DAS das) { /*----------------------------------------------------- // C++ implementation looks like this... os << "<b>Sequence " << name() << "</b><br>\n"; os << "<dl><dd>\n"; for (Pix p = first_var(); p; next_var(p)) { var(p)->print_val(os, "", print_decls); wo.write_variable_attributes(var(p), global_das); os << "<p><p>\n"; } os << "</dd></dl>\n"; -----------------------------------------------------*/ pw.print("<b>Sequence " + getName() + "</b><br>\n" + "<dl><dd>\n"); wwwOutPut wOut = new wwwOutPut(pw); Enumeration e = getVariables(); while (e.hasMoreElements()) { BaseType bt = (BaseType) e.nextElement(); ((BrowserForm) bt).printBrowserForm(pw, das); wOut.writeVariableAttributes(bt, das); pw.print("<p><p>\n"); } pw.println("</dd></dl>\n"); }
public void doGetDDS(ReqState rs) throws Exception { HttpServletResponse response = rs.getResponse(); GuardedDataset ds = null; try { ds = getDataset(rs); if (null == ds) return; response.setContentType("text/plain"); response.setHeader("XDODS-Server", getServerVersion()); response.setHeader("Content-Description", "dods-dds"); OutputStream out = new BufferedOutputStream(response.getOutputStream()); ServerDDS myDDS = ds.getDDS(); if (rs.getConstraintExpression().equals("")) { // No Constraint Expression? // Send the whole DDS myDDS.print(out); out.flush(); } else { // Otherwise, send the constrained DDS // Instantiate the CEEvaluator and parse the constraint expression CEEvaluator ce = new CEEvaluator(myDDS); ce.parseConstraint(rs); // Send the constrained DDS back to the client PrintWriter pw = new PrintWriter(new OutputStreamWriter(out)); myDDS.printConstrained(pw); pw.flush(); } } finally { // release lock if needed if (ds != null) ds.release(); } }
public void doGetHELP(ReqState rs) throws Exception { HttpServletResponse response = rs.getResponse(); response.setContentType("text/html"); response.setHeader("XDODS-Server", getServerVersion()); response.setHeader("Content-Description", "dods-help"); PrintWriter pw = new PrintWriter(new OutputStreamWriter(response.getOutputStream())); printHelpPage(pw); pw.flush(); }
public void doGetVER(ReqState rs) throws Exception { HttpServletResponse response = rs.getResponse(); response.setContentType("text/plain"); response.setHeader("XDODS-Server", getServerVersion()); response.setHeader("Content-Description", "dods-version"); PrintWriter pw = new PrintWriter(new OutputStreamWriter(response.getOutputStream())); pw.println("Server Version: " + getServerVersion()); pw.flush(); }
public void doGetDAP2Data(ReqState rs) throws Exception { HttpServletResponse response = rs.getResponse(); GuardedDataset ds = null; try { ds = getDataset(rs); if (null == ds) return; response.setContentType("application/octet-stream"); response.setHeader("XDODS-Server", getServerVersion()); response.setHeader("Content-Description", "dods-data"); ServletOutputStream sOut = response.getOutputStream(); OutputStream bOut; DeflaterOutputStream dOut = null; if (rs.getAcceptsCompressed() && allowDeflate) { response.setHeader("Content-Encoding", "deflate"); dOut = new DeflaterOutputStream(sOut); bOut = new BufferedOutputStream(dOut); } else { bOut = new BufferedOutputStream(sOut); } ServerDDS myDDS = ds.getDDS(); CEEvaluator ce = new CEEvaluator(myDDS); ce.parseConstraint(rs); checkSize(myDDS, false); // Send the constrained DDS back to the client PrintWriter pw = new PrintWriter(new OutputStreamWriter(bOut)); myDDS.printConstrained(pw); // Send the Data delimiter back to the client pw.flush(); bOut.write("\nData:\n".getBytes()); bOut.flush(); // Send the binary data back to the client DataOutputStream sink = new DataOutputStream(bOut); ce.send(myDDS.getEncodedName(), sink, ds); sink.flush(); // Finish up sending the compressed stuff, but don't // close the stream (who knows what the Servlet may expect!) if (null != dOut) dOut.finish(); bOut.flush(); } finally { // release lock if needed if (ds != null) ds.release(); } }
/** * ************************************************************************ Prints the Bad URL * Page page to the passed PrintWriter * * @param pw PrintWriter stream to which to dump the bad URL page. */ private void printBadURLPage(PrintWriter pw) { String serverContactName = ThreddsConfig.get("serverInformation.contact.name", "UNKNOWN"); String serverContactEmail = ThreddsConfig.get("serverInformation.contact.email", "UNKNOWN"); pw.println("<h3>Error in URL</h3>"); pw.println("The URL extension did not match any that are known by this"); pw.println("server. Below is a list of the five extensions that are be recognized by"); pw.println("all OPeNDAP servers. If you think that the server is broken (that the URL you"); pw.println("submitted should have worked), then please contact the"); pw.println("administrator of this server [" + serverContactName + "] at: "); pw.println("<a href='mailto:" + serverContactEmail + "'>" + serverContactEmail + "</a><p>"); }
public void doGetASC(ReqState rs) throws Exception { HttpServletResponse response = rs.getResponse(); GuardedDataset ds = null; try { ds = getDataset(rs); if (ds == null) return; response.setHeader("XDODS-Server", getServerVersion()); response.setContentType("text/plain"); response.setHeader("Content-Description", "dods-ascii"); log.debug( "Sending OPeNDAP ASCII Data For: " + rs + " CE: '" + rs.getConstraintExpression() + "'"); ServerDDS dds = ds.getDDS(); CEEvaluator ce = new CEEvaluator(dds); ce.parseConstraint(rs); checkSize(dds, true); PrintWriter pw = new PrintWriter(response.getOutputStream()); dds.printConstrained(pw); pw.println("---------------------------------------------"); AsciiWriter writer = new AsciiWriter(); // could be static writer.toASCII(pw, dds, ds); // the way that getDAP2Data works // DataOutputStream sink = new DataOutputStream(bOut); // ce.send(myDDS.getName(), sink, ds); pw.flush(); } finally { // release lock if needed if (ds != null) ds.release(); } }
private void sendErrorResponse(HttpServletResponse response, int errorCode, String errorMessage) { try { log.info(UsageLog.closingMessageForRequestContext(errorCode, -1)); response.setStatus(errorCode); response.setHeader("Content-Description", "dods-error"); response.setContentType("text/plain"); PrintWriter pw = new PrintWriter(response.getOutputStream()); pw.println("Error {"); pw.println(" code = " + errorCode + ";"); pw.println(" message = \"" + errorMessage + "\";"); pw.println("};"); pw.flush(); } catch (Exception e) { System.err.println("sendErrorResponse: " + e); } }
/** * ************************************************************************ Prints the OPeNDAP * Server help page to the passed PrintWriter * * @param pw PrintWriter stream to which to dump the help page. */ private void printHelpPage(PrintWriter pw) { pw.println("<h3>OPeNDAP Server Help</h3>"); pw.println("To access most of the features of this OPeNDAP server, append"); pw.println( "one of the following a eight suffixes to a URL: .das, .dds, .dods, .ddx, .blob, .info,"); pw.println(".ver or .help. Using these suffixes, you can ask this server for:"); pw.println("<dl>"); pw.println("<dt> das </dt> <dd> Dataset Attribute Structure (DAS)</dd>"); pw.println("<dt> dds </dt> <dd> Dataset Descriptor Structure (DDS)</dd>"); pw.println("<dt> dods </dt> <dd> DataDDS object (A constrained DDS populated with data)</dd>"); pw.println("<dt> ddx </dt> <dd> XML version of the DDS/DAS</dd>"); pw.println( "<dt> blob </dt> <dd> Serialized binary data content for requested data set, " + "with the constraint expression applied.</dd>"); pw.println("<dt> info </dt> <dd> info object (attributes, types and other information)</dd>"); pw.println("<dt> html </dt> <dd> html form for this dataset</dd>"); pw.println("<dt> ver </dt> <dd> return the version number of the server</dd>"); pw.println("<dt> help </dt> <dd> help information (this text)</dd>"); pw.println("</dl>"); pw.println("For example, to request the DAS object from the FNOC1 dataset at URI/GSO (a"); pw.println("test dataset) you would appand `.das' to the URL:"); pw.println("http://opendap.gso.url.edu/cgi-bin/nph-nc/data/fnoc1.nc.das."); pw.println("<p><b>Note</b>: Many OPeNDAP clients supply these extensions for you so you don't"); pw.println("need to append them (for example when using interfaces supplied by us or"); pw.println("software re-linked with a OPeNDAP client-library). Generally, you only need to"); pw.println("add these if you are typing a URL directly into a WWW browser."); pw.println("<p><b>Note</b>: If you would like version information for this server but"); pw.println("don't know a specific data file or data set name, use `/version' for the"); pw.println("filename. For example: http://opendap.gso.url.edu/cgi-bin/nph-nc/version will"); pw.println("return the version number for the netCDF server used in the first example. "); pw.println("<p><b>Suggestion</b>: If you're typing this URL into a WWW browser and"); pw.println("would like information about the dataset, use the `.info' extension."); pw.println("<p>If you'd like to see a data values, use the `.html' extension and submit a"); pw.println("query using the customized form."); }
/** * ************************************************************************ Default handler for * OPeNDAP ascii requests. Returns OPeNDAP DAP2 data in comma delimited ascii columns for * ingestion into some not so OPeNDAP enabled application such as MS-Excel. Accepts constraint * expressions in exactly the same way as the regular OPeNDAP dataserver. * * @param request * @param response * @param dataSet * @throws opendap.dap.DAP2Exception * @throws ParseException */ public void sendASCII(HttpServletRequest request, HttpServletResponse response, String dataSet) throws DAP2Exception, ParseException { if (Debug.isSet("showResponse")) System.out.println( "Sending OPeNDAP ASCII Data For: " + dataSet + " CE: '" + request.getQueryString() + "'"); String requestURL, ce; DConnect2 url; DataDDS dds; if (request.getQueryString() == null) { ce = ""; } else { ce = "?" + request.getQueryString(); } int suffixIndex = request.getRequestURL().toString().lastIndexOf("."); requestURL = request.getRequestURL().substring(0, suffixIndex); if (Debug.isSet("showResponse")) { System.out.println("New Request URL Resource: '" + requestURL + "'"); System.out.println("New Request Constraint Expression: '" + ce + "'"); } try { if (_Debug) System.out.println("Making connection to .dods service..."); url = new DConnect2(requestURL, true); if (_Debug) System.out.println("Requesting data..."); dds = url.getData(ce, null, new asciiFactory()); if (_Debug) System.out.println(" ASC DDS: "); if (_Debug) dds.print(System.out); PrintWriter pw = new PrintWriter(response.getOutputStream()); PrintWriter pwDebug = new PrintWriter(System.out); if (dds != null) { dds.print(pw); pw.println("---------------------------------------------"); String s = ""; Enumeration e = dds.getVariables(); while (e.hasMoreElements()) { BaseType bt = (BaseType) e.nextElement(); if (_Debug) ((toASCII) bt).toASCII(pwDebug, true, null, true); // bt.toASCII(pw,addName,getNAme(),true); ((toASCII) bt).toASCII(pw, true, null, true); } } else { String betterURL = request.getRequestURL().substring(0, request.getRequestURL().lastIndexOf(".")) + ".dods?" + request.getQueryString(); pw.println("-- ASCII RESPONSE HANDLER PROBLEM --"); pw.println(""); pw.println("The ASCII response handler was unable to obtain requested data set."); pw.println(""); pw.println("Because this handler calls it's own OPeNDAP server to get the requested"); pw.println("data the source error is obscured."); pw.println(""); pw.println("To get a better idea of what is going wrong, try requesting the URL:"); pw.println(""); pw.println(" " + betterURL); pw.println(""); pw.println("And then look carefully at the returned document. Note that if you"); pw.println("are using a browser to access the URL the returned document will"); pw.println("more than likely be treated as a download and written to your"); pw.println("local disk. It should be a file with the extension \".dods\""); pw.println(""); pw.println("Locate it, open it with a text editor, and find your"); pw.println("way to happiness and inner peace."); pw.println(""); } // pw.println("</pre>"); pw.flush(); if (_Debug) pwDebug.flush(); } catch (FileNotFoundException fnfe) { System.out.println("OUCH! FileNotFoundException: " + fnfe.getMessage()); fnfe.printStackTrace(System.out); } catch (MalformedURLException mue) { System.out.println("OUCH! MalformedURLException: " + mue.getMessage()); mue.printStackTrace(System.out); } catch (IOException ioe) { System.out.println("OUCH! IOException: " + ioe.getMessage()); ioe.printStackTrace(System.out); } catch (Throwable t) { System.out.println("OUCH! Throwable: " + t.getMessage()); t.printStackTrace(System.out); } if (_Debug) System.out.println(" GetAsciiHandler done"); }