blob: 90bab825eaad33d37c895f4d936872f538d753a2 [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed 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.tomcat.util.buf;
import java.io.Serializable;
// XXX Shouldn't be here - has nothing to do with buffers.
/**
* Main tool for object expiry.
* Marks creation and access time of an "expirable" object,
* and extra properties like "id", "valid", etc.
*
* Used for objects that expire - originally Sessions, but
* also Contexts, Servlets, cache - or any other object that
* expires.
*
* @author Costin Manolache
*/
public final class TimeStamp implements Serializable {
private long creationTime = 0L;
private long lastAccessedTime = creationTime;
private long thisAccessedTime = creationTime;
private boolean isNew = true;
private long maxInactiveInterval = -1;
private boolean isValid = false;
MessageBytes name;
int id=-1;
Object parent;
public TimeStamp() {
}
// -------------------- Active methods --------------------
/**
* Access notification. This method takes a time parameter in order
* to allow callers to efficiently manage expensive calls to
* System.currentTimeMillis()
*/
public void touch(long time) {
this.lastAccessedTime = this.thisAccessedTime;
this.thisAccessedTime = time;
this.isNew=false;
}
// -------------------- Property access --------------------
/** Return the "name" of the timestamp. This can be used
* to associate unique identifier with each timestamped object.
* The name is a MessageBytes - i.e. a modifiable byte[] or char[].
*/
public MessageBytes getName() {
if( name==null ) name=MessageBytes.newInstance();//lazy
return name;
}
/** Each object can have an unique id, similar with name but
* providing faster access ( array vs. hashtable lookup )
*/
public int getId() {
return id;
}
public void setId( int id ) {
this.id=id;
}
/** Returns the owner of this stamp ( the object that is
* time-stamped ).
* For a
*/
public void setParent( Object o ) {
parent=o;
}
public Object getParent() {
return parent;
}
public void setCreationTime(long time) {
this.creationTime = time;
this.lastAccessedTime = time;
this.thisAccessedTime = time;
}
public long getLastAccessedTime() {
return lastAccessedTime;
}
public long getThisAccessedTime() {
return thisAccessedTime;
}
/** Inactive interval in millis - the time is computed
* in millis, convert to secs in the upper layer
*/
public long getMaxInactiveInterval() {
return maxInactiveInterval;
}
public void setMaxInactiveInterval(long interval) {
maxInactiveInterval = interval;
}
public boolean isValid() {
return isValid;
}
public void setValid(boolean isValid) {
this.isValid = isValid;
}
public boolean isNew() {
return isNew;
}
public void setNew(boolean isNew) {
this.isNew = isNew;
}
public long getCreationTime() {
return creationTime;
}
// -------------------- Maintainance --------------------
public void recycle() {
creationTime = 0L;
lastAccessedTime = 0L;
maxInactiveInterval = -1;
isNew = true;
isValid = false;
id=-1;
if( name!=null) name.recycle();
}
}