org.apache.jackrabbit.rmi.client.LocalAdapterFactory Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.rmi.client;
import java.security.Principal;
import java.util.Iterator;
import javax.jcr.Item;
import javax.jcr.NamespaceRegistry;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.jcr.lock.Lock;
import javax.jcr.lock.LockManager;
import javax.jcr.nodetype.ItemDefinition;
import javax.jcr.nodetype.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeIterator;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.PropertyDefinition;
import javax.jcr.observation.ObservationManager;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
import javax.jcr.security.AccessControlPolicyIterator;
import javax.jcr.security.Privilege;
import javax.jcr.version.Version;
import javax.jcr.version.VersionHistory;
import javax.jcr.version.VersionIterator;
import javax.jcr.version.VersionManager;
import org.apache.jackrabbit.rmi.remote.RemoteItem;
import org.apache.jackrabbit.rmi.remote.RemoteItemDefinition;
import org.apache.jackrabbit.rmi.remote.RemoteIterator;
import org.apache.jackrabbit.rmi.remote.RemoteLock;
import org.apache.jackrabbit.rmi.remote.RemoteLockManager;
import org.apache.jackrabbit.rmi.remote.RemoteNamespaceRegistry;
import org.apache.jackrabbit.rmi.remote.RemoteNode;
import org.apache.jackrabbit.rmi.remote.RemoteNodeDefinition;
import org.apache.jackrabbit.rmi.remote.RemoteNodeType;
import org.apache.jackrabbit.rmi.remote.RemoteNodeTypeManager;
import org.apache.jackrabbit.rmi.remote.RemoteObservationManager;
import org.apache.jackrabbit.rmi.remote.RemoteProperty;
import org.apache.jackrabbit.rmi.remote.RemotePropertyDefinition;
import org.apache.jackrabbit.rmi.remote.RemoteQuery;
import org.apache.jackrabbit.rmi.remote.RemoteQueryManager;
import org.apache.jackrabbit.rmi.remote.RemoteQueryResult;
import org.apache.jackrabbit.rmi.remote.RemoteRepository;
import org.apache.jackrabbit.rmi.remote.RemoteRow;
import org.apache.jackrabbit.rmi.remote.RemoteSession;
import org.apache.jackrabbit.rmi.remote.RemoteVersion;
import org.apache.jackrabbit.rmi.remote.RemoteVersionHistory;
import org.apache.jackrabbit.rmi.remote.RemoteVersionManager;
import org.apache.jackrabbit.rmi.remote.RemoteWorkspace;
import org.apache.jackrabbit.rmi.remote.principal.RemotePrincipal;
import org.apache.jackrabbit.rmi.remote.security.RemoteAccessControlEntry;
import org.apache.jackrabbit.rmi.remote.security.RemoteAccessControlManager;
import org.apache.jackrabbit.rmi.remote.security.RemoteAccessControlPolicy;
import org.apache.jackrabbit.rmi.remote.security.RemotePrivilege;
/**
* Factory interface for creating local adapters for remote references.
* This interface defines how remote JCR-RMI references are adapted
* back to the normal JCR interfaces. The adaption mechanism can be
* modified (for example to add extra features) by changing the
* local adapter factory used by the repository client.
*
* Note that the
* {@link org.apache.jackrabbit.rmi.client.ClientObject ClientObject}
* base class provides a number of utility methods designed to work with
* a local adapter factory. Adapter implementations may want to inherit
* that functionality by subclassing from ClientObject.
*
* @see org.apache.jackrabbit.rmi.server.RemoteAdapterFactory
* @see org.apache.jackrabbit.rmi.client.ClientAdapterFactory
* @see org.apache.jackrabbit.rmi.client.ClientObject
*/
public interface LocalAdapterFactory {
/**
* Factory method for creating a local adapter for a remote repository.
*
* @param remote remote repository
* @return local repository adapter
*/
Repository getRepository(RemoteRepository remote);
/**
* Factory method for creating a local adapter for a remote session.
*
* @param repository current repository
* @param remote remote session
* @return local session adapter
*/
Session getSession(Repository repository, RemoteSession remote);
/**
* Factory method for creating a local adapter for a remote workspace.
*
* @param session current session
* @param remote remote workspace
* @return local workspace adapter
*/
Workspace getWorkspace(Session session, RemoteWorkspace remote);
/**
* Factory method for creating a local adapter for a remote observation
* manager.
*
* @param workspace current workspace
* @param remote remote observation manager
* @return local observation manager adapter
*/
ObservationManager getObservationManager(Workspace workspace,
RemoteObservationManager remote);
/**
* Factory method for creating a local adapter for a remote namespace
* registry.
*
* @param remote remote namespace registry
* @return local namespace registry adapter
*/
NamespaceRegistry getNamespaceRegistry(RemoteNamespaceRegistry remote);
/**
* Factory method for creating a local adapter for a remote node type
* manager.
*
* @param remote remote node type manager
* @return local node type manager adapter
*/
NodeTypeManager getNodeTypeManager(RemoteNodeTypeManager remote);
/**
* Factory method for creating a local adapter for a remote item.
* Note that before calling this method, the client may want to
* introspect the remote item reference to determine whether to use the
* {@link #getNode(Session, RemoteNode) getNode} or
* {@link #getProperty(Session, RemoteProperty) getProperty} method
* instead, as the adapter returned by this method will only cover
* the basic {@link Item Item} interface.
*
* @param session current session
* @param remote remote item
* @return local item adapter
*/
Item getItem(Session session, RemoteItem remote);
/**
* Factory method for creating a local adapter for a remote property.
*
* @param session current session
* @param remote remote property
* @return local property adapter
*/
Property getProperty(Session session, RemoteProperty remote);
/**
* Factory method for creating a local adapter for a remote node.
*
* @param session current session
* @param remote remote node
* @return local node adapter
*/
Node getNode(Session session, RemoteNode remote);
/**
* Factory method for creating a local adapter for a remote version.
*
* @param session current session
* @param remote remote version
* @return local version adapter
*/
Version getVersion(Session session, RemoteVersion remote);
/**
* Factory method for creating a local adapter for a remote version history.
*
* @param session current session
* @param remote remote version history
* @return local version history adapter
*/
VersionHistory getVersionHistory(Session session, RemoteVersionHistory remote);
/**
* Factory method for creating a local adapter for a remote node type.
*
* @param remote remote node type
* @return local node type adapter
*/
NodeType getNodeType(RemoteNodeType remote);
/**
* Factory method for creating a local adapter for a remote item
* definition. Note that before calling this method, the client may want to
* introspect the remote item definition to determine whether to use the
* {@link #getNodeDef(RemoteNodeDefinition) getNodeDef} or
* {@link #getPropertyDef(RemotePropertyDefinition) getPropertyDef} method
* instead, as the adapter returned by this method will only cover
* the {@link ItemDefinition ItemDef} base interface.
*
* @param remote remote item definition
* @return local item definition adapter
*/
ItemDefinition getItemDef(RemoteItemDefinition remote);
/**
* Factory method for creating a local adapter for a remote node
* definition.
*
* @param remote remote node definition
* @return local node definition adapter
*/
NodeDefinition getNodeDef(RemoteNodeDefinition remote);
/**
* Factory method for creating a local adapter for a remote property
* definition.
*
* @param remote remote property definition
* @return local property definition adapter
*/
PropertyDefinition getPropertyDef(RemotePropertyDefinition remote);
/**
* Factory method for creating a local adapter for a remote lock.
*
* @param session current session
* @param remote remote lock
* @return local lock adapter
*/
Lock getLock(Session session, RemoteLock remote);
/**
* Factory method for creating a local adapter for a remote query manager.
*
* @param session current session
* @param remote remote query manager
* @return local query manager adapter
*/
QueryManager getQueryManager(Session session, RemoteQueryManager remote);
/**
* Factory method for creating a local adapter for a remote query.
*
* @param session current session
* @param remote remote query
* @return local query adapter
*/
Query getQuery(Session session, RemoteQuery remote);
/**
* Factory method for creating a local adapter for a remote query result.
*
* @param session current session
* @param remote remote query result
* @return local query result adapter
*/
QueryResult getQueryResult(Session session, RemoteQueryResult remote);
/**
* Factory method for creating a local adapter for a remote query row.
*
* @param session current session
* @param remote remote query row
* @return local query row adapter
*/
Row getRow(Session session, RemoteRow remote);
/**
* Factory method for creating a local adapter for a remote node iterator.
*
* @param session current session
* @param remote remote node iterator
* @return local node iterator adapter
*/
NodeIterator getNodeIterator(Session session, RemoteIterator remote);
/**
* Factory method for creating a local adapter for a remote property iterator.
*
* @param session current session
* @param remote remote property iterator
* @return local property iterator adapter
*/
PropertyIterator getPropertyIterator(Session session, RemoteIterator remote);
/**
* Factory method for creating a local adapter for a remote version iterator.
*
* @param session current session
* @param remote remote version iterator
* @return local version iterator adapter
*/
VersionIterator getVersionIterator(Session session, RemoteIterator remote);
/**
* Factory method for creating a local adapter for a remote
* node type iterator.
*
* @param remote remote node type iterator
* @return local node type iterator adapter
*/
NodeTypeIterator getNodeTypeIterator(RemoteIterator remote);
/**
* Factory method for creating a local adapter for a remote row iterator.
*
* @param session current session
* @param remote remote row iterator
* @return local row iterator adapter
*/
RowIterator getRowIterator(Session session, RemoteIterator remote);
LockManager getLockManager(Session session, RemoteLockManager lockManager);
VersionManager getVersionManager(
Session session, RemoteVersionManager versionManager);
/**
* Factory method for creating a local adapter for a remote access control
* manager
*
* @param remote remote access control manager
* @return local access control manager
*/
AccessControlManager getAccessControlManager(
RemoteAccessControlManager remote);
/**
* Factory method for creating a local adapter for a remote access control
* policy
*
* @param remote remote access control policy
* @return local access control policy
*/
AccessControlPolicy getAccessControlPolicy(RemoteAccessControlPolicy remote);
/**
* Factory method for creating an array of local adapter for an array of
* remote access control policies
*
* @param remote array of remote access control policies
* @return array of local access control policies
*/
AccessControlPolicy[] getAccessControlPolicy(
RemoteAccessControlPolicy[] remote);
/**
* Factory method for creating a local adapter for a remote access control
* policy iterator
*
* @param remote access control policy iterator
* @return local access control policy iterator
*/
AccessControlPolicyIterator getAccessControlPolicyIterator(
RemoteIterator remote);
/**
* Factory method for creating a local adapter for a remote access control
* entry
*
* @param remote remote access control entry
* @return local access control entry
*/
AccessControlEntry getAccessControlEntry(RemoteAccessControlEntry remote);
/**
* Factory method for creating an array of local adapter for an array of
* remote access control entry
*
* @param remote array of remote access control entry
* @return local array of access control entry
*/
AccessControlEntry[] getAccessControlEntry(RemoteAccessControlEntry[] remote);
/**
* Factory method for creating a local adapter for a remote principal.
*
* If remote
is a
* {@link org.apache.jackrabbit.rmi.remote.security.RemoteGroup} the
* prinicipal returned implements the java.security.acl.Group
* interface.
*
* @param remote principal
* @return local principal
*/
Principal getPrincipal(RemotePrincipal remote);
/**
* Factory method for creating a local adapter for a remote principal
* iterator.
*
* Each entry in the remote
iterator which is a
* {@link org.apache.jackrabbit.rmi.remote.security.RemoteGroup} will be
* provided as a principal implementing the
* java.security.acl.Group
interface.
*
* @param remote remote principal iterator
* @return local principal iterator
*/
Iterator getPrincipalIterator(RemoteIterator remote);
/**
* Factory method for creating a local adapter for a remote privilege
*
* @param remote remote privilege
* @return local privilege
*/
Privilege getPrivilege(RemotePrivilege remote);
/**
* Factory method for creating an array of local adapter for an array of
* remote privilege
*
* @param remote array of remote privilege
* @return array of local privilege
*/
Privilege[] getPrivilege(RemotePrivilege[] remote);
}