/**
* Licensed 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.brixcms.jcr.api.wrapper;
import org.brixcms.jcr.api.JcrItem;
import org.brixcms.jcr.api.JcrNode;
import org.brixcms.jcr.api.JcrProperty;
import org.brixcms.jcr.api.JcrSession;
import org.brixcms.jcr.api.JcrValueFactory;
import org.brixcms.jcr.api.JcrWorkspace;
import org.brixcms.jcr.base.BrixSession;
import org.brixcms.jcr.base.action.AbstractActionHandler;
import org.brixcms.jcr.base.event.EventsListener;
import org.brixcms.jcr.base.filter.ValueFilter;
import org.brixcms.jcr.base.wrapper.WrapperAccessor;
import org.xml.sax.ContentHandler;
import javax.jcr.Credentials;
import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.retention.RetentionManager;
import javax.jcr.security.AccessControlManager;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
/**
* @author Matej Knopp
* @author igor.vaynberg
*/
class SessionWrapper extends AbstractWrapper implements JcrSession {
private final Behavior behavior;
private Map<String, JcrNode> uuidMap = new HashMap<String, JcrNode>();
public static JcrSession wrap(Session delegate, Behavior behavior) {
if (delegate == null) {
return null;
} else {
return new SessionWrapper(delegate, behavior);
}
}
protected SessionWrapper(Session delegate, Behavior behavior) {
super(WrapperAccessor.wrap(delegate), null);
this.behavior = behavior;
}
public Behavior getBehavior() {
return behavior;
}
public Map<String, Object> getAttributesMap() {
return getDelegate().getAttributesMap();
}
public void addActionHandler(AbstractActionHandler handler) {
getDelegate().addActionHandler(handler);
}
public void addEventsListener(EventsListener listener) {
getDelegate().addEventsListener(listener);
}
public void setValueFilter(ValueFilter valueFilter) {
getDelegate().setValueFilter(valueFilter);
}
public ValueFilter getValueFilter() {
return getDelegate().getValueFilter();
}
@Override
public BrixSession getDelegate() {
return (BrixSession) super.getDelegate();
}
public void nodeRemoved(JcrNode node) {
// it's not enough to just remove the node from UUID map, we are
// removing the entire subtree
uuidMap.clear();
}
public Repository getRepository() {
return executeCallback(new Callback<Repository>() {
public Repository execute() throws Exception {
return getDelegate().getRepository();
}
});
}
public String getUserID() {
return executeCallback(new Callback<String>() {
public String execute() throws Exception {
return getDelegate().getUserID();
}
});
}
public String[] getAttributeNames() {
return executeCallback(new Callback<String[]>() {
public String[] execute() throws Exception {
return getDelegate().getAttributeNames();
}
});
}
public Object getAttribute(final String name) {
return executeCallback(new Callback<Object>() {
public Object execute() throws Exception {
return getDelegate().getAttribute(name);
}
});
}
public JcrWorkspace getWorkspace() {
return executeCallback(new Callback<JcrWorkspace>() {
public JcrWorkspace execute() throws Exception {
return JcrWorkspace.Wrapper.wrap(getDelegate().getWorkspace(), getJcrSession());
}
});
}
public JcrNode getRootNode() {
return executeCallback(new Callback<JcrNode>() {
public JcrNode execute() throws Exception {
return JcrNode.Wrapper.wrap(getDelegate().getRootNode(), getJcrSession());
}
});
}
public JcrSession impersonate(final Credentials credentials) {
return executeCallback(new Callback<JcrSession>() {
public JcrSession execute() throws Exception {
return JcrSession.Wrapper.wrap(getDelegate().impersonate(credentials),
getBehavior());
}
});
}
/**
* @deprecated
*/
@Deprecated
public JcrNode getNodeByUUID(final String uuid) {
JcrNode result = uuidMap.get(uuid);
if (result == null) {
result = executeCallback(new Callback<JcrNode>() {
public JcrNode execute() throws Exception {
Node node = getDelegate().getNodeByUUID(uuid);
return JcrNode.Wrapper.wrap(node, getJcrSession());
}
});
uuidMap.put(uuid, result);
}
return result;
}
public JcrNode getNodeByIdentifier(final String id) {
JcrNode result = uuidMap.get(id);
if (result == null) {
result = executeCallback(new Callback<JcrNode>() {
public JcrNode execute() throws Exception {
Node node = getDelegate().getNodeByIdentifier(id);
return JcrNode.Wrapper.wrap(node, getJcrSession());
}
});
uuidMap.put(id, result);
}
return result;
}
public JcrItem getItem(final String absPath) {
return executeCallback(new Callback<JcrItem>() {
public JcrItem execute() throws Exception {
return JcrItem.Wrapper.wrap(getDelegate().getItem(absPath), getJcrSession());
}
});
}
public JcrNode getNode(final String absPath) {
return executeCallback(new Callback<JcrNode>() {
public JcrNode execute() throws Exception {
return JcrNode.Wrapper.wrap(getDelegate().getNode(absPath), getJcrSession());
}
});
}
public JcrProperty getProperty(final String absPath) {
return executeCallback(new Callback<JcrProperty>() {
public JcrProperty execute() throws Exception {
return JcrProperty.Wrapper
.wrap(getDelegate().getProperty(absPath), getJcrSession());
}
});
}
public boolean itemExists(final String absPath) {
return executeCallback(new Callback<Boolean>() {
public Boolean execute() throws Exception {
return getDelegate().itemExists(absPath);
}
});
}
public boolean nodeExists(final String absPath) {
return executeCallback(new Callback<Boolean>() {
public Boolean execute() throws Exception {
return getDelegate().nodeExists(absPath);
}
});
}
public boolean propertyExists(final String absPath) {
return executeCallback(new Callback<Boolean>() {
public Boolean execute() throws Exception {
return getDelegate().propertyExists(absPath);
}
});
}
public void move(final String srcAbsPath, final String destAbsPath) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().move(srcAbsPath, destAbsPath);
}
});
}
public void removeItem(final String absPath) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().removeItem(absPath);
}
});
}
public void save() {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().save();
}
});
}
public void refresh(final boolean keepChanges) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().refresh(keepChanges);
}
});
}
public boolean hasPendingChanges() {
return executeCallback(new Callback<Boolean>() {
public Boolean execute() throws Exception {
return getDelegate().hasPendingChanges();
}
});
}
public JcrValueFactory getValueFactory() {
return executeCallback(new Callback<JcrValueFactory>() {
public JcrValueFactory execute() throws Exception {
return JcrValueFactory.Wrapper.wrap(getDelegate().getValueFactory(),
getJcrSession());
}
});
}
public boolean hasPermission(final String absPath, final String actions) {
return executeCallback(new Callback<Boolean>() {
public Boolean execute() throws Exception {
return getDelegate().hasPermission(absPath, actions);
}
});
}
public void checkPermission(final String absPath, final String actions) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().checkPermission(absPath, actions);
}
});
}
public boolean hasCapability(final String methodName, final Object target,
final Object[] arguments) {
return executeCallback(new Callback<Boolean>() {
public Boolean execute() throws Exception {
return getDelegate().hasCapability(methodName, target, arguments);
}
});
}
public ContentHandler getImportContentHandler(final String parentAbsPath, final int uuidBehavior) {
return executeCallback(new Callback<ContentHandler>() {
public ContentHandler execute() throws Exception {
return getDelegate().getImportContentHandler(parentAbsPath, uuidBehavior);
}
});
}
public void importXML(final String parentAbsPath, final InputStream in, final int uuidBehavior) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().importXML(parentAbsPath, in, uuidBehavior);
}
});
}
public void exportSystemView(final String absPath, final ContentHandler contentHandler,
final boolean skipBinary, final boolean noRecurse) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().exportSystemView(absPath, contentHandler, skipBinary, noRecurse);
}
});
}
public void exportSystemView(final String absPath, final OutputStream out,
final boolean skipBinary, final boolean noRecurse) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().exportSystemView(absPath, out, skipBinary, noRecurse);
}
});
}
public void exportDocumentView(final String absPath, final ContentHandler contentHandler,
final boolean skipBinary, final boolean noRecurse) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().exportDocumentView(absPath, contentHandler, skipBinary, noRecurse);
}
});
}
public void exportDocumentView(final String absPath, final OutputStream out,
final boolean skipBinary, final boolean noRecurse) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().exportDocumentView(absPath, out, skipBinary, noRecurse);
}
});
}
public void setNamespacePrefix(final String prefix, final String uri) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().setNamespacePrefix(prefix, uri);
}
});
}
public String[] getNamespacePrefixes() {
return executeCallback(new Callback<String[]>() {
public String[] execute() throws Exception {
return getDelegate().getNamespacePrefixes();
}
});
}
public String getNamespaceURI(final String prefix) {
return executeCallback(new Callback<String>() {
public String execute() throws Exception {
return getDelegate().getNamespaceURI(prefix);
}
});
}
public String getNamespacePrefix(final String uri) {
return executeCallback(new Callback<String>() {
public String execute() throws Exception {
return getDelegate().getNamespacePrefix(uri);
}
});
}
public void logout() {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().logout();
}
});
}
public boolean isLive() {
return executeCallback(new Callback<Boolean>() {
public Boolean execute() throws Exception {
return getDelegate().isLive();
}
});
}
/**
* @deprecated
*/
@Deprecated
public void addLockToken(final String lt) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().addLockToken(lt);
}
});
}
/**
* @deprecated
*/
@Deprecated
public String[] getLockTokens() {
return executeCallback(new Callback<String[]>() {
public String[] execute() throws Exception {
return getDelegate().getLockTokens();
}
});
}
/**
* @deprecated
*/
@Deprecated
public void removeLockToken(final String lt) {
executeCallback(new VoidCallback() {
public void execute() throws Exception {
getDelegate().removeLockToken(lt);
}
});
}
public AccessControlManager getAccessControlManager() {
return executeCallback(new Callback<AccessControlManager>() {
public AccessControlManager execute() throws Exception {
return getDelegate().getAccessControlManager();
}
});
}
public RetentionManager getRetentionManager() {
return executeCallback(new Callback<RetentionManager>() {
public RetentionManager execute() throws Exception {
return getDelegate().getRetentionManager();
}
});
}
@Override
protected JcrSession getJcrSession() {
return this;
}
}