@ProviderType public abstract class AbstractSlingRepository2 extends java.lang.Object implements SlingRepository
AbstractSlingRepository2
is an abstract implementation of
the SlingRepository
version 2.3 interface (phasing
loginAdministrative(String)
out in favor of
loginService(String, String)
) which provides default support for
attached repositories.
Implementations of the SlingRepository
interface may wish to
extend this class to benefit from default implementations of most methods.
To be able to know the calling bundle to implement the
loginService(String, String)
method the bundle using the repository
service has to be provided in the
constructor
.
The premise of this abstract class is that an instance of an implementation
of this abstract class is handed out to each consumer of the
SlingRepository
service. Each instance is generally based on the same
delegated repository
instance.AbstractSlingRepositoryManager
IDENTIFIER_STABILITY, IDENTIFIER_STABILITY_INDEFINITE_DURATION, IDENTIFIER_STABILITY_METHOD_DURATION, IDENTIFIER_STABILITY_SAVE_DURATION, IDENTIFIER_STABILITY_SESSION_DURATION, LEVEL_1_SUPPORTED, LEVEL_2_SUPPORTED, NODE_TYPE_MANAGEMENT_AUTOCREATED_DEFINITIONS_SUPPORTED, NODE_TYPE_MANAGEMENT_INHERITANCE, NODE_TYPE_MANAGEMENT_INHERITANCE_MINIMAL, NODE_TYPE_MANAGEMENT_INHERITANCE_MULTIPLE, NODE_TYPE_MANAGEMENT_INHERITANCE_SINGLE, NODE_TYPE_MANAGEMENT_MULTIPLE_BINARY_PROPERTIES_SUPPORTED, NODE_TYPE_MANAGEMENT_MULTIVALUED_PROPERTIES_SUPPORTED, NODE_TYPE_MANAGEMENT_ORDERABLE_CHILD_NODES_SUPPORTED, NODE_TYPE_MANAGEMENT_OVERRIDES_SUPPORTED, NODE_TYPE_MANAGEMENT_PRIMARY_ITEM_NAME_SUPPORTED, NODE_TYPE_MANAGEMENT_PROPERTY_TYPES, NODE_TYPE_MANAGEMENT_RESIDUAL_DEFINITIONS_SUPPORTED, NODE_TYPE_MANAGEMENT_SAME_NAME_SIBLINGS_SUPPORTED, NODE_TYPE_MANAGEMENT_UPDATE_IN_USE_SUPORTED, NODE_TYPE_MANAGEMENT_VALUE_CONSTRAINTS_SUPPORTED, OPTION_ACCESS_CONTROL_SUPPORTED, OPTION_ACTIVITIES_SUPPORTED, OPTION_BASELINES_SUPPORTED, OPTION_JOURNALED_OBSERVATION_SUPPORTED, OPTION_LIFECYCLE_SUPPORTED, OPTION_LOCKING_SUPPORTED, OPTION_NODE_AND_PROPERTY_WITH_SAME_NAME_SUPPORTED, OPTION_NODE_TYPE_MANAGEMENT_SUPPORTED, OPTION_OBSERVATION_SUPPORTED, OPTION_QUERY_SQL_SUPPORTED, OPTION_RETENTION_SUPPORTED, OPTION_SHAREABLE_NODES_SUPPORTED, OPTION_SIMPLE_VERSIONING_SUPPORTED, OPTION_TRANSACTIONS_SUPPORTED, OPTION_UNFILED_CONTENT_SUPPORTED, OPTION_UPDATE_MIXIN_NODE_TYPES_SUPPORTED, OPTION_UPDATE_PRIMARY_NODE_TYPE_SUPPORTED, OPTION_VERSIONING_SUPPORTED, OPTION_WORKSPACE_MANAGEMENT_SUPPORTED, OPTION_XML_EXPORT_SUPPORTED, OPTION_XML_IMPORT_SUPPORTED, QUERY_FULL_TEXT_SEARCH_SUPPORTED, QUERY_JOINS, QUERY_JOINS_INNER, QUERY_JOINS_INNER_OUTER, QUERY_JOINS_NONE, QUERY_LANGUAGES, QUERY_STORED_QUERIES_SUPPORTED, QUERY_XPATH_DOC_ORDER, QUERY_XPATH_POS_INDEX, REP_NAME_DESC, REP_VENDOR_DESC, REP_VENDOR_URL_DESC, REP_VERSION_DESC, SPEC_NAME_DESC, SPEC_VERSION_DESC, WRITE_SUPPORTED
Modifier | Constructor and Description |
---|---|
protected |
AbstractSlingRepository2(AbstractSlingRepositoryManager manager,
org.osgi.framework.Bundle usingBundle)
Sets up this abstract SlingRepository implementation.
|
Modifier and Type | Method and Description |
---|---|
protected abstract javax.jcr.Session |
createAdministrativeSession(java.lang.String workspace)
Creates an administrative session to access the indicated workspace.
|
protected javax.jcr.Session |
createServiceSession(java.lang.Iterable<java.lang.String> servicePrincipalNames,
java.lang.String workspaceName)
Creates a service-session for the service's
servicePrincipalNames
using a pre-authenticated Subject . |
protected javax.jcr.Session |
createServiceSession(java.lang.String serviceUserName,
java.lang.String workspace)
Creates a service-session for the service's
serviceUserName by
impersonating the user from an administrative session. |
java.lang.String |
getDefaultWorkspace()
Returns the default workspace to login to if any of the
login and
createSession methods is called without an explicit workspace
name. |
java.lang.String |
getDescriptor(java.lang.String name) |
java.lang.String[] |
getDescriptorKeys() |
javax.jcr.Value |
getDescriptorValue(java.lang.String key) |
javax.jcr.Value[] |
getDescriptorValues(java.lang.String key) |
protected javax.jcr.Repository |
getRepository()
Returns the actual repository to which all JCR Repository interface
methods implemented by this class are delegated.
|
protected AbstractSlingRepositoryManager |
getSlingRepositoryManager() |
javax.jcr.Session |
impersonateFromService(java.lang.String subServiceName,
javax.jcr.Credentials credentials,
java.lang.String workspaceName)
Default implementation of the
impersonateFromService(String, Credentials, String)
method taking into account the bundle calling this method. |
boolean |
isSingleValueDescriptor(java.lang.String key) |
boolean |
isStandardDescriptor(java.lang.String key) |
javax.jcr.Session |
login()
Same as calling
login(null, null) . |
javax.jcr.Session |
login(javax.jcr.Credentials credentials)
Same as calling
login(credentials, null) . |
javax.jcr.Session |
login(javax.jcr.Credentials credentials,
java.lang.String workspace)
Logs into the repository at the given
workspace with the given
credentials and returns the session returned from
the repository. |
javax.jcr.Session |
login(java.lang.String workspace)
Same as calling
login(null, workspace) . |
javax.jcr.Session |
loginAdministrative(java.lang.String workspace)
Login as an administrative user.
|
javax.jcr.Session |
loginService(java.lang.String subServiceName,
java.lang.String workspace)
Actual implementation of the
loginService(String, String) method
taking into account the bundle calling this method. |
protected AbstractSlingRepository2(AbstractSlingRepositoryManager manager, org.osgi.framework.Bundle usingBundle)
manager
- The AbstractSlingRepositoryManager
controlling
this instance as well as the actual JCR repository instance
used by this.usingBundle
- The bundle using this instance. This is used by the
loginService(String, String)
method, which will not
be able to login if this parameter is null
protected final AbstractSlingRepositoryManager getSlingRepositoryManager()
AbstractSlingRepositoryManager
controlling this
instancesprotected final javax.jcr.Repository getRepository()
public final java.lang.String getDefaultWorkspace()
login
and
createSession
methods is called without an explicit workspace
name.
This method may return null
in which case the actual default
workspace used depends on the underlying JCR Repository implementation.
getDefaultWorkspace
in interface SlingRepository
protected abstract javax.jcr.Session createAdministrativeSession(java.lang.String workspace) throws javax.jcr.RepositoryException
This method is called by the loginAdministrative(String)
and
createServiceSession(String, String)
methods.
workspace
- The workspace to access or null
to access the
default workspace
javax.jcr.RepositoryException
- If a general error occurs during logincreateServiceSession(String, String)
,
loginAdministrative(String)
protected javax.jcr.Session createServiceSession(java.lang.String serviceUserName, java.lang.String workspace) throws javax.jcr.RepositoryException
serviceUserName
by
impersonating the user from an administrative session.
The administrative session is created calling
createAdministrativeSession(workspace)
and is logged out before this
method returns.
Implementations of this class may overwrite this method with a better implementation, notably one which does not involve a temporary creation of an administrative session.
serviceUserName
- The name of the user to create the session forworkspace
- The workspace to access or null
to access the
default workspace
javax.jcr.RepositoryException
- If a general error occurs while creating the
sessionprotected javax.jcr.Session createServiceSession(java.lang.Iterable<java.lang.String> servicePrincipalNames, java.lang.String workspaceName) throws javax.jcr.RepositoryException
servicePrincipalNames
using a pre-authenticated Subject
.
Implementations of this class may overwrite this method to meet additional
needs wrt the the nature of the principals, the Subject
or additional
attributes passed to the repository login.
servicePrincipalNames
- The names of the service principals to create the session forworkspaceName
- The workspace to access or null
to access the default workspace
javax.jcr.RepositoryException
- If a general error occurs while creating the session.public javax.jcr.Session login() throws javax.jcr.LoginException, javax.jcr.RepositoryException
login(null, null)
.
This method may be overwritten.
login
in interface javax.jcr.Repository
login(null, null)
.javax.jcr.LoginException
- If login is not possiblejavax.jcr.RepositoryException
- If another error occurrs during loginlogin(Credentials, String)
public javax.jcr.Session login(javax.jcr.Credentials credentials) throws javax.jcr.LoginException, javax.jcr.RepositoryException
login(credentials, null)
.
This method may be overwritten.
login
in interface javax.jcr.Repository
credentials
- The Credentials
to use to login.login(credentials, null)
.javax.jcr.LoginException
- If login is not possiblejavax.jcr.RepositoryException
- If another error occurrs during loginlogin(Credentials, String)
public javax.jcr.Session login(java.lang.String workspace) throws javax.jcr.LoginException, javax.jcr.NoSuchWorkspaceException, javax.jcr.RepositoryException
login(null, workspace)
.
This method may be overwritten.
login
in interface javax.jcr.Repository
workspace
- The workspace to access or null
to access the
default workspace
login(null, workspace)
.javax.jcr.LoginException
- If login is not possiblejavax.jcr.RepositoryException
- If another error occurrs during loginjavax.jcr.NoSuchWorkspaceException
login(Credentials, String)
public javax.jcr.Session login(javax.jcr.Credentials credentials, java.lang.String workspace) throws javax.jcr.LoginException, javax.jcr.NoSuchWorkspaceException, javax.jcr.RepositoryException
workspace
with the given
credentials
and returns the session returned from
the repository.
This method logs in as a guest if null
credentials are provided.
The method may be overwritten to implement a different behaviour as
indicated by the JCR specification for this method to use external
mechanisms to login instead of leveraging provided credentials.
This method may be overwritten.
login
in interface javax.jcr.Repository
credentials
- The Credentials
to use to login. If this is
null
JCR GuestCredentials
are used to login.workspace
- The workspace to access or null
to access the
default workspace
javax.jcr.LoginException
- If login is not possiblejavax.jcr.NoSuchWorkspaceException
- if the desired workspace is not
availablejavax.jcr.RepositoryException
- If another error occurrs during loginpublic final javax.jcr.Session loginService(java.lang.String subServiceName, java.lang.String workspace) throws javax.jcr.LoginException, javax.jcr.RepositoryException
loginService(String, String)
method
taking into account the bundle calling this method.
This method uses the
ServiceUserMapper
service to map the named service to a user and then
calls the createServiceSession(String, String)
method actually
create a session for that user.loginService
in interface SlingRepository
subServiceName
- An optional subService identifier (may be
null
)workspace
- The workspace to access or null
to access the
default workspace
javax.jcr.LoginException
- if the service name cannot be derived or if
logging is as the user to which the service name maps is not
allowedjavax.jcr.RepositoryException
- If a general error occurs while creating the
sessionpublic javax.jcr.Session impersonateFromService(java.lang.String subServiceName, javax.jcr.Credentials credentials, java.lang.String workspaceName) throws javax.jcr.LoginException, javax.jcr.RepositoryException
impersonateFromService(String, Credentials, String)
method taking into account the bundle calling this method.
This method uses the
ServiceUserMapper
service to map the named service to a user and then
calls the createServiceSession(String, String)
method actually
create a session for that user. This service session is then impersonated
to the subject identified by the specified credentials
.impersonateFromService
in interface SlingRepository
subServiceName
- An optional subService identifier (may be null
)credentials
- A valid non-null Credentials
objectworkspaceName
- The workspace to access or null
to access the
default workspace
Session
objectjavax.jcr.LoginException
- If the current session does not have sufficient access to perform the operation.javax.jcr.RepositoryException
- If another error occurs.public final javax.jcr.Session loginAdministrative(java.lang.String workspace) throws javax.jcr.RepositoryException
disableLoginAdministrative
to true
.
This implementation cannot be overwritten but, unless disabled, forwards
to the createAdministrativeSession(String)
method.
loginAdministrative
in interface SlingRepository
workspace
- The workspace to access or null
to access the
default workspace
javax.jcr.RepositoryException
- If the login fails or has been disabledpublic java.lang.String getDescriptor(java.lang.String name)
getDescriptor
in interface javax.jcr.Repository
public java.lang.String[] getDescriptorKeys()
getDescriptorKeys
in interface javax.jcr.Repository
public javax.jcr.Value getDescriptorValue(java.lang.String key)
getDescriptorValue
in interface javax.jcr.Repository
public javax.jcr.Value[] getDescriptorValues(java.lang.String key)
getDescriptorValues
in interface javax.jcr.Repository
public boolean isSingleValueDescriptor(java.lang.String key)
isSingleValueDescriptor
in interface javax.jcr.Repository
public boolean isStandardDescriptor(java.lang.String key)
isStandardDescriptor
in interface javax.jcr.Repository
Copyright © 2022 The Apache Software Foundation. All rights reserved.