|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||
java.lang.Objectorg.apache.manifoldcf.core.connector.BaseConnector
org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnector
org.apache.manifoldcf.crawler.connectors.jdbc.JDBCConnector
public class JDBCConnector
This interface describes an instance of a connection between a repository and ManifoldCF's standard "pull" ingestion agent. Each instance of this interface is used in only one thread at a time. Connection Pooling on these kinds of objects is performed by the factory which instantiates repository connectors from symbolic names and config parameters, and is pooled by these parameters. That is, a pooled connector handle is used only if all the connection parameters for the handle match. Implementers of this interface should provide a default constructor which has this signature: xxx(); Connectors are either configured or not. If configured, they will persist in a pool, and be reused multiple times. Certain methods of a connector may be called before the connector is configured. This includes basically all methods that permit inspection of the connector's capabilities. The complete list is: The purpose of the repository connector is to allow documents to be fetched from the repository. Each repository connector describes a set of documents that are known only to that connector. It therefore establishes a space of document identifiers. Each connector will only ever be asked to deal with identifiers that have in some way originated from the connector. Documents are fetched in three stages. First, the getDocuments() method is called in the connector implementation. This returns a set of document identifiers. The document identifiers are used to obtain the current document version strings in the second stage, using the getDocumentVersions() method. The last stage is processDocuments(), which queues up any additional documents needed, and also ingests. This method will not be called if the document version seems to indicate that no document change took place.
| Nested Class Summary | |
|---|---|
protected static class |
JDBCConnector.TableSpec
This class represents data gleaned from a document specification, in a more usable form. |
protected static class |
JDBCConnector.VariableMap
Variable map. |
protected static class |
JDBCConnector.VariableMapItem
Variable map entry. |
| Field Summary | |
|---|---|
static java.lang.String |
_rcsid
|
protected static java.lang.String[] |
activitiesList
|
protected static java.lang.String |
ACTIVITY_EXTERNAL_QUERY
|
protected JDBCConnection |
connection
|
protected java.lang.String |
databaseName
|
protected static java.util.HashMap |
documentKnownColumns
Special column names, as far as document queries are concerned |
protected java.lang.String |
host
|
protected java.lang.String |
jdbcProvider
|
protected java.lang.String |
password
|
protected java.lang.String |
userName
|
| Fields inherited from class org.apache.manifoldcf.core.connector.BaseConnector |
|---|
currentContext, params |
| Fields inherited from interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnector |
|---|
JOBMODE_CONTINUOUS, JOBMODE_ONCEONLY, MODEL_ADD, MODEL_ADD_CHANGE, MODEL_ADD_CHANGE_DELETE, MODEL_ALL, MODEL_PARTIAL |
| Constructor Summary | |
|---|---|
JDBCConnector()
Constructor. |
|
| Method Summary | |
|---|---|
protected static void |
addConstant(JDBCConnector.VariableMap map,
java.lang.String varName,
java.lang.String value)
Add string query constants |
protected static boolean |
addIDList(JDBCConnector.VariableMap map,
java.lang.String varName,
java.lang.String[] documentIdentifiers,
boolean[] scanOnly)
Build an idlist variable, and add it to the specified variable map. |
void |
addSeedDocuments(org.apache.manifoldcf.crawler.interfaces.ISeedingActivity activities,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec,
long startTime,
long endTime,
int jobMode)
Queue "seed" documents. |
protected static void |
addVariable(JDBCConnector.VariableMap map,
java.lang.String varName,
long variable)
Add starttime and endtime query variables |
protected static void |
addVariable(JDBCConnector.VariableMap map,
java.lang.String varName,
java.lang.String variable)
Add string query variables |
protected void |
applyAccessTokens(org.apache.manifoldcf.agents.interfaces.RepositoryDocument rd,
java.lang.String version,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec)
Apply access tokens to a repository document. |
protected void |
applyMetadata(org.apache.manifoldcf.agents.interfaces.RepositoryDocument rd,
org.apache.manifoldcf.core.interfaces.IResultRow row)
Apply metadata to a repository document. |
java.lang.String |
check()
Check status of connection. |
void |
connect(org.apache.manifoldcf.core.interfaces.ConfigParams configParams)
Connect. |
protected static java.lang.String |
createQueryString(java.lang.String queryText,
java.util.ArrayList paramList)
Create an entity identifier from a querystring and a parameter list. |
void |
disconnect()
Close the connection. |
protected static java.lang.String[] |
getAcls(org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec)
Grab forced acl out of document specification. |
java.lang.String[] |
getActivitiesList()
Return the list of activities that this connector supports (i.e. |
java.lang.String[] |
getBinNames(java.lang.String documentIdentifier)
Get the bin name string for a document identifier. |
int |
getConnectorModel()
Model. |
java.lang.String[] |
getDocumentVersions(java.lang.String[] documentIdentifiers,
java.lang.String[] oldVersions,
org.apache.manifoldcf.crawler.interfaces.IVersionActivity activities,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec,
int jobMode,
boolean usesDefaultAuthority)
Get document versions given an array of document identifiers. |
java.lang.String |
getJSPFolder()
Return the path for the UI interface JSP elements. |
int |
getMaxDocumentRequest()
Get the maximum number of documents to amalgamate together into one batch, for this connector. |
protected void |
getSession()
Set up a session |
void |
outputConfigurationBody(org.apache.manifoldcf.core.interfaces.IThreadContext threadContext,
org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.core.interfaces.ConfigParams parameters,
java.lang.String tabName)
Output the configuration body section. |
void |
outputConfigurationHeader(org.apache.manifoldcf.core.interfaces.IThreadContext threadContext,
org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.core.interfaces.ConfigParams parameters,
java.util.ArrayList tabsArray)
Output the configuration header section. |
void |
outputSpecificationBody(org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification ds,
java.lang.String tabName)
Output the specification body section. |
void |
outputSpecificationHeader(org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification ds,
java.util.ArrayList tabsArray)
Output the specification header section. |
protected static void |
pack(java.lang.StringBuffer output,
java.lang.String value,
char delimiter)
Stuffer for packing a single string with an end delimiter |
protected static void |
packFixedList(java.lang.StringBuffer output,
java.lang.String[] values,
char delimiter)
Stuffer for packing lists of fixed length |
protected static void |
packList(java.lang.StringBuffer output,
java.util.ArrayList values,
char delimiter)
Stuffer for packing lists of variable length |
protected static void |
packList(java.lang.StringBuffer output,
java.lang.String[] values,
char delimiter)
Another stuffer for packing lists of variable length |
java.lang.String |
processConfigurationPost(org.apache.manifoldcf.core.interfaces.IThreadContext threadContext,
org.apache.manifoldcf.core.interfaces.IPostParameters variableContext,
org.apache.manifoldcf.core.interfaces.ConfigParams parameters)
Process a configuration post. |
void |
processDocuments(java.lang.String[] documentIdentifiers,
java.lang.String[] versions,
org.apache.manifoldcf.crawler.interfaces.IProcessActivity activities,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec,
boolean[] scanOnly)
Process a set of documents. |
java.lang.String |
processSpecificationPost(org.apache.manifoldcf.core.interfaces.IPostParameters variableContext,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification ds)
Process a specification post. |
protected static java.lang.String |
quoteSQLString(java.lang.String input)
Quote a sql string. |
protected static java.lang.String |
readAsString(java.lang.Object o)
Make sure we read this field as a string |
protected static void |
substituteQuery(java.lang.String inputString,
JDBCConnector.VariableMap inputMap,
java.lang.StringBuffer outputQuery,
java.util.ArrayList outputParams)
Given a query, and a parameter map, substitute it. |
protected static int |
unpack(java.lang.StringBuffer sb,
java.lang.String value,
int startPosition,
char delimiter)
Unstuffer for the above. |
protected static int |
unpackFixedList(java.lang.String[] output,
java.lang.String value,
int startPosition,
char delimiter)
Unstuffer for unpacking lists of fixed length |
protected static int |
unpackList(java.util.ArrayList output,
java.lang.String value,
int startPosition,
char delimiter)
Unstuffer for unpacking lists of variable length. |
void |
viewConfiguration(org.apache.manifoldcf.core.interfaces.IThreadContext threadContext,
org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.core.interfaces.ConfigParams parameters)
View configuration. |
void |
viewSpecification(org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification ds)
View specification. |
| Methods inherited from class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnector |
|---|
addSeedDocuments, getDocumentIdentifiers, getDocumentIdentifiers, getDocumentVersions, getDocumentVersions, getDocumentVersions, getDocumentVersions, getRelationshipTypes, getRemainingDocumentIdentifiers, processDocuments, releaseDocumentVersions, requestInfo |
| Methods inherited from class org.apache.manifoldcf.core.connector.BaseConnector |
|---|
clearThreadContext, deinstall, getConfiguration, install, poll, setThreadContext |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Methods inherited from interface org.apache.manifoldcf.core.interfaces.IConnector |
|---|
clearThreadContext, deinstall, getConfiguration, install, poll, setThreadContext |
| Field Detail |
|---|
public static final java.lang.String _rcsid
protected static final java.lang.String ACTIVITY_EXTERNAL_QUERY
protected static final java.lang.String[] activitiesList
protected JDBCConnection connection
protected java.lang.String jdbcProvider
protected java.lang.String host
protected java.lang.String databaseName
protected java.lang.String userName
protected java.lang.String password
protected static java.util.HashMap documentKnownColumns
| Constructor Detail |
|---|
public JDBCConnector()
| Method Detail |
|---|
protected void getSession()
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
org.apache.manifoldcf.core.interfaces.ManifoldCFExceptionpublic java.lang.String[] getActivitiesList()
getActivitiesList in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectorgetActivitiesList in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectorpublic java.lang.String getJSPFolder()
public int getConnectorModel()
getConnectorModel in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectorgetConnectorModel in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectorpublic void connect(org.apache.manifoldcf.core.interfaces.ConfigParams configParams)
connect in interface org.apache.manifoldcf.core.interfaces.IConnectorconnect in class org.apache.manifoldcf.core.connector.BaseConnectorconfigParams - are the configuration parameters for this connection.
public java.lang.String check()
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
check in interface org.apache.manifoldcf.core.interfaces.IConnectorcheck in class org.apache.manifoldcf.core.connector.BaseConnectororg.apache.manifoldcf.core.interfaces.ManifoldCFException
public void disconnect()
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
disconnect in interface org.apache.manifoldcf.core.interfaces.IConnectordisconnect in class org.apache.manifoldcf.core.connector.BaseConnectororg.apache.manifoldcf.core.interfaces.ManifoldCFExceptionpublic java.lang.String[] getBinNames(java.lang.String documentIdentifier)
getBinNames in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectorgetBinNames in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectordocumentIdentifier - is the document identifier.
public void addSeedDocuments(org.apache.manifoldcf.crawler.interfaces.ISeedingActivity activities,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec,
long startTime,
long endTime,
int jobMode)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
org.apache.manifoldcf.agents.interfaces.ServiceInterruption
addSeedDocuments in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectoraddSeedDocuments in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectoractivities - is the interface this method should use to perform whatever framework actions are desired.spec - is a document specification (that comes from the job).startTime - is the beginning of the time range to consider, inclusive.endTime - is the end of the time range to consider, exclusive.jobMode - is an integer describing how the job is being run, whether continuous or once-only.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
org.apache.manifoldcf.agents.interfaces.ServiceInterruption
public java.lang.String[] getDocumentVersions(java.lang.String[] documentIdentifiers,
java.lang.String[] oldVersions,
org.apache.manifoldcf.crawler.interfaces.IVersionActivity activities,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec,
int jobMode,
boolean usesDefaultAuthority)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
org.apache.manifoldcf.agents.interfaces.ServiceInterruption
getDocumentVersions in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectorgetDocumentVersions in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectordocumentIdentifiers - is the array of local document identifiers, as understood by this connector.oldVersions - is the corresponding array of version strings that have been saved for the document identifiers.
A null value indicates that this is a first-time fetch, while an empty string indicates that the previous document
had an empty version string.activities - is the interface this method should use to perform whatever framework actions are desired.spec - is the current document specification for the current job. If there is a dependency on this
specification, then the version string should include the pertinent data, so that reingestion will occur
when the specification changes. This is primarily useful for metadata.jobMode - is an integer describing how the job is being run, whether continuous or once-only.usesDefaultAuthority - will be true only if the authority in use for these documents is the default one.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
org.apache.manifoldcf.agents.interfaces.ServiceInterruption
public void processDocuments(java.lang.String[] documentIdentifiers,
java.lang.String[] versions,
org.apache.manifoldcf.crawler.interfaces.IProcessActivity activities,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec,
boolean[] scanOnly)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
org.apache.manifoldcf.agents.interfaces.ServiceInterruption
processDocuments in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectordocumentIdentifiers - is the set of document identifiers to process.versions - is the corresponding document versions to process, as returned by getDocumentVersions() above.
The implementation may choose to ignore this parameter and always process the current version.activities - is the interface this method should use to queue up new document references
and ingest documents.spec - is the document specification.scanOnly - is an array corresponding to the document identifiers. It is set to true to indicate when the processing
should only find other references, and should not actually call the ingestion methods.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
org.apache.manifoldcf.agents.interfaces.ServiceInterruption
public void outputConfigurationHeader(org.apache.manifoldcf.core.interfaces.IThreadContext threadContext,
org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.core.interfaces.ConfigParams parameters,
java.util.ArrayList tabsArray)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
java.io.IOException
outputConfigurationHeader in interface org.apache.manifoldcf.core.interfaces.IConnectoroutputConfigurationHeader in class org.apache.manifoldcf.core.connector.BaseConnectorthreadContext - is the local thread context.out - is the output to which any HTML should be sent.parameters - are the configuration parameters, as they currently exist, for this connection being configured.tabsArray - is an array of tab names. Add to this array any tab names that are specific to the connector.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
java.io.IOException
public void outputConfigurationBody(org.apache.manifoldcf.core.interfaces.IThreadContext threadContext,
org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.core.interfaces.ConfigParams parameters,
java.lang.String tabName)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
java.io.IOException
public java.lang.String processConfigurationPost(org.apache.manifoldcf.core.interfaces.IThreadContext threadContext,
org.apache.manifoldcf.core.interfaces.IPostParameters variableContext,
org.apache.manifoldcf.core.interfaces.ConfigParams parameters)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
processConfigurationPost in interface org.apache.manifoldcf.core.interfaces.IConnectorprocessConfigurationPost in class org.apache.manifoldcf.core.connector.BaseConnectorthreadContext - is the local thread context.variableContext - is the set of variables available from the post, including binary file post information.parameters - are the configuration parameters, as they currently exist, for this connection being configured.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
public void viewConfiguration(org.apache.manifoldcf.core.interfaces.IThreadContext threadContext,
org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.core.interfaces.ConfigParams parameters)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
java.io.IOException
viewConfiguration in interface org.apache.manifoldcf.core.interfaces.IConnectorviewConfiguration in class org.apache.manifoldcf.core.connector.BaseConnectorthreadContext - is the local thread context.out - is the output to which any HTML should be sent.parameters - are the configuration parameters, as they currently exist, for this connection being configured.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
java.io.IOException
public void outputSpecificationHeader(org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification ds,
java.util.ArrayList tabsArray)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
java.io.IOException
outputSpecificationHeader in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectoroutputSpecificationHeader in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectorout - is the output to which any HTML should be sent.ds - is the current document specification for this job.tabsArray - is an array of tab names. Add to this array any tab names that are specific to the connector.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
java.io.IOException
public void outputSpecificationBody(org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification ds,
java.lang.String tabName)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
java.io.IOException
public java.lang.String processSpecificationPost(org.apache.manifoldcf.core.interfaces.IPostParameters variableContext,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification ds)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
processSpecificationPost in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectorprocessSpecificationPost in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectorvariableContext - contains the post data, including binary file-upload information.ds - is the current document specification for this job.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
public void viewSpecification(org.apache.manifoldcf.core.interfaces.IHTTPOutput out,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification ds)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException,
java.io.IOException
viewSpecification in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectorviewSpecification in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnectorout - is the output to which any HTML should be sent.ds - is the current document specification for this job.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
java.io.IOException
protected void applyMetadata(org.apache.manifoldcf.agents.interfaces.RepositoryDocument rd,
org.apache.manifoldcf.core.interfaces.IResultRow row)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
rd - is the repository document to apply the metadata to.row - is the resultset row to use to get the metadata. All non-special columns from this row will be considered to be metadata.
org.apache.manifoldcf.core.interfaces.ManifoldCFException
protected void applyAccessTokens(org.apache.manifoldcf.agents.interfaces.RepositoryDocument rd,
java.lang.String version,
org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
rd - is the repository document to apply the access tokens to.version - is the version string.spec - is the document specification.
org.apache.manifoldcf.core.interfaces.ManifoldCFExceptionpublic int getMaxDocumentRequest()
getMaxDocumentRequest in interface org.apache.manifoldcf.crawler.interfaces.IRepositoryConnectorgetMaxDocumentRequest in class org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnector
protected static void addVariable(JDBCConnector.VariableMap map,
java.lang.String varName,
long variable)
protected static void addVariable(JDBCConnector.VariableMap map,
java.lang.String varName,
java.lang.String variable)
protected static void addConstant(JDBCConnector.VariableMap map,
java.lang.String varName,
java.lang.String value)
protected static boolean addIDList(JDBCConnector.VariableMap map,
java.lang.String varName,
java.lang.String[] documentIdentifiers,
boolean[] scanOnly)
protected static void substituteQuery(java.lang.String inputString,
JDBCConnector.VariableMap inputMap,
java.lang.StringBuffer outputQuery,
java.util.ArrayList outputParams)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
org.apache.manifoldcf.core.interfaces.ManifoldCFExceptionprotected static java.lang.String[] getAcls(org.apache.manifoldcf.crawler.interfaces.DocumentSpecification spec)
spec - is the document specification.
protected static void pack(java.lang.StringBuffer output,
java.lang.String value,
char delimiter)
protected static int unpack(java.lang.StringBuffer sb,
java.lang.String value,
int startPosition,
char delimiter)
protected static void packFixedList(java.lang.StringBuffer output,
java.lang.String[] values,
char delimiter)
protected static int unpackFixedList(java.lang.String[] output,
java.lang.String value,
int startPosition,
char delimiter)
protected static void packList(java.lang.StringBuffer output,
java.util.ArrayList values,
char delimiter)
protected static void packList(java.lang.StringBuffer output,
java.lang.String[] values,
char delimiter)
protected static int unpackList(java.util.ArrayList output,
java.lang.String value,
int startPosition,
char delimiter)
output - is the array to write the unpacked result into.value - is the value to unpack.startPosition - is the place to start the unpack.delimiter - is the character to use between values.
protected static java.lang.String createQueryString(java.lang.String queryText,
java.util.ArrayList paramList)
protected static java.lang.String quoteSQLString(java.lang.String input)
protected static java.lang.String readAsString(java.lang.Object o)
throws org.apache.manifoldcf.core.interfaces.ManifoldCFException
org.apache.manifoldcf.core.interfaces.ManifoldCFException
|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||