Table of Contents
Profiles
Profiles represent the user identity in the framework. They are highly extensible and besides a number of mandatory fields, flockrs can add as many custom fields as they like. For example, users could add a field with their year of graduation and use it to create a flock of nearby flockrs which graduated the same year. Furthermore, the framework provides some infrastructure that makes it easy to add new custom data types without having to write too much boiler plate code.
When a Flockr modifies his Profile, a change event is propagated to the remote interfaces of all other Flockrs. In reaction to these events, all connected Flockrs propagate these events to the interested Flocks.
Each Flockr keeps a cached Profile of the other Flockrs such that the Profile can be consulted offline. When a Flockr is connected for which there is a cached Profile, he should propagate the necessary changed events to make sure that both the cached Profile and the Flocks of the other Flockrs are updated.
Profile Fields
A Profile is a property object containing a number of named fields. Each field also has a Field Type. This Field Type is used to generate the appropriate user interface component (e.g. a text input field for text, a combobox for enumerations…) and to limit the possible values that can be assigned to the field. It is also used to specify which comparator operations are allowed on the field of this type.
Field Types
Field Types are represented as Field Type objects. These objects have the following API:
- isString()
- isEnumeration()
- isInteger()
- isDate()
- isPossibleValue(aValue): checks if aValue is a possible value for this type.
- getPossibleValues(): returns the possible values for this type.
- name()
- defaultValue()
- fieldSize(): can be specified for some field types for displaying purposes on a GUI.
- comparators(): get the list of comparison operators defined on this type.
Some of these methods should be overridden when a custom type is added.
The following Field Types are built in:
- StringFieldType: for text.
- EnumerationFieldType: for a list of possible symbols.
- IntegerTypeField: for integers. For integers, a range can be specified.
- DateTypeField: for dates. For dates, a range can be specified.
Mandatory Fields
Each profile has the following mandatory fields:
- username
- firstname
- lastname
- birthdate
- sex
API
- getFieldType(fieldName)
- checkFieldTypeForValue
- addFieldTypeMapping(field, typeObject)
- removeFieldTypeMapping(field)
- makeStringFieldTypeObject()
- makeEnumerationFieldTypeObject(possibleValues)
- makeIntegerTypeFieldObject(low, high)
- makeDateTypeFieldObject(low, high)
- isMandatoryField(propName)
- addField(propName, propVal, propType)
- removeField(propName)
- setField(propName, propVal)
- fieldMatches(field, value)
Implementation
Properties of Profiles are represented as slots in the profile objects. Each Profile object has a parent object that contains the common behavior and mandatory fields for each profile. Since profiles are frequently copied over the network, they are isolate objects.