|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.japisoft.xmlpad.XMLContainer
This is the main component for the XMLEditor. This container manages a
toolbar thanks to the ToolBarModel
, a tree for real time tree
location and a minimal status bar. It contains also the main editor. As a
split function is supported, 2 editors are managed. The current one is always
available by the getEditor
method.
User can know the current document location and state with the
LocationListener
and DocumentStateListener
. It
is possible to disable the default status bar to use your own by calling
setStatusBarAvailable( false )
. The same thing for the error
panel by calling setErrorPanelAvailable( false )
.
If you have an external toolBar, you must disable the default one by calling
setToolBarAvailable(false)
If you wish the custom the default popups content or the default toolBar
content, use the PopupModel or the ToolBarModel It is advised
to use such model only if you want to use several editors with non common
action. On the contrary managed it inside the ActionModel.
myContainer.getToolBarModel().addAction( myAction )
or
myContainer.getPopupModel().addAction( myAction )
or
myContainer.getTreePopupModel().addAction( myTreeAction )
You can act on the default indentation for tab/untab and the FormatAction by calling
// Reset the indentation size
ActionModel.setProperty( ActionModel.FORMAT_ACTION,
Properties.INDENT_SIZE_PROPERTY, new Integer( 1 ) );
// Reset the indentation character
ActionModel.setProperty( ActionModel.FORMAT_ACTION,
Properties.INDENT_CHAR_PROPERTY, new Character( '\t' ) );
` An ElementView is a way to show any tree element node. This ElementView
can be customized by implementing the ElementView
interface
and calling the setElementView from the XMLContainer before showing it. You
can remove the default ElementView calling
setElementView( null )
on your XMLContainer instance. This
ElementView can be editable or non editable, by default the element view is
editable, however you can disable it calling from your XMLContainer instance
getElementView().setEditable( false )
.
usage samples :
// Simple usage JFrame frame = new JFrame(); XMLContainer container = new XMLContainer(); container.getAccessibility().setText( "<?version='1.0'?> <test> </test>" ); frame.getContentPane().add( container.getView() ); ... container.dispose(); // Called when terminating using JXMLPad
// Load a known XMLfile XMLContainer container = new XMLContainer(); container.getAccessibility().read(new FileReader("myFile.xml")); frame.getContentPane().add(container.getView());
// JInternal frame usage JInternalFrame editorFrameOne = new JInternalFrame(); // This constructor avoids XMLContainer for freeing automatically its inner reference editor1 = new XMLContainer(); editorFrameOne.getContentPane().add(editor1.getView());
// Using a theme com.japisoft.xmlpad.look.themes.BlueTheme.install(); JFrame fr = new JFrame(); fr.getContentPane().add(new XMLContainer().getView());
// Using it in a tabbedpane
XMLContainer container = new XMLContainer(true);
// We want the container to dispose its ressource automatically, so we needn't to call
dispose
when the
// editor is removed from the tabbedpane
container.setToolBarAvailable( false ); // We have an external toolbar
JTabbedPane pane = new JTappedPane();
pane.add( container.getView() );
More information at : http://www.japisoft.com
JPanel
,
LocationListener
,
DocumentStateLeistener
,
ToolBarModel
Constructor Summary | |
|
XMLContainer()
Create a new XMLContainer , all components are created by
the default ComponentFactory . |
|
XMLContainer(boolean autoDisposeMode)
Create a new XMLContainer. if autoDisposeMode is false, XMLContainer will free no resource automatically. |
protected |
XMLContainer(ComponentFactory cf)
You will have to call dispose after usage |
Method Summary | |
void |
addDocumentStateListener(DocumentStateListener listener)
Add listener for document parsing state : error or not |
void |
addNavigationHistoryPath(java.lang.String path)
Store a new navigation XPath value. |
void |
cleanNavigationHistoryPath()
Reset the navigation path |
protected javax.swing.JPopupMenu |
createPopupMenu()
|
protected javax.swing.JToolBar |
createToolBar()
|
javax.swing.undo.UndoManager |
createUndoManager()
For inner usage only |
void |
dispose()
Remove all listeners/component connection. |
boolean |
editNode()
Edit the current node with the EditorModel API. |
boolean |
editNode(SimpleNode currentNode)
Edit the provided node with the EditorModel API. |
void |
focus()
This is a method called by the inner editor for saving the current tree state. |
Accessibility |
getAccessibility()
|
BookmarkContext |
getBookmarkContext()
|
int |
getCaretPosition()
|
java.lang.String |
getCurrentDocumentLocation()
|
java.lang.Object |
getCurrentDocumentLocationArg()
More information about the current document location |
java.net.URL |
getCurrentDocumentLocationURL()
|
SimpleNode |
getCurrentElementNode()
|
SimpleNode |
getCurrentNode()
|
javax.swing.JPopupMenu |
getCurrentPopup()
|
javax.swing.JPopupMenu |
getCurrentTreePopup()
Deprecated. use getUIAccessibility().getCurrentTreePopup() |
XMLDocument |
getDocument()
|
DocumentColorAccessibility |
getDocumentColorAccessibility()
|
XMLDocumentInfo |
getDocumentInfo()
|
XMLIntegrity |
getDocumentIntegrity()
|
XMLEditor |
getEditor()
Deprecated. use getUIAccessibility().getEditor() |
EditorContext |
getEditorContext()
For inner usage only |
protected double |
getElementViewInitialDividerLocation()
|
ErrorManager |
getErrorManager()
|
HelperManager |
getHelperManager()
|
protected double |
getInitialDividerLocation()
|
IView |
getInnerView()
For inner usage only |
static java.lang.String |
getLocalizedMessage(java.lang.String key,
java.lang.String defaultValue)
For inner usage, it returns a localized message for this key |
XMLContainer |
getMainContainer()
|
int |
getNavigationHistoryLimit()
|
PopupModel |
getPopupModel()
User can add/remove dynamically action by acting on this model. |
java.util.Iterator |
getProperties()
|
java.lang.Object |
getProperty(java.lang.String name)
|
java.lang.Object |
getProperty(java.lang.String name,
java.lang.Object def)
|
SimpleNode |
getRootNode()
|
SchemaAccessibility |
getSchemaAccessibility()
|
XMLContainer |
getSubContainer(java.lang.String type)
|
SchemaHelperManager |
getSyntaxHelper()
|
XMLTemplate |
getTemplate()
|
java.lang.String |
getText()
Deprecated. use getAccessibility().getText() |
javax.swing.JToolBar |
getToolBar()
Deprecated. use getUIAccessibility().getToolBar() |
ToolBarModel |
getToolBarModel()
User can add/remove dynamically action by acting on this model. |
javax.swing.JTree |
getTree()
Deprecated. use getUIAccessibility().getTree() |
TreeListeners |
getTreeListeners()
|
PopupModel |
getTreePopupModel()
|
ToolBarModel |
getTreeToolBarModel()
|
UIAccessibility |
getUIAccessibility()
|
javax.swing.JComponent |
getView()
|
boolean |
hasErrorMessage()
|
boolean |
hasFocus()
Notify that the current container has the focus when managing one tree for several XML Container |
boolean |
hasSchema()
|
boolean |
hasSyntaxCompletion()
|
boolean |
hasTextSelection()
|
protected void |
initModels()
Prepare various models for toolbars or popups |
protected void |
initOnce(javax.swing.JComponent view)
Prepare the UI elements of the container. |
protected void |
initOnceErrorBinding()
Called once for connecting all the UI parts that must manage the parsing errors |
protected void |
initUI(javax.swing.JComponent view)
Prepare the layout of the components |
protected void |
installDefaultHelperHandlers(HelperManager manager)
Install the default assistants for the helper |
boolean |
isAutoDisposeMode()
|
boolean |
isAutoFocus()
|
boolean |
isEditable()
By default return true |
boolean |
isEditableDocumentMode()
|
boolean |
isEnabledTreeLocation()
Is Enabled the view of the tree location in the status bar ? |
boolean |
isErrorPanelAvailable()
|
boolean |
isPopupAvailable()
Deprecated. use getUIAccessibility().isPopupAvailable |
boolean |
isRealTimeTreeOnTextChange()
|
boolean |
isSplit()
|
boolean |
isStatusBarAvailable()
|
boolean |
isToolBarAvailable()
Deprecated. getUIAccessibility().setToolBarAvailable |
boolean |
isToolBarVisible()
Deprecated. getUIAccessibility().isToolBarVisible |
boolean |
isTreeAvailable()
Deprecated. getUIAccessibility().isTreeAvailable() |
boolean |
isTreePopupAvailable()
Deprecated. use getUIAccessibility().isTreePopupAvailable |
boolean |
isTreeVisible()
Deprecated. use getUIAccessibility().isTreeVisible() |
java.lang.String |
nextNavigationHistoryPath()
Change the navigation history cursor and return the next navigation path. |
void |
notifyCaretListener(int col,
int line)
Notify to all CaretListener that the current caret location has changed. |
void |
notifyDocumentVersion(boolean newOne)
Notify that a new document has been inserted or the current one has been altered once. |
void |
notifyLocationListener(LocationEvent event)
Notify to all LocationListener that the current document location has changed. |
java.lang.String |
previousNavigationHistoryPath()
Change the navigation history cursor and return the previous navigation path. |
void |
refreshUndoRedoState()
Update undo/redo button state |
void |
removeDocumentStateListener(DocumentStateListener listener)
Remove a listener |
protected void |
removeErrorPanel(boolean onTheFly)
Remove the error panel. |
void |
removeNavigationHistoryPath(java.lang.String path)
Remove this XPath navigation value. |
void |
requestFocus()
|
void |
resetDefaultToolBarActions()
Update the toolbarModel adding separator. |
protected void |
resetDefaultTreeToolBarModel(ToolBarModel model)
|
void |
resetEditor(XMLEditor editor)
Particular case for using the good editor with focus. |
void |
resetProperties(java.util.HashMap map)
Reset the inner properties |
boolean |
searchAndParseDTD()
Search inside the current document a DTD and parses it for syntax helper. |
boolean |
searchAndParseSchema()
Search and parse a schema from the current document |
void |
setAutoDisposeMode(boolean disposeMode)
Set JXMLPad in a special mode for freeing internal resource. |
void |
setAutoFocus(boolean autoFocus)
If true when the setText method is called the current editor gets the focus. |
void |
setAutoNewDocument(boolean autoNew)
Decide to initialize the XMLContainer calling the new action. |
void |
setAutoResetAction(boolean autoResetAction)
Here a way to reset all XMLAction from the current
XMLEditor focus. |
void |
setBookmarkContext(BookmarkContext context)
Set a bookmarkContext. |
void |
setCaretListener(CaretListener listener)
Add a listener for giving information about the current caret location |
void |
setCurrentDocumentLocation(java.lang.String location)
Reset the current document location. |
void |
setCurrentDocumentLocationArg(java.lang.Object arg)
Reset an optional argument for the document location |
void |
setDisposeAction(boolean disposeAction)
Decide to dispose the ActionModel when disposing the XMLContainer. |
void |
setDocumentInfo(XMLDocumentInfo info)
Reset the current documentation info. |
void |
setDocumentIntegrity(XMLIntegrity integrity)
This objet contains data for avoiding to corrupt the current document. |
void |
setEditable(boolean editable)
The document is only readable for true |
void |
setEditableDocumentMode(boolean editable)
This mode will let the cursor, but user will not be abable to update the document if the parameter is false |
void |
setEnabledRealTimeStructureChanged(boolean support)
Synchronize the tree each time the text has significatif change. |
void |
setEnabledTreeLocation(boolean location)
Enable the view of the tree location in the status bar |
void |
setEnabledTreeLocationForCaret(boolean rt)
Enable the tree selection for each text caret change. |
void |
setErrorPanelAvailable(boolean errorPanel)
Choose to show a minimal panel for each parsing error with a comment line. |
void |
setFocusView(boolean focusView)
|
void |
setLastNodeParsed(SimpleNode node)
Provides the last parsed root node. |
void |
setLocationListener(LocationListener listener)
Set a listener for giving information about the current document location |
void |
setModifiedState(boolean state)
Update this container state if the document has been changed |
void |
setNavigationHistoryLimit(int limit)
Set the navigation limit. |
void |
setPopupAvailable(boolean popupAvailable)
Deprecated. use getUIAccessibility().setPopupAvailable |
void |
setProperty(java.lang.String name,
java.lang.Object content)
Store a property inside this container. |
void |
setRealTimeTreeOnTextChange(boolean realTimeTreeOnTextChange)
If you use the false value the tree will only be updated
for each return key. |
void |
setSplit(boolean split,
boolean vertical)
if true , it will split the current editors in two one
else it will unsplit the two current editors in only one |
void |
setStatusBarAvailable(boolean statusBar)
Choose to show a minimal statusbar with the current location. |
void |
setSyntaxCompletion(boolean syntaxCompletion)
Enabled/Disabled syntax completion. |
void |
setTemplate(XMLTemplate template)
Template for the 'new' operation |
void |
setText(java.lang.String text)
Deprecated. use getAccessibility().setText() |
void |
setToolBarAvailable(boolean toolBarAvailable)
Deprecated. getUIAccessibility().setToolBarAvailable |
void |
setToolBarVisible(boolean toolbarVisible)
Deprecated. getUIAccessibility().setToolBarVisible |
void |
setTreeAvailable(boolean treeAvailable)
Deprecated. use getUIAccessibility().setTreeAvailable() |
void |
setTreeDelegate(javax.swing.JTree treeDelegate)
Deprecated. use getUIAccessibility().setTreeDelegate |
void |
setTreePopupAvailable(boolean treePopupAvailable)
Deprecated. use getUIAccessibility().setTreePopupAvailable |
void |
setTreeVisible(boolean treeVisible)
Deprecated. use getUIAccessibility().setTreeVisible |
void |
setUIReady(boolean uiReady)
This is called by the view while the addNotify or the
removeNotify . |
void |
setUIStateListener(UIStateListener listener)
Here a listener for knowing the user interface state : ready or not |
protected void |
showErrorPanel()
Show an error panel for each parsing error with the following message. |
protected void |
showLocation(SimpleNode content)
Show the tree location in the tree and in a minimal status bar |
void |
showPopup(java.awt.Component c,
int x,
int y)
Show a popup. |
void |
split(boolean vertical)
|
void |
unfocus()
This is a method called by the inner editor for restoring the current tree state. |
void |
unsetCaretListener()
Remove a listener |
void |
unsetLocationListener()
Remove a listener |
void |
unSplit()
Show only one editor |
void |
updateNavigationHistoryState()
Update the previous, next action status from the current context |
void |
updateNodeLocation(SimpleNode content)
Update the UI elements like the location statusbar for this node |
protected boolean |
useCustomPopupMenu()
|
protected void |
visibleAction()
Action when the component is shown at screen |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
protected XMLContainer(ComponentFactory cf)
dispose
after usage
public XMLContainer()
XMLContainer
, all components are created by
the default ComponentFactory
. You will have to call
dispose
after usage of this XMLContainer for freeing inner
resources. You can avoid to call dispose
using the second
constructor
public XMLContainer(boolean autoDisposeMode)
dispose
to conclude the usage for freeing all inner
references and help the garbage collector to do the best job.
Note that if you add/remove/add/... this container you MUSTN'T use the
true
value
Method Detail |
public void setUIReady(boolean uiReady)
addNotify
or the
removeNotify
.
uiReady
- true
when the final view for the container is
readypublic javax.swing.JComponent getView()
getView
in interface IXMLPanel
public IView getInnerView()
public XMLContainer getMainContainer()
getMainContainer
in interface IXMLPanel
public XMLContainer getSubContainer(java.lang.String type)
getSubContainer
in interface IXMLPanel
public boolean hasSyntaxCompletion()
true
if this container will manage syntax
completionpublic void setSyntaxCompletion(boolean syntaxCompletion)
true
public void setTemplate(XMLTemplate template)
public XMLTemplate getTemplate()
public void setDocumentInfo(XMLDocumentInfo info)
info
- public XMLDocumentInfo getDocumentInfo()
public HelperManager getHelperManager()
protected void installDefaultHelperHandlers(HelperManager manager)
public ToolBarModel getToolBarModel()
public PopupModel getPopupModel()
public PopupModel getTreePopupModel()
public ToolBarModel getTreeToolBarModel()
protected void resetDefaultTreeToolBarModel(ToolBarModel model)
public SchemaHelperManager getSyntaxHelper()
public javax.swing.JTree getTree()
public void setTreeDelegate(javax.swing.JTree treeDelegate)
setTreeAvailable( false )
method is
called.
public EditorContext getEditorContext()
public void setNavigationHistoryLimit(int limit)
public int getNavigationHistoryLimit()
public void addNavigationHistoryPath(java.lang.String path)
public void removeNavigationHistoryPath(java.lang.String path)
public void updateNavigationHistoryState()
public void cleanNavigationHistoryPath()
public java.lang.String previousNavigationHistoryPath()
null
if the previous path is not
available
public java.lang.String nextNavigationHistoryPath()
null
if the next path is not available
public boolean searchAndParseDTD()
public boolean searchAndParseSchema()
public void setFocusView(boolean focusView)
public void requestFocus()
public void setBookmarkContext(BookmarkContext context)
public BookmarkContext getBookmarkContext()
null
public boolean hasSchema()
public void setCurrentDocumentLocation(java.lang.String location)
public java.lang.String getCurrentDocumentLocation()
public java.net.URL getCurrentDocumentLocationURL()
public java.lang.Object getCurrentDocumentLocationArg()
public void setCurrentDocumentLocationArg(java.lang.Object arg)
public void setModifiedState(boolean state)
public javax.swing.JPopupMenu getCurrentPopup()
public javax.swing.JPopupMenu getCurrentTreePopup()
public javax.swing.JToolBar getToolBar()
public XMLEditor getEditor()
public int getCaretPosition()
public void setAutoFocus(boolean autoFocus)
true
autoFocus
- Get the focus for the setTextpublic boolean isAutoFocus()
true
if the current editor gets the focus while
calling setTextpublic void setText(java.lang.String text)
XMLEditor
.
public java.lang.String getText()
public XMLDocument getDocument()
public boolean hasTextSelection()
true
if the current editor has a text selectionpublic void setEditable(boolean editable)
true
public void setEditableDocumentMode(boolean editable)
false
public boolean isEditableDocumentMode()
true
by defaultpublic boolean isEditable()
public void setTreeVisible(boolean treeVisible)
XMLPadProperties.setProperty("tree", "false" )
treeVisible
- Show or hide the current location treepublic boolean isTreeVisible()
true
if there's a current location tree and the
splitpane bar is not closedpublic void setTreeAvailable(boolean treeAvailable)
true
public boolean isTreeAvailable()
true
if the tree is availablepublic void setToolBarVisible(boolean toolbarVisible)
XMLContainer
. If you wish no toolbar, you must call
setToolBarAvailable( false )
public boolean isToolBarVisible()
public void setToolBarAvailable(boolean toolBarAvailable)
true
. If user has an
external toolbar, this property must be set to false
. It
is possible to control the visibility by calling
setToolBarVisible( ... )
.
public boolean isToolBarAvailable()
true
if a default toolbar is available.public void setPopupAvailable(boolean popupAvailable)
true
public boolean isPopupAvailable()
true
if a default popup is availablepublic void setTreePopupAvailable(boolean treePopupAvailable)
true
. This code has
no effect if no tree is used.
public boolean isTreePopupAvailable()
true
if a tree exists and if the tree popup is
availableprotected javax.swing.JToolBar createToolBar()
ComponentFactory
protected javax.swing.JPopupMenu createPopupMenu()
ComponentFactory
public void resetDefaultToolBarActions()
XMLContainer
constructor. It uses the
ActionModel
for adding action. For note : It will invoke
the current NEW_ACTION
for initializing the document
content. Note that if no default toolBar is available, this method will
have a limited scope
public void setEnabledTreeLocationForCaret(boolean rt)
public void setEnabledRealTimeStructureChanged(boolean support)
true
protected double getInitialDividerLocation()
protected double getElementViewInitialDividerLocation()
public void setUIStateListener(UIStateListener listener)
protected void initOnce(javax.swing.JComponent view)
addNotify
method of the main panel ( can be the
CustomView class )
protected void initOnceErrorBinding()
protected void initUI(javax.swing.JComponent view)
protected void initModels()
public void setAutoNewDocument(boolean autoNew)
true
protected boolean useCustomPopupMenu()
true
if you don't want to use the XMLPAd popup
menu but your own. By default
false. Note that you must override too the
getCurrentPopupMenu and disable the default popup
public void dispose()
removeNotify
method if XMLContainer works with the
disposeMode
dispose
in interface IXMLPanel
public void setAutoDisposeMode(boolean disposeMode)
false
setAutoDisposeMode
in interface IXMLPanel
public void setDisposeAction(boolean disposeAction)
true
public boolean isAutoDisposeMode()
true
if JXMLPad frees itself its inner resource
for the garbage collector. By default to true
public ErrorManager getErrorManager()
protected void showErrorPanel()
DocumentStateListener
and disable the error panel by
calling setErrorPanelAvailable( false )
protected void removeErrorPanel(boolean onTheFly)
false
. This code has no effect
public boolean editNode()
false
if the editing is not allowed herepublic boolean editNode(SimpleNode currentNode)
false
if the editing is not allowed herepublic void setStatusBarAvailable(boolean statusBar)
true
. If you use external status bar and a
LocationListener, you should disable it.
public boolean isStatusBarAvailable()
true
if a status bar is shown with the current
document locationpublic void setErrorPanelAvailable(boolean errorPanel)
true
. If you have external panel for
that using a DocumentStateListener, you should disable it
public boolean isErrorPanelAvailable()
true
if an error panel is shown for parsing errorpublic void setLastNodeParsed(SimpleNode node)
public SimpleNode getCurrentNode()
public SimpleNode getCurrentElementNode()
public SimpleNode getRootNode()
public void updateNodeLocation(SimpleNode content)
protected void showLocation(SimpleNode content)
public TreeListeners getTreeListeners()
public void setEnabledTreeLocation(boolean location)
public boolean isEnabledTreeLocation()
public void resetEditor(XMLEditor editor)
public void focus()
public void unfocus()
public boolean hasFocus()
public void setSplit(boolean split, boolean vertical)
true
, it will split the current editors in two one
else it will unsplit the two current editors in only one
public boolean isSplit()
public void split(boolean vertical)
public void setAutoResetAction(boolean autoResetAction)
XMLAction
from the current
XMLEditor focus. By default to true
public void unSplit()
public void resetProperties(java.util.HashMap map)
public void setProperty(java.lang.String name, java.lang.Object content)
setProperty
in interface IXMLPanel
public java.lang.Object getProperty(java.lang.String name)
getProperty
in interface IXMLPanel
public java.util.Iterator getProperties()
getProperties
in interface IXMLPanel
public java.lang.Object getProperty(java.lang.String name, java.lang.Object def)
getProperty
in interface IXMLPanel
protected void visibleAction()
public Accessibility getAccessibility()
public SchemaAccessibility getSchemaAccessibility()
public UIAccessibility getUIAccessibility()
public DocumentColorAccessibility getDocumentColorAccessibility()
public void refreshUndoRedoState()
public javax.swing.undo.UndoManager createUndoManager()
public void showPopup(java.awt.Component c, int x, int y)
XMLEditor
so theorically
you needn't to call it directly
public XMLIntegrity getDocumentIntegrity()
public void setDocumentIntegrity(XMLIntegrity integrity)
integrity
- XML integrity managerpublic boolean isRealTimeTreeOnTextChange()
true
if the tree is updated for each text change
rather than on return keypublic void setRealTimeTreeOnTextChange(boolean realTimeTreeOnTextChange)
false
value the tree will only be updated
for each return key. This is better for medium or heavy XML document. By
default to false
realTimeTreeOnTextChange
- Tree is updated for any text change if truepublic static java.lang.String getLocalizedMessage(java.lang.String key, java.lang.String defaultValue)
public void setCaretListener(CaretListener listener)
public void unsetCaretListener()
public void setLocationListener(LocationListener listener)
public void unsetLocationListener()
public void notifyLocationListener(LocationEvent event)
public void notifyCaretListener(int col, int line)
public void addDocumentStateListener(DocumentStateListener listener)
public void removeDocumentStateListener(DocumentStateListener listener)
public boolean hasErrorMessage()
true
if the last parsing step has errorpublic void notifyDocumentVersion(boolean newOne)
DocumentStateListener
element.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |