###############################################################################
##                                                                           ##
##                        ALEXANDRIA DIGITAL LIBRARY                         ##
##                 University of California at Santa Barbara                 ##
##                                                                           ##
## ------------------------------------------------------------------------- ##
##                                                                           ##
##     Copyright (c) 2005 by the Regents of the University of California     ##
##                            All rights reserved                            ##
##                                                                           ##
## Redistribution and use in source and binary forms, with or without        ##
## modification, are permitted provided that the following conditions are    ##
## met:                                                                      ##
##                                                                           ##
##     1. Redistributions of source code must retain the above copyright     ##
##        notice, this list of conditions, and the following disclaimer.     ##
##                                                                           ##
##     2. Redistributions in binary form must reproduce the above copyright  ##
##        notice, this list of conditions, and the following disclaimer in   ##
##        the documentation and/or other materials provided with the         ##
##        distribution.                                                      ##
##                                                                           ##
##     3. All advertising materials mentioning features or use of this       ##
##        software must display the following acknowledgement: This product  ##
##        includes software developed by the Alexandria Digital Library,     ##
##        University of California at Santa Barbara, and its contributors.   ##
##                                                                           ##
##     4. Neither the name of the University nor the names of its            ##
##        contributors may be used to endorse or promote products derived    ##
##        from this software without specific prior written permission.      ##
##                                                                           ##
## THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY ##
## EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ##
## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE   ##
## DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR  ##
## ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL    ##
## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS   ##
## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)     ##
## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,       ##
## STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN  ##
## ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE           ##
## POSSIBILITY OF SUCH DAMAGE.                                               ##
##                                                                           ##
###############################################################################

# $Header: /export/home/gjanee/mm/bucket_types/RCS/relational.py,v 1.1 2005/02/10 21:57:56 gjanee Exp $

# DESCRIPTION
#
#     The "relational" bucket type.
#
# AUTHOR
#
#     Greg Janee
#     gjanee@alexandria.ucsb.edu
#
# HISTORY
#
#     $Log: relational.py,v $
#     Revision 1.1  2005/02/10 21:57:56  gjanee
#     Initial revision
#

from ADL_mapper import bucketType
from bucket_types.utils import checkValue, encodeField

def _validate (bucket, field, value, strict):
    value = checkValue(bucket, "relational", ["!!"], field, value, strict)
    return (field, value)

def _encode (document, field, value):
    rv = document.createElement("relational-value")
    encodeField(document, rv, field)
    r = document.createElement("relation")
    r.appendChild(document.createTextNode(value[0]))
    rv.appendChild(r)
    t = document.createElement("target")
    t.appendChild(document.createTextNode(value[1]))
    rv.appendChild(t)
    return rv

bucketType("relational", _validate, _encode)
