|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.eurotech.framework.protocol.modbus.ModbusProtocolDevice
public abstract class ModbusProtocolDevice
This is the parent class from which all protocol implementations should be extended. This class provides a means to access and control a field device through a device specific protocol.
The general idea is that devices have data to be accessed and control points to be managed; however, the exact means to access a given point, such as the state of a door switch, or to control a given function, such as turning on a light, vary greatly from one protocol to another.
To make a more versatile implementation for the application side, the protocol specific configurations will re-map all points of interest to generic data addresses (dataAddress). These generic points then will be accessible using a variety of specific methods for primitive types. Mechanisms will also be provided to access the map, if desired, to find what specific primitive type a given point may be; however, normally, there should probably be some preconceived notion of what data type exists at each address in a given environment and implementation.
If a protocol must extend beyond the primitive types for some reason, there will be the option to use the readObject and writeObject methods. Knowledge about the class of the object used or returned will be specific to the given protocol.
All read functions will return an array whose length is the same as the requested count in the read. Any protocol needing to return more or less data than requested must implement the readObject method.
Constructor Summary | |
---|---|
ModbusProtocolDevice()
|
Method Summary | |
---|---|
abstract void |
configureConnection(org.osgi.service.io.ConnectionFactory connFactory,
Properties connectionConfig)
configure access to the physical device. |
void |
configureDataMap(Properties dataConfig)
configure addressing schemes between the physical device and the client presentation of the data. |
abstract void |
configureProtocol(Properties protocolConfig)
any protocol specific configuration elements would be configured here. |
abstract void |
connect()
attempt to connect to the field device using the provided configuration. |
abstract void |
disconnect()
attempt to disconnect from the field device. |
abstract int |
getConnectStatus()
for expedience, can test the status of the connection prior to attempting a command. |
abstract String |
getDataType(int dataAddress)
get the primitive data type for the selected address. |
abstract int |
getEndOfRange(int dataAddress)
gets the last address in a contiguous block of the same type data. |
abstract NmeaPosition |
getNmeaPosition()
|
abstract org.osgi.util.position.Position |
getPosition()
|
abstract String |
getProtocolName()
returns the protocol name for the specific protocol implemented. |
abstract int |
getStartOfRange(int dataAddress)
gets the first address in a contiguous block of the same type data. |
abstract String |
getUnitAddress()
this returns the address given the RTU in the configureProtocol. |
abstract boolean |
isAddressMapped(int dataAddress)
validate that the protocol has a mapping for the desired address. |
boolean[] |
readBooleans(int dataAddress,
int count)
read 1 or more boolean points from the attached field device. |
byte[] |
readBytes(int dataAddress,
int count)
read 1 or more byte points from the attached field device. |
char[] |
readChars(int dataAddress,
int count)
read 1 or more char points from the attached field device. |
double[] |
readDoubles(int dataAddress,
int count)
read 1 or more double points from the attached field device. |
float[] |
readFloats(int dataAddress,
int count)
read 1 or more float points from the attached field device. |
int[] |
readInts(int dataAddress,
int count)
read 1 or more int points from the attached field device. |
long[] |
readLongs(int dataAddress,
int count)
read 1 or more long points from the attached field device. |
Object |
readObject(int dataAddress)
read a single object from the address. |
short[] |
readShorts(int dataAddress,
int count)
read 1 or more short points from the attached field device. |
long[] |
readUnsignedInts(int dataAddress,
int count)
read 1 or more unsigned int points from the attached field device. |
int[] |
readUnsignedShorts(int dataAddress,
int count)
read 1 or more unsigned short points from the attached field device. |
abstract String |
toString()
returns the unit name given in the configureProtocol call. |
void |
writeBooleans(int dataAddress,
boolean[] data)
write 1 or more boolean values to the attached field device. |
void |
writeBytes(int dataAddress,
byte[] data)
write 1 or more byte values to the attached field device. |
void |
writeChars(int dataAddress,
char[] data)
write 1 or more char values to the attached field device. |
void |
writeDoubles(int dataAddress,
double[] data)
write 1 or more double values to the attached field device. |
void |
writeFloats(int dataAddress,
float[] data)
write 1 or more float values to the attached field device. |
void |
writeInts(int dataAddress,
int[] data)
write 1 or more int values to the attached field device. |
void |
writeLongs(int dataAddress,
long[] data)
write 1 or more long values to the attached field device. |
void |
writeObject(int dataAddress,
Object data)
write a single object to the address. |
void |
writeShorts(int dataAddress,
short[] data)
write 1 or more short values to the attached field device. |
void |
writeUnsignedInts(int dataAddress,
long[] data)
write 1 or more unsigned int values to the attached field device. |
void |
writeUnsignedShorts(int dataAddress,
int[] data)
write 1 or more unsigned short values to the attached field device. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
---|
public ModbusProtocolDevice()
Method Detail |
---|
public abstract String toString()
toString
in class Object
Object.toString()
public abstract String getProtocolName()
public abstract String getUnitAddress()
public abstract void configureProtocol(Properties protocolConfig) throws ModbusProtocolException
protocolConfig
- key/value pairing directly from configuration file or may be
generated.
ModbusProtocolException(INVALID_CONFIGURATION)
- unspecified problem with the configuration
ModbusProtocolException
public abstract void configureConnection(org.osgi.service.io.ConnectionFactory connFactory, Properties connectionConfig) throws ModbusProtocolException
connectionConfig
- key/value pairing directly from configuration file or may be
generated.
ModbusProtocolException(INVALID_CONFIGURATION)
- unspecified problem with the configuration
ModbusProtocolException
public void configureDataMap(Properties dataConfig) throws ModbusProtocolException
For most protocols, additional entries may be added to the data mapping at any time and will replace any mapping already existing, without any warning or indication of said replacement. It is not possible to remove a data mapping.
Protocols are not required to implement this method.
dataConfig
- key/value pairing directly from configuration file or may be
generated.
ModbusProtocolException(INVALID_CONFIGURATION)
- unspecified problem with the configuration
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public abstract int getConnectStatus()
All protocols must implement this method.
EsfConnectionStatus
.public abstract void connect() throws ModbusProtocolException
Refer to getConnectStatus
to determine if the
connection is completed.
All protocols must implement this method.
ModbusProtocolException(INVALID_CONFIGURATION)
- this operates on the basic assumption that access to a device
should exist, if the device is unreachable, it is interpreted
as a failure of the configuration.
ModbusProtocolException
public abstract void disconnect()
All protocols must implement this method.
getConnectStatus()
public abstract boolean isAddressMapped(int dataAddress)
All protocols must implement this method.
dataAddress
- this is the local address, not the field address
public abstract int getStartOfRange(int dataAddress) throws ModbusProtocolException
All protocols must implement this method.
dataAddress
- may be the first or last address or anywhere in between for
the range determined.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- the requested data address is not mapped
ModbusProtocolException
public abstract int getEndOfRange(int dataAddress) throws ModbusProtocolException
All protocols must implement this method.
dataAddress
- may be the first or last address or anywhere n between for the
range determined.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- the requested data address is not mapped
ModbusProtocolException
public abstract String getDataType(int dataAddress) throws ModbusProtocolException
All protocols must implement this method.
dataAddress
- address of the data point for which the data type is being
requested
PrototocolPrimitiveDataTypes
ModbusProtocolException(INVALID_DATA_ADDRESS)
- the requested data address is not mapped
ModbusProtocolException
public boolean[] readBooleans(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type boolean
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public byte[] readBytes(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type byte
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public char[] readChars(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type char
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public double[] readDoubles(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type double
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public float[] readFloats(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type float
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public int[] readInts(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type int
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public long[] readUnsignedInts(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type int
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public long[] readLongs(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type long
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public Object readObject(int dataAddress) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- used to reference an object of some type to be read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- the dataAddress is not mapped
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public short[] readShorts(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type short
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public int[] readUnsignedShorts(int dataAddress, int count) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first point to readcount
- count of points to read
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type short
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeBooleans(int dataAddress, boolean[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more booleans to write. The data will be written
to consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type boolean
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeBytes(int dataAddress, byte[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more bytes to write. The data will be written to
consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type byte
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeChars(int dataAddress, char[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more chars to write. The data will be written to
consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type char
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeDoubles(int dataAddress, double[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more doubles to write. The data will be written
to consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type double
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeFloats(int dataAddress, float[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more floats to write. The data will be written
to consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type float
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeInts(int dataAddress, int[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more ints to write. The data will be written to
consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type int
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeUnsignedInts(int dataAddress, long[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more longs to write. The data will be written to
consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type int
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeLongs(int dataAddress, long[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more longs to write. The data will be written to
consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type long
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeObject(int dataAddress, Object data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- used to reference an object of some type to be writtendata
- an Object who's class is protocol dependent
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeShorts(int dataAddress, short[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more shorts to write. The data will be written
to consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type short
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public void writeUnsignedShorts(int dataAddress, int[] data) throws ModbusProtocolException
Protocols are not required to implement this method.
dataAddress
- first address to write todata
- array of 1 or more ints to write. The data will be written to
consecutive addresses starting with dataAddress.
ModbusProtocolException(INVALID_DATA_ADDRESS)
- at least one of the points in the inclusive range of
addresses is not mapped
ModbusProtocolException(INVALID_DATA_TYPE)
- at least one of the points in the inclusive range of
addresses is not of type short
ModbusProtocolException(NOT_CONNECTED)
- current connection is in a status other than CONNECTED
ModbusProtocolException(TRANSACTION_FAILURE)
- should include a protocol specific message to help clarify
the cause of the exception
ModbusProtocolException(METHOD_NOT_SUPPORTED)
- exception always thrown by default method
ModbusProtocolException
public abstract org.osgi.util.position.Position getPosition()
public abstract NmeaPosition getNmeaPosition()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |