package com.perforce.api; import java.io.*; import java.util.*; /* * Copyright (c) 2001, Perforce Software, All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** * An abstract base class for all source control objects. * * @author <a href="mailto:david@markley.cc">David Markley</a> * @version $Date: 2002/01/15 $ $Revision: #2 $ */ public abstract class SourceControlObject implements Cacheable { private long update_time = 0; private long sync_time = 0; private Env environ; /** Default, no-argument constructor. */ public SourceControlObject() { update_time = 0; sync_time = 0; } /** * Constructor that takes an environment for this object to use. * * @param env * source control environement to use. */ public SourceControlObject(Env env) { this(); setEnv(env); } /** * Sets the P4 environment to be used when working with this object. This * environment is required to store, sync, or otherwise work with the P4 * depot. It is passed to the P4Process used in each of these transactions. * * @see Env * @see P4Process * @param env * user environment to use. */ public void setEnv(Env env) { this.environ = env; } /** * Returns the P4 environment associated with this instance. * * @return P4 environment. */ public Env getEnv() { return this.environ; } /** Returns the time, in milliseconds, for this object's last update. */ public synchronized long getUpdateTime() { return update_time; } /** Sets the update time for this object to the current time. */ public synchronized void refreshUpdateTime() { update_time = (new Date()).getTime(); } /** Returns the time, in milliseconds, that this object was synchronized. */ public synchronized long getSyncTime() { return sync_time; } /** * Tests this object to see if it is out of sync. Checks to see if the * expiration time is within the specified number of milliseconds. * * @param threshold * Number of milliseconds. * @return True if the object will be out of sync within the threshold. */ public synchronized boolean outOfSync(long threshold) { return (threshold < ((new Date()).getTime() - sync_time)); } /** Invalidates this object. */ public synchronized void invalidate() { sync_time = 0; } /** Marks this object as being in in sync or valid. */ public synchronized void inSync() { sync_time = (new Date()).getTime(); } /** Removes any cached objects. */ public void clearCache() { getCache().clear(); } /** Returns the HashDecay instance for this class */ public abstract HashDecay getCache(); /** * Stores this object back into Perforce, creating it if it didn't already * exist. */ public abstract void commit() throws CommitException; /** * Brings this object back into sync with Perforce. This also sets the sets * the update and sync time for this object. */ public abstract void sync() throws PerforceException; /** * Returns a string containing the object in XML form. */ public abstract String toXML(); }