org.kuali.rice.kns.workflow.service.impl
Class KualiWorkflowDocumentImpl

java.lang.Object
  extended by org.kuali.rice.kns.workflow.service.impl.KualiWorkflowDocumentImpl
All Implemented Interfaces:
Serializable, KualiWorkflowDocument

public class KualiWorkflowDocumentImpl
extends Object
implements KualiWorkflowDocument, Serializable

See Also:
Serialized Form

Field Summary
private  WorkflowDocument workflowDocument
           
 
Constructor Summary
KualiWorkflowDocumentImpl(String principalId, Long routeHeaderId)
           
KualiWorkflowDocumentImpl(String principalId, String documentType)
           
 
Method Summary
 void acknowledge(String annotation)
           
 void addAttributeDefinition(WorkflowAttributeDefinitionDTO attributeDefinition)
          Adds an attribute definition which defines creation parameters for a WorkflowAttribute implementation.
 void addSearchableDefinition(WorkflowAttributeDefinitionDTO searchableDefinition)
          Adds a searchable attribute definition which defines creation parameters for a SearchableAttribute implementation.
 void adHocRouteDocumentToGroup(String actionRequested, String routeTypeName, String annotation, String groupId, String responsibilityDesc, boolean forceAction)
           
 void adHocRouteDocumentToGroup(String actionRequested, String routeTypeName, String annotation, String groupId, String responsibilityDesc, boolean forceAction, String actionRequestLabel)
           
 void adHocRouteDocumentToPrincipal(String actionRequested, String routeTypeName, String annotation, String principalId, String responsibilityDesc, boolean forceAction)
           
 void adHocRouteDocumentToPrincipal(String actionRequested, String routeTypeName, String annotation, String principalId, String responsibilityDesc, boolean forceAction, String actionRequestLabel)
           
 void approve(String annotation)
           
 void blanketApprove(String annotation)
           
 void cancel(String annotation)
           
 void clearAttributeContent()
          Clears all attribute document content from the document.
 void clearAttributeDefinitions()
           
 void clearSearchableDefinitions()
           
 void complete(String annotation)
           
 void delete()
           
 void disapprove(String annotation)
           
 void fyi()
           
 Set<Person> getAllPriorApprovers()
          This method returns a set of all approvers of this document.
 String getAppDocId()
           
 String getApplicationContent()
          Returns the application specific document content.
 String getAttributeContent()
          Returns the attribute-generated document content.
 WorkflowAttributeDefinitionDTO[] getAttributeDefinitions()
           
 Timestamp getCreateDate()
           
 String getCurrentRouteNodeNames()
          Returns the current node names of the document delimited by the constant: DocumentRouteHeaderValue#CURRENT_ROUTE_NODE_NAME_DELIMITER
 Integer getDocRouteLevel()
           
 String getDocumentType()
           
 String getInitiatorPrincipalId()
           
 String[] getNodeNames()
          Returns the names of the nodes that the document is currently at.
 String getRoutedByPrincipalId()
           
 RouteHeaderDTO getRouteHeader()
           
 Long getRouteHeaderId()
           
 WorkflowAttributeDefinitionDTO[] getSearchableDefinitions()
           
 String getStatusDisplayValue()
           
 String getTitle()
           
 boolean isAcknowledgeRequested()
          Returns true if the user currently has this document in their Action List with an Acknowledge Request.
 boolean isAdHocRequested()
          This method determines whether workflowDocument.getUserId() currently has an ad hoc request is his/her action list
 boolean isApprovalRequested()
          Returns true if the user currently has this document in their Action List with an Approval Request.
 boolean isBlanketApproveCapable()
          Returns true if the user is authorized to Blanket Approve this document.
 boolean isCompletionRequested()
          Returns true if the user currently has this document in their Action List with an Completion Request.
 boolean isFYIRequested()
          Returns true if the user currently has this document in their Action List with an FYI.
 boolean isStandardSaveAllowed()
          Checks to see if this document is allowed to have a standard 'save' performed
 void logDocumentAction(String annotation)
           
 void refreshContent()
           
 void removeAttributeDefinition(WorkflowAttributeDefinitionDTO attributeDefinition)
           
 void removeSearchableDefinition(WorkflowAttributeDefinitionDTO searchableDefinition)
           
 void returnToPreviousNode(String annotation, ReturnPointDTO returnPoint)
          Performs the 'returnToPrevious' action on the document this WorkflowDocument represents.
 void returnToPreviousNode(String annotation, String nodeName)
          Performs the 'returnToPrevious' action on the document this WorkflowDocument represents.
 void returnToPreviousRouteLevel(String annotation, Integer destRouteLevel)
          Deprecated.  
 void routeDocument(String annotation)
           
 void saveDocument(String annotation)
           
 void saveRoutingData()
           
 void setAppDocId(String appDocId)
           
 void setApplicationContent(String applicationContent)
          Sets the application specific document content.
 void setClearFutureRequests()
           
 void setDoNotReceiveFutureRequests()
           
 void setReceiveFutureRequests()
           
 void setTitle(String title)
           
 boolean stateIsApproved()
          Indicates if the document is in the approved state or not.
 boolean stateIsCanceled()
          Indicates if the document is in the canceled state or not.
 boolean stateIsDisapproved()
          Indicates if the document is in the disapproved state or not.
 boolean stateIsEnroute()
          Indicates if the document is in the enroute state or not.
 boolean stateIsException()
          Indicates if the document is in the exception state or not.
 boolean stateIsFinal()
          Indicates if the document is in the final state or not.
 boolean stateIsInitiated()
          Indicates if the document is in the initated state or not.
 boolean stateIsProcessed()
          Indicates if the document is in the processed state or not.
 boolean stateIsSaved()
          Indicates if the document is in the saved state or not.
 void superUserActionRequestApprove(Long actionRequestId, String annotation)
           
 void superUserApprove(String annotation)
           
 void superUserCancel(String annotation)
           
 void superUserDisapprove(String annotation)
           
 String toString()
           
 boolean userIsInitiator(Person user)
          Returns true if the principalName of the given KualiUser matches the initiatorNetworkId of this document
 boolean userIsRoutedByUser(Person user)
          Returns true if the principalName of the given KualiUser matches the routedByUserNetworkId of this document
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

workflowDocument

private WorkflowDocument workflowDocument
Constructor Detail

KualiWorkflowDocumentImpl

public KualiWorkflowDocumentImpl(String principalId,
                                 String documentType)
                          throws WorkflowException
Throws:
WorkflowException

KualiWorkflowDocumentImpl

public KualiWorkflowDocumentImpl(String principalId,
                                 Long routeHeaderId)
                          throws WorkflowException
Throws:
WorkflowException
Method Detail

getApplicationContent

public String getApplicationContent()
Returns the application specific document content. For documents routed prior to Workflow 2.0: If the application did NOT use attributes for XML generation, this method will return the entire document content XML. Otherwise it will return the empty string.

Specified by:
getApplicationContent in interface KualiWorkflowDocument

setApplicationContent

public void setApplicationContent(String applicationContent)
Sets the application specific document content.

Specified by:
setApplicationContent in interface KualiWorkflowDocument

clearAttributeContent

public void clearAttributeContent()
Clears all attribute document content from the document. Typically, this will be used if it is necessary to update the attribute doc content on the document. This can be accomplished by clearing the content and then adding the desired attribute definitions. In order for these changes to take effect, an action must be performed on the document (such as "save").

Specified by:
clearAttributeContent in interface KualiWorkflowDocument

getAttributeContent

public String getAttributeContent()
Returns the attribute-generated document content.

Specified by:
getAttributeContent in interface KualiWorkflowDocument

addAttributeDefinition

public void addAttributeDefinition(WorkflowAttributeDefinitionDTO attributeDefinition)
Adds an attribute definition which defines creation parameters for a WorkflowAttribute implementation. The created attribute will be used to generate attribute document content. When the document is sent to the server, this will be appended to the existing attribute doc content. If it is required to replace the attribute document content, then the clearAttributeContent() method should be invoked prior to adding attribute definitions.

Specified by:
addAttributeDefinition in interface KualiWorkflowDocument

removeAttributeDefinition

public void removeAttributeDefinition(WorkflowAttributeDefinitionDTO attributeDefinition)
Specified by:
removeAttributeDefinition in interface KualiWorkflowDocument

clearAttributeDefinitions

public void clearAttributeDefinitions()
Specified by:
clearAttributeDefinitions in interface KualiWorkflowDocument

getAttributeDefinitions

public WorkflowAttributeDefinitionDTO[] getAttributeDefinitions()
Specified by:
getAttributeDefinitions in interface KualiWorkflowDocument

addSearchableDefinition

public void addSearchableDefinition(WorkflowAttributeDefinitionDTO searchableDefinition)
Adds a searchable attribute definition which defines creation parameters for a SearchableAttribute implementation. The created attribute will be used to generate searchable document content. When the document is sent to the server, this will be appended to the existing searchable doc content. If it is required to replace the searchable document content, then the clearSearchableContent() method should be invoked prior to adding definitions.

Specified by:
addSearchableDefinition in interface KualiWorkflowDocument

removeSearchableDefinition

public void removeSearchableDefinition(WorkflowAttributeDefinitionDTO searchableDefinition)
Specified by:
removeSearchableDefinition in interface KualiWorkflowDocument

clearSearchableDefinitions

public void clearSearchableDefinitions()
Specified by:
clearSearchableDefinitions in interface KualiWorkflowDocument

getSearchableDefinitions

public WorkflowAttributeDefinitionDTO[] getSearchableDefinitions()
Specified by:
getSearchableDefinitions in interface KualiWorkflowDocument

getRouteHeader

public RouteHeaderDTO getRouteHeader()
Specified by:
getRouteHeader in interface KualiWorkflowDocument

getRouteHeaderId

public Long getRouteHeaderId()
                      throws WorkflowException
Specified by:
getRouteHeaderId in interface KualiWorkflowDocument
Throws:
WorkflowException

setAppDocId

public void setAppDocId(String appDocId)
Specified by:
setAppDocId in interface KualiWorkflowDocument

getAppDocId

public String getAppDocId()
Specified by:
getAppDocId in interface KualiWorkflowDocument

getTitle

public String getTitle()
Specified by:
getTitle in interface KualiWorkflowDocument

getInitiatorPrincipalId

public String getInitiatorPrincipalId()
Specified by:
getInitiatorPrincipalId in interface KualiWorkflowDocument

getRoutedByPrincipalId

public String getRoutedByPrincipalId()
Specified by:
getRoutedByPrincipalId in interface KualiWorkflowDocument

saveDocument

public void saveDocument(String annotation)
                  throws WorkflowException
Specified by:
saveDocument in interface KualiWorkflowDocument
Throws:
WorkflowException

routeDocument

public void routeDocument(String annotation)
                   throws WorkflowException
Specified by:
routeDocument in interface KualiWorkflowDocument
Throws:
WorkflowException

disapprove

public void disapprove(String annotation)
                throws WorkflowException
Specified by:
disapprove in interface KualiWorkflowDocument
Throws:
WorkflowException

approve

public void approve(String annotation)
             throws WorkflowException
Specified by:
approve in interface KualiWorkflowDocument
Throws:
WorkflowException

superUserApprove

public void superUserApprove(String annotation)
                      throws WorkflowException
Specified by:
superUserApprove in interface KualiWorkflowDocument
Throws:
WorkflowException

superUserActionRequestApprove

public void superUserActionRequestApprove(Long actionRequestId,
                                          String annotation)
                                   throws WorkflowException
Specified by:
superUserActionRequestApprove in interface KualiWorkflowDocument
Throws:
WorkflowException

superUserCancel

public void superUserCancel(String annotation)
                     throws WorkflowException
Specified by:
superUserCancel in interface KualiWorkflowDocument
Throws:
WorkflowException

superUserDisapprove

public void superUserDisapprove(String annotation)
                         throws WorkflowException
Specified by:
superUserDisapprove in interface KualiWorkflowDocument
Throws:
WorkflowException

cancel

public void cancel(String annotation)
            throws WorkflowException
Specified by:
cancel in interface KualiWorkflowDocument
Throws:
WorkflowException

blanketApprove

public void blanketApprove(String annotation)
                    throws WorkflowException
Specified by:
blanketApprove in interface KualiWorkflowDocument
Throws:
WorkflowException

saveRoutingData

public void saveRoutingData()
                     throws WorkflowException
Specified by:
saveRoutingData in interface KualiWorkflowDocument
Throws:
WorkflowException

acknowledge

public void acknowledge(String annotation)
                 throws WorkflowException
Specified by:
acknowledge in interface KualiWorkflowDocument
Throws:
WorkflowException

fyi

public void fyi()
         throws WorkflowException
Specified by:
fyi in interface KualiWorkflowDocument
Throws:
WorkflowException

delete

public void delete()
            throws WorkflowException
Specified by:
delete in interface KualiWorkflowDocument
Throws:
WorkflowException

refreshContent

public void refreshContent()
                    throws WorkflowException
Specified by:
refreshContent in interface KualiWorkflowDocument
Throws:
WorkflowException

adHocRouteDocumentToPrincipal

public void adHocRouteDocumentToPrincipal(String actionRequested,
                                          String routeTypeName,
                                          String annotation,
                                          String principalId,
                                          String responsibilityDesc,
                                          boolean forceAction)
                                   throws WorkflowException
Specified by:
adHocRouteDocumentToPrincipal in interface KualiWorkflowDocument
Throws:
WorkflowException

adHocRouteDocumentToGroup

public void adHocRouteDocumentToGroup(String actionRequested,
                                      String routeTypeName,
                                      String annotation,
                                      String groupId,
                                      String responsibilityDesc,
                                      boolean forceAction)
                               throws WorkflowException
Specified by:
adHocRouteDocumentToGroup in interface KualiWorkflowDocument
Throws:
WorkflowException

adHocRouteDocumentToPrincipal

public void adHocRouteDocumentToPrincipal(String actionRequested,
                                          String routeTypeName,
                                          String annotation,
                                          String principalId,
                                          String responsibilityDesc,
                                          boolean forceAction,
                                          String actionRequestLabel)
                                   throws WorkflowException
Specified by:
adHocRouteDocumentToPrincipal in interface KualiWorkflowDocument
Throws:
WorkflowException

adHocRouteDocumentToGroup

public void adHocRouteDocumentToGroup(String actionRequested,
                                      String routeTypeName,
                                      String annotation,
                                      String groupId,
                                      String responsibilityDesc,
                                      boolean forceAction,
                                      String actionRequestLabel)
                               throws WorkflowException
Specified by:
adHocRouteDocumentToGroup in interface KualiWorkflowDocument
Throws:
WorkflowException

setTitle

public void setTitle(String title)
              throws WorkflowException
Specified by:
setTitle in interface KualiWorkflowDocument
Throws:
WorkflowException

getDocumentType

public String getDocumentType()
Specified by:
getDocumentType in interface KualiWorkflowDocument

isAdHocRequested

public boolean isAdHocRequested()
Description copied from interface: KualiWorkflowDocument
This method determines whether workflowDocument.getUserId() currently has an ad hoc request is his/her action list

Specified by:
isAdHocRequested in interface KualiWorkflowDocument
Returns:
boolean indicating whether there is an active ad hoc request for this user
See Also:
KualiWorkflowDocument.isAdHocRequested()

isAcknowledgeRequested

public boolean isAcknowledgeRequested()
Description copied from interface: KualiWorkflowDocument
Returns true if the user currently has this document in their Action List with an Acknowledge Request. The user in this case is whatever user was passed in when the document was loaded. This is typically the current webapp user.

Specified by:
isAcknowledgeRequested in interface KualiWorkflowDocument
Returns:
true if the user has the document in their Action List waiting for an Acknowledgement, false otherwise.
See Also:
KualiWorkflowDocument.isAcknowledgeRequested()

isApprovalRequested

public boolean isApprovalRequested()
Description copied from interface: KualiWorkflowDocument
Returns true if the user currently has this document in their Action List with an Approval Request. The user in this case is whatever user was passed in when the document was loaded. This is typically the current webapp user.

Specified by:
isApprovalRequested in interface KualiWorkflowDocument
Returns:
true if the user has the document in their Action List waiting for an Approval, false otherwise.
See Also:
KualiWorkflowDocument.isApprovalRequested()

isCompletionRequested

public boolean isCompletionRequested()
Description copied from interface: KualiWorkflowDocument
Returns true if the user currently has this document in their Action List with an Completion Request. The user in this case is whatever user was passed in when the document was loaded. This is typically the current webapp user.

Specified by:
isCompletionRequested in interface KualiWorkflowDocument
Returns:
true if the user has the document in their Action List waiting for a Completion, false otherwise.
See Also:
KualiWorkflowDocument.isCompletionRequested()

isFYIRequested

public boolean isFYIRequested()
Description copied from interface: KualiWorkflowDocument
Returns true if the user currently has this document in their Action List with an FYI. The user in this case is whatever user was passed in when the document was loaded. This is typically the current webapp user.

Specified by:
isFYIRequested in interface KualiWorkflowDocument
Returns:
true if the user has the document in their Action List waiting for an FYI, false otherwise.
See Also:
KualiWorkflowDocument.isFYIRequested()

isBlanketApproveCapable

public boolean isBlanketApproveCapable()
Description copied from interface: KualiWorkflowDocument
Returns true if the user is authorized to Blanket Approve this document. The user in this case is whatever user was passed in when the document was loaded. This is typically the current webapp user.

Specified by:
isBlanketApproveCapable in interface KualiWorkflowDocument
Returns:
true if the user is authorized to Blanket Approve this document, false otherwise.
See Also:
KualiWorkflowDocument.isBlanketApproveCapable()

getDocRouteLevel

public Integer getDocRouteLevel()
Specified by:
getDocRouteLevel in interface KualiWorkflowDocument

complete

public void complete(String annotation)
              throws WorkflowException
Specified by:
complete in interface KualiWorkflowDocument
Parameters:
annotation -
Throws:
InvalidActionTakenException
ResourceUnavailableException
WorkflowException

returnToPreviousNode

public void returnToPreviousNode(String annotation,
                                 String nodeName)
                          throws WorkflowException
Performs the 'returnToPrevious' action on the document this WorkflowDocument represents. If this is a new document, the document is created first.

Specified by:
returnToPreviousNode in interface KualiWorkflowDocument
Parameters:
annotation - the message to log for the action
nodeName - the node to return to
Throws:
WorkflowException - in case an error occurs returning to previous node
See Also:
WorkflowDocumentActions.returnDocumentToPreviousNode(String, RouteHeaderDTO, ReturnPointDTO, String)

returnToPreviousNode

public void returnToPreviousNode(String annotation,
                                 ReturnPointDTO returnPoint)
                          throws WorkflowException
Performs the 'returnToPrevious' action on the document this WorkflowDocument represents. If this is a new document, the document is created first.

Specified by:
returnToPreviousNode in interface KualiWorkflowDocument
Parameters:
annotation - the message to log for the action
ReturnPointDTO - the node to return to
Throws:
WorkflowException - in case an error occurs returning to previous node
See Also:
WorkflowDocumentActions.returnDocumentToPreviousNode(String, RouteHeaderDTO, ReturnPointDTO, String)

returnToPreviousRouteLevel

public void returnToPreviousRouteLevel(String annotation,
                                       Integer destRouteLevel)
                                throws WorkflowException
Deprecated. 

Specified by:
returnToPreviousRouteLevel in interface KualiWorkflowDocument
Parameters:
annotation -
destRouteLevel -
Throws:
WorkflowException
InvalidActionTakenException
ResourceUnavailableException

logDocumentAction

public void logDocumentAction(String annotation)
                       throws WorkflowException
Specified by:
logDocumentAction in interface KualiWorkflowDocument
Throws:
WorkflowException

stateIsInitiated

public boolean stateIsInitiated()
Indicates if the document is in the initated state or not.

Specified by:
stateIsInitiated in interface KualiWorkflowDocument
Returns:
true if in the specified state

stateIsSaved

public boolean stateIsSaved()
Indicates if the document is in the saved state or not.

Specified by:
stateIsSaved in interface KualiWorkflowDocument
Returns:
true if in the specified state

stateIsEnroute

public boolean stateIsEnroute()
Indicates if the document is in the enroute state or not.

Specified by:
stateIsEnroute in interface KualiWorkflowDocument
Returns:
true if in the specified state

stateIsFinal

public boolean stateIsFinal()
Indicates if the document is in the final state or not.

Specified by:
stateIsFinal in interface KualiWorkflowDocument
Returns:
true if in the specified state

stateIsException

public boolean stateIsException()
Indicates if the document is in the exception state or not.

Specified by:
stateIsException in interface KualiWorkflowDocument
Returns:
true if in the specified state

stateIsCanceled

public boolean stateIsCanceled()
Indicates if the document is in the canceled state or not.

Specified by:
stateIsCanceled in interface KualiWorkflowDocument
Returns:
true if in the specified state

stateIsDisapproved

public boolean stateIsDisapproved()
Indicates if the document is in the disapproved state or not.

Specified by:
stateIsDisapproved in interface KualiWorkflowDocument
Returns:
true if in the specified state

stateIsApproved

public boolean stateIsApproved()
Indicates if the document is in the approved state or not. Will answer true is document is in Processed or Finalized state.

Specified by:
stateIsApproved in interface KualiWorkflowDocument
Returns:
true if in the specified state

stateIsProcessed

public boolean stateIsProcessed()
Indicates if the document is in the processed state or not.

Specified by:
stateIsProcessed in interface KualiWorkflowDocument
Returns:
true if in the specified state

getStatusDisplayValue

public String getStatusDisplayValue()
Specified by:
getStatusDisplayValue in interface KualiWorkflowDocument

getCreateDate

public Timestamp getCreateDate()
Specified by:
getCreateDate in interface KualiWorkflowDocument

userIsInitiator

public boolean userIsInitiator(Person user)
Description copied from interface: KualiWorkflowDocument
Returns true if the principalName of the given KualiUser matches the initiatorNetworkId of this document

Specified by:
userIsInitiator in interface KualiWorkflowDocument
Returns:
true if the given user is the initiator of this document
See Also:
org.kuali.rice.kns.workflow.service.KualiWorkflowDocument#userIsInitiator(org.kuali.rice.kns.bo.user.KualiUser)

userIsRoutedByUser

public boolean userIsRoutedByUser(Person user)
Description copied from interface: KualiWorkflowDocument
Returns true if the principalName of the given KualiUser matches the routedByUserNetworkId of this document

Specified by:
userIsRoutedByUser in interface KualiWorkflowDocument
Returns:
true if the given user is the user who routed this document
See Also:
org.kuali.rice.kns.workflow.service.KualiWorkflowDocument#userIsRoutedByUser(org.kuali.rice.kns.bo.user.KualiUser)

getNodeNames

public String[] getNodeNames()
                      throws WorkflowException
Description copied from interface: KualiWorkflowDocument
Returns the names of the nodes that the document is currently at.

Specified by:
getNodeNames in interface KualiWorkflowDocument
Throws:
WorkflowException

getCurrentRouteNodeNames

public String getCurrentRouteNodeNames()
Description copied from interface: KualiWorkflowDocument
Returns the current node names of the document delimited by the constant: DocumentRouteHeaderValue#CURRENT_ROUTE_NODE_NAME_DELIMITER

Specified by:
getCurrentRouteNodeNames in interface KualiWorkflowDocument

isStandardSaveAllowed

public boolean isStandardSaveAllowed()
Description copied from interface: KualiWorkflowDocument
Checks to see if this document is allowed to have a standard 'save' performed

Specified by:
isStandardSaveAllowed in interface KualiWorkflowDocument
Returns:
true if the saveDocument() method is valid to be called.... false otherwise

setReceiveFutureRequests

public void setReceiveFutureRequests()
                              throws WorkflowException
Specified by:
setReceiveFutureRequests in interface KualiWorkflowDocument
Throws:
WorkflowException

setDoNotReceiveFutureRequests

public void setDoNotReceiveFutureRequests()
                                   throws WorkflowException
Specified by:
setDoNotReceiveFutureRequests in interface KualiWorkflowDocument
Throws:
WorkflowException

setClearFutureRequests

public void setClearFutureRequests()
                            throws WorkflowException
Specified by:
setClearFutureRequests in interface KualiWorkflowDocument
Throws:
WorkflowException

toString

public String toString()
Overrides:
toString in class Object
See Also:
Object.toString()

getAllPriorApprovers

public Set<Person> getAllPriorApprovers()
                                 throws WorkflowException
Description copied from interface: KualiWorkflowDocument
This method returns a set of all approvers of this document.

Specified by:
getAllPriorApprovers in interface KualiWorkflowDocument
Returns:
a set of all approvers
Throws:
WorkflowException
See Also:
KualiWorkflowDocument.getAllPriorApprovers()


Copyright © 2007-2011 The Kuali Foundation. All Rights Reserved.