public class UIDescriptor extends AbstractEntry
Entry
that enables a UI for a service to be associated
with the service in the attribute sets of the service item.
UIDescriptor
holds a marshalled UI factory object, as
well as a role string, a sub-role string, and set of attributes that describe the
UI generated by the factory.Modifier and Type | Field and Description |
---|---|
Set |
attributes
An unmodifiable set of objects that describe the UI generated by the marshalled UI factory.
|
MarshalledObject |
factory
The
get() method of this MarshalledObject
must return an object that implements one or more UI factory interfaces. |
String |
role
Gives the fully qualified name of the interface that represents
the role of the UI generated by the marshalled UI factory.
|
String |
toolkit
A
String to facilitate searching whose value represents the main UI toolkit (for example
Swing or AWT) which the produced UI makes use of. |
Constructor and Description |
---|
UIDescriptor()
Constructs a
UIDescriptor with all fields set to null . |
UIDescriptor(String role,
String toolkit,
Set attributes,
MarshalledObject factory)
Constructs a
UIDescriptor with the fields set to passed values. |
Modifier and Type | Method and Description |
---|---|
Object |
getUIFactory(ClassLoader parentLoader)
A convenience method for unmarshalling the UI factory stored
in the
MarshalledObject referenced from the
factory field. |
public String role
role
.
For a client program to be able to use a UI, the client has to have prior knowledge
of the UI semantics, which is defined by the UI's role type. Thus, for a client
to be able to use a UI, the client must understand the semantics
of the type whose fully qualified name is given in the String
referenced from the role
field of that UI's UIDescriptor
.
For example, two role types that are defined in the net.jini.lookup.ui
package by the Jini Service UI Specification are MainUI
, for a main UI
to a Jini service, and AdminUI
, for an administration UI. Other role types
may be defined by the Jini Service UI Specification and by individual Jini service API
specifications.
As the strings referenced from the role
field are Java type names, they
are intended to be manipulated by client programs only. They should not be shown to a user.
public String toolkit
String
to facilitate searching whose value represents the main UI toolkit (for example
Swing or AWT) which the produced UI makes use of. The value to which this field should
be set is defined by the semantics of the factory type. (This field is intended
to facilitate searches. For example, a client can search for all blender services that have Swing
MainUI's.)public Set attributes
public MarshalledObject factory
get()
method of this MarshalledObject
must return an object that implements one or more UI factory interfaces. The actual
UI factory type or types implemented by the returned object
must be described by a UIFactoryTypes
attribute placed in
the attributes set of this UIDescriptor
.public UIDescriptor()
UIDescriptor
with all fields set to null
.public UIDescriptor(String role, String toolkit, Set attributes, MarshalledObject factory)
UIDescriptor
with the fields set to passed values.
This constructor copies the contents of the passed attributes Set
into a
serializable read-only Set
that has a
consistent serialized form across all VMs, and initializes the attributes
field with the consistent Set
.role
- the roletoolkit
- the toolkitattributes
- the attributesfactory
- the factorypublic final Object getUIFactory(ClassLoader parentLoader) throws IOException, ClassNotFoundException
MarshalledObject
referenced from the
factory
field. This method saves a reference
to the current context class loader, sets the context class loader
to the class loader passed as parentLoader
, invokes
get()
on the marshalled object, then resets the
context class loader to the saved reference before returning
the object produced by get()
.
The class loader
passed in parentLoader
should be able to load classes
needed when the UI interacts with the roleObject
passed as the first
parameter to the factory method. For example, if the roleObject
is
the service item (as it is for the MainUI
and AdminUI
roles), the class loader passed in parentLoader
could be
the class loader with which the service proxy object referenced
from the service item's service
field was loaded.
For example:
Object uiFactory = uiDescriptor.getUIFactory( serviceItem.service.getClass().getClassLoader());
parentLoader
- the parent ClassLoaderIOException
- if an IOException occursClassNotFoundException
- if class not found.NullPointerException
- if parentLoader
is null.Copyright 2007-2013, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions.