|
|
Project Description |
|
Collaborative Tool
The purpose of the
collaborative development tool is to enable a team to collectively edit a set
of documents and to capture any ensuing discussion.
The tool revolves around
the concept of a project. A project is a
collection of documents and a set of associated discussion transcripts.
Each project will have one or more participants of which one participant
will also be known as the chair. A project may be in one of two states: inactive
or active. Documents may be added to the project by participants when a
project is in its active or inactive state. Only the chair can move the project
from the inactive state to the active state and from the active state back to
the inactive state. When a project is active participants may engage in a
controlled discussion and shared editing. An active project is known as a session.
Only one person at a time may talk during a session. The session dialogue will
be captured for future reference and is known as a transcript. During a session
documents may be selected one at a time for collaborative editing. Only one
person at a time is allowed to edit a shared document. When the chair closes
the session the project is said to be inactive. When a session is closed a
transcript of the session dialogue is saved.
Participants will identify
themselves by logging onto the system with a username and a password. When they
login they will be notified if they have been added to or deleted from a
project. They will also be notified of any active projects in which they are a
participant. If a user is new to the system they can request a username and
password at login time.
A participant may create a
new project and add participants to that project. The creator of a project, by
default, is the chair of the project. The chair may add or delete
participants from the project. The chair may delete the project. A participant
may belong to many projects.
If a participant is the
chair of a project they may activate a project and create a new session for
that project. The chair is said to have joined the session. When a
project is activated any participant logged into the system will be notified.
Participants can optionally join any project session for which they are project
participants.
During a project session
two concurrent activities are provided: discussion and shared editing. Several
sessions may be concurrently active in the system.
A discussion consists of a
controlled dialogue where only one person at a time can speak. When the
discussion starts the chair has control of the dialogue. Dialogue control is
moved between participants in one of three ways:
Each participant in a discussion
will see the dialogue along with an indication as to who is talking.
Participants can view earlier parts of the current dialogue.
When a session is closed
the dialogue that took place during the session will be filed with the project
as a discussion transcript. When a transcript is saved the start time,
the end time, and the names of the documents edited during the session are
captured and associated with the transcript.
Concurrently with the
discussion a project document may be jointly edited. Initially the chair will
be given control of editing. The participant with edit control may open an
existing project document or create a new project document. A document that is
being edited is said to be an active document. As with the discussion,
participants may request a turn to edit the document and will be queued for
editing. The same queuing rules as described for the discussion will be used
for editing. Each participant will see the edits as they take place as well as
an indication as to who is currently editing the document. The participant
currently editing a project document may at anytime save the document. Each
time a document is saved its version number is incremented by one. When a
document is first added to a project its version number is one. If a document
was created as part of a session the first time it is saved its version number
is one. Only one document at a time may be active for editing. New documents
may be opened by the participant currently in control of editing and made
active. If there is already an active document it will be made inactive. If a
document is made inactive and has changed since it was last saved the
participant will be asked if the document should be saved.
Participants may leave a
session. When a participant leaves a session everyone participating will be
notified. If the participant has edit and/or discussion control that control
will move to the first person in the edit/discussion control queue. If that
queue is empty control will move to the chair.
When the chair leaves a
session the project is made inactive. If there is any active document it will
be made inactive. When a project is made inactive a transcript of the session
dialogue will be made. All participants will be forced to leave a project when
the chair leaves.
Participants may get a
listing of the names of the documents and
transcripts associated with a project, if they belong to that project.
Participants may get a listing of the names of the projects they belong to.
When a user is finished
with the system they will log off. When a user logs off they will be forced to
leave any active sessions.
Infrastructure Components
The collaborative tool
described in the previous section will be required to use the following three
components.
Asynchronous
Multicast Communications Component (AMCC)
The communications
component acts much like a channel based radio spectrum. Messages sent on a
specific channel will be heard by anyone listening on that channel.
Any component wishing to
use the AMCC will attach to the AMCC. When a component is no longer
interested in participating in communications it will detach from the
AMCC.
To receive communications
directed to a channel a component will listen to the channel. When a
component no longer wishes to receive communications from a channel it will unlisten to the channel. Channels are identified by
an integer in the range from 0 to 231-1.
A component can send a
message to all the components listening on a channel by doing a send on
that channel.
When a component wants an
unused channel it will request a free channel with a "get free
channel" request. "get free channel"
will return a channel for which there are no current listeners in the range
from 256 to 231-1. Channels 0 to 255 are reserved for fixed
services.
Directory
Component
The directory component
provides a hierarchical lookup service. Each node can store a set of
attributes, each of which can have zero or more string values. Users can store
attributes in the directory by providing a path to a node along with a set of attributes
and their associated values. Users can get values by providing a path to a node
and optionally a list of attribute names. If no attribute names are provided,
all the attribute/values for a node will be returned. An example directory is:

In the above example the
paths to nodes 3, 6, and 1 would be "a.d",
".", and "c" respectively. Assume the "." is used
to separate the names of the edges in the path. A dot (".") by itself
represents the root node. An example attribute value for a node might be
{attribute1 = "value1", attribute2 = "value2", attribute3 =
{"value3", "value4"}, attribute4 = {}}. Each of attributes
attribute1 and attribute2 have single values.
Attribute attribute3 as two values and attribute attribute4 has an empty value.
You can assume that the
contents of the entire directory can be read into memory of the implementation
platform. The directory can use its own persistent store.
Persistent
Store Component
The persistent component
store provides a persistent store for information. Three operations are
provided for the store:
Comments
The directory component
will be used with the AMCC and will listen on channel 0. The persistent store
component will also listen on an AMCC channel. A component that wants to use
the persistent store will find what channel the persistent store is listening
on by looking up in the directory the node at "system" and examining
the value associated with the attribute "persistentStore".