001: /*
002: JSPWiki - a JSP-based WikiWiki clone.
003:
004: Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
005:
006: This program is free software; you can redistribute it and/or modify
007: it under the terms of the GNU Lesser General Public License as published by
008: the Free Software Foundation; either version 2.1 of the License, or
009: (at your option) any later version.
010:
011: This program is distributed in the hope that it will be useful,
012: but WITHOUT ANY WARRANTY; without even the implied warranty of
013: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: GNU Lesser General Public License for more details.
015:
016: You should have received a copy of the GNU Lesser General Public License
017: along with this program; if not, write to the Free Software
018: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: */
020: package com.ecyrd.jspwiki;
021:
022: import java.io.Serializable;
023: import java.util.Date;
024:
025: /**
026: * Describes a lock acquired by an user on a page. For the most part,
027: * the regular developer does not have to instantiate this class.
028: * <p>
029: * The PageLock keeps no reference to a WikiPage because otherwise it could
030: * keep a reference to a page for a long time.
031: *
032: * @author Janne Jalkanen
033: *
034: */
035: public class PageLock implements Serializable {
036: private static final long serialVersionUID = 0L;
037:
038: private String m_page;
039: private String m_locker;
040: private Date m_lockAcquired;
041: private Date m_lockExpiry;
042:
043: /**
044: * Creates a new PageLock. The lock is not attached to any objects at this point.
045: *
046: * @param page WikiPage which is locked.
047: * @param locker The username who locked this page (for display purposes).
048: * @param acquired The timestamp when the lock is acquired
049: * @param expiry The timestamp when the lock expires.
050: */
051: public PageLock(WikiPage page, String locker, Date acquired,
052: Date expiry) {
053: m_page = page.getName();
054: m_locker = locker;
055: m_lockAcquired = (Date) acquired.clone();
056: m_lockExpiry = (Date) expiry.clone();
057: }
058:
059: /**
060: * Returns the name of the page which is locked.
061: *
062: * @return The name of the page.
063: */
064: public String getPage() {
065: return m_page;
066: }
067:
068: /**
069: * Returns the locker name.
070: *
071: * @return The name of the locker.
072: */
073: public String getLocker() {
074: return m_locker;
075: }
076:
077: /**
078: * Returns the timestamp on which this lock was acquired.
079: *
080: * @return The acquisition time.
081: */
082: public Date getAcquisitionTime() {
083: return m_lockAcquired;
084: }
085:
086: /**
087: * Returns the timestamp on which this lock will expire.
088: *
089: * @return The expiry date.
090: */
091: public Date getExpiryTime() {
092: return m_lockExpiry;
093: }
094:
095: /**
096: * Returns the amount of time left in minutes, rounded up to the nearest
097: * minute (so you get a zero only at the last minute).
098: *
099: * @return Time left in minutes.
100: */
101: public long getTimeLeft() {
102: long time = m_lockExpiry.getTime() - new Date().getTime();
103:
104: return (time / (1000L * 60)) + 1;
105: }
106:
107: // FIXME: Should really have a isExpired() method as well.
108: }
|