@ProviderType public abstract class AbstractSlingRepository2 extends Object implements SlingRepository
AbstractSlingRepository2
is an abstract implementation of
the SlingRepository
version 2.2 interface (phasing
loginAdministrative(String)
out in favor of
loginService(String, String)
) which provides default support for
attached repositories as well as namespace mapping support by wrapping
sessions with namespace support (see
getNamespaceAwareSession(Session)
).
Implementations of the SlingRepository
interface may wish to
extend this class to benefit from default implementations of most methods.
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 and also makes use of
a single system wide namespace
session support
.
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(String workspace)
Creates an administrative session to access the indicated workspace.
|
protected javax.jcr.Session |
createServiceSession(String serviceUserName,
String workspace)
Creates a service-session for the service's
serviceUserName by
impersonating the user from an administrative session. |
String |
getDefaultWorkspace()
Returns the default workspace to login to if any of the
login and
createSession methods is called without an explicit workspace
name. |
String |
getDescriptor(String name) |
String[] |
getDescriptorKeys() |
javax.jcr.Value |
getDescriptorValue(String key) |
javax.jcr.Value[] |
getDescriptorValues(String key) |
protected javax.jcr.Session |
getNamespaceAwareSession(javax.jcr.Session session)
Wraps the given session with support for name spaces defined by bundles
deployed in the OSGi framework.
|
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() |
boolean |
isSingleValueDescriptor(String key) |
boolean |
isStandardDescriptor(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,
String workspace)
Logs into the repository at the given
workspace with the given
credentials and returns a namespace aware session by calling
getNamespaceAwareSession(Session) with the session returned from
the repository.. |
javax.jcr.Session |
login(String workspace)
Same as calling
login(null, workspace) . |
javax.jcr.Session |
loginAdministrative(String workspace)
Login as an administrative user.
|
javax.jcr.Session |
loginService(String subServiceName,
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 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 final javax.jcr.Session getNamespaceAwareSession(javax.jcr.Session session) throws javax.jcr.RepositoryException
NamespaceMappingSupport
for
details about namespace support in Sling.
To fully support namespaces, this method must be called from each
implementation of any of the login
methods implemented by this
class or its extensions.
session
- The Session
to wrap. This must not be null
javax.jcr.RepositoryException
- If an error occurrs wrapping the sessionNullPointerException
- If session
is null
protected abstract javax.jcr.Session createAdministrativeSession(String workspace) throws javax.jcr.RepositoryException
This method is called by the loginAdministrative(String)
and
createServiceSession(String, String)
methods.
Implementations of this method must not call
getNamespaceAwareSession(Session)
as this is handled by the
calling method.
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(String serviceUserName, 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.
This method must not call getNamespaceAwareSession(Session)
as
this is handled by the calling method.
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
sessionpublic javax.jcr.Session login() throws javax.jcr.LoginException, javax.jcr.RepositoryException
login(null, null)
.
This method may be overwritten. Care must be taken to call
getNamespaceAwareSession(Session)
before return to the caller.
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)
,
getNamespaceAwareSession(Session)
public javax.jcr.Session login(javax.jcr.Credentials credentials) throws javax.jcr.LoginException, javax.jcr.RepositoryException
login(credentials, null)
.
This method may be overwritten. Care must be taken to call
getNamespaceAwareSession(Session)
before return to the caller.
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)
,
getNamespaceAwareSession(Session)
public javax.jcr.Session login(String workspace) throws javax.jcr.LoginException, javax.jcr.NoSuchWorkspaceException, javax.jcr.RepositoryException
login(null, workspace)
.
This method may be overwritten. Care must be taken to call
getNamespaceAwareSession(Session)
before return to the caller.
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)
,
getNamespaceAwareSession(Session)
public javax.jcr.Session login(javax.jcr.Credentials credentials, String workspace) throws javax.jcr.LoginException, javax.jcr.NoSuchWorkspaceException, javax.jcr.RepositoryException
workspace
with the given
credentials
and returns a namespace aware session by calling
getNamespaceAwareSession(Session)
with 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. An
implementation overwriting this method must also call
getNamespaceAwareSession(Session)
before returning the session
to the caller.
This method may be overwritten. Care must be taken to call
getNamespaceAwareSession(Session)
before return to the caller.
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 logingetNamespaceAwareSession(Session)
public final javax.jcr.Session loginService(String subServiceName, 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 final javax.jcr.Session loginAdministrative(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 String getDescriptor(String name)
getDescriptor
in interface javax.jcr.Repository
public String[] getDescriptorKeys()
getDescriptorKeys
in interface javax.jcr.Repository
public javax.jcr.Value getDescriptorValue(String key)
getDescriptorValue
in interface javax.jcr.Repository
public javax.jcr.Value[] getDescriptorValues(String key)
getDescriptorValues
in interface javax.jcr.Repository
public boolean isSingleValueDescriptor(String key)
isSingleValueDescriptor
in interface javax.jcr.Repository
public boolean isStandardDescriptor(String key)
isStandardDescriptor
in interface javax.jcr.Repository
Copyright © 2014 The Apache Software Foundation. All rights reserved.