001: /******************************************************************
002: * File: XSDbase64binary.java
003: * Created by: Dave Reynolds
004: * Created on: 01-May-2004
005: *
006: * (c) Copyright 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP, all rights reserved.
007: * [See end of file]
008: * $Id: XSDbase64Binary.java,v 1.11 2008/01/02 12:10:49 andy_seaborne Exp $
009: *****************************************************************/package com.hp.hpl.jena.datatypes.xsd;
010:
011: import java.util.Arrays;
012:
013: import org.apache.xerces.impl.dv.util.Base64;
014: import com.hp.hpl.jena.datatypes.DatatypeFormatException;
015: import com.hp.hpl.jena.graph.impl.LiteralLabel;
016:
017: /**
018: * Implement base64binary type. Most of the work is done in the superclass.
019: * This only needs to implement the unparsing.
020: *
021: * @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
022: * @version $Revision: 1.11 $ on $Date: 2008/01/02 12:10:49 $
023: */
024: public class XSDbase64Binary extends XSDDatatype {
025:
026: /**
027: * Constructor.
028: * @param typeName the name of the XSD type to be instantiated, this is
029: * used to lookup a type definition from the Xerces schema factory.
030: */
031: public XSDbase64Binary(String typeName) {
032: super (typeName, byte[].class);
033: }
034:
035: /**
036: * Test whether the given object is a legal value form
037: * of this datatype. Brute force implementation.
038: */
039: public boolean isValidValue(Object valueForm) {
040: return (valueForm instanceof byte[]);
041: }
042:
043: /**
044: * Convert a value of this datatype out
045: * to lexical form.
046: */
047: public String unparse(Object value) {
048: if (value instanceof byte[]) {
049: return Base64.encode((byte[]) value);
050: } else {
051: throw new DatatypeFormatException(
052: "base64 asked to encode an unwrapped byte array");
053: }
054: }
055:
056: /**
057: * Compares two instances of values of the given datatype.
058: * This ignores lang tags and just uses the java.lang.Number
059: * equality.
060: */
061: public boolean isEqual(LiteralLabel value1, LiteralLabel value2) {
062: return value1.getDatatype() == value2.getDatatype()
063: && Arrays.equals((byte[]) value1.getValue(),
064: (byte[]) value2.getValue());
065: // && value1.getLexicalForm().equals(value2.getLexicalForm()); // bug tracking, not real code
066: }
067:
068: public int getHashCode(LiteralLabel lit) {
069: return getHashCode((byte[]) lit.getValue());
070: }
071: }
072:
073: /*
074: (c) Copyright 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
075: All rights reserved.
076:
077: Redistribution and use in source and binary forms, with or without
078: modification, are permitted provided that the following conditions
079: are met:
080:
081: 1. Redistributions of source code must retain the above copyright
082: notice, this list of conditions and the following disclaimer.
083:
084: 2. Redistributions in binary form must reproduce the above copyright
085: notice, this list of conditions and the following disclaimer in the
086: documentation and/or other materials provided with the distribution.
087:
088: 3. The name of the author may not be used to endorse or promote products
089: derived from this software without specific prior written permission.
090:
091: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
092: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
093: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
094: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
095: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
096: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
097: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
098: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
099: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
100: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
101: */
|