# Properties classes

# The org.apache.fop.fo.properties classes

## Introduction

In respect of their fields and data structures, the <property> classes have a virtual instantiation in the arrays of the singleton `PropertyConsts` object, created during the static initialization of the class. The methods of these classes are accessed through an array of singelton instances of the individual <property> classes, which is maintained in PropertyConsts.

these classes are intended to remain as repositories of static data and methods. The name of each property is entered in the `PropNames.propertyNames` array of `String`s, and each has a unique integer constant defined, corresponding to the offset of the property name in that array.

### Fields common to all classes

`final int dataTypes`
  This field defines the allowable data types which may be assigned to the property. The value is chosen from the data type constants defined in `Properties`, and may consist of more than one of those constants, bit-ORed together.
`final int traitMapping`
  This field defines the mapping of properties to traits in the `Area tree`. The value is chosen from the trait mapping constants defined in `Properties`, and may consist of more than one of those constants, bit-ORed together.
`final int initialValueType`
  This field defines the data type of the initial value assigned to the property. The value is chosen from the initial value type constants defined in `Properties`.
`final int inherited`
  This field defines the kind of inheritance applicable to the property. The value is chosen from the inheritance constants defined in `Properties`.

### Datatype dependent fields

Enumeration types
  `final String[] enums`
  This array contains the `NCName` text values of the enumeration. In the current implementation, it always contains a null value at `enum[0]`.
  `final String[] enumValues`
  When the number of enumeration values is small, `enumValues` is a reference to the `enums` array.
  `final HashMap enumValues`
  When the number of enumeration values is larger, `enumValues` is a `HashMap` statically initialized to contain the integer constant values corresponding to each text value, indexed by the text value.
  `final int` `enumeration-constants`
  A unique integer constant is defined for each of the possible enumeration values.
Many types: `final` datatype `initialValue`
  When the initial datatype does not have an implicit initial value (as, for example, does type `AUTO`) the initial value for the property is assigned to this field. The type of this field will vary according to the `initialValueType` field.
AUTO: `PropertyValueList auto(property, list)>`
  When AUTO is a legal value type, the `auto()` method must be defined in the property class.
  NOT YET IMPLEMENTED.
COMPLEX: `PropertyValueList complex(property, list)>`
  COMPLEX is specified as a value type when complex conditions apply to the selection of a value type, or when lists of values are acceptable. To process and validate such a property value assignment, the `complex()` method must be defined in the property class.

## Nested property pseudo-classes

The property pseudo-classes are classes, like `ColorCommon` which contain values, particularly enums, which are common to a number of actual properties.

Previous: property classes overview.