// Topic - a conferencing topic // // Copyright (C) 1996 by Jef Poskanzer . All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF // SUCH DAMAGE. // // Visit the ACME Labs Java page for up-to-date versions of this and other // fine Java utilities: http://www.acme.com/java/ package Acme.Conf; import java.util.*; /// A conferencing topic. //

// Topics are contained in conferences, and contain responses. // Each topic has a title, and flags saying whether it's retired or frozen. //

// This is an abstract class with separate implementations on the // client and server sides, mirrored via RPC. //

// Fetch the software.
// Fetch the entire Acme package. //

// @see Conference // @see Response public abstract class Topic { /// The date this topic was created. public abstract long getDate(); /// The user who created this topic public abstract User getCreator(); /// The topic's title. public abstract String getTitle(); /// The last response number. Response numbers always start at // zero and there are no gaps. public abstract int getLastResponseNumber(); /// Get a response by number. public abstract Response getResponse( int n ); /// Whether the topic is retired. // Retired topics are generally not shown. public abstract boolean isRetired(); /// Whether the topic is frozen. // Frozen topics may not have new responses added. public abstract boolean isFrozen(); /// Retire this topic. //

// Only a host or the topic creator may do this. public abstract void retire( Session session ); /// Unretire this topic. //

// Only a host or the topic creator may do this. public abstract void unretire( Session session ); /// Freeze this topic. //

// Only a host or the topic creator may do this. public abstract void freeze( Session session ); /// Unfreeze this topic. //

// Only a host or the topic creator may do this. public abstract void unfreeze( Session session ); /// Add a new response to the topic. // If the pseud is null then the user's real name is used. //

// Note that there is no method for linking an existing response. // Unlike topics, which can be in multiple conferences, responses // can be in only one topic. public abstract int addResponse( Session session, String pseud, String text ); }