/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2008-2014, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.data;
import java.util.concurrent.TimeUnit;
/**
* Used in conjuction with {@link FeatureLocking} to lock features during a
* transaction. This class is responsible for supplying a unique Authorization
* ID and expiry period.
* <p>
* A FeatureLock representing the current transaction has been provided as a
* static constant: {@link #TRANSACTION}.
* <p>
* Lock duration is measured in milliseconds, although you shoudl take into
* account the abilities of different databases and servers. WFS 1.1 measures
* lock expiry time in minuets, WFS 2.0 measures lick expiry time in seconds..
*
* @author Jody Garnett, Refractions Research, Inc.
*
* @source $URL$
* @version $Id$
*
* @see <a
* href="http://vwfs.refractions.net/docs/Database_Research.pdf">Database
* Reseach</a>
* @see <a
* href="http://vwfs.refractions.net/docs/Transactional_WFS_Design.pdf">Transactional
* WFS Design</a>
* @see <a
* href="http://vwfs.refractions.net/docs/Design_Implications.pdf">Design
* Implications</a>
* @see FeatureLockFactory
*/
public class FeatureLock {
/** Lock requested for the duration of the Transaction (until next commit or revert). */
public static final FeatureLock TRANSACTION = new CurrentTransactionLock();
protected String authorization;
protected long duration;
/**
* Creates a new lock.
*
* @param authorization LockId used to authorize the transaction
* @param duration expiry period of this lock (in milliseconds)
*/
public FeatureLock(String authorization, long duration ){
this.authorization = authorization;
this.duration = duration;
}
/**
* Creates a new lock.
*
* @param authorization LockId used to authorize the transaction
* @param duration Expiry period
* @param unit Time unit for expiry period
*/
public FeatureLock(String authorization, long duration, TimeUnit unit) {
this(authorization, TimeUnit.MILLISECONDS.convert(duration, unit));
}
/**
* Gets the ID used for transaction authorization.
*
* @return the authorization ID
*/
public String getAuthorization(){
return authorization;
}
/**
* The expiry time for this lock (in milliseconds).
*
* @return expiry period in milliseconds
*/
public long getDuration(){
return duration;
}
}