public class IlvFilterGanttModel extends IlvAbstractGanttModel
IlvFilterGanttModel
is a base class for Gantt data models that
encapsulate other models. Filtering models are useful to provide control
logic or alternative views for an existing data model (such as the
default Gantt model
). For example,
you could implement a filtering model that only contains the activities assigned to a
particular resource, or a model that sorts its activities and resources in
different ways.
This base implementation delegates all method calls to the corresponding methods of the encapsulated data model that is being filtered. This implementation also propagates all notification events from the encapsulated data model to its own listeners. Subclasses should override one or several methods to define additional functionalities.
Modifier and Type | Class and Description |
---|---|
protected class |
IlvFilterGanttModel.ActivityEventHandler
ActivityEventHandler is the default listener that is used by
IlvFilterGanttModel to handle activity
events fired by the encapsulated data model. |
protected class |
IlvFilterGanttModel.ActivityHierarchyEventHandler
ActivityHierarchyEventHandler is the default listener
used by IlvFilterGanttModel to handle
activity hierarchy events fired by the
encapsulated data model. |
protected class |
IlvFilterGanttModel.ConstraintEventHandler
ConstraintEventHandler is the default listener used by
IlvFilterGanttModel to handle constraint
events fired by the encapsulated data model. |
protected class |
IlvFilterGanttModel.GanttModelPropertyEventHandler
GanttModelPropertyEventHandler is the default listener used by
IlvFilterGanttModel to handle Gantt data
model property events fired by the encapsulated data model. |
protected class |
IlvFilterGanttModel.ReservationEventHandler
ReservationEventHandler is the default listener used by
IlvFilterGanttModel to handle reservation events fired by the encapsulated data model. |
protected class |
IlvFilterGanttModel.ResourceEventHandler
ResourceEventHandler is the default listener used by
IlvFilterGanttModel to handle resource
events fired by the encapsulated data model. |
protected class |
IlvFilterGanttModel.ResourceHierarchyEventHandler
ResourceHierarchyEventHandler is the default listener
used by IlvFilterGanttModel to handle
resource hierarchy events fired by the
encapsulated data model. |
ADJUSTING_PROPERTY, BATCHING_PROPERTY
Constructor and Description |
---|
IlvFilterGanttModel()
Creates a new filtering model with no filtered model specified.
|
IlvFilterGanttModel(IlvGanttModel filteredModel)
Creates a new filtering model that encapsulates the specified filtered
model.
|
Modifier and Type | Method and Description |
---|---|
void |
addActivity(IlvActivity newActivity,
IlvActivity parent,
int index)
Adds
newActivity as a child of parent activity
at the specified location in its list of child activities. |
void |
addConstraint(IlvConstraint newConstraint)
Adds
newConstraint to the data model. |
void |
addReservation(IlvReservation newReservation)
Adds
newReservation to the data model. |
void |
addResource(IlvResource newResource,
IlvResource parent,
int index)
Adds
newResource as a child of the parent
resource at the specified location in its list of child resources. |
Iterator<IlvConstraint> |
constraintIterator()
Returns an iterator over all the constraints in the data model.
|
Iterator<IlvConstraint> |
constraintIteratorFromActivity(IlvActivity fromActivity)
Returns an iterator over the constraints in the data model that have the
specified activity as their source or from activity.
|
Iterator<IlvConstraint> |
constraintIteratorToActivity(IlvActivity toActivity)
Returns an iterator over the constraints in the data model that have the
specified activity as their target or to activity.
|
boolean |
contains(IlvConstraint constraint)
Returns whether the specified constraint is a member of the data model.
|
boolean |
contains(IlvHierarchyNode activityOrResource)
Returns whether the specified activity or resource is a member of the
data model.
|
boolean |
contains(IlvReservation reservation)
Returns whether the specified reservation is a member of the data model.
|
protected ActivityListener |
createActivityEventHandler()
Returns the event listener that will be used to handle
activity events fired by the filtered model that
this data model encapsulates. |
protected ActivityHierarchyListener |
createActivityHierarchyEventHandler()
Returns the event listener that will be used to handle
activity hierarchy events fired by the
filtered model that this data model encapsulates. |
protected ConstraintListener |
createConstraintEventHandler()
Returns the event listener that will be used to handle
constraint events fired by the filtered model
that this data model encapsulates. |
protected GanttModelPropertyListener |
createGanttModelPropertyEventHandler()
Returns the event listener that will be used to handle
Gantt model property change events fired by
the filtered model that this data model encapsulates.
|
protected ReservationListener |
createReservationEventHandler()
Returns the event listener that will be used to handle
reservation events fired by the filtered model
that this data model encapsulates. |
protected ResourceListener |
createResourceEventHandler()
Returns the event listener that will be used to handle
resource events fired by the filtered model that
this data model encapsulates. |
protected ResourceHierarchyListener |
createResourceHierarchyEventHandler()
Returns the event listener that will be used to handle
resource hierarchy events fired by the
filtered model that this data model encapsulates. |
void |
fireActivityEvent(ActivityEvent event)
Fires an
activityChanged event. |
void |
fireResourceEvent(ResourceEvent event)
Fires a
resourceChanged event. |
IlvActivity |
getChildActivity(IlvActivity parent,
int index)
Returns the child of the specified parent activity at index
index . |
int |
getChildActivityCount(IlvActivity parent)
Returns the number of children of the specified parent activity.
|
int |
getChildActivityIndex(IlvActivity parent,
IlvActivity child)
Returns the index of the specified child in the parent activity's list
of children.
|
IlvResource |
getChildResource(IlvResource parent,
int index)
Returns the child of the specified parent resource at index
index . |
int |
getChildResourceCount(IlvResource parent)
Returns the number of children of the specified parent resource.
|
int |
getChildResourceIndex(IlvResource parent,
IlvResource child)
Returns the index of the specified child in the parent resource's list
of children.
|
IlvGanttModel |
getFilteredModel()
Returns the filtered model that this model encapsulates.
|
IlvActivity |
getParentActivity(IlvActivity activity)
Returns the parent activity of the specified activity, or
null
if the activity is the root activity of the data model. |
int |
getParentActivityIndex(IlvActivity activity)
Returns the index of the specified activity within its parent activity.
|
IlvResource |
getParentResource(IlvResource resource)
Returns the parent resource of the specified resource, or
null
if the resource is the root resource of the data model. |
int |
getParentResourceIndex(IlvResource resource)
Returns the index of the specified resource within its parent resource.
|
IlvActivity |
getRootActivity()
Returns the root activity of the data model, or
null if the
data model contains no activities. |
IlvResource |
getRootResource()
Returns the root resource of the data model, or
null if the
data model contains no resources. |
boolean |
isAdjusting()
Returns whether an adjustment session is currently active.
|
boolean |
isBatching()
Returns whether a batching session is currently active.
|
void |
moveActivity(IlvActivity activity,
IlvActivity newParent,
int newIndex)
Moves the specified activity from its current location in the tree to a
new location.
|
void |
moveResource(IlvResource resource,
IlvResource newParent,
int newIndex)
Moves the specified resource from its current location in the tree to a
new location.
|
void |
removeActivity(IlvActivity activity)
Removes the specified child
activity from its parent. |
void |
removeActivity(IlvActivity parent,
int index)
Removes the child activity from
parent that is at the
specified location in its list of child activities. |
void |
removeConstraint(IlvConstraint constraint)
Removes the specified
constraint from the data model. |
void |
removeReservation(IlvReservation reservation)
Removes the specified
reservation from the data model. |
void |
removeResource(IlvResource resource)
Removes the specified child
resource from its parent. |
void |
removeResource(IlvResource parent,
int index)
Removes the child resource from
parent that is at the
specified location in its list of child resources. |
Iterator<IlvReservation> |
reservationIterator()
Returns an iterator over all the reservations in the data model.
|
Iterator<IlvReservation> |
reservationIterator(IlvActivity activity)
Returns an iterator over all the reservations in the data model
that are associated with the specified activity.
|
Iterator<IlvReservation> |
reservationIterator(IlvResource resource)
Returns an iterator over all the reservations in the data model
that are associated with the specified resource.
|
Iterator<IlvReservation> |
reservationIterator(IlvResource resource,
IlvTimeInterval interval)
Returns an iterator over all the reservations in the data model
that are associated with the specified resource and where the assigned
activity intersects the specified time interval.
|
void |
setAdjusting(boolean adjusting)
Starts or ends an adjustment session.
|
void |
setBatching(boolean batching)
Starts or ends a batching session.
|
void |
setFilteredModel(IlvGanttModel model)
Sets the filtered model that this model encapsulates.
|
void |
setRootActivity(IlvActivity root)
Sets the root activity of the data model.
|
void |
setRootResource(IlvResource root)
Sets the root resource of the data model.
|
activityPreorderIterator, activityPreorderIterator, addActivity, addActivityHierarchyListener, addActivityListener, addConstraintListener, addGanttModelPropertyListener, addReservationListener, addResource, addResourceHierarchyListener, addResourceListener, childActivityIterator, childResourceIterator, clear, fireActivitiesInserted, fireActivitiesInserted, fireActivitiesRemoved, fireActivitiesRemoved, fireActivityInserted, fireActivityMoved, fireActivityRemoved, fireConstraintEvent, fireConstraintInserted, fireConstraintRemoved, fireConstraintRemoved, fireGanttModelPropertyEvent, fireReservationEvent, fireReservationInserted, fireReservationRemoved, fireReservationRemoved, fireResourceInserted, fireResourceMoved, fireResourceRemoved, fireResourcesInserted, fireResourcesInserted, fireResourcesRemoved, fireResourcesRemoved, getActivityHierarchyListeners, getActivityListeners, getChild, getChildCount, getChildIndex, getParent, getParentIndex, getResourceHierarchyListeners, getResourceListeners, registerEventListener, removeActivityHierarchyListener, removeActivityListener, removeConstraintListener, removeGanttModelPropertyListener, removeReservationListener, removeResourceHierarchyListener, removeResourceListener, resourcePreorderIterator, resourcePreorderIterator, writeEventListeners
public IlvFilterGanttModel()
setFilteredModel(ilog.views.gantt.IlvGanttModel)
to specify the filtered model.public IlvFilterGanttModel(IlvGanttModel filteredModel)
filteredModel
- The model that this filtering model
encapsulates.public void setFilteredModel(IlvGanttModel model)
model
- The data model that this model encapsulates.getFilteredModel()
public IlvGanttModel getFilteredModel()
setFilteredModel(ilog.views.gantt.IlvGanttModel)
public void setAdjusting(boolean adjusting)
setAdjusting(true)
must be paired with a call to
setAdjusting(false)
. An adjusting property
event
is fired when the outermost adjustment session begins and ends.setAdjusting
in interface IlvGanttModel
setAdjusting
in class IlvAbstractGanttModel
adjusting
- True to start an adjustment session or false to end an adjustment
session.isAdjusting()
public boolean isAdjusting()
isAdjusting
in interface IlvGanttModel
isAdjusting
in class IlvAbstractGanttModel
setAdjusting(boolean)
public void setBatching(boolean batching)
setBatching(true)
must be paired with a call to
setBatching(false)
. A batching
property event
is fired when the outermost batching session begins and
ends.setBatching
in interface IlvGanttModel
setBatching
in class IlvAbstractGanttModel
batching
- True to start a batching session or false to end a batching
session.isBatching()
public boolean isBatching()
isBatching
in interface IlvGanttModel
isBatching
in class IlvAbstractGanttModel
true
if a batching session is active.setBatching(boolean)
protected GanttModelPropertyListener createGanttModelPropertyEventHandler()
IlvFilterGanttModel.GanttModelPropertyEventHandler
that refires all events
triggered by the encapsulated model to this data model's own
registered listeners.
Subclasses can override this method to add additional event filtering,
processing, functionality, and so on.public void fireActivityEvent(ActivityEvent event)
activityChanged
event. This method is overridden to
avoid the child event processing in
IlvAbstractGanttModel.fireActivityEvent(ilog.views.gantt.event.ActivityEvent)
.
Warning: This method is considered to be part of an
IlvGanttModel
internal implementation rather than of the public
API. Do not invoke this method directly unless you have created an
IlvActivity
implementation that does not subclass
IlvAbstractActivity
.
fireActivityEvent
in interface IlvGanttModel
fireActivityEvent
in class IlvAbstractGanttModel
event
- The activity event.ActivityListener.activityChanged(ilog.views.gantt.event.ActivityEvent)
public void fireResourceEvent(ResourceEvent event)
resourceChanged
event. This method is overridden to
avoid the child event processing in
IlvAbstractGanttModel.fireResourceEvent(ilog.views.gantt.event.ResourceEvent)
.
Warning: This method is considered to be part of an
IlvGanttModel
internal implementation rather than of the public
API. Do not invoke this method directly unless you have created an
IlvResource
implementation that does not subclass
IlvAbstractResource
.
fireResourceEvent
in interface IlvGanttModel
fireResourceEvent
in class IlvAbstractGanttModel
event
- The resource event.ResourceListener.resourceChanged(ilog.views.gantt.event.ResourceEvent)
protected ActivityListener createActivityEventHandler()
activity events
fired by the filtered model that
this data model encapsulates. This default implementation returns an
instance of IlvFilterGanttModel.ActivityEventHandler
that refires all events triggered
by the encapsulated model to this data model's own
registered listeners
.
Subclasses can override this method to add additional event filtering,
processing, functionality, and so on.protected ActivityHierarchyListener createActivityHierarchyEventHandler()
activity hierarchy events
fired by the
filtered model that this data model encapsulates. This default
implementation returns an instance of IlvFilterGanttModel.ActivityHierarchyEventHandler
that refires all events triggered by the encapsulated model to this data
model's own registered listeners
.
Subclasses can override this method to add additional event filtering,
processing, functionality, and so on.protected ResourceListener createResourceEventHandler()
resource events
fired by the filtered model that
this data model encapsulates. This default implementation returns an
instance of IlvFilterGanttModel.ResourceEventHandler
that refires all events triggered
by the encapsulated model to this data model's own
registered listeners
.
Subclasses can override this method to add additional event filtering,
processing, functionality, and so on.protected ResourceHierarchyListener createResourceHierarchyEventHandler()
resource hierarchy events
fired by the
filtered model that this data model encapsulates. This default
implementation returns an instance of IlvFilterGanttModel.ResourceHierarchyEventHandler
that refires all events triggered by the encapsulated model to this data
model's own registered listeners
.
Subclasses can override this method to add additional event filtering,
processing, functionality, and so on.protected ConstraintListener createConstraintEventHandler()
constraint events
fired by the filtered model
that this data model encapsulates. This default implementation returns an
instance of IlvFilterGanttModel.ConstraintEventHandler
that refires all events
triggered by the encapsulated model to this data model's own
registered listeners
.
Subclasses can override this method to add additional event filtering,
processing, functionality, and so on.protected ReservationListener createReservationEventHandler()
reservation events
fired by the filtered model
that this data model encapsulates. This default implementation returns an
instance of IlvFilterGanttModel.ReservationEventHandler
that refires all events
triggered by the encapsulated model to this data model's own
registered listeners
.
Subclasses can override this method to add additional event filtering,
processing, functionality, and so on.public boolean contains(IlvHierarchyNode activityOrResource)
activityOrResource
- The activity or resource.public IlvActivity getRootActivity()
null
if the
data model contains no activities.null
.public void setRootActivity(IlvActivity root)
ConstraintRemovedEvent
s and
ReservationRemovedEvent
s for each removed constraint and
reservation. The removingActivity property of these events will be
true
. Then, if there was a previous root activity, the data
model will fire an ActivitiesRemovedEvent
for the old root.
Finally, if the new root activity is not null
, the data model
will fire an ActivitiesInsertedEvent
for the new root.root
- The new root activity, or null
if the data model
is to contain no activities.ActivityHierarchyListener.activitiesInserted(ilog.views.gantt.event.ActivitiesInsertedEvent)
,
ActivityHierarchyListener.activitiesRemoved(ilog.views.gantt.event.ActivitiesRemovedEvent)
public IlvActivity getParentActivity(IlvActivity activity)
null
if the activity is the root activity of the data model.activity
- The activity.null
.public int getParentActivityIndex(IlvActivity activity)
-1
is
returned.activity
- The activity.-1
.public int getChildActivityCount(IlvActivity parent)
parent
- The parent activity.public IlvActivity getChildActivity(IlvActivity parent, int index)
index
.parent
- The parent activity.index
- The child index.index
.public int getChildActivityIndex(IlvActivity parent, IlvActivity child)
parent
- The parent activity.child
- The child activity to find the index of.-1
if the
activity is not a child of parent
.public void addActivity(IlvActivity newActivity, IlvActivity parent, int index)
newActivity
as a child of parent
activity
at the specified location in its list of child activities. The current
child activity at index index
and any subsequent activities
are shifted to the right by having their indices incremented. After the
activity has been added, the data model will fire an
ActivitiesInsertedEvent
.newActivity
- The activity to add.parent
- The parent activity to which newActivity
is
added.index
- The location within the parent activity's list of children to
insert the new activity.
If index >= getChildActivityCount(parent)
,
then newActivity
is appended as the last child of
parent
.ActivityHierarchyListener.activitiesInserted(ilog.views.gantt.event.ActivitiesInsertedEvent)
public void removeActivity(IlvActivity parent, int index)
parent
that is at the
specified location in its list of child activities. Any subsequent child
activities are shifted to the left by having their indices decremented.
All constraints and reservations associated with the child activity and
its children are also removed from the data model. After the
activity has been removed, the data model will first fire
ConstraintRemovedEvent
s and ReservationRemovedEvent
s for
each removed constraint and reservation. The removingActivity
property of these events will be true
. Then, the data model
will fire an ActivitiesRemovedEvent
.parent
- The parent activity from which to remove the child activity.index
- The location within parent
's list of children to
remove the child activity.ActivityHierarchyListener.activitiesRemoved(ilog.views.gantt.event.ActivitiesRemovedEvent)
public void removeActivity(IlvActivity activity)
activity
from its parent. All
constraints and reservations associated with the activity and its children
are also removed from the data model. After the activity has been removed,
the data model will first fire ConstraintRemovedEvent
s and
ReservationRemovedEvent
s for each removed constraint and
reservation. The removingActivity
property of these events
will be true
. Then, the data model will fire an
ActivitiesRemovedEvent
.
This method cannot be used to remove the data model's root activity. Use
setRootActivity(null)
for that purpose.activity
- The activity to remove. It must be a member of this data
model, but cannot be the root activity.ActivityHierarchyListener.activitiesRemoved(ilog.views.gantt.event.ActivitiesRemovedEvent)
public void moveActivity(IlvActivity activity, IlvActivity newParent, int newIndex)
ActivityMovedEvent
.activity
- The activity to move. It must be a member of this data
model, but cannot be the root activity.newParent
- The parent activity to which activity
will be
made a child. It must be a member of this data model.newIndex
- The location within newParent
's list of
children into which activity
will be inserted. If
newIndex >= getChildActivityCount(newParent)
, then
activity
will be appended as the last child of
newParent
.ActivityHierarchyListener.activityMoved(ilog.views.gantt.event.ActivityMovedEvent)
public IlvResource getRootResource()
null
if the
data model contains no resources.null
.public void setRootResource(IlvResource root)
ReservationRemovedEvent
s for each removed reservation. The
removingResource
property of these events will be true
. Then, if there was a
previous root resource, the data model will fire a
ResourcesRemovedEvent
for the old root. Finally, if the new root
resource is not null
, the data model will fire a
ResourcesInsertedEvent
for the new root.root
- The new root resource, or null
if the data model
is to contain no resources.ResourceHierarchyListener.resourcesInserted(ilog.views.gantt.event.ResourcesInsertedEvent)
,
ResourceHierarchyListener.resourcesRemoved(ilog.views.gantt.event.ResourcesRemovedEvent)
public IlvResource getParentResource(IlvResource resource)
null
if the resource is the root resource of the data model.resource
- The resource.null
.public int getParentResourceIndex(IlvResource resource)
-1
is
returned.resource
- The resource.-1
.public int getChildResourceCount(IlvResource parent)
parent
- The parent resource.public IlvResource getChildResource(IlvResource parent, int index)
index
.parent
- The parent resource.index
- The child index.index
.public int getChildResourceIndex(IlvResource parent, IlvResource child)
parent
- The parent resource.child
- The child resource to find the index of.-1
if the
resource is not a child of parent
.public void addResource(IlvResource newResource, IlvResource parent, int index)
newResource
as a child of the parent
resource at the specified location in its list of child resources. The
current child resource at index index
and any subsequent
resources are shifted to the right by having their indices incremented.
After the resource has been added, the data model will fire a
ResourcesInsertedEvent
.newResource
- The resource to add.parent
- The parent resource to which newResource
is
added.index
- The location within the parent resource's list of children
into which to insert the new resource.
If index >= parent.getChildCount()
then newResource
is appended as the last child of
parent
.ResourceHierarchyListener.resourcesInserted(ilog.views.gantt.event.ResourcesInsertedEvent)
public void removeResource(IlvResource parent, int index)
parent
that is at the
specified location in its list of child resources. Any subsequent child
resources are shifted to the left by having their indices decremented.
All reservations associated with the child resource and its
children are also removed from the data model. After the resource has been
removed, the data model will first fire ReservationRemovedEvent
s
for each removed reservation.
The removingResource
property of these events will be true
. Then, the data model
will fire a ResourcesRemovedEvent
.parent
- The parent resource from which to remove the child resource.index
- The location within parent
's list of children
from which to remove the child resource.ResourceHierarchyListener.resourcesRemoved(ilog.views.gantt.event.ResourcesRemovedEvent)
public void removeResource(IlvResource resource)
resource
from its parent. All
reservations associated with the resource and its children are also
removed from the data model. After the resource has been removed, the data
model will first fire ReservationRemovedEvent
s for each removed
reservation. The removingResource
property of these events will be true
.
Then, the data model will fire a ResourcesRemovedEvent
. This
method cannot be used to remove the data model's root resource.
Use setRootResource(null)
for that purpose.resource
- The resource to remove. It must be a member of this data
model, but cannot be the root resource.ResourceHierarchyListener.resourcesRemoved(ilog.views.gantt.event.ResourcesRemovedEvent)
public void moveResource(IlvResource resource, IlvResource newParent, int newIndex)
ResourceMovedEvent
.resource
- The resource to move. It must be a member of this data
model, but cannot be the root resource.newParent
- The parent resource to which resource
will be
made a child. It must be a member of this data model.newIndex
- The location within newParent
's list of
children into which resource
will be inserted. If
newIndex >= getChildResourceCount(newParent)
, then
resource
will be appended as the last child of
newParent
.ResourceHierarchyListener.resourceMoved(ilog.views.gantt.event.ResourceMovedEvent)
public boolean contains(IlvConstraint constraint)
constraint
- The constraint.public Iterator<IlvConstraint> constraintIterator()
public Iterator<IlvConstraint> constraintIteratorFromActivity(IlvActivity fromActivity)
fromActivity
- The from activity.public Iterator<IlvConstraint> constraintIteratorToActivity(IlvActivity toActivity)
toActivity
- The to activity.public void addConstraint(IlvConstraint newConstraint)
newConstraint
to the data model. The constraint's
from and to activities must already be members of this
data model.
After the constraint has been added, the data model will fire a
ConstraintInsertedEvent
.newConstraint
- The constraint to add.ConstraintListener.constraintChanged(ilog.views.gantt.event.ConstraintEvent)
public void removeConstraint(IlvConstraint constraint)
constraint
from the data model. After
the constraint has been removed, the data model will fire a
ConstraintRemovedEvent
.constraint
- The constraint to remove.ConstraintListener.constraintChanged(ilog.views.gantt.event.ConstraintEvent)
public boolean contains(IlvReservation reservation)
reservation
- The reservation.public Iterator<IlvReservation> reservationIterator()
public Iterator<IlvReservation> reservationIterator(IlvActivity activity)
activity
- The activity.public Iterator<IlvReservation> reservationIterator(IlvResource resource)
resource
- The resource.public Iterator<IlvReservation> reservationIterator(IlvResource resource, IlvTimeInterval interval)
interval
by evaluating
anActivity.getTimeInterval().overlaps(interval)
.resource
- The resource.interval
- The activity time interval of interest.IlvActivity.getTimeInterval()
public void addReservation(IlvReservation newReservation)
newReservation
to the data model. The reservation's
resource and activity must already be members of this data model. After
the reservation has been added, the data model will fire a
ReservationInsertedEvent
.newReservation
- The reservation to add.ReservationListener.reservationChanged(ilog.views.gantt.event.ReservationEvent)
public void removeReservation(IlvReservation reservation)
reservation
from the data model. After
the reservation has been removed, the data model will fire a
ReservationRemovedEvent
.reservation
- The reservation to remove.ReservationListener.reservationChanged(ilog.views.gantt.event.ReservationEvent)
© Copyright Rogue Wave Software, Inc. 1997, 2018. All Rights Reserved.