Search in sources :

Example 1 with UpdatableItemStateManager

use of org.apache.jackrabbit.core.state.UpdatableItemStateManager in project jackrabbit by apache.

the class LockManagerImpl method removeLockProperties.

/**
     *
     * @param node
     * @throws RepositoryException
     */
protected void removeLockProperties(NodeImpl node) throws RepositoryException {
    boolean success = false;
    SessionImpl editingSession = (SessionImpl) node.getSession();
    WorkspaceImpl wsp = (WorkspaceImpl) editingSession.getWorkspace();
    UpdatableItemStateManager stateMgr = wsp.getItemStateManager();
    try {
        acquireLockPropertiesLock();
        // add properties to content
        if (stateMgr.inEditMode()) {
            throw new RepositoryException("Unable to remove lock properties.");
        }
        stateMgr.edit();
        try {
            NodeId nodeId = node.getNodeId();
            NodeState nodeState = (NodeState) stateMgr.getItemState(nodeId);
            if (nodeState.hasPropertyName(NameConstants.JCR_LOCKOWNER)) {
                PropertyState propState = (PropertyState) stateMgr.getItemState(new PropertyId(nodeId, NameConstants.JCR_LOCKOWNER));
                nodeState.removePropertyName(NameConstants.JCR_LOCKOWNER);
                stateMgr.destroy(propState);
                stateMgr.store(nodeState);
            }
            if (nodeState.hasPropertyName(NameConstants.JCR_LOCKISDEEP)) {
                PropertyState propState = (PropertyState) stateMgr.getItemState(new PropertyId(nodeId, NameConstants.JCR_LOCKISDEEP));
                nodeState.removePropertyName(NameConstants.JCR_LOCKISDEEP);
                stateMgr.destroy(propState);
                stateMgr.store(nodeState);
            }
            stateMgr.update();
            success = true;
        } catch (ItemStateException e) {
            throw new RepositoryException("Error while removing lock.", e);
        } finally {
            if (!success) {
                // failed to set lock meta-data content, cleanup
                stateMgr.cancel();
            }
        }
    } finally {
        releaseLockPropertiesLock();
    }
}
Also used : UpdatableItemStateManager(org.apache.jackrabbit.core.state.UpdatableItemStateManager) WorkspaceImpl(org.apache.jackrabbit.core.WorkspaceImpl) NodeState(org.apache.jackrabbit.core.state.NodeState) NodeId(org.apache.jackrabbit.core.id.NodeId) RepositoryException(javax.jcr.RepositoryException) SessionImpl(org.apache.jackrabbit.core.SessionImpl) PropertyState(org.apache.jackrabbit.core.state.PropertyState) PropertyId(org.apache.jackrabbit.core.id.PropertyId) ItemStateException(org.apache.jackrabbit.core.state.ItemStateException)

Example 2 with UpdatableItemStateManager

use of org.apache.jackrabbit.core.state.UpdatableItemStateManager in project jackrabbit by apache.

the class LockManagerImpl method writeLockProperties.

/**
     * Add the lock related properties to the target node.
     *
     * @param node
     * @param lockOwner
     * @param isDeep
     */
protected void writeLockProperties(NodeImpl node, String lockOwner, boolean isDeep) throws RepositoryException {
    boolean success = false;
    SessionImpl editingSession = (SessionImpl) node.getSession();
    WorkspaceImpl wsp = (WorkspaceImpl) editingSession.getWorkspace();
    UpdatableItemStateManager stateMgr = wsp.getItemStateManager();
    try {
        acquireLockPropertiesLock();
        if (stateMgr.inEditMode()) {
            throw new RepositoryException("Unable to write lock properties.");
        }
        stateMgr.edit();
        try {
            // add properties to content
            NodeId nodeId = node.getNodeId();
            NodeState nodeState = (NodeState) stateMgr.getItemState(nodeId);
            PropertyState propState;
            if (!nodeState.hasPropertyName(NameConstants.JCR_LOCKOWNER)) {
                propState = stateMgr.createNew(NameConstants.JCR_LOCKOWNER, nodeId);
                propState.setType(PropertyType.STRING);
                propState.setMultiValued(false);
            } else {
                propState = (PropertyState) stateMgr.getItemState(new PropertyId(nodeId, NameConstants.JCR_LOCKOWNER));
            }
            propState.setValues(new InternalValue[] { InternalValue.create(lockOwner) });
            nodeState.addPropertyName(NameConstants.JCR_LOCKOWNER);
            stateMgr.store(nodeState);
            if (!nodeState.hasPropertyName(NameConstants.JCR_LOCKISDEEP)) {
                propState = stateMgr.createNew(NameConstants.JCR_LOCKISDEEP, nodeId);
                propState.setType(PropertyType.BOOLEAN);
                propState.setMultiValued(false);
            } else {
                propState = (PropertyState) stateMgr.getItemState(new PropertyId(nodeId, NameConstants.JCR_LOCKISDEEP));
            }
            propState.setValues(new InternalValue[] { InternalValue.create(isDeep) });
            nodeState.addPropertyName(NameConstants.JCR_LOCKISDEEP);
            stateMgr.store(nodeState);
            stateMgr.update();
            success = true;
        } catch (ItemStateException e) {
            throw new RepositoryException("Error while creating lock.", e);
        } finally {
            if (!success) {
                // failed to set lock meta-data content, cleanup
                stateMgr.cancel();
                try {
                    unlock(node);
                } catch (RepositoryException e) {
                    // cleanup failed
                    log.error("error while cleaning up after failed lock attempt", e);
                }
            }
        }
    } finally {
        releaseLockPropertiesLock();
    }
}
Also used : UpdatableItemStateManager(org.apache.jackrabbit.core.state.UpdatableItemStateManager) WorkspaceImpl(org.apache.jackrabbit.core.WorkspaceImpl) NodeState(org.apache.jackrabbit.core.state.NodeState) NodeId(org.apache.jackrabbit.core.id.NodeId) RepositoryException(javax.jcr.RepositoryException) SessionImpl(org.apache.jackrabbit.core.SessionImpl) PropertyState(org.apache.jackrabbit.core.state.PropertyState) PropertyId(org.apache.jackrabbit.core.id.PropertyId) ItemStateException(org.apache.jackrabbit.core.state.ItemStateException)

Aggregations

RepositoryException (javax.jcr.RepositoryException)2 SessionImpl (org.apache.jackrabbit.core.SessionImpl)2 WorkspaceImpl (org.apache.jackrabbit.core.WorkspaceImpl)2 NodeId (org.apache.jackrabbit.core.id.NodeId)2 PropertyId (org.apache.jackrabbit.core.id.PropertyId)2 ItemStateException (org.apache.jackrabbit.core.state.ItemStateException)2 NodeState (org.apache.jackrabbit.core.state.NodeState)2 PropertyState (org.apache.jackrabbit.core.state.PropertyState)2 UpdatableItemStateManager (org.apache.jackrabbit.core.state.UpdatableItemStateManager)2