com.sas.servlet.tbeans.remotefileselector2.html
Class RemoteFileSearch

com.sas.servlet.tbeans.remotefileselector2.html.RemoteFileSearch
All Implemented Interfaces:
ActionProviderViewInterface, HttpActionProviderInterface, HttpActionProviderViewInterface, com.sas.actionprovider.refresh.PartialRefreshActionsInterface, URLTemplateViewInterface, com.sas.beans.PropertyChangeSource, com.sas.lang.ObjectDataInterface, com.sas.servlet.tbeans.AJAXControllerURLInterface, ComplexStyleInterface, CompositeComponentInterface, FormViewInterface, RemoteFileSelectorStyleKeysInterface, RemoteFileSelectorKeysInterface, RenderableInterface, TemplateInterface, com.sas.servlet.tbeans.TemplateKeyInterface, TransformationInterface, com.sas.servlet.tbeans.TransformationInterface2, com.sas.util.WriteToPrintWriterInterface, java.io.Serializable
Direct Known Subclasses:
InformationServicesSearch

public class RemoteFileSearch
implements FormViewInterface, RemoteFileSelectorKeysInterface, RemoteFileSelectorStyleKeysInterface

The RemoteFileSearch is a TransformationBean™ that generates the appropriate HTML 4.0 to represent the search facility of the RemoteFileSelector component. RemoteFileSearch renders the components and the actions associated with the search component. The search component is composed of the following major elements:

JavaScript is also used to submit the appropriate date/time criteria for a search. The sas_RemoteFileSelector.js entry contains all of the JavaScript code needed to successfully utilize the RemoteFileSelector component. The expanded RemoteFileSearch component appears as follows:

The search fields provide information to the server to start the searching process. Each field name is made up of the action provider prefix and a standard name. The table below shows the field label and the standard name for the field and the default value for the field.

Field LabelNameDefault Value
Search for:searchTextblank value
Search what:searchContextName
Search where:startingFoldercurrent folder
Date/time limits:startDateTime and endDateTime are determined from the three fields associated with date and timestartDateTime & endDateTime do not matter since None is the default Date/time limit

The RemoteFileSearch transformation bean component is an HTML Table that contains other transformation bean components, HTML tables, and Actions. These components include TextEntry, ChoiceBox, CheckBox, and Button.

RemoteFileSearch Elements
Transformation BeansChoiceBox
CheckBox
Label
TextEntry
Button
ActionsSTART_SEARCH_ACTION

The RemoteFileSearch is one of several TransformationBeans™ that rely on a set of style classes that are used by default when generating the resulting markup language. For more information on style sheets and the default style classes that apply to this TransformationBean™, refer to the AppDev Studio Developer Site. You'll find a useful reference document entitled Cascading Style Sheets, Images, and TransformationBeans™ as well as the TransformationBeans™ Style Sheet Reference.

Note that the toString() method on this class calls the write method, which may have undesirable side effects. See BaseTransformation.toString() for more information. Debuggers often use toString() to show the value of a variable, and this may cause unexpected behavior while debugging

See Also:
Serialized Form

Field Summary
static java.lang.String DEFAULT_TEMPLATE_FILE_NAME
          The name of the file which will be used by default to read in the template used by this RemoteFileSelector sub-component composite.
static java.lang.String RB_KEY
           
 
Fields inherited from class com.sas.servlet.tbeans.remotefileselector2.BaseRemoteFileSearch
model
 
Fields inherited from class com.sas.servlet.tbeans.BaseActionCompositeTransformation
viewerSupport
 
Fields inherited from interface com.sas.servlet.tbeans.remotefileselector2.RemoteFileSelectorKeysInterface
RFS_DETAILVIEW, RFS_EXPANDCOLLAPSE, RFS_FILE_DETAILVIEW, RFS_REMOTEFILESEARCH, RFS_SEARCH, RFS_SEARCH_DETAILVIEW, RFS_SEARCHDATETIMELIMITS_CHOICE, RFS_SEARCHDATETIMELIMITS_LABEL, RFS_SEARCHINTHELAST_LABEL, RFS_SEARCHINTHELASTUNIT_CHOICE, RFS_SEARCHINTHELASTVALUE_ENTRYFIELD, RFS_SEARCHRESULTS_DETAILVIEW, RFS_SEARCHSTART_BUTTON, RFS_SEARCHSTOP_BUTTON, RFS_SEARCHSUBFOLDERS_SELECT, RFS_SEARCHTEXT_ENTRYFIELD, RFS_SEARCHTEXT_LABEL, RFS_SEARCHWHAT_CHOICE, RFS_SEARCHWHAT_LABEL, RFS_SEARCHWHERE_CHOICE, RFS_SEARCHWHERE_LABEL, RFS_TOOLBAR, RFS_TOOLBAR_LOCATION_CHOICE, RFS_TOOLBAR_LOCATION_LABEL, RFS_TOOLBAR_SHOWDESCRIPTION_COMPONENT, RFS_UPONELEVEL_ACTION
 
Fields inherited from interface com.sas.servlet.tbeans.remotefileselector2.html.RemoteFileSelectorStyleKeysInterface
RFS_CONTAINER_STYLE, RFS_DETAILVIEW_STYLE, RFS_SEARCH_CONTAINER_STYLE, RFS_SEARCH_STYLE, RFS_SEARCHBUTTONS_CONTAINER_STYLE, RFS_SEARCHDATETIMELIMITS, RFS_SEARCHFIELDS_CONTAINER_STYLE, RFS_SEARCHFIELDSANDBUTTONS_CONTAINER_STYLE, RFS_SEARCHINTHELAST, RFS_SEARCHINTHELAST_CHOICECELL, RFS_SEARCHINTHELAST_ENTRYCELL, RFS_SEARCHINTHELAST_FIELDS, RFS_SEARCHINTHELAST_LABELCELL, RFS_SEARCHRESULTS_DETAILVIEW_STYLE, RFS_SEARCHSUBFOLDERS, RFS_SEARCHTEXT, RFS_SEARCHWHAT, RFS_SEARCHWHERE, RFS_TOOLBAR_CONTAINER_STYLE, RFS_TOOLBAR_STYLE
 
Constructor Summary
RemoteFileSearch()
          Constructs a new RemoteFileSearch component.
RemoteFileSearch(RemoteFileSearchModelInterface model)
          Constructs a new RemoteFileSearch component using the specified search model.
RemoteFileSearch(RemoteFileSearchModelInterface model, java.util.Locale locale)
          Constructs a new RemoteFileSearch component using the specified search model and the specified locale.
 
Method Summary
protected  BaseChoiceBox createDefaultSearchDateTimeLimitsComponent()
          Creates and returns the ChoiceBox transformation bean used for displaying the date limit type used for searching.
protected  BaseLabel createDefaultSearchDateTimeLimitsLabel()
          Creates and returns the default search Date/time Limits: label to be use with the search date limits type component.
protected  BaseLabel createDefaultSearchInTheLastLabel()
          Creates and returns the default date limit unit Label.
protected  BaseChoiceBox createDefaultSearchInTheLastUnitComponent()
          Creates and returns the ChoiceBox transformation bean for the date limit unit type.
protected  BaseTextEntry createDefaultSearchInTheLastValueComponent()
          Creates and returns text entry used for specifying the date limits.
protected  BaseTableView createDefaultSearchResultsDetailView()
          Creates and returns the default RFS_SEARCHRESULTS_DETAILVIEW.
protected  BaseButton createDefaultSearchStartComponent()
          Creates and returns the default search button.
protected  BaseButton createDefaultSearchStopComponent()
          Creates and returns the default stop button.
protected  BaseCheckBox createDefaultSearchSubfoldersComponent()
          Creates and returns search sub folders CheckBox.
protected  java.lang.String createDefaultSearchSubfoldersLabel()
          Creates and returns the default Search subfolders text to be used to label the the search subfolders CheckBox component.
protected  BaseTextEntry createDefaultSearchTextComponent()
          Creates and returns the default Search for: component.
protected  BaseLabel createDefaultSearchTextLabel()
          Creates and returns the default Search for: Label.
protected  BaseChoiceBox createDefaultSearchWhatComponent()
          Creates and returns default Search what choice component.
protected  BaseLabel createDefaultSearchWhatLabel()
          Creates and returns the default search field text label.
protected  BaseChoiceBox createDefaultSearchWhereComponent()
          Creates and returns default Search where choice component.
protected  BaseLabel createDefaultSearchWhereLabel()
          Creates and returns the default Search where: text label.
 java.util.HashMap getAdditionalParameters()
          Returns an HashMap containing additional parameters that should be added to the form used to perform the search action.
protected  BaseExpandCollapse getDefaultExpandCollapseComponent()
          Create and set defaults for the ExpandCollapse component used with search.
 Form getDefaultFormObject()
          Returns the default form object.
 Form getFormObject()
          Returns the form object.
protected  ActionList getSearchButtonAreaActions()
          Returns the action list containing the START_SEARCH_ACTION.
 boolean isFormEnabled()
          Returns whether or not the FORM tag is written by the search class.
protected  void populateStartingLocationComponent(java.lang.String path, java.lang.String basePath)
          Populate the location drop-down component with the starting search path.
protected  void prepareToWriteDetailView()
          This method prepares the detail view for rendering.
protected  void prepareToWriteSearch()
          Prepares the search sub-components for rendering.
protected  void processSearchButtonActions(Form formObject)
          Retrieves the actions for search button and registers the actions on the form used for processing the search.
 void setAdditionalParameter(java.lang.String name, java.lang.String value)
          Sets an additional parameter to be added to the form used to perform the search action.
 void setAdditionalParameters(java.util.HashMap map)
          Sets a HashMap containing additional parameters that should be added to the form used to perform the search action.
 void setFormEnabled(boolean value)
          Determines if the search class should write the FORM tag.
 void setFormObject(Form form)
          Sets the form object.
protected  void setLocaleDependentProperties(java.util.Locale locale)
          Sets properties that should be updated if the locale changes.
protected  void setupDetailView()
          Binds the SortableTableModelAdapter and the detailview.
 void setupView()
          This method intializes the view.
protected  void setupView(BaseTableView table, RemoteFileSearchModelInterface model)
          Bind the viewer and the model.
protected  void writeContent(java.io.PrintWriter out)
          Writes the transformation's main content which is everything except for the following:
Opening container html element.
 
Methods inherited from class com.sas.servlet.tbeans.remotefileselector2.BaseRemoteFileSearch
getExpandCollapseComponent, getModel, getRemoteFileSelector, getSearchFieldsAttributes, getStartingLocation, isExpandCollapseVisible, setExpandCollapseComponent, setExpandCollapseVisible, setModel, setRemoteFileSelector, setSearchFieldsAttributes, setStartingLocation
 
Methods inherited from class com.sas.servlet.tbeans.BaseActionCompositeTransformation
applyTemplate, applyTemplate, dispose, getActionFilter, getActionSupportType, getComponentAction, getComponentActionType, getUniqueId, getViewerSupport, isActionVisible, listActionTypes, listAreaTypes, moveActionAttributesToComponent, setActionProvider, setActionSupportType, setActionVisible, setComponent, setComponentActionType, setUniqueId, writeTemplate
 
Methods inherited from class com.sas.servlet.tbeans.BaseCompositeTransformation
getActionProvider, getComponent, getComponents, getDefaultTemplate, getStyleInfo, getStyleMap, getTemplate, getTemplateDictionary, getTemplateFileName, getTemplateLocation, getVisibleComponents, isFlushEnabled, propertyChange, removeComponent, setCleanUpResourcesOn, setComponent, setFlushEnabled, setId, setLocale, setRequest, setResponse, setStyleInfo, setTemplate, setTemplate, setTemplateDictionary, setTemplateFileName, setTemplateLocation
 
Methods inherited from class com.sas.servlet.tbeans.BaseTransformation
addPropertyChangeListener, addPropertyChangeListener, cleanUpResources, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getCustomAttributes, getDescription, getId, getInputTransform, getLocale, getName, getObjectData, getObjectDataProperty, getOutputTransform, getRequest, getResponse, getTagEpilog, getTagProlog, hasListeners, isCleanUpResourcesOn, isVisible, removePropertyChangeListener, removePropertyChangeListener, setCustomAttributes, setInputTransform, setName, setObjectData, setObjectDataProperty, setOutputTransform, setTagEpilog, setTagProlog, setVisible, toString, write, write, write
 
Methods inherited from interface com.sas.servlet.tbeans.TransformationInterface
getCustomAttributes, getDescription, getId, getLocale, getName, getRequest, getResponse, getTagEpilog, getTagProlog, isVisible, setCustomAttributes, setDescription, setId, setLocale, setName, setRequest, setResponse, setTagEpilog, setTagProlog, setVisible, write, write, write
 
Methods inherited from interface com.sas.actionprovider.HttpActionProviderViewInterface
getRequest, setRequest
 
Methods inherited from interface com.sas.actionprovider.HttpActionProviderInterface
getActionProvider
 

Field Detail

RB_KEY

public static final java.lang.String RB_KEY
See Also:
Constant Field Values

DEFAULT_TEMPLATE_FILE_NAME

public static final java.lang.String DEFAULT_TEMPLATE_FILE_NAME
The name of the file which will be used by default to read in the template used by this RemoteFileSelector sub-component composite.

See Also:
Constant Field Values
Constructor Detail

RemoteFileSearch

public RemoteFileSearch()
Constructs a new RemoteFileSearch component.


RemoteFileSearch

public RemoteFileSearch(RemoteFileSearchModelInterface model)
Constructs a new RemoteFileSearch component using the specified search model.

Parameters:
model - a model is required before the component can be successfully rendered. If no model is set then a nullPointerException will occur when the component is rendered.

RemoteFileSearch

public RemoteFileSearch(RemoteFileSearchModelInterface model,
                        java.util.Locale locale)
Constructs a new RemoteFileSearch component using the specified search model and the specified locale.

The following keys are set for the component:

Parameters:
model - RemoteFileSearchModelInterface instance
locale - application locale
Method Detail

prepareToWriteDetailView

protected void prepareToWriteDetailView()
This method prepares the detail view for rendering.


prepareToWriteSearch

protected void prepareToWriteSearch()
Prepares the search sub-components for rendering.

A formObject is needed by the search component so that the search criteria can be processed appropriately by the server. If the formObject or the ActionProvider is null then the search will not be processed. The Search buttons onClick value is set to execute the processSearch method.

The values for the search criteria are updated with the last search values specified.

Parameters:
formObject - form used for processing the search criteria

populateStartingLocationComponent

protected void populateStartingLocationComponent(java.lang.String path,
                                                 java.lang.String basePath)
Populate the location drop-down component with the starting search path.

The basePath does not appear in the drop-down directories

Specified by:
populateStartingLocationComponent in class BaseRemoteFileSearch
Parameters:
path - starting path
basePath - defined root level

processSearchButtonActions

protected void processSearchButtonActions(Form formObject)
Retrieves the actions for search button and registers the actions on the form used for processing the search.

Parameters:
formObject - form used for processing the search criteria

getSearchButtonAreaActions

protected ActionList getSearchButtonAreaActions()
Returns the action list containing the START_SEARCH_ACTION. This action is executed when the Search button is selected.


setupDetailView

protected void setupDetailView()
Binds the SortableTableModelAdapter and the detailview. This binding only occurs one time. To perform a one time initial sort override the setupView() method.

See Also:
setupView(), SortableTableModelAdapter

setupView

public void setupView()
This method intializes the view. The model is bound to the table. The RemoteFileServerModelInterface model is set on an instance of the SortableTableModelAdapter. This SortableTableModelAdapter is then set on the Table.

Therefore a getModel() method call on the table will return an instance of the SortableTableModelAdapter. To get the RemoteFileSearchModelInterface instance, perform a getModel() method call on the RemoteFileSearch viewer or on the SortableTableModelAdapter.


setupView

protected void setupView(BaseTableView table,
                         RemoteFileSearchModelInterface model)
Bind the viewer and the model. A default camparator with a locale is setup for use on the SortableTableModelAdapter.

Parameters:
table - searchResultsViewComponent that will make use of the RemoteFileSearchModelInterface instance
model - model instance that will be attached to the searchResultsComponent
See Also:
setupView()

getDefaultExpandCollapseComponent

protected BaseExpandCollapse getDefaultExpandCollapseComponent()
Create and set defaults for the ExpandCollapse component used with search. This component is turned off by default.

Specified by:
getDefaultExpandCollapseComponent in class BaseRemoteFileSearch
Returns:
ExpandCollapse component
See Also:
BaseRemoteFileSearch.getExpandCollapseComponent()

createDefaultSearchResultsDetailView

protected BaseTableView createDefaultSearchResultsDetailView()
Creates and returns the default RFS_SEARCHRESULTS_DETAILVIEW. By default the RFS_SEARCHRESULTS_DETAILVIEW is a TableView. This component displays the results returned from a search.

Returns:
search component which is a TableView by default

createDefaultSearchTextComponent

protected BaseTextEntry createDefaultSearchTextComponent()
Creates and returns the default Search for: component. This component is a TextEntry transformation bean by default. A default style class name of rfs_SearchTextComponent was set for the text entry.

Returns:
TextEntry transformation bean used for entering search text

createDefaultSearchWhatComponent

protected BaseChoiceBox createDefaultSearchWhatComponent()
Creates and returns default Search what choice component. This component is a ChoiceBox transformation bean by default. The field choices are Name, Description and Keywords. Their corresponding values are Name, Desc, and Keywords. The default style class for the ChoiceBox component is rfs_SearchWhatComponent *

Returns:
ChoiceBox used for selecting search field

createDefaultSearchWhereComponent

protected BaseChoiceBox createDefaultSearchWhereComponent()
Creates and returns default Search where choice component. The value specified in this component represents the starting path for the search. The default style for the Search Where ChoiceBox is rfs_SearchWhereComponent.

Returns:
ChoiceBox used to contain the folder choices for the startingPath

createDefaultSearchSubfoldersComponent

protected BaseCheckBox createDefaultSearchSubfoldersComponent()
Creates and returns search sub folders CheckBox. Component is used to turn on the searching of subfolders. The searching of subfolders is turned on by default. The default style for the label is rfs_SearchSubfoldersLabel. The default style for the check area is rfs_SearchSubfolders.

Returns:
CheckBox used to specify whether sub folders are searched

createDefaultSearchDateTimeLimitsComponent

protected BaseChoiceBox createDefaultSearchDateTimeLimitsComponent()
Creates and returns the ChoiceBox transformation bean used for displaying the date limit type used for searching. The field choices are None and Search for Files Modified... Their corresponding values are none and modified. The default style for the SearchDateTimeLimits ChoiceBox is rfs_SearchDateTimeLimitsComponent.

Returns:
ChoiceBox used for date limit type choices

createDefaultSearchInTheLastValueComponent

protected BaseTextEntry createDefaultSearchInTheLastValueComponent()
Creates and returns text entry used for specifying the date limits. The default style for the InTheLast TextEntry is rfs_SearchInTheLastValueComponent

Returns:
TextEntry used to for the date limits, the date limit is 1 by default

createDefaultSearchInTheLastUnitComponent

protected BaseChoiceBox createDefaultSearchInTheLastUnitComponent()
Creates and returns the ChoiceBox transformation bean for the date limit unit type. The date limit unit type choices are Hours, Days, Weeks, and Months. Their corresponding values are Hours, Days, Weeks, and Months. The default style class for the InTheLast ChoiceBox is rfs_SearchInTheLastUnitComponent.

Returns:
ChoiceBox used for date limit unit type choices

createDefaultSearchStartComponent

protected BaseButton createDefaultSearchStartComponent()
Creates and returns the default search button. When the Search Button is selected the sas_RemoteFileSearch_processSearch JavaScript method is executed. This JavaScript calculates the correct startDateTime and endDateTime and then submits a form containing all of the search field values. The default style for the SearchStart Button is rfs_SearchButton.

Returns:
Button transformation bean instance used to start execution of the search

createDefaultSearchStopComponent

protected BaseButton createDefaultSearchStopComponent()
Creates and returns the default stop button. This button is disabled by default.

Returns:
Button transformation bean instance used to stop the execution of the search

createDefaultSearchTextLabel

protected BaseLabel createDefaultSearchTextLabel()
Creates and returns the default Search for: Label. The default style class for the Search for: Label is rfs_SearchTextLabel.

Returns:
Search for: Label transformation bean

createDefaultSearchWhatLabel

protected BaseLabel createDefaultSearchWhatLabel()
Creates and returns the default search field text label. The default style class for the Search What: Label is rfs_SearchWhatLabel.

Returns:
search field Label transformation bean which has a default text of Search what:

createDefaultSearchWhereLabel

protected BaseLabel createDefaultSearchWhereLabel()
Creates and returns the default Search where: text label. The default style class for the Search Where: label is rfs_SearchWhereLabel

Returns:
Search where: Label transformation bean

createDefaultSearchSubfoldersLabel

protected java.lang.String createDefaultSearchSubfoldersLabel()
Creates and returns the default Search subfolders text to be used to label the the search subfolders CheckBox component.

Returns:
Search subfolders text string

createDefaultSearchDateTimeLimitsLabel

protected BaseLabel createDefaultSearchDateTimeLimitsLabel()
Creates and returns the default search Date/time Limits: label to be use with the search date limits type component. The default style class for the Date/time Limits: label is rfs_SearchDateTimeLimitsLabel.

Returns:
search Date/time Limits: Label transformation bean

createDefaultSearchInTheLastLabel

protected BaseLabel createDefaultSearchInTheLastLabel()
Creates and returns the default date limit unit Label. The default style clss for the In the Last: Label is rfs_SearchInTheLastLabel.

Returns:
In the last: label

setFormObject

public void setFormObject(Form form)
Sets the form object. The form object is used to submit the search criteria values. Each form object is uniquely named so that multiple selectors will work in a page.

Specified by:
setFormObject in interface FormViewInterface
Parameters:
form - the form object
See Also:
getFormObject()

getFormObject

public Form getFormObject()
Returns the form object.

Specified by:
getFormObject in interface FormViewInterface
Returns:
the form object
See Also:
setFormObject(Form)

getDefaultFormObject

public Form getDefaultFormObject()
Returns the default form object.

Specified by:
getDefaultFormObject in interface FormViewInterface
Returns:
the form object
See Also:
getFormObject()

setFormEnabled

public void setFormEnabled(boolean value)
Determines if the search class should write the FORM tag. The default is true.

Specified by:
setFormEnabled in interface FormViewInterface
Parameters:
value - true if the FORM tag is written, false otherwise
See Also:
isFormEnabled()

isFormEnabled

public boolean isFormEnabled()
Returns whether or not the FORM tag is written by the search class.

Specified by:
isFormEnabled in interface FormViewInterface
Returns:
true if the FORM is written by the search class, false otherwise
See Also:
setFormEnabled(boolean)

getAdditionalParameters

public java.util.HashMap getAdditionalParameters()
Returns an HashMap containing additional parameters that should be added to the form used to perform the search action. The default value is null. Each parameter will be added to the form as a hidden field using the name of the item as the name= parameter on the <input> tag and the value of the item as the value= parameter on the input tag.

Specified by:
getAdditionalParameters in interface FormViewInterface
Returns:
an HashMap containing additional parameters that should be added to the form
See Also:
HashMap

setAdditionalParameters

public void setAdditionalParameters(java.util.HashMap map)
Sets a HashMap containing additional parameters that should be added to the form used to perform the search action. The default value is null. Each parameter will be added to the form as a hidden field using the name of the item as the name= parameter on the <input> tag and the value of the item as the value= parameter on the input tag.

Specified by:
setAdditionalParameters in interface FormViewInterface
Parameters:
map - HashMap object
See Also:
HashMap

setAdditionalParameter

public void setAdditionalParameter(java.lang.String name,
                                   java.lang.String value)
Sets an additional parameter to be added to the form used to perform the search action. In the html version, Each parameter will be added to the form as a hidden field using the name of the item as the name= parameter on the <input> tag and the value of the item as the value= parameter on the input tag.

Specified by:
setAdditionalParameter in interface FormViewInterface
Parameters:
name - name of the list item
value - value of the list item
See Also:
HashMap

setLocaleDependentProperties

protected void setLocaleDependentProperties(java.util.Locale locale)
Sets properties that should be updated if the locale changes.

The setLocale method calls this method so that the dependent properties can be updated.

Overrides:
setLocaleDependentProperties in class BaseTransformation
Parameters:
locale - new locale setting

writeContent

protected void writeContent(java.io.PrintWriter out)
                     throws java.io.IOException
Description copied from class: BaseActionCompositeTransformation2
Writes the transformation's main content which is everything except for the following:

Specified by:
writeContent in class com.sas.servlet.tbeans.BaseActionCompositeTransformation2
Throws:
java.io.IOException
See Also:
BaseActionCompositeTransformation2.write(PrintWriter)



Copyright © 2009 SAS Institute Inc. All Rights Reserved.