<h2>org.autoplot.hapiserver.Util</h2><p>helpful functions.</p>
<h2>Util( )</h2>
<p></p>

<hr>
<a name="HAPI_SERVER_HOME_PROPERTY"></a>
<h2>HAPI_SERVER_HOME_PROPERTY</h2>
<p>This should point to the name of the directory containing HAPI configuration.
 This directory should contain catalog.json, capabilities.json and a 
 subdirectory "info" which contains files with the name &lt;ID&gt;.json,
 each containing the info response.  Note these should also contain a
 tag "x_uri" which is the Autoplot URI that serves this data.</p>

<hr>
<a name="csvSplit-java.lang.String-int"></a>
<h2>csvSplit</h2>
csvSplit( <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a> line, int nf ) &rarr; <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String[]</a>

<p>split, but not when comma is within quotes.</p>

<h3>Parameters</h3>
line - for example 'a,b,"c,d"'
<br>
nf - number of fields, or -1 for no constraint

<h3>Returns:</h3>
['a','b','c,d']
<br><br>
<a href="https://github.com/autoplot/dev/search?q=csvSplit&unscoped_q=csvSplit">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#csvSplit-java.lang.String-int">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="fileSystemSafeName-java.lang.String"></a>
<h2>fileSystemSafeName</h2>
fileSystemSafeName( <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a> s ) &rarr; <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a>

<p>convert IDs and NAMEs into safe names which will work on all platforms.
 If the name is modified, it will start with an underscore (_). 
 <li>poolTemperature -> poolTemperature
 <li>Iowa City Conditions -> _Iowa+City+Conditions</p>

<h3>Parameters</h3>
s - a String

<h3>Returns:</h3>
a String

<br><br>
<a href="https://github.com/autoplot/dev/search?q=fileSystemSafeName&unscoped_q=fileSystemSafeName">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#fileSystemSafeName-java.lang.String">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="getDurationForHumans-long"></a>
<h2>getDurationForHumans</h2>
getDurationForHumans( long dt ) &rarr; <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a>

<p>return the duration in a easily-human-consumable form.</p>

<h3>Parameters</h3>
dt - the duration in milliseconds.

<h3>Returns:</h3>
a duration like "2.6 hours"
<br><br>
<a href="https://github.com/autoplot/dev/search?q=getDurationForHumans&unscoped_q=getDurationForHumans">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#getDurationForHumans-long">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="getHapiHome"></a>
<h2>getHapiHome</h2>
getHapiHome(  ) &rarr; <a href='https://docs.oracle.com/javase/8/docs/api/java/io/File.html'>java.io.File</a>

<p>return the root of the HAPI server.</p>

<h3>Returns:</h3>
the root of the HAPI server.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=getHapiHome&unscoped_q=getHapiHome">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#getHapiHome">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="getNumberOfElements-JSONObject"></a>
<h2>getNumberOfElements</h2>
getNumberOfElements( JSONObject info ) &rarr; int[]

<p>return the total number of elements of each parameter.</p>

<h3>Parameters</h3>
info - the info

<h3>Returns:</h3>
an int array with the number of elements in each parameter.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=getNumberOfElements&unscoped_q=getNumberOfElements">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#getNumberOfElements-JSONObject">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="hapiVersion"></a>
<h2>hapiVersion</h2>
hapiVersion(  ) &rarr; <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a>

<p>return the HAPI protocol version.</p>

<h3>Returns:</h3>
the HAPI protocol version.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=hapiVersion&unscoped_q=hapiVersion">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#hapiVersion">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="isTrustedClient-HttpServletRequest"></a>
<h2>isTrustedClient</h2>
isTrustedClient( HttpServletRequest request ) &rarr; boolean

<p>return true if the client is trusted and additional information about
 the server for debugging can be included in the response.</p>

<h3>Parameters</h3>
request - a HttpServletRequest

<h3>Returns:</h3>
a boolean

<br><br>
<a href="https://github.com/autoplot/dev/search?q=isTrustedClient&unscoped_q=isTrustedClient">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#isTrustedClient-HttpServletRequest">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="main-java.lang.String[]"></a>
<h2>main</h2>
main( <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String[]</a> args ) &rarr; void

<p></p>

<h3>Parameters</h3>
args - a java.lang.String[]

<h3>Returns:</h3>
void (returns nothing)

<br><br>
<a href="https://github.com/autoplot/dev/search?q=main&unscoped_q=main">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#main-java.lang.String[]">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="maybeInitialize-ServletContext"></a>
<h2>maybeInitialize</h2>
maybeInitialize( ServletContext context ) &rarr; void

<p>if HAPI_HOME has not been set, then set it.</p>

<h3>Parameters</h3>
context - a ServletContext

<h3>Returns:</h3>
void (returns nothing)

<br><br>
<a href="https://github.com/autoplot/dev/search?q=maybeInitialize&unscoped_q=maybeInitialize">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#maybeInitialize-ServletContext">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="raiseBadId-java.lang.String-HttpServletResponse-java.io.PrintWriter"></a>
<h2>raiseBadId</h2>
raiseBadId( <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a> id, HttpServletResponse response, <a href='https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html'>java.io.PrintWriter</a> out ) &rarr; void

<p>send a "bad id" response to the client.</p>

<h3>Parameters</h3>
id - the id.
<br>
response - the response object
<br>
out - the print writer for the response object.

<h3>Returns:</h3>
void (returns nothing)

<br><br>
<a href="https://github.com/autoplot/dev/search?q=raiseBadId&unscoped_q=raiseBadId">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#raiseBadId-java.lang.String-HttpServletResponse-java.io.PrintWriter">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="raiseMisconfiguration-java.lang.String-java.lang.Exception-HttpServletResponse-java.io.PrintWriter"></a>
<h2>raiseMisconfiguration</h2>
raiseMisconfiguration( <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a> id, <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html'>java.lang.Exception</a> ex, HttpServletResponse response, <a href='https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html'>java.io.PrintWriter</a> out ) &rarr; void

<p>send a "bad id" response to the client.</p>

<h3>Parameters</h3>
id - the id.
<br>
ex - an exception
<br>
response - the response object
<br>
out - the print writer for the response object.

<h3>Returns:</h3>
void (returns nothing)

<br><br>
<a href="https://github.com/autoplot/dev/search?q=raiseMisconfiguration&unscoped_q=raiseMisconfiguration">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#raiseMisconfiguration-java.lang.String-java.lang.Exception-HttpServletResponse-java.io.PrintWriter">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="serverVersion"></a>
<h2>serverVersion</h2>
serverVersion(  ) &rarr; <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a>

<p>return the server implementation version.</p>

<h3>Returns:</h3>
the server implementation version.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=serverVersion&unscoped_q=serverVersion">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#serverVersion">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="setHapiHome-java.io.File"></a>
<h2>setHapiHome</h2>
setHapiHome( <a href='https://docs.oracle.com/javase/8/docs/api/java/io/File.html'>java.io.File</a> f ) &rarr; void

<p></p>

<h3>Parameters</h3>
f - a File

<h3>Returns:</h3>
void (returns nothing)

<br><br>
<a href="https://github.com/autoplot/dev/search?q=setHapiHome&unscoped_q=setHapiHome">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#setHapiHome-java.io.File">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="subsetParams-JSONObject-java.lang.String"></a>
<h2>subsetParams</h2>
subsetParams( JSONObject info, <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a> parameters ) &rarr; JSONObject

<p>return a new JSONObject for the info request, with the subset of parameters.</p>

<h3>Parameters</h3>
info - the root node of the info response.
<br>
parameters - comma-delimited list of parameters.

<h3>Returns:</h3>
the new JSONObject, with special tag __indexmap__ showing which columns are to be included in a data response.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=subsetParams&unscoped_q=subsetParams">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#subsetParams-JSONObject-java.lang.String">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="transfer-java.io.InputStream-java.io.OutputStream"></a>
<h2>transfer</h2>
transfer( <a href='https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html'>java.io.InputStream</a> src, <a href='https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html'>java.io.OutputStream</a> dest ) &rarr; void

<p>transfers the data from one channel to another.  src and dest are
 closed after the operation is complete.</p>

<h3>Parameters</h3>
src - an InputStream
<br>
dest - an OutputStream

<h3>Returns:</h3>
void (returns nothing)

<br><br>
<a href="https://github.com/autoplot/dev/search?q=transfer&unscoped_q=transfer">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#transfer-java.io.InputStream-java.io.OutputStream">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="trimUTF8-byte[]-int"></a>
<h2>trimUTF8</h2>
trimUTF8( byte[] bytes, int k ) &rarr; byte[]

<p>properly trim the byte array containing a UTF-8 String to a limit</p>

<h3>Parameters</h3>
bytes - the bytes
<br>
k - the number of bytes

<h3>Returns:</h3>
a byte[]

<br><br>
<a href="https://github.com/autoplot/dev/search?q=trimUTF8&unscoped_q=trimUTF8">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#trimUTF8-byte[]-int">[view on old javadoc]</a>
<br>
<br>
<hr>
<a name="validateJSON-java.lang.String"></a>
<h2>validateJSON</h2>
validateJSON( <a href='https://docs.oracle.com/javase/8/docs/api/java/lang/String.html'>String</a> json ) &rarr; boolean

<p>return true if this is valid JSON, false otherwise, and log the exception at SEVERE.</p>

<h3>Parameters</h3>
json - a String

<h3>Returns:</h3>
a boolean

<br><br>
<a href="https://github.com/autoplot/dev/search?q=validateJSON&unscoped_q=validateJSON">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/autoplot/hapiserver/Util.md">[view on GitHub]</a>
 <a href="https://cottagesystems.com/~jbf/autoplot/doc2018/org/autoplot/hapiserver/Util.html#validateJSON-java.lang.String">[view on old javadoc]</a>
<br>
<br>