/*
* 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.core.cluster;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.journal.JournalException;
import org.apache.jackrabbit.core.journal.Record;
/**
* Cluster record representing a lock or unlock operation.
*/
public class LockRecord extends ClusterRecord {
/**
* Identifier: LOCK.
*/
static final char IDENTIFIER = 'L';
/**
* Node id.
*/
private NodeId nodeId;
/**
* Flag indicating whether this is a lock or an unlock.
*/
private boolean isLock;
/**
* Flag indicating whether the lock is deep.
*/
private boolean isDeep;
/**
* Lock owner.
*/
private String lockOwner;
/**
* Create a new instance of this class. Used when a lock operation should
* be serialized.
*
* @param nodeId node id
* @param isDeep flag indicating whether the lock is deep
* @param lockOwner the name of the lock owner.
* @param record journal record
* @param workspace workspace
*/
public LockRecord(NodeId nodeId, boolean isDeep, String lockOwner,
Record record, String workspace) {
super(record, workspace);
this.nodeId = nodeId;
this.isLock = true;
this.isDeep = isDeep;
this.lockOwner = lockOwner;
}
/**
* Create a new instance of this class. Used when an unlock operation should
* be serialized.
*
* @param nodeId node id
* @param record journal record
* @param workspace workspace
*/
public LockRecord(NodeId nodeId, Record record, String workspace) {
super(record, workspace);
this.nodeId = nodeId;
this.isLock = false;
}
/**
* Create a new instance of this class. Used when a deserializing either a
* lock or an unlock operation.
*
* @param record journal record
* @param workspace workspace
*/
LockRecord(Record record, String workspace) {
super(record, workspace);
}
/**
* {@inheritDoc}
*/
@Override
protected void doRead() throws JournalException {
nodeId = record.readNodeId();
isLock = record.readBoolean();
if (isLock) {
isDeep = record.readBoolean();
lockOwner = record.readString();
}
}
/**
* {@inheritDoc}
*/
@Override
protected void doWrite() throws JournalException {
record.writeChar(IDENTIFIER);
record.writeNodeId(nodeId);
record.writeBoolean(isLock);
if (isLock) {
record.writeBoolean(isDeep);
record.writeString(lockOwner);
}
}
/**
* {@inheritDoc}
*/
@Override
public void process(ClusterRecordProcessor processor) {
processor.process(this);
}
/**
* Return the node id.
*
* @return node id
*/
public NodeId getNodeId() {
return nodeId;
}
/**
* Return a flag indicating whether this is a lock or an unlock operation.
*
* @return <code>true</code> if this is a lock operation;
* <code>false</code> if this is an unlock operation
*/
public boolean isLock() {
return isLock;
}
/**
* Return a flag indicating whether the lock is deep.
*
* @return <code>true</code> if the lock is deep;
* <code>false</code> otherwise
*/
public boolean isDeep() {
return isDeep;
}
/**
* Return the user id associated with the lock operation.
*
* @return user id
* @deprecated User {@link #getOwner()} instead.
*/
public String getUserId() {
return lockOwner;
}
/**
* Return the lock owner associated with the lock operation.
*
* @return lock owner associated with the lock operation.
*/
public String getOwner() {
return lockOwner;
}
}