# Class CachedDataService

java.lang.Object
com.codename1.io.ConnectionRequest
com.codename1.io.services.CachedDataService

All Implemented Interfaces:
  `IOProgressListener`

public final class CachedDataService extends ConnectionRequest
Simple service that allows downloading and caching data locally. When the data is requested again the server is queried with a conditional get query.

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from class ConnectionRequest

  `ConnectionRequest.CachingMode, ConnectionRequest.SSLCertificate`
  Modifier and Type
  Class
  Description
  `static enum`
  `ConnectionRequest.CachingMode`
  There are 5 caching modes:
  `static final class`
  `ConnectionRequest.SSLCertificate`
  Encapsulates an SSL certificate fingerprint.

- ## Field Summary

  ### Fields inherited from class ConnectionRequest

  `PRIORITY_CRITICAL, PRIORITY_HIGH, PRIORITY_LOW, PRIORITY_NORMAL, PRIORITY_REDUNDANT`
  Modifier and Type
  Field
  Description
  `static final byte`
  `PRIORITY_CRITICAL`
  A critical priority request will "push" through the queue to the highest point regardless of anything else and ignoring anything that is not in itself of critical priority.
  `static final byte`
  `PRIORITY_HIGH`
  A high priority request is the second highest level, it will act exactly like a critical priority with one difference.
  `static final byte`
  `PRIORITY_LOW`
  Low priority requests are mostly background tasks that should still be accomplished though
  `static final byte`
  `PRIORITY_NORMAL`
  Normal priority executes as usual on the queue
  `static final byte`
  `PRIORITY_REDUNDANT`
  Redundant elements can be discarded from the queue when paused

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `equals(Object o)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `handleErrorResponseCode(int code, String message)`
  Handles a server response code that is not 200 and not a redirect (unless redirect handling is disabled)
  `protected void`
  `handleException(Exception err)`
  Handles an exception thrown when performing a network operation, the default implementation shows a retry dialog.
  `int`
  `hashCode()`
  Returns a hash code value for the object.
  `protected void`
  `readHeaders(Object connection)`
  Allows reading the headers from the connection by calling the getHeader() method.
  `protected void`
  `readResponse(InputStream input)`
  Callback for the server response with the input stream from the server.
  `static void`
  `register()`
  Makes sure the cached data class is properly registered as an externalizable.
  `static void`
  `updateData(CachedData d, ActionListener callback)`
  Checks that the cached data is up to date and if a newer version exits it updates the data in place

  ### Methods inherited from class ConnectionRequest

  `addArgument, addArgument, addArgument, addArgumentArray, addArgumentNoEncoding, addArgumentNoEncoding, addArgumentNoEncodingArray, addArguments, addExceptionListener, addRequestHeader, addResponseCodeListener, addResponseListener, buildRequestBody, cacheUnmodified, canGetSSLCertificates, checkSSLCertificates, cookieReceived, cookieSent, createRequestURL, downloadImageToFileSystem, downloadImageToFileSystem, downloadImageToFileSystem, downloadImageToFileSystem, downloadImageToFileSystem, downloadImageToFileSystem, downloadImageToStorage, downloadImageToStorage, downloadImageToStorage, downloadImageToStorage, downloadImageToStorage, downloadImageToStorage, fetchJSON, fetchJSONAsync, fireResponseListener, getCachedData, getCacheMode, getContentLength, getContentType, getCookieHeader, getDefaultCacheMode, getDefaultUserAgent, getDestinationFile, getDestinationStorage, getDisposeOnCompletion, getHeader, getHeaderFieldNames, getHeaders, getHttpMethod, getPriority, getReadTimeout, getRequestBody, getRequestBodyData, getResponseCode, getResponseContentType, getResponseData, getResponseErrorMessage, getResposeCode, getShowOnInit, getSilentRetryCount, getSSLCertificates, getTimeout, getUrl, getUserAgent, getYield, handleIOException, handleRuntimeException, hasResponseListeners, initConnection, initCookieHeader, ioStreamUpdate, isCheckSSLCertificates, isCookiesEnabled, isCookiesEnabledDefault, isDefaultFollowRedirects, isDuplicateSupported, isFailSilently, isFollowRedirects, isHandleErrorCodesInGlobalErrorHandler, isInsecure, isKilled, isNativeCookieSharingSupported, isPausable, isPaused, isPost, isReadRequest, isReadResponseForErrors, isReadResponseForErrorsDefault, isReadTimeoutSupported, isRedirecting, isWriteRequest, kill, onRedirect, pause, postResponse, purgeCache, purgeCacheDirectory, readErrorCodeHeaders, removeAllArguments, removeArgument, removeExceptionListener, removeResponseCodeListener, removeResponseListener, resume, retry, setCacheMode, setCheckSSLCertificates, setChunkedStreamingMode, setContentType, setCookieHeader, setCookiesEnabled, setCookiesEnabledDefault, setDefaultCacheMode, setDefaultFollowRedirects, setDefaultUserAgent, setDestinationFile, setDestinationStorage, setDisposeOnCompletion, setDuplicateSupported, setFailSilently, setFollowRedirects, setHandleErrorCodesInGlobalErrorHandler, setHttpMethod, setInsecure, setKilled, setPaused, setPost, setPriority, setReadRequest, setReadResponseForErrors, setReadResponseForErrorsDefault, setReadTimeout, setRequestBody, setRequestBody, setShowOnInit, setSilentRetryCount, setTimeout, setUrl, setUseNativeCookieStore, setUserAgent, setWriteRequest, shouldAutoCloseResponse, shouldConvertPostToGetOnRedirect, shouldStop, shouldWriteUTFAsGetBytes, validate`
  Modifier and Type
  Method
  Description
  `void`
  `addArgument(String key, byte[] value)`
  Add an argument to the request response
  `void`
  `addArgument(String key, String value)`
  Add an argument to the request response
  `void`
  `addArgument(String key, String[] value)`
  Add an argument to the request response as an array of elements, this will trigger multiple request entries with the same key
  `void`
  `addArgumentArray(String key, String... value)`
  Add an argument to the request response as an array of elements, this will trigger multiple request entries with the same key
  `void`
  `addArgumentNoEncoding(String key, String value)`
  Add an argument to the request response without encoding it, this is useful for arguments which are already encoded
  `void`
  `addArgumentNoEncoding(String key, String[] value)`
  Add an argument to the request response as an array of elements, this will trigger multiple request entries with the same key, notice that this doesn't implicitly encode the value
  `void`
  `addArgumentNoEncodingArray(String key, String... value)`
  Add an argument to the request response as an array of elements, this will trigger multiple request entries with the same key, notice that this doesn't implicitly encode the value
  `void`
  `addArguments(String key, String... value)`
  Add an argument to the request response as an array of elements, this will trigger multiple request entries with the same key
  `void`
  `addExceptionListener(ActionListener<NetworkEvent> a)`
  Adds a listener that would be notified on the CodenameOne thread of an exception in this connection request
  `void`
  `addRequestHeader(String key, String value)`
  Adds the given header to the request that will be sent
  `void`
  `addResponseCodeListener(ActionListener<NetworkEvent> a)`
  Adds a listener that would be notified on the CodenameOne thread of a response code that is not a 200 (OK) or 301/2 (redirect) response code.
  `void`
  `addResponseListener(ActionListener<NetworkEvent> a)`
  Adds a listener that would be notified on the CodenameOne thread of a response from the server.
  `protected void`
  `buildRequestBody(OutputStream os)`
  Invoked when send body is true, by default sends the request arguments based on "POST" conventions
  `protected void`
  `cacheUnmodified()`
  This callback is invoked on a 304 server response indicating the data in the server matches the result we currently have in the cache.
  `boolean`
  `canGetSSLCertificates()`
  Checks to see if the platform supports getting SSL certificates.
  `protected void`
  `checkSSLCertificates(ConnectionRequest.SSLCertificate[] certificates)`
  A callback that can be overridden by subclasses to check the SSL certificates for the server, and kill the connection if they don't pass muster.
  `protected void`
  `cookieReceived(Cookie c)`
  Callback invoked for every cookie received from the server
  `protected void`
  `cookieSent(Cookie c)`
  Callback invoked for every cookie being sent to the server
  `protected String`
  `createRequestURL()`
  Creates the request URL mostly for a get request
  `AsyncResource<Image>`
  `downloadImageToFileSystem(String file)`
  Downloads an image to the file system asynchronously returning an AsyncResource object that resolves to the loaded image..
  `AsyncResource<Image>`
  `downloadImageToFileSystem(String file, boolean useCache)`
  Downloads an image to a the file system asynchronously returning an AsyncResource object that resolves to the loaded image..
  `void`
  `downloadImageToFileSystem(String file, SuccessCallback<Image> onSuccess)`
  Downloads an image to a the file system asynchronously and calls the onSuccessCallback with the resulting image.
  `void`
  `downloadImageToFileSystem(String file, SuccessCallback<Image> onSuccess, boolean useCache)`
  Downloads an image to a the file system asynchronously and calls the onSuccessCallback with the resulting image.
  `void`
  `downloadImageToFileSystem(String file, SuccessCallback<Image> onSuccess, FailureCallback<Image> onFail)`
  Downloads an image to a the file system asynchronously and calls the onSuccessCallback with the resulting image.
  `void`
  `downloadImageToFileSystem(String file, SuccessCallback<Image> onSuccess, FailureCallback<Image> onFail, boolean useCache)`
  Downloads an image to a the file system asynchronously and calls the onSuccessCallback with the resulting image.
  `AsyncResource<Image>`
  `downloadImageToStorage(String storageFile)`
  Downloads an image to a specified storage file asynchronously returning an AsyncResource that resolves to the resulting image..
  `AsyncResource<Image>`
  `downloadImageToStorage(String storageFile, boolean useCache)`
  Downloads an image to a specified storage file asynchronously returning an AsyncResource that resolves to the resulting image..
  `void`
  `downloadImageToStorage(String storageFile, SuccessCallback<Image> onSuccess)`
  Downloads an image to a specified storage file asynchronously and calls the onSuccessCallback with the resulting image.
  `void`
  `downloadImageToStorage(String storageFile, SuccessCallback<Image> onSuccess, boolean useCache)`
  Downloads an image to a specified storage file asynchronously and calls the onSuccessCallback with the resulting image.
  `void`
  `downloadImageToStorage(String storageFile, SuccessCallback<Image> onSuccess, FailureCallback<Image> onFail)`
  Downloads an image to a specified storage file asynchronously and calls the onSuccessCallback with the resulting image.
  `void`
  `downloadImageToStorage(String storageFile, SuccessCallback<Image> onSuccess, FailureCallback<Image> onFail, boolean useCache)`
  Downloads an image to a specified storage file asynchronously and calls the onSuccessCallback with the resulting image.
  `static Map<String,Object>`
  `fetchJSON(String url)`
  Utility method that returns a JSON structure or throws an IOException in case of a failure.
  `static AsyncResource<Map<String,Object>>`
  `fetchJSONAsync(String url)`
  Fetches JSON asynchronously.
  `protected void`
  `fireResponseListener(ActionEvent ev)`
  Fires the response event to the listeners on this connection
  `protected InputStream`
  `getCachedData()`
  This method should be overriden in `CacheMode.MANUAL` to provide offline caching.
  `ConnectionRequest.CachingMode`
  `getCacheMode()`
  There are 5 caching modes:
  `int`
  `getContentLength()`
  Returns the content length header value
  `String`
  `getContentType()`

  ###### Returns

  `static String`
  `getCookieHeader()`
  Workaround for https://bugs.php.net/bug.php?id=65633 allowing developers to customize the name of the cookie header to Cookie
  `static ConnectionRequest.CachingMode`
  `getDefaultCacheMode()`
  The default value for the cacheMode property see `#getCacheMode()`
  `static String`
  `getDefaultUserAgent()`

  ###### Returns

  `String`
  `getDestinationFile()`
  When set to a none null string saves the response to file system under this file name
  `String`
  `getDestinationStorage()`
  When set to a none null string saves the response to storage under this file name
  `Dialog`
  `getDisposeOnCompletion()`
  A dialog that will be seamlessly disposed once the given request has been completed
  `protected String`
  `getHeader(Object connection, String header)`
  Returns the HTTP header field for the given connection, this method is only guaranteed to work when invoked from the readHeaders method.
  `protected String[]`
  `getHeaderFieldNames(Object connection)`
  Returns the HTTP header field names for the given connection, this method is only guaranteed to work when invoked from the readHeaders method.
  `protected String[]`
  `getHeaders(Object connection, String header)`
  Returns the HTTP header field for the given connection, this method is only guaranteed to work when invoked from the readHeaders method.
  `String`
  `getHttpMethod()`
  Returns the http method
  `byte`
  `getPriority()`
  The priority of this connection based on the constants in this class
  `int`
  `getReadTimeout()`
  Gets the read timeout for this connection.
  `String`
  `getRequestBody()`
  The request body can be used instead of arguments to pass JSON data to a restful request, it can't be used in a get request and will fail if you have arguments
  `Data`
  `getRequestBodyData()`
  The request body can be used instead of arguments to pass JSON data to a restful request, it can't be used in a get request and will fail if you have arguments
  `int`
  `getResponseCode()`
  Returns the response code for this request, this is only relevant after the request completed and might contain a temporary (e.g. redirect) code while the request is in progress
  `String`
  `getResponseContentType()`
  Returns the content type from the response headers
  `byte[]`
  `getResponseData()`
  This method will return a valid value for only some of the responses and only after the response was processed
  `String`
  `getResponseErrorMessage()`
  Returns error message associated with an error response code
  `int`
  `getResposeCode()`
  Returns the response code for this request, this is only relevant after the request completed and might contain a temporary (e.g. redirect) code while the request is in progress
  `Dialog`
  `getShowOnInit()`
  This dialog will be shown when this request enters the network queue
  `int`
  `getSilentRetryCount()`
  Indicates the number of times to silently retry a connection that failed before prompting
  `ConnectionRequest.SSLCertificate[]`
  `getSSLCertificates()`
  Gets the server's SSL certificates for this requests.
  `int`
  `getTimeout()`
  Indicates the timeout for this connection request
  `String`
  `getUrl()`

  ###### Returns

  `String`
  `getUserAgent()`

  ###### Returns

  `protected int`
  `getYield()`
  Returns the amount of time to yield for other processes, this is an implicit method that automatically generates values for lower priority connections
  `protected void`
  `handleIOException(IOException err)`
  Handles IOException thrown when performing a network operation
  `protected void`
  `handleRuntimeException(RuntimeException err)`
  Handles an exception thrown when performing a network operation
  `protected boolean`
  `hasResponseListeners()`
  Returns true if someone is listening to action response events, this is useful so we can decide whether to bother collecting data for an event in some cases since building the event object might be memory/CPU intensive.
  `protected void`
  `initConnection(Object connection)`
  Invoked to initialize HTTP headers, cookies etc.
  `protected String`
  `initCookieHeader(String cookie)`
  Allows subclasses to inject cookies into the request
  `void`
  `ioStreamUpdate(Object source, int bytes)`
  Indicates the number of bytes that were read/written to/from the source stream
  `boolean`
  `isCheckSSLCertificates()`

  ###### Returns

  `boolean`
  `isCookiesEnabled()`

  ###### Returns

  `static boolean`
  `isCookiesEnabledDefault()`

  ###### Returns

  `static boolean`
  `isDefaultFollowRedirects()`
  Enables/Disables automatic redirects globally and returns the 302 error code, IMPORTANT this feature doesn't work on all platforms and currently doesn't work on iOS which always implicitly redirects
  `boolean`
  `isDuplicateSupported()`
  Indicates whether this connection request supports duplicate entries in the request queue
  `boolean`
  `isFailSilently()`
  Indicates that we are uninterested in error handling
  `boolean`
  `isFollowRedirects()`
  Enables/Disables automatic redirects globally and returns the 302 error code, IMPORTANT this feature doesn't work on all platforms and currently doesn't work on iOS which always implicitly redirects
  `static boolean`
  `isHandleErrorCodesInGlobalErrorHandler()`
  When set to true (the default), the global error handler in `NetworkManager` should receive errors for response code as well
  `boolean`
  `isInsecure()`
  Checks if the request is insecure (default false).
  `protected boolean`
  `isKilled()`

  ###### Returns

  `static boolean`
  `isNativeCookieSharingSupported()`
  Checks if the platform supports sharing cookies between the native components (e.g. BrowserComponent) and ConnectionRequests.
  `protected boolean`
  `isPausable()`
  Return true from this method if this connection can be paused and resumed later on.
  `protected boolean`
  `isPaused()`

  ###### Returns

  `boolean`
  `isPost()`
  Returns true for a post operation and false for a get operation
  `boolean`
  `isReadRequest()`

  ###### Returns

  `boolean`
  `isReadResponseForErrors()`
  When set to true the read response code will happen even for error codes such as 400 and 500
  `static boolean`
  `isReadResponseForErrorsDefault()`
  Determines the default value for `#isReadResponseForErrors()`
  `static boolean`
  `isReadTimeoutSupported()`
  Checks if this platform supports read timeouts.
  `boolean`
  `isRedirecting()`
  Returns true if this request is been redirected to a different url
  `boolean`
  `isWriteRequest()`

  ###### Returns

  `void`
  `kill()`
  Kills this request if possible
  `boolean`
  `onRedirect(String url)`
  This is a callback method that been called when there is a redirect.
  `boolean`
  `pause()`
  Invoked to pause this opeation, this method will only be invoked if isPausable() returns true (its false by default).
  `protected void`
  `postResponse()`
  A callback method that's invoked on the EDT after the readResponse() method has finished, this is the place where developers should change their Codename One user interface to avoid race conditions that might be triggered by modifications within readResponse.
  `void`
  `purgeCache()`
  Deletes the cache file if it exists, notice that this will not work for download files
  `static void`
  `purgeCacheDirectory()`
  Purges all locally cached files
  `protected void`
  `readErrorCodeHeaders(Object connection)`
  Allows reading the headers from the connection by calling the getHeader() method when a response that isn't 200 OK is sent.
  `void`
  `removeAllArguments()`
  Removes all arguments
  `void`
  `removeArgument(String key)`
  Removes the given argument from the request
  `void`
  `removeExceptionListener(ActionListener<NetworkEvent> a)`
  Removes the given listener
  `void`
  `removeResponseCodeListener(ActionListener<NetworkEvent> a)`
  Removes the given listener
  `void`
  `removeResponseListener(ActionListener<NetworkEvent> a)`
  Removes the given listener
  `boolean`
  `resume()`
  Called when a previously paused operation now has the networking time to resume.
  `void`
  `retry()`
  Retry the current operation in case of an exception
  `void`
  `setCacheMode(ConnectionRequest.CachingMode cacheMode)`
  There are 5 caching modes:
  `void`
  `setCheckSSLCertificates(boolean checkSSLCertificates)`

  ###### Parameters

  `void`
  `setChunkedStreamingMode(int chunklen)`
  This method is used to enable streaming of a HTTP request body without internal buffering, when the content length is not known in advance.
  `void`
  `setContentType(String contentType)`

  ###### Parameters

  `static void`
  `setCookieHeader(String aCookieHeader)`
  Workaround for https://bugs.php.net/bug.php?id=65633 allowing developers to customize the name of the cookie header to Cookie
  `void`
  `setCookiesEnabled(boolean cookiesEnabled)`

  ###### Parameters

  `static void`
  `setCookiesEnabledDefault(boolean aCookiesEnabledDefault)`

  ###### Parameters

  `static void`
  `setDefaultCacheMode(ConnectionRequest.CachingMode aDefaultCacheMode)`
  The default value for the cacheMode property see `#getCacheMode()`
  `static void`
  `setDefaultFollowRedirects(boolean aDefaultFollowRedirects)`
  Enables/Disables automatic redirects globally and returns the 302 error code, IMPORTANT this feature doesn't work on all platforms and currently doesn't work on iOS which always implicitly redirects
  `static void`
  `setDefaultUserAgent(String aDefaultUserAgent)`

  ###### Parameters

  `void`
  `setDestinationFile(String destinationFile)`
  When set to a none null string saves the response to file system under this file name
  `void`
  `setDestinationStorage(String destinationStorage)`
  When set to a none null string saves the response to storage under this file name
  `void`
  `setDisposeOnCompletion(Dialog disposeOnCompletion)`
  A dialog that will be seamlessly disposed once the given request has been completed
  `void`
  `setDuplicateSupported(boolean duplicateSupported)`
  Indicates whether this connection request supports duplicate entries in the request queue
  `void`
  `setFailSilently(boolean failSilently)`
  Indicates that we are uninterested in error handling
  `void`
  `setFollowRedirects(boolean followRedirects)`
  Enables/Disables automatic redirects globally and returns the 302 error code, IMPORTANT this feature doesn't work on all platforms and currently doesn't work on iOS which always implicitly redirects
  `static void`
  `setHandleErrorCodesInGlobalErrorHandler(boolean aHandleErrorCodesInGlobalErrorHandler)`
  When set to true (the default), the global error handler in `NetworkManager` should receive errors for response code as well
  `void`
  `setHttpMethod(String httpMethod)`
  Sets the http method for the request
  `void`
  `setInsecure(boolean insecure)`
  Turns off checking to make sure that SSL certificate is valid.
  `protected void`
  `setKilled(boolean killed)`

  ###### Parameters

  `protected void`
  `setPaused(boolean paused)`

  ###### Parameters

  `void`
  `setPost(boolean post)`
  Set to true for a post operation and false for a get operation, this will implicitly set the method to post/get respectively (which you can change back by setting the method).
  `void`
  `setPriority(byte priority)`
  The priority of this connection based on the constants in this class
  `void`
  `setReadRequest(boolean readRequest)`

  ###### Parameters

  `void`
  `setReadResponseForErrors(boolean readResponseForErrors)`
  When set to true the read response code will happen even for error codes such as 400 and 500
  `static void`
  `setReadResponseForErrorsDefault(boolean aReadResponseForErrorsDefault)`
  Determines the default value for `#setReadResponseForErrors(boolean)`
  `void`
  `setReadTimeout(int timeout)`
  Sets the read timeout for the connection.
  `void`
  `setRequestBody(Data data)`
  The request body can be used instead of arguments to pass JSON data to a restful request, it can't be used in a get request and will fail if you have arguments.
  `void`
  `setRequestBody(String requestBody)`
  The request body can be used instead of arguments to pass JSON data to a restful request, it can't be used in a get request and will fail if you have arguments.
  `void`
  `setShowOnInit(Dialog showOnInit)`
  This dialog will be shown when this request enters the network queue
  `void`
  `setSilentRetryCount(int silentRetryCount)`
  Indicates the number of times to silently retry a connection that failed before prompting
  `void`
  `setTimeout(int timeout)`
  Indicates the timeout for this connection request
  `void`
  `setUrl(String url)`

  ###### Parameters

  `static void`
  `setUseNativeCookieStore(boolean b)`
  Indicates whether the native Cookie stores should be used
  `void`
  `setUserAgent(String userAgent)`

  ###### Parameters

  `void`
  `setWriteRequest(boolean writeRequest)`

  ###### Parameters

  `protected boolean`
  `shouldAutoCloseResponse()`
  Indicates whether the response stream should be closed automatically by the framework (defaults to true), this might cause an issue if the stream needs to be passed to a separate thread for reading.
  `protected boolean`
  `shouldConvertPostToGetOnRedirect()`
  This mimics the behavior of browsers that convert post operations to get operations when redirecting a request.
  `protected boolean`
  `shouldStop()`
  Returns true if the request is paused or killed, developers should call this method periodically to test whether they should quit the current IO operation immediately
  `protected boolean`
  `shouldWriteUTFAsGetBytes()`
  Returns whether when writing a post body the platform expects something in the form of string.getBytes("UTF-8") or new OutputStreamWriter(os, "UTF-8").
  `protected void`
  `validate()`
  Validates that the request has the required information before being added to the queue e.g.

  ### Methods inherited from class Object

  `clone, getClass, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  `final Class`
  `getClass()`
  Returns the runtime class of an object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes current thread to wait until another thread invokes the method or the method for this object.
  `final void`
  `wait(long timeout)`
  Causes current thread to wait until either another thread invokes the method or the method for this object, or a specified amount of time has elapsed.
  `final void`
  `wait(long timeout, int nanos)`
  Causes current thread to wait until another thread invokes the method or the method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.

- ## Method Details

  - ### register

    public static void register()
    Makes sure the cached data class is properly registered as an externalizable. This must be invoked for caching to work

  - ### updateData

    public static void updateData(CachedData d, ActionListener callback)

    Checks that the cached data is up to date and if a newer version exits it updates the data in place

    ###### Parameters

    - `d`: the data to check

    - `callback`: optional callback to be invoked on request completion

  - ### equals

    public boolean equals(Object o)
    Description copied from class: `ConnectionRequest`
    Indicates whether some other object is "equal to" this one. The equals method implements an equivalence relation: It is reflexive: for any reference value x, x.equals(x) should return true. It is symmetric: for any reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the object is modified. For any non-null reference value x, x.equals(null) should return false. The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).
    Overrides:
      `equals` in class `ConnectionRequest`

  - ### hashCode

    public int hashCode()
    Description copied from class: `ConnectionRequest`
    Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables. As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
    Overrides:
      `hashCode` in class `ConnectionRequest`

  - ### handleException

    protected void handleException(Exception err)

    Handles an exception thrown when performing a network operation, the default implementation shows a retry dialog.

    ###### Parameters

    - `err`: the exception thrown
    Overrides:
      `handleException` in class `ConnectionRequest`

  - ### handleErrorResponseCode

    protected void handleErrorResponseCode(int code, String message)

    Handles a server response code that is not 200 and not a redirect (unless redirect handling is disabled)

    ###### Parameters

    - `code`: the response code from the server

    - `message`: the response message from the server

    Overrides:
      `handleErrorResponseCode` in class `ConnectionRequest`

  - ### readHeaders

    protected void readHeaders(Object connection) throws IOException

    Allows reading the headers from the connection by calling the getHeader() method.

    ###### Parameters

    - `connection`: used when invoking getHeader

    ###### Throws

    - `java.io.IOException`: thrown on failure
    Overrides:
      `readHeaders` in class `ConnectionRequest`
    Throws:
      `IOException`

  - ### readResponse

    protected void readResponse(InputStream input) throws IOException

    Callback for the server response with the input stream from the server. This method is invoked on the network thread

    ###### Parameters

    - `input`: the input stream containing the response

    ###### Throws

    - `IOException`: when a read input occurs
    Overrides:
      `readResponse` in class `ConnectionRequest`
    Throws:
      `IOException`