001/* 002 Licensed to the Apache Software Foundation (ASF) under one 003 or more contributor license agreements. See the NOTICE file 004 distributed with this work for additional information 005 regarding copyright ownership. The ASF licenses this file 006 to you under the Apache License, Version 2.0 (the 007 "License"); you may not use this file except in compliance 008 with the License. You may obtain a copy of the License at 009 010 http://www.apache.org/licenses/LICENSE-2.0 011 012 Unless required by applicable law or agreed to in writing, 013 software distributed under the License is distributed on an 014 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 KIND, either express or implied. See the License for the 016 specific language governing permissions and limitations 017 under the License. 018 */ 019package org.apache.wiki.pages; 020 021import org.apache.wiki.api.core.Page; 022 023import java.io.Serializable; 024import java.util.Date; 025 026 027/** 028 * Describes a lock acquired by an user on a page. For the most part, the regular developer does not have to instantiate this class. 029 * <p> 030 * The PageLock keeps no reference to a WikiPage because otherwise it could keep a reference to a page for a long time. 031 */ 032public class PageLock implements Serializable { 033 034 private static final long serialVersionUID = 0L; 035 036 private final String m_page; 037 private final String m_locker; 038 private final Date m_lockAcquired; 039 private final Date m_lockExpiry; 040 041 /** 042 * Creates a new PageLock. The lock is not attached to any objects at this point. 043 * 044 * @param page WikiPage which is locked. 045 * @param locker The username who locked this page (for display purposes). 046 * @param acquired The timestamp when the lock is acquired 047 * @param expiry The timestamp when the lock expires. 048 */ 049 public PageLock( final Page page, final String locker, final Date acquired, final Date expiry ) { 050 m_page = page.getName(); 051 m_locker = locker; 052 m_lockAcquired = ( Date )acquired.clone(); 053 m_lockExpiry = ( Date )expiry.clone(); 054 } 055 056 /** 057 * Returns the name of the page which is locked. 058 * 059 * @return The name of the page. 060 */ 061 public String getPage() { 062 return m_page; 063 } 064 065 /** 066 * Returns the locker name. 067 * 068 * @return The name of the locker. 069 */ 070 public String getLocker() { 071 return m_locker; 072 } 073 074 /** 075 * Returns the timestamp on which this lock was acquired. 076 * 077 * @return The acquisition time. 078 */ 079 public Date getAcquisitionTime() { 080 return m_lockAcquired; 081 } 082 083 /** 084 * Returns the timestamp on which this lock will expire. 085 * 086 * @return The expiry date. 087 */ 088 public Date getExpiryTime() { 089 return m_lockExpiry; 090 } 091 092 /** 093 * Returns the amount of time left in minutes, rounded up to the nearest minute (so you get a zero only at the last minute). 094 * 095 * @return Time left in minutes. 096 */ 097 public long getTimeLeft() { 098 final long time = m_lockExpiry.getTime() - new Date().getTime(); 099 return ( time / ( 1000L * 60 ) ) + 1; 100 } 101 102 public boolean isExpired() { 103 final Date now = new Date(); 104 return now.after( getExpiryTime() ); 105 } 106 107}