|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.netscape.jndi.ldap.LdapContextImpl
Implementation for the DirContext. The context also supports controls through the implementation of LdapContext interface and events through the implementaion of EventDirContext. Semantically, the LdapContextImpl corresponds to a directory entry. Thus a context is associated with a DN (m_ctxDN). Multiple contexts share the same LDAPConnection which is wrapped into a LdapService object (m_ldapSvc). Each context also maintains a set of environment properties (m_ctxEnv). A context environment is shared among mutiple contexts using a variation of copy-on-write algorithm (see common.ShareableEnv class). Each context also maintains a set of LDAPSearchConstraints, as search constrainsts like e.g. server controls, or max number of returned search search results, are context specific. The LdapService reads the LDAPSearchConstraints from a context that makes a service request.
Field Summary | |
protected java.lang.String |
m_ctxDN
DN associated with this context The default value is the root DSE ("") |
protected ContextEnv |
m_ctxEnv
Context environment setting |
protected LdapService |
m_ldapSvc
Ldap Connection/Service |
protected LDAPSearchConstraints |
m_searchCons
Ldap Connection Search Constraints |
Fields inherited from interface javax.naming.event.EventContext |
OBJECT_SCOPE, ONELEVEL_SCOPE, SUBTREE_SCOPE |
Fields inherited from interface javax.naming.Context |
APPLET, AUTHORITATIVE, BATCHSIZE, DNS_URL, INITIAL_CONTEXT_FACTORY, LANGUAGE, OBJECT_FACTORIES, PROVIDER_URL, REFERRAL, SECURITY_AUTHENTICATION, SECURITY_CREDENTIALS, SECURITY_PRINCIPAL, SECURITY_PROTOCOL, STATE_FACTORIES, URL_PKG_PREFIXES |
Fields inherited from interface javax.naming.directory.DirContext |
ADD_ATTRIBUTE, REMOVE_ATTRIBUTE, REPLACE_ATTRIBUTE |
Fields inherited from interface javax.naming.ldap.LdapContext |
CONTROL_FACTORIES |
Constructor Summary | |
LdapContextImpl(java.util.Hashtable env)
Constructor |
|
LdapContextImpl(java.lang.String ctxDN,
LdapContextImpl cloneCtx)
Copy Constructor |
Method Summary | |
void |
addNamingListener(javax.naming.Name target,
int scope,
javax.naming.event.NamingListener l)
|
void |
addNamingListener(javax.naming.Name target,
java.lang.String filterExpr,
java.lang.Object[] filterArgs,
javax.naming.directory.SearchControls ctls,
javax.naming.event.NamingListener l)
|
void |
addNamingListener(javax.naming.Name target,
java.lang.String filter,
javax.naming.directory.SearchControls ctls,
javax.naming.event.NamingListener l)
|
void |
addNamingListener(java.lang.String target,
int scope,
javax.naming.event.NamingListener l)
Naming Event methods javax.naming.event.EventDirContext interface) |
void |
addNamingListener(java.lang.String target,
java.lang.String filterExpr,
java.lang.Object[] filterArgs,
javax.naming.directory.SearchControls ctls,
javax.naming.event.NamingListener l)
|
void |
addNamingListener(java.lang.String target,
java.lang.String filter,
javax.naming.directory.SearchControls ctls,
javax.naming.event.NamingListener l)
|
java.lang.Object |
addToEnvironment(java.lang.String propName,
java.lang.Object propValue)
|
void |
bind(javax.naming.Name name,
java.lang.Object obj)
|
void |
bind(javax.naming.Name name,
java.lang.Object obj,
javax.naming.directory.Attributes attrs)
|
void |
bind(java.lang.String name,
java.lang.Object obj)
Naming Bind/Rename operations (javax.naming.Context, javax.naming.DirContext interface) |
void |
bind(java.lang.String name,
java.lang.Object obj,
javax.naming.directory.Attributes attrs)
|
(package private) java.lang.String |
checkLdapUrlAsName(java.lang.String name)
Check if LdapURL is passed as the name paremetr to a method If that's the case, craete environment for the ldap url |
void |
close()
Disconnect the Ldap Connection if close is requested LDAP operations can not be performed any more ones the context is closed |
javax.naming.Name |
composeName(javax.naming.Name name,
javax.naming.Name prefix)
|
java.lang.String |
composeName(java.lang.String name,
java.lang.String prefix)
Name operations (javax.naming.Context interface) |
javax.naming.Context |
createSubcontext(javax.naming.Name name)
|
javax.naming.directory.DirContext |
createSubcontext(javax.naming.Name name,
javax.naming.directory.Attributes attrs)
|
javax.naming.Context |
createSubcontext(java.lang.String name)
Ldap entry operations (javax.naming.DirContext interface) |
javax.naming.directory.DirContext |
createSubcontext(java.lang.String name,
javax.naming.directory.Attributes attrs)
|
void |
destroySubcontext(javax.naming.Name name)
|
void |
destroySubcontext(java.lang.String name)
|
javax.naming.ldap.ExtendedResponse |
extendedOperation(javax.naming.ldap.ExtendedRequest req)
LdapContext methods (javax.naming.ldap.LdapContext interface) |
protected void |
finalize()
Close the context when finalized |
javax.naming.directory.Attributes |
getAttributes(javax.naming.Name name)
|
javax.naming.directory.Attributes |
getAttributes(javax.naming.Name name,
java.lang.String[] attrIds)
|
javax.naming.directory.Attributes |
getAttributes(java.lang.String name)
Attribute Operations (javax.naming.DirContext interface) |
javax.naming.directory.Attributes |
getAttributes(java.lang.String name,
java.lang.String[] attrIds)
|
javax.naming.ldap.Control[] |
getConnectControls()
|
(package private) java.lang.String |
getDN()
Return DN for this context |
(package private) ContextEnv |
getEnv()
Return reference to the context environment |
java.util.Hashtable |
getEnvironment()
Environment operatins (javax.naming.Context interface) |
java.lang.String |
getNameInNamespace()
|
javax.naming.NameParser |
getNameParser(javax.naming.Name name)
|
javax.naming.NameParser |
getNameParser(java.lang.String name)
|
javax.naming.ldap.Control[] |
getRequestControls()
|
javax.naming.ldap.Control[] |
getResponseControls()
|
javax.naming.directory.DirContext |
getSchema(javax.naming.Name name)
|
javax.naming.directory.DirContext |
getSchema(java.lang.String name)
Schema Operations (javax.naming.DirContext interface) |
javax.naming.directory.DirContext |
getSchemaClassDefinition(javax.naming.Name name)
|
javax.naming.directory.DirContext |
getSchemaClassDefinition(java.lang.String name)
|
(package private) LDAPSearchConstraints |
getSearchConstraints()
Return LdapJdk search constraints for this context |
javax.naming.NamingEnumeration |
list(javax.naming.Name name)
|
javax.naming.NamingEnumeration |
list(java.lang.String name)
List Operations (javax.naming.Context interface) |
javax.naming.NamingEnumeration |
listBindings(javax.naming.Name name)
|
javax.naming.NamingEnumeration |
listBindings(java.lang.String name)
|
java.lang.Object |
lookup(javax.naming.Name name)
|
java.lang.Object |
lookup(java.lang.String name)
Lookup Operations (javax.naming.Context interface) |
java.lang.Object |
lookupLink(javax.naming.Name name)
|
java.lang.Object |
lookupLink(java.lang.String name)
|
void |
modifyAttributes(javax.naming.Name name,
int mod_op,
javax.naming.directory.Attributes attrs)
|
void |
modifyAttributes(javax.naming.Name name,
javax.naming.directory.ModificationItem[] mods)
|
void |
modifyAttributes(java.lang.String name,
int mod_op,
javax.naming.directory.Attributes attrs)
|
void |
modifyAttributes(java.lang.String name,
javax.naming.directory.ModificationItem[] mods)
|
javax.naming.ldap.LdapContext |
newInstance(javax.naming.ldap.Control[] reqCtls)
|
void |
rebind(javax.naming.Name name,
java.lang.Object obj)
|
void |
rebind(javax.naming.Name name,
java.lang.Object obj,
javax.naming.directory.Attributes attrs)
|
void |
rebind(java.lang.String name,
java.lang.Object obj)
|
void |
rebind(java.lang.String name,
java.lang.Object obj,
javax.naming.directory.Attributes attrs)
|
void |
reconnect(javax.naming.ldap.Control[] reqCtls)
|
java.lang.Object |
removeFromEnvironment(java.lang.String propName)
|
void |
removeNamingListener(javax.naming.event.NamingListener l)
|
void |
rename(javax.naming.Name oldName,
javax.naming.Name newName)
|
void |
rename(java.lang.String oldName,
java.lang.String newName)
|
javax.naming.NamingEnumeration |
search(javax.naming.Name name,
javax.naming.directory.Attributes attrs)
|
javax.naming.NamingEnumeration |
search(javax.naming.Name name,
javax.naming.directory.Attributes matchingAttributes,
java.lang.String[] attributesToReturn)
|
javax.naming.NamingEnumeration |
search(javax.naming.Name name,
java.lang.String filterExpr,
java.lang.Object[] filterArgs,
javax.naming.directory.SearchControls cons)
|
javax.naming.NamingEnumeration |
search(javax.naming.Name name,
java.lang.String filter,
javax.naming.directory.SearchControls cons)
|
javax.naming.NamingEnumeration |
search(java.lang.String name,
javax.naming.directory.Attributes matchingAttributes)
|
javax.naming.NamingEnumeration |
search(java.lang.String name,
javax.naming.directory.Attributes matchingAttributes,
java.lang.String[] attributesToReturn)
|
javax.naming.NamingEnumeration |
search(java.lang.String name,
java.lang.String filterExpr,
java.lang.Object[] filterArgs,
javax.naming.directory.SearchControls cons)
|
javax.naming.NamingEnumeration |
search(java.lang.String name,
java.lang.String filter,
javax.naming.directory.SearchControls cons)
Search operations (javax.naming.DirContext interface) |
void |
setRequestControls(javax.naming.ldap.Control[] reqCtls)
|
boolean |
targetMustExist()
|
java.lang.String |
toString()
Conver object to String |
void |
unbind(javax.naming.Name name)
|
void |
unbind(java.lang.String name)
|
Methods inherited from class java.lang.Object |
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
protected ContextEnv m_ctxEnv
protected java.lang.String m_ctxDN
protected LdapService m_ldapSvc
protected LDAPSearchConstraints m_searchCons
Constructor Detail |
public LdapContextImpl(java.util.Hashtable env) throws javax.naming.NamingException
public LdapContextImpl(java.lang.String ctxDN, LdapContextImpl cloneCtx) throws javax.naming.NamingException
Method Detail |
protected void finalize()
public void close() throws javax.naming.NamingException
close
in interface javax.naming.Context
javax.naming.NamingException
LDAPSearchConstraints getSearchConstraints() throws javax.naming.NamingException
javax.naming.NamingException
java.lang.String getDN() throws javax.naming.NamingException
javax.naming.NamingException
ContextEnv getEnv()
public java.lang.String toString()
java.lang.String checkLdapUrlAsName(java.lang.String name) throws javax.naming.NamingException
javax.naming.NamingException
public java.util.Hashtable getEnvironment() throws javax.naming.NamingException
getEnvironment
in interface javax.naming.Context
javax.naming.NamingException
public java.lang.Object addToEnvironment(java.lang.String propName, java.lang.Object propValue) throws javax.naming.NamingException
addToEnvironment
in interface javax.naming.Context
javax.naming.NamingException
public java.lang.Object removeFromEnvironment(java.lang.String propName) throws javax.naming.NamingException
removeFromEnvironment
in interface javax.naming.Context
javax.naming.NamingException
public java.lang.String composeName(java.lang.String name, java.lang.String prefix) throws javax.naming.NamingException
composeName
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.Name composeName(javax.naming.Name name, javax.naming.Name prefix) throws javax.naming.NamingException
composeName
in interface javax.naming.Context
javax.naming.NamingException
public java.lang.String getNameInNamespace() throws javax.naming.NamingException
getNameInNamespace
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.NameParser getNameParser(java.lang.String name) throws javax.naming.NamingException
getNameParser
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.NameParser getNameParser(javax.naming.Name name) throws javax.naming.NamingException
getNameParser
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.NamingEnumeration search(java.lang.String name, java.lang.String filter, javax.naming.directory.SearchControls cons) throws javax.naming.NamingException
search
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.NamingEnumeration search(java.lang.String name, java.lang.String filterExpr, java.lang.Object[] filterArgs, javax.naming.directory.SearchControls cons) throws javax.naming.NamingException
search
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.NamingEnumeration search(java.lang.String name, javax.naming.directory.Attributes matchingAttributes) throws javax.naming.NamingException
search
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.NamingEnumeration search(java.lang.String name, javax.naming.directory.Attributes matchingAttributes, java.lang.String[] attributesToReturn) throws javax.naming.NamingException
search
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.NamingEnumeration search(javax.naming.Name name, java.lang.String filter, javax.naming.directory.SearchControls cons) throws javax.naming.NamingException
search
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.NamingEnumeration search(javax.naming.Name name, java.lang.String filterExpr, java.lang.Object[] filterArgs, javax.naming.directory.SearchControls cons) throws javax.naming.NamingException
search
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.NamingEnumeration search(javax.naming.Name name, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
search
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.NamingEnumeration search(javax.naming.Name name, javax.naming.directory.Attributes matchingAttributes, java.lang.String[] attributesToReturn) throws javax.naming.NamingException
search
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.directory.Attributes getAttributes(java.lang.String name) throws javax.naming.NamingException
getAttributes
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.directory.Attributes getAttributes(java.lang.String name, java.lang.String[] attrIds) throws javax.naming.NamingException
getAttributes
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.directory.Attributes getAttributes(javax.naming.Name name) throws javax.naming.NamingException
getAttributes
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.directory.Attributes getAttributes(javax.naming.Name name, java.lang.String[] attrIds) throws javax.naming.NamingException
getAttributes
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void modifyAttributes(java.lang.String name, int mod_op, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
modifyAttributes
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void modifyAttributes(java.lang.String name, javax.naming.directory.ModificationItem[] mods) throws javax.naming.NamingException
modifyAttributes
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void modifyAttributes(javax.naming.Name name, int mod_op, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
modifyAttributes
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void modifyAttributes(javax.naming.Name name, javax.naming.directory.ModificationItem[] mods) throws javax.naming.NamingException
modifyAttributes
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.Context createSubcontext(java.lang.String name) throws javax.naming.NamingException
createSubcontext
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.Context createSubcontext(javax.naming.Name name) throws javax.naming.NamingException
createSubcontext
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.directory.DirContext createSubcontext(java.lang.String name, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
createSubcontext
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.directory.DirContext createSubcontext(javax.naming.Name name, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
createSubcontext
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void destroySubcontext(java.lang.String name) throws javax.naming.NamingException
destroySubcontext
in interface javax.naming.Context
javax.naming.NamingException
public void destroySubcontext(javax.naming.Name name) throws javax.naming.NamingException
destroySubcontext
in interface javax.naming.Context
javax.naming.NamingException
public void bind(java.lang.String name, java.lang.Object obj) throws javax.naming.NamingException
bind
in interface javax.naming.Context
javax.naming.NamingException
public void bind(javax.naming.Name name, java.lang.Object obj) throws javax.naming.NamingException
bind
in interface javax.naming.Context
javax.naming.NamingException
public void bind(java.lang.String name, java.lang.Object obj, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
bind
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void bind(javax.naming.Name name, java.lang.Object obj, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
bind
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void rebind(java.lang.String name, java.lang.Object obj) throws javax.naming.NamingException
rebind
in interface javax.naming.Context
javax.naming.NamingException
public void rebind(javax.naming.Name name, java.lang.Object obj) throws javax.naming.NamingException
rebind
in interface javax.naming.Context
javax.naming.NamingException
public void rebind(java.lang.String name, java.lang.Object obj, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
rebind
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void rebind(javax.naming.Name name, java.lang.Object obj, javax.naming.directory.Attributes attrs) throws javax.naming.NamingException
rebind
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void rename(java.lang.String oldName, java.lang.String newName) throws javax.naming.NamingException
rename
in interface javax.naming.Context
javax.naming.NamingException
public void rename(javax.naming.Name oldName, javax.naming.Name newName) throws javax.naming.NamingException
rename
in interface javax.naming.Context
javax.naming.NamingException
public void unbind(java.lang.String name) throws javax.naming.NamingException
unbind
in interface javax.naming.Context
javax.naming.NamingException
public void unbind(javax.naming.Name name) throws javax.naming.NamingException
unbind
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.NamingEnumeration list(java.lang.String name) throws javax.naming.NamingException
list
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.NamingEnumeration list(javax.naming.Name name) throws javax.naming.NamingException
list
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.NamingEnumeration listBindings(java.lang.String name) throws javax.naming.NamingException
listBindings
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.NamingEnumeration listBindings(javax.naming.Name name) throws javax.naming.NamingException
listBindings
in interface javax.naming.Context
javax.naming.NamingException
public java.lang.Object lookup(java.lang.String name) throws javax.naming.NamingException
lookup
in interface javax.naming.Context
javax.naming.NamingException
public java.lang.Object lookup(javax.naming.Name name) throws javax.naming.NamingException
lookup
in interface javax.naming.Context
javax.naming.NamingException
public java.lang.Object lookupLink(java.lang.String name) throws javax.naming.NamingException
lookupLink
in interface javax.naming.Context
javax.naming.NamingException
public java.lang.Object lookupLink(javax.naming.Name name) throws javax.naming.NamingException
lookupLink
in interface javax.naming.Context
javax.naming.NamingException
public javax.naming.directory.DirContext getSchema(java.lang.String name) throws javax.naming.NamingException
getSchema
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.directory.DirContext getSchema(javax.naming.Name name) throws javax.naming.NamingException
getSchema
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.directory.DirContext getSchemaClassDefinition(java.lang.String name) throws javax.naming.NamingException
getSchemaClassDefinition
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public javax.naming.directory.DirContext getSchemaClassDefinition(javax.naming.Name name) throws javax.naming.NamingException
getSchemaClassDefinition
in interface javax.naming.directory.DirContext
javax.naming.NamingException
public void addNamingListener(java.lang.String target, int scope, javax.naming.event.NamingListener l) throws javax.naming.NamingException
addNamingListener
in interface javax.naming.event.EventContext
javax.naming.NamingException
public void addNamingListener(javax.naming.Name target, int scope, javax.naming.event.NamingListener l) throws javax.naming.NamingException
addNamingListener
in interface javax.naming.event.EventContext
javax.naming.NamingException
public void addNamingListener(java.lang.String target, java.lang.String filter, javax.naming.directory.SearchControls ctls, javax.naming.event.NamingListener l) throws javax.naming.NamingException
addNamingListener
in interface javax.naming.event.EventDirContext
javax.naming.NamingException
public void addNamingListener(javax.naming.Name target, java.lang.String filter, javax.naming.directory.SearchControls ctls, javax.naming.event.NamingListener l) throws javax.naming.NamingException
addNamingListener
in interface javax.naming.event.EventDirContext
javax.naming.NamingException
public void addNamingListener(java.lang.String target, java.lang.String filterExpr, java.lang.Object[] filterArgs, javax.naming.directory.SearchControls ctls, javax.naming.event.NamingListener l) throws javax.naming.NamingException
addNamingListener
in interface javax.naming.event.EventDirContext
javax.naming.NamingException
public void addNamingListener(javax.naming.Name target, java.lang.String filterExpr, java.lang.Object[] filterArgs, javax.naming.directory.SearchControls ctls, javax.naming.event.NamingListener l) throws javax.naming.NamingException
addNamingListener
in interface javax.naming.event.EventDirContext
javax.naming.NamingException
public void removeNamingListener(javax.naming.event.NamingListener l) throws javax.naming.NamingException
removeNamingListener
in interface javax.naming.event.EventContext
javax.naming.NamingException
public boolean targetMustExist()
targetMustExist
in interface javax.naming.event.EventContext
public javax.naming.ldap.ExtendedResponse extendedOperation(javax.naming.ldap.ExtendedRequest req) throws javax.naming.NamingException
extendedOperation
in interface javax.naming.ldap.LdapContext
javax.naming.NamingException
public javax.naming.ldap.Control[] getRequestControls() throws javax.naming.NamingException
getRequestControls
in interface javax.naming.ldap.LdapContext
javax.naming.NamingException
public void setRequestControls(javax.naming.ldap.Control[] reqCtls) throws javax.naming.NamingException
setRequestControls
in interface javax.naming.ldap.LdapContext
javax.naming.NamingException
public javax.naming.ldap.Control[] getResponseControls() throws javax.naming.NamingException
getResponseControls
in interface javax.naming.ldap.LdapContext
javax.naming.NamingException
public javax.naming.ldap.LdapContext newInstance(javax.naming.ldap.Control[] reqCtls) throws javax.naming.NamingException
newInstance
in interface javax.naming.ldap.LdapContext
javax.naming.NamingException
public void reconnect(javax.naming.ldap.Control[] reqCtls) throws javax.naming.NamingException
reconnect
in interface javax.naming.ldap.LdapContext
javax.naming.NamingException
public javax.naming.ldap.Control[] getConnectControls()
getConnectControls
in interface javax.naming.ldap.LdapContext
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |