/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
**
** $Id$
**
** Class History
**
** Date Name Description
** ---------|------------|-----------------------------------------------
** 06Nov98 subtle created
**
*/
package key;
import java.lang.reflect.*;
/**
* All these classes need to remain immutable after their construction for
* security reasons (they can be retrieved by public methods).
*/
public abstract class AtomicSpecial
{
/**
* This method is called to determine if this special may
* be used with the supplied atomic element. It is generally
* used to ensure correct typing.
*
* @return true iff this special is valid with the specific atomic element
*/
public abstract boolean canUseWith( AtomicElement ae );
/**
* This method is used to determine if the new value may be
* assigned to this property. The method should throw
* a suitable exception if the new value is not acceptable,
* or return the value (or a replacement) if it is.
*
* @param newValue the new value (may be null)
*/
public abstract Object validateNewValue( Object newValue );
/**
* Returns a 'special' object suitable for passing to construct that
* limits the length of text paragraphs that are put into this element.
* <BR>
* This is a unique and custom form of access control to this particular
* property that is only enforced when a set() is issued.
*
* @param byteLimit the maximum number of bytes that may be in the buffer
* @param lineLimit the maximum number of lines that may be in the buffer
*/
public static AtomicSpecial TextParagraphLengthLimit( int byteLimit, int lineLimit )
{
return( new TextParagraphLengthWrapper( byteLimit, lineLimit ) );
}
/**
* Returns a 'special' object suitable for passing to construct that
* limits the length of strings that are put into this element.
* <BR>
* This is a unique and custom form of access control to this particular
* property that is only enforced when a set() is issued.
*
* @param byteLimit the maximum length of the string
* @param mayHaveLineBreaks true iff this string may contain CR's
* @param visible use the visible length of the string?
*/
public static AtomicSpecial StringLengthLimit( int byteLimit, boolean mayHaveLineBreaks, boolean visible )
{
return( new StringLengthWrapper( byteLimit, mayHaveLineBreaks, visible ) );
}
}