/**
* Licensed to Apereo under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. Apereo
* 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 the
* following location:
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>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.apereo.portal.concurrency.locking;
import java.util.Date;
import org.apereo.portal.concurrency.IEntityLock;
import org.apereo.portal.concurrency.LockingException;
/**
* Interface for finding and maintaining <code>IEntityLocks</code>.
*
*/
public interface IEntityLockStore {
/**
* Adds this IEntityLock to the store.
*
* @param lock org.apereo.portal.concurrency.locking.IEntityLock
*/
public void add(IEntityLock lock) throws LockingException;
/**
* Deletes this IEntityLock from the store.
*
* @param lock org.apereo.portal.concurrency.locking.IEntityLock
*/
public void delete(IEntityLock lock) throws LockingException;
/** Delete all IEntityLocks from the store. */
public void deleteAll() throws LockingException;
/**
* Deletes the expired IEntityLocks from the underlying store.
*
* @param expiration java.util.Date
*/
public void deleteExpired(Date expiration) throws LockingException;
/**
* Returns an IEntityLock[] based on the params, any or all of which may be null. A null param
* means any value, so <code>find(myType,myKey,null,null,null)</code> will return all <code>
* IEntityLocks</code> for myType and myKey.
*
* @return org.apereo.portal.groups.IEntityLock[]
* @param entityType Class
* @param entityKey String
* @param lockType Integer - so we can accept a null value.
* @param expiration Date
* @param lockOwner String
* @exception LockingException - wraps an Exception specific to the store.
*/
public IEntityLock[] find(
Class entityType, String entityKey, Integer lockType, Date expiration, String lockOwner)
throws LockingException;
/**
* Returns an IEntityLock[] containing unexpired locks, based on the params, any or all of which
* may be null EXCEPT FOR <code>expiration</code>. A null param means any value, so <code>
* find(expir,myType,myKey,null,null)</code> will return all <code>IEntityLocks</code> for
* myType and myKey unexpired as of <code>expiration</code>.
*
* @param expiration Date
* @param entityType Class
* @param entityKey String
* @param lockType Integer - so we can accept a null value.
* @param lockOwner String
* @exception LockingException - wraps an Exception specific to the store.
*/
public IEntityLock[] findUnexpired(
Date expiration, Class entityType, String entityKey, Integer lockType, String lockOwner)
throws LockingException;
/**
* Updates the lock's <code>expiration</code> in the underlying store.
*
* @param lock org.apereo.portal.concurrency.locking.IEntityLock
* @param newExpiration java.util.Date
*/
public void update(IEntityLock lock, Date newExpiration) throws LockingException;
/**
* Updates the lock's <code>expiration</code> and <code>lockType</code> in the underlying store.
* Param <code>lockType</code> may be null.
*
* @param lock org.apereo.portal.concurrency.locking.IEntityLock
* @param newExpiration java.util.Date
* @param newLockType Integer
*/
public void update(IEntityLock lock, Date newExpiration, Integer newLockType)
throws LockingException;
}