javax.media.jai.remote
Class RemoteJAI
java.lang.Object
|
+--javax.media.jai.remote.RemoteJAI
- public class RemoteJAI
- extends Object
A convenience class for instantiating operations on remote machines.
This class also provides information related to the server and allows
for setting of parameters for the remote communication with the server.
Conceptually this class is very similar to the JAI
class, except that the RemoteJAI
class deals with
remote operations. This class allows programmers to use the syntax:
import javax.media.jai.remote.RemoteJAI;
RemoteJAI rc = new RemoteJAI(protocolName, serverName);
RemoteRenderedOp im = rc.create("convolve", paramBlock, renderHints);
to create new images by applying operators that are executed remotely on
the specified server. The create()
method returns a
RemoteRenderedOp
encapsulating the protocol name, server
name, operation name, parameter block, and rendering hints. Additionally,
it performs validity checking on the operation parameters. The operation
parameters are determined from the OperationDescriptor
retrieved using the getServerSupportedOperationList()
method.
Programmers may also refer to
RemoteJAI.createRenderable("opname", paramBlock, renderHints);
If the OperationDescriptor
associated with the
named operation returns true
from its
isImmediate()
method, the create()
method will ask the RemoteRenderedOp
it constructs to render
itself immediately. If this rendering is null
,
create()
will itself return null
rather than returning an instance of RemoteRenderedOp
as it normally does.
The registry being used by this class may be
inspected or set using the getOperationRegistry()
and
setOperationRegistry()
methods. Only experienced
users should attempt to set the registry. This registry is used to
map protocol names into either a RemoteRIF
or a
RemoteCRIF
.
The TileCache
associated with an instance may be
similarly accessed.
Each instance of RemoteJAI
contains a set of
default rendering hints which will be used for all image creations.
These hints are merged with any hints supplied to the
create
method; directly supplied hints take precedence
over the common hints. When a new RemoteJAI
instance is
constructed, its hints are initialized to a copy of the default
hints. Thus when an instance of RemoteJAI
is
constructed, hints for the default registry, tile cache, number of
retries, and the retry interval are added to the set of common
rendering hints. Similarly, invoking setOperationRegistry()
,
setTileCache()
, setNumRetries()
or
setRetryInterval()
on a RemoteJAI
instance
will cause the respective entity to be added to the common rendering
hints. The hints associated with any instance may be manipulated
using the getRenderingHints()
,
setRenderingHints()
, clearRenderingHints() methods.
The TileCache
to be used by a particular operation
may be set during construction, or by calling
the setTileCache()
method. This will result in the
provided tile cache being added to the set of common rendering
hints.
Network errors are dealt with through the use of retry intervals and
retries. Retries refers to the maximum number of times a remote operation
will be retried. The retry interval refers to the amount of time (in
milliseconds) between two consecutive retries. If errors are encountered
at each retry and the number of specified retries has been exhausted, a
RemoteImagingException
will be thrown. By default, the
number of retries is set to five, and the retry interval
is set to a thousand milliseconds. These values can be changed by using
the setNumRetries()
and the setRetryInterval
methods and can also be specified via the RenderingHints
object passed as an argument to RemoteJAI.create()
. Time
outs (When the amount of time taken to get a response or
the result of an operation from the remote machine exceeds a limit) are
not dealt with, and must be taken care of by the network imaging
protocol implementation itself. The implementation must be responsible
for monitoring time outs, but on encountering one can deal with it by
throwing a RemoteImagingException
, which will then be dealt
with using retries and retry intervals.
This class provides the capability of negotiating capabilities
between the client and the server. The negotiate
method uses the preferences specified via the
setNegotiationPreferences
method alongwith the server
and client capabilities retrieved via the getServerCapabilities
and getClientCapabilities
respectively to negotiate on each
of the preferences. This negotiation treats the client and server
capabilities as being non-preferences, and the user set
NegotiableCapabilitySet
as being a preference. The
negotiation is performed according to the rules described in the class
documentation for NegotiableCapability
.
Note that negotiation preferences can be set either prior to
specifying a particular rendered or renderable operation (by using
RemoteJAI.create()
or
RemoteJAI.createRenderable()
) or afterwards. The currently
set negotiation preferences are passed to the RemoteRenderedOp
on its construction through the RenderingHints
using the
KEY_NEGOTIATION_PREFERENCES
key. Since
RemoteRenderableOp
does not accept a
RenderingHints
object as a construction argument, the newly
created RemoteRenderableOp
is informed of these preferences
using it's setRenderingHints()
method. These preferences
can be changed after the construction using the
setNegotiationPreferences()
method on both
RemoteRenderedOp
and RemoteRenderableOp
.
The same behavior applies to the number of retries and the retry interval,
whether they be the default values contained in the default
RenderingHints
or whether they are set using the
setNumRetries
or setRetryInterval
methods, the
existing values are passed to RemoteRenderedOp
's when they
are created through the RenderingHints
argument, and are set
on the newly created RemoteRenderableOp
using the
setNumRetries
or setRetryInterval
methods on
RemoteRenderableOp
.
- Since:
- JAI 1.1
- See Also:
JAI
,
JAIRMIDescriptor
,
RemoteImagingException
Constructor Summary |
RemoteJAI(String protocolName,
String serverName)
Constructs a RemoteJAI instance with the given
protocol name and server name. |
RemoteJAI(String protocolName,
String serverName,
OperationRegistry registry,
TileCache tileCache)
Constructs a RemoteJAI instance with the given
protocol name, server name, OperationRegistry
and TileCache . |
Method Summary |
void |
clearRenderingHints()
Clears the RenderingHints associated with this
RemoteJAI instance. |
RemoteRenderedOp |
create(String opName,
ParameterBlock args,
RenderingHints hints)
Creates a RemoteRenderedOp which represents the named
operation to be performed remotely, using the source(s) and/or
parameter(s) specified in the ParameterBlock , and
applying the specified hints to the destination. |
RemoteRenderableOp |
createRenderable(String opName,
ParameterBlock args)
Creates a RemoteRenderableOp that represents the named
operation to be performed remotely, using the source(s) and/or
parameter(s) specified in the ParameterBlock . |
NegotiableCapabilitySet |
getClientCapabilities()
Returns the set of capabilities supported by the client. |
NegotiableCapabilitySet |
getNegotiatedValues()
Returns the results of the negotiation between the client and server
capabilities according to the user preferences specified at an
earlier time. |
NegotiableCapability |
getNegotiatedValues(String category)
Returns the results of the negotiation between the client and server
capabilities according to the user preferences specified at an
earlier time for the given category. |
int |
getNumRetries()
Returns the number of retries. |
OperationRegistry |
getOperationRegistry()
Returns the OperationRegistry being used by this
RemoteJAI instance. |
String |
getProtocolName()
Returns the protocol name. |
Object |
getRenderingHint(RenderingHints.Key key)
Returns the hint value associated with a given key
in this RemoteJAI instance, or null
if no value is associated with the given key. |
RenderingHints |
getRenderingHints()
Returns the RenderingHints associated with this
RemoteJAI instance. |
int |
getRetryInterval()
Returns the amount of time between retries in milliseconds. |
NegotiableCapabilitySet |
getServerCapabilities()
Returns the set of capabilites supported by the server. |
String |
getServerName()
Returns a String identifying the remote server machine. |
OperationDescriptor[] |
getServerSupportedOperationList()
Returns the list of OperationDescriptor s that describe
the operations supported by the server. |
TileCache |
getTileCache()
Returns the TileCache being used by this
RemoteJAI instance. |
static NegotiableCapabilitySet |
negotiate(NegotiableCapabilitySet preferences,
NegotiableCapabilitySet serverCapabilities,
NegotiableCapabilitySet clientCapabilities)
This method negotiates the capabilities to be used in the remote
communication. |
static NegotiableCapability |
negotiate(NegotiableCapabilitySet preferences,
NegotiableCapabilitySet serverCapabilities,
NegotiableCapabilitySet clientCapabilities,
String category)
This method negotiates the capabilities to be used in the remote
communication for the given category. |
void |
removeRenderingHint(RenderingHints.Key key)
Removes the hint value associated with a given key
in this RemoteJAI instance. |
void |
setNegotiationPreferences(NegotiableCapabilitySet preferences)
Sets the preferences to be used in the client-server
communication. |
void |
setNumRetries(int numRetries)
Sets the number of retries. |
void |
setOperationRegistry(OperationRegistry operationRegistry)
Sets theOperationRegistry to be used by this
RemoteJAI instance. |
void |
setRenderingHint(RenderingHints.Key key,
Object value)
Sets the hint value associated with a given key
in this RemoteJAI instance. |
void |
setRenderingHints(RenderingHints hints)
Sets the RenderingHints associated with this
RemoteJAI instance. |
void |
setRetryInterval(int retryInterval)
Sets the amount of time between retries in milliseconds. |
void |
setTileCache(TileCache tileCache)
Sets the TileCache to be used by this
RemoteJAI . |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
serverName
protected String serverName
- The String representing the remote server machine.
protocolName
protected String protocolName
- The name of the protocol used for client-server communication.
DEFAULT_RETRY_INTERVAL
public static final int DEFAULT_RETRY_INTERVAL
- The amount of time to wait between retries (in Millseconds).
DEFAULT_NUM_RETRIES
public static final int DEFAULT_NUM_RETRIES
- The default number of retries.
RemoteJAI
public RemoteJAI(String protocolName,
String serverName)
- Constructs a
RemoteJAI
instance with the given
protocol name and server name. The semantics of the serverName
are defined by the particular protocol used to create this
class. Instructions on how to create a serverName that is
compatible with this protocol can be retrieved from the
getServerNameDocs()
method on the
RemoteDescriptor
associated with the given
protocolName. An IllegalArgumentException
may
be thrown by the protocol specific classes at a later point, if
null is provided as the serverName argument and null is not
considered a valid serverName by the specified protocol.
- Parameters:
protocolName
- The String
that identifies the
remote imaging protocol.serverName
- The String
that identifies the server.- Throws:
IllegalArgumentException
- if protocolName is null.
RemoteJAI
public RemoteJAI(String protocolName,
String serverName,
OperationRegistry registry,
TileCache tileCache)
- Constructs a
RemoteJAI
instance with the given
protocol name, server name, OperationRegistry
and TileCache
. If the specified
OperationRegistry
is null, the registry associated
with the default JAI
instance will be used. If the
specified TileCache
is null, the TileCache
associated with the default JAI
instance will be used.
An IllegalArgumentException
may
be thrown by the protocol specific classes at a later point, if
null is provided as the serverName argument and null is not
considered a valid serverName by the specified protocol.
- Parameters:
serverName
- The String
that identifies
the server.protocolName
- The String
that identifies
the remote imaging protocol.operationRegistry
- The OperationRegistry
associated
with this class, if null, default will be used.tileCache
- The TileCache
associated with
this class, if null, default will be used.- Throws:
IllegalArgumentException
- if protocolName is null.
getServerName
public String getServerName()
- Returns a
String
identifying the remote server machine.
getProtocolName
public String getProtocolName()
- Returns the protocol name.
setRetryInterval
public void setRetryInterval(int retryInterval)
- Sets the amount of time between retries in milliseconds. The
specified
retryInterval
parameter will be added
to the common RenderingHints
of this
RemoteJAI
instance, under the
JAI.KEY_RETRY_INTERVAL
key.
- Parameters:
retryInterval
- The time interval between retries (milliseconds).- Throws:
IllegalArgumentException
- if retryInterval is negative.
getRetryInterval
public int getRetryInterval()
- Returns the amount of time between retries in milliseconds.
setNumRetries
public void setNumRetries(int numRetries)
- Sets the number of retries. The specified
numRetries
parameter will be added to the common RenderingHints
of this RemoteJAI
instance, under the
JAI.KEY_NUM_RETRIES
key.
- Parameters:
numRetries
- The number of retries.- Throws:
IllegalArgumentException
- if numRetries is negative.
getNumRetries
public int getNumRetries()
- Returns the number of retries.
getOperationRegistry
public OperationRegistry getOperationRegistry()
- Returns the
OperationRegistry
being used by this
RemoteJAI
instance.
setOperationRegistry
public void setOperationRegistry(OperationRegistry operationRegistry)
- Sets the
OperationRegistry
to be used by this
RemoteJAI
instance. The operationRegistry
parameter will be added to the RenderingHints
of this
RemoteJAI
instance.
- Throws:
IllegalArgumentException
- if operationRegistry is null.
setTileCache
public void setTileCache(TileCache tileCache)
- Sets the
TileCache
to be used by this
RemoteJAI
. The tileCache
parameter
will be added to the RenderingHints
of this
RemoteJAI
instance.
- Throws:
IllegalArgumentException
- if tileCache is null.
getTileCache
public TileCache getTileCache()
- Returns the
TileCache
being used by this
RemoteJAI
instance.
getRenderingHints
public RenderingHints getRenderingHints()
- Returns the
RenderingHints
associated with this
RemoteJAI
instance. These rendering hints will be
merged with any hints supplied as an argument to the
create()
method.
setRenderingHints
public void setRenderingHints(RenderingHints hints)
- Sets the
RenderingHints
associated with this
RemoteJAI
instance. These rendering hints will be
merged with any hints supplied as an argument to the
create()
method.
- Throws:
IllegalArgumentException
- if hints is null.
clearRenderingHints
public void clearRenderingHints()
- Clears the
RenderingHints
associated with this
RemoteJAI
instance.
getRenderingHint
public Object getRenderingHint(RenderingHints.Key key)
- Returns the hint value associated with a given key
in this
RemoteJAI
instance, or null
if no value is associated with the given key.
- Throws:
IllegalArgumentException
- if key is null.
setRenderingHint
public void setRenderingHint(RenderingHints.Key key,
Object value)
- Sets the hint value associated with a given key
in this
RemoteJAI
instance.
- Throws:
IllegalArgumentException
- if key
is
null
.IllegalArgumentException
- if value
is
null
.IllegalArgumentException
- if value
is
not of the correct type for the given hint.
removeRenderingHint
public void removeRenderingHint(RenderingHints.Key key)
- Removes the hint value associated with a given key
in this
RemoteJAI
instance.
create
public RemoteRenderedOp create(String opName,
ParameterBlock args,
RenderingHints hints)
- Creates a
RemoteRenderedOp
which represents the named
operation to be performed remotely, using the source(s) and/or
parameter(s) specified in the ParameterBlock
, and
applying the specified hints to the destination. This method
should only be used when the final result returned is a single
RemoteRenderedImage
.
The supplied operation name is validated against the
names of the OperationDescriptor
s returned from
the getServerSupportedOperationList()
method. The
source(s) and/or parameter(s) in the ParameterBlock
are validated against the named operation's descriptor, both in
their numbers and types. Additional restrictions placed on the
sources and parameters by an individual operation are also
validated by calling its
OperationDescriptor.validateArguments()
method.
Parameters are allowed to have a null
input
value, if that particular parameter has a default value specified
in its operation's descriptor. In this case, the default value
will replace the null
input.
Unspecified tailing parameters are allowed, if these
parameters have default values specified in the operation's
descriptor. However, if a parameter, which has a default value,
is followed by one or more parameters that
have no default values, this parameter must be specified in the
ParameterBlock
, even if it only has a value of
code>null.
The rendering hints associated with this instance of
RemoteJAI
are overlaid with the hints passed to this
method. That is, the set of keys will be the union of the
keys from the instance's hints and the hints parameter.
If the same key exists in both places, the value from the
hints parameter will be used.
- Parameters:
opName
- The name of the operation.args
- The source(s) and/or parameter(s) for the operation.hints
- The hints for the operation.- Returns:
- A
RemoteRenderedOp
that represents the named
operation to be performed remotely, or null
if the specified operation
is in the "immediate" mode and the rendering of the
PlanarImage
failed. - Throws:
IllegalArgumentException
- if opName
is
null
.IllegalArgumentException
- if args
is
null
.IllegalArgumentException
- if no
OperationDescriptor
is available from the server
with the specified operation name.IllegalArgumentException
- if the
OperationDescriptor
for the specified
operation name on the server does not
support the "rendered" registry mode.IllegalArgumentException
- if the specified operation does
not produce a
java.awt.image.RenderedImage
.IllegalArgumentException
- if the specified operation is
unable to handle the sources and parameters specified in
args
.
createRenderable
public RemoteRenderableOp createRenderable(String opName,
ParameterBlock args)
- Creates a
RemoteRenderableOp
that represents the named
operation to be performed remotely, using the source(s) and/or
parameter(s) specified in the ParameterBlock
.
This method should only be used when the final result returned
is a single RenderableImage
.
The supplied operation name is validated against the names
of the OperationDescriptor
s returned from
the getServerSupportedOperationList()
method.
The source(s) and/or parameter(s) in the
ParameterBlock
are validated against the named
operation's descriptor, both in their numbers and types.
Additional restrictions placed on the sources and parameters
by an individual operation are also validated by calling its
OperationDescriptor.validateRenderableArguments()
method.
Parameters are allowed to have a null
input
value, if that particular parameter has a default value specified
in its operation's descriptor. In this case, the default value
will replace the null
input.
Unspecified tailing parameters are allowed, if these
parameters have default values specified in the operation's
descriptor. However, if a parameter, which
has a default value, is followed by one or more parameters that
have no default values, this parameter must be specified in the
ParameterBlock
, even if it only has a value of
code>null.
- Parameters:
opName
- The name of the operation.args
- The source(s) and/or parameter(s) for the operation.- Returns:
- A
RemoteRenderableOp
that represents the named
operation to be performed remotely. - Throws:
IllegalArgumentException
- if opName
is
null
.IllegalArgumentException
- if args
is
null
.IllegalArgumentException
- if no
OperationDescriptor
is available from the server
with the specified operation name.IllegalArgumentException
- if the
OperationDescriptor
for the specified
operation name on the server does not
support "renderable" registry mode.IllegalArgumentException
- if the specified operation does
not produce a
java.awt.image.renderable.RenderableImage
.IllegalArgumentException
- if the specified operation is
unable to handle the sources and parameters specified in
args
.
setNegotiationPreferences
public void setNegotiationPreferences(NegotiableCapabilitySet preferences)
- Sets the preferences to be used in the client-server
communication. These preferences are utilized in the negotiation
process. Note that preferences for more than one category can be
specified using this method since
NegotiableCapabilitySet
allows different NegotiableCapability
objects to be
bundled up in one NegotiableCapabilitySet
class. Even
under the same category (as specified by the getCategory() method
on NegotiableCapability
), multiple
NegotiableCapability
objects can be added to the
preferences. The preference added first for a particular category is
given highest priority in the negotiation process.
Since a new set of preferences is set everytime this method is
called, this method allows for changing negotiation preferences
multiple times. However it should be noted that preferences set on
this method are relevant only prior to the creation of an
operation (using the RemoteJAI.create
method). To
change negotiation preferences on an operation after it has been
created, the setNegotiationPreferences()
method on the
created RemoteRenderedOp
should be used. The
preferences
parameter will be added to the
RenderingHints
of this RemoteJAI
instance.
getNegotiatedValues
public NegotiableCapabilitySet getNegotiatedValues()
throws RemoteImagingException
- Returns the results of the negotiation between the client and server
capabilities according to the user preferences specified at an
earlier time. This will return null if the negotiation failed.
If a negotiation cycle has not been initiated prior to calling
this method, or the negotiation preferences have been
changed, this method will initiate a new negotiation cycle, which will
create and return a new set of negotiated values.
getNegotiatedValues
public NegotiableCapability getNegotiatedValues(String category)
throws RemoteImagingException
- Returns the results of the negotiation between the client and server
capabilities according to the user preferences specified at an
earlier time for the given category. This method returns a
NegotiableCapability
object, that represents the result
of the negotiation for the given category. If the negotiation failed,
null will be returned.
If a negotiation cycle has not been initiated prior to calling
this method, or the negotiation preferences have been
changed, this method will initiate a new negotiation cycle, which will
create and return a new negotiated value for the given category.
- Parameters:
category
- The category to negotiate on.- Throws:
IllegalArgumentException
- if category is null.
negotiate
public static NegotiableCapabilitySet negotiate(NegotiableCapabilitySet preferences,
NegotiableCapabilitySet serverCapabilities,
NegotiableCapabilitySet clientCapabilities)
- This method negotiates the capabilities to be used in the remote
communication. Upon completion of the negotiation process,
this method returns a
NegotiableCapabilitySet
which
contains an aggregation of the NegotiableCapability
objects that represent the results of negotiation. If the negotiation
fails, null will be returned.
The negotiation process treats the serverCapabilities and the
clientCapabilities as non-preferences and will throw an
IllegalArgumentException
if the
isPreference
method for either of these returns
true. The preferences NegotiableCapabilitySet
should
return true from its isPreference
method, otherwise an
IllegalArgumentException
will be thrown. The negotiation
is done in accordance with the rules described in the class comments
for NegotiableCapability
.
If either the serverCapabilities or the clientCapabilities
is null, then the negotiation will fail, and null will be returned.
If preferences is null, the negotiation will become a two-way
negotiation between the two non-null
NegotiableCapabilitySet
s.
- Parameters:
preferences
- The user preferences for the negotiation.serverCapabilities
- The capabilities of the server.clientCapabilities
- The capabilities of the client.- Throws:
IllegalArgumentException
- if serverCapabilities is a
preference, i.e., if it's isPreference()
method
returns true.IllegalArgumentException
- if clientCapabilities is a
preference, i.e., if it's isPreference()
method
returns true.IllegalArgumentException
- if preferences is a
non-preference, i.e., if it's isPreference()
method
returns false.
negotiate
public static NegotiableCapability negotiate(NegotiableCapabilitySet preferences,
NegotiableCapabilitySet serverCapabilities,
NegotiableCapabilitySet clientCapabilities,
String category)
- This method negotiates the capabilities to be used in the remote
communication for the given category. Upon completion of the
negotiation process, this method returns a
NegotiableCapability
object, that represents the result
of the negotiation for the given category. If the negotiation fails,
null will be returned.
The negotiation process treats the serverCapabilities and the
clientCapabilities as non-preferences and will throw an
IllegalArgumentException
if the
isPreference
method for either of these returns
true. The preferences NegotiableCapabilitySet
should
return true from its isPreference
method or an
IllegalArgumentException
will be thrown. The negotiation
is done in accordance with the rules described in the class comments
for NegotiableCapability
.
If either the serverCapabilities or the clientCapabilities
is null, then the negotiation will fail, and null will be returned.
If preferences is null, the negotiation will become a two-way
negotiation between the two non-null
NegotiableCapabilitySet
s.
- Parameters:
preferences
- The user preferences for the negotiation.serverCapabilities
- The capabilities of the server.clientCapabilities
- The capabilities of the client.category
- The category to perform the negotiation on.- Throws:
IllegalArgumentException
- if preferences is a
non-preference, i.e., if it's isPreference()
method
returns false.IllegalArgumentException
- if serverCapabilities is a
preference, i.e., if it's isPreference()
method
returns true.IllegalArgumentException
- if clientCapabilities is a
preference, i.e., if it's isPreference()
method
returns true.IllegalArgumentException
- if category is null.
getServerCapabilities
public NegotiableCapabilitySet getServerCapabilities()
throws RemoteImagingException
- Returns the set of capabilites supported by the server. If any
network related errors are encountered by this method (identified
as such by receiving a
RemoteImagingException
), they
will be dealt with by the use of retries and retry intervals.
getClientCapabilities
public NegotiableCapabilitySet getClientCapabilities()
- Returns the set of capabilities supported by the client.
getServerSupportedOperationList
public OperationDescriptor[] getServerSupportedOperationList()
throws RemoteImagingException
- Returns the list of
OperationDescriptor
s that describe
the operations supported by the server. If any
network related errors are encountered by this method (identified
as such by receiving a RemoteImagingException
), they
will be dealt with by the use of retries and retry intervals.