/*
* Copyright 2003,2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.geotools.xml.impl;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.ParsePosition;
import java.util.Calendar;
import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
/**
* @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
*
* @source $URL$
*/
public class DatatypeConverterImpl implements DatatypeConverterInterface {
private static DatatypeConverterImpl instance = new DatatypeConverterImpl();
public static DatatypeConverterImpl getInstance() {
return instance;
}
public String parseString(String arg0) {
return arg0;
}
public BigInteger parseInteger(String arg0) {
return new BigInteger(arg0);
}
public int parseInt(String arg0) {
return Integer.parseInt(arg0);
}
public long parseLong(String arg0) {
return Long.parseLong(arg0);
}
public short parseShort(String arg0) {
return Short.parseShort(arg0);
}
public BigDecimal parseDecimal(String arg0) {
return new BigDecimal(arg0);
}
public float parseFloat(String arg0) {
return Float.parseFloat(arg0);
}
public double parseDouble(String arg0) {
return Double.parseDouble(arg0);
}
public boolean parseBoolean(String arg0) {
return Boolean.valueOf(arg0).booleanValue();
}
public byte parseByte(String arg0) {
return Byte.parseByte(arg0);
}
public QName parseQName(String arg0, NamespaceContext arg1) {
int offset = arg0.indexOf(':');
String uri;
String localName;
switch (offset) {
case -1:
localName = arg0;
uri = arg1.getNamespaceURI("");
if (uri == null) {
// Should not happen, indicates an error in the NamespaceContext implementation
throw new IllegalArgumentException("The default prefix is not bound.");
}
break;
case 0:
throw new IllegalArgumentException("Default prefix must be indicated by not using a colon: " + arg0);
default:
String prefix = arg0.substring(0, offset);
localName = arg0.substring(offset+1);
uri = arg1.getNamespaceURI(prefix);
if (uri == null) {
throw new IllegalArgumentException("The prefix " + prefix + " is not bound.");
}
}
return new QName(uri, localName);
}
public Calendar parseDateTime(String arg0) {
XsDateTimeFormat format = new XsDateTimeFormat();
ParsePosition pos = new ParsePosition(0);
Calendar cal = (Calendar) format.parseObject(arg0, pos);
if (cal == null) {
throw new IllegalArgumentException("Failed to parse dateTime " + arg0 +
" at:" + arg0.substring(pos.getErrorIndex()));
}
return cal;
}
public byte[] parseBase64Binary(String arg0) {
try {
return Base64Binary.decode(arg0);
} catch (IOException e) {
throw new IllegalArgumentException("Failed to parse " + arg0 + ": " +
e.getMessage());
}
}
public byte[] parseHexBinary(String arg0) {
return HexBinary.decode(arg0);
}
private static final long MAX_UNSIGNED_INT = (((long) Integer.MAX_VALUE) * 2) + 1;
public long parseUnsignedInt(String arg0) {
long l = Long.parseLong(arg0);
if (l < 0) {
throw new IllegalArgumentException("Failed to parse UnsignedInt " + arg0 + ": result is negative");
}
if (l > MAX_UNSIGNED_INT) {
throw new IllegalArgumentException("Failed to parse UnsignedInt " + arg0 +
": result exceeds maximum value " + MAX_UNSIGNED_INT);
}
return l;
}
private static final int MAX_UNSIGNED_SHORT = Short.MAX_VALUE * 2 + 1;
public int parseUnsignedShort(String arg0) {
int i = Integer.parseInt(arg0);
if (i < 0) {
throw new IllegalArgumentException("Failed to parse UnsignedShort " + arg0 + ": result is negative");
}
if (i > MAX_UNSIGNED_SHORT) {
throw new IllegalArgumentException("Failed to parse UnsignedShort " + arg0 +
": result exceeds maximum value " + MAX_UNSIGNED_SHORT);
}
return i;
}
public Calendar parseTime(String arg0) {
XsTimeFormat format = new XsTimeFormat();
ParsePosition pos = new ParsePosition(0);
Calendar cal = (Calendar) format.parseObject(arg0, pos);
if (cal == null) {
throw new IllegalArgumentException("Failed to parse time " + arg0 +
" at:" + arg0.substring(pos.getErrorIndex()));
}
return cal;
}
public Calendar parseDate(String arg0) {
XsDateFormat format = new XsDateFormat();
ParsePosition pos = new ParsePosition(0);
Calendar cal = (Calendar) format.parseObject(arg0, pos);
if (cal == null) {
throw new IllegalArgumentException("Failed to parse date " + arg0 +
" at:" + arg0.substring(pos.getErrorIndex()));
}
return cal;
}
public String parseAnySimpleType(String arg0) {
return arg0;
}
public Duration parseDuration(String pDuration) {
return Duration.valueOf(pDuration);
}
public String printString(String arg0) {
return arg0;
}
public String printInteger(BigInteger arg0) {
return arg0.toString();
}
public String printInt(int arg0) {
return Integer.toString(arg0);
}
public String printLong(long arg0) {
return Long.toString(arg0);
}
public String printShort(short arg0) {
return Short.toString(arg0);
}
public String printDecimal(BigDecimal arg0) {
return arg0.toString();
}
public String printFloat(float arg0) {
return Float.toString(arg0);
}
public String printDouble(double arg0) {
return Double.toString(arg0);
}
public String printBoolean(boolean arg0) {
return (arg0 ? Boolean.TRUE : Boolean.FALSE).toString();
}
public String printByte(byte arg0) {
return Byte.toString(arg0);
}
public String printQName(QName arg0, NamespaceContext arg1) {
String prefix = arg1.getPrefix(arg0.getNamespaceURI());
if (prefix == null) {
throw new IllegalArgumentException("The namespace URI " +
arg0.getNamespaceURI() +
" is not bound.");
} else if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) {
return arg0.getLocalPart();
} else {
return prefix + ":" + arg0.getLocalPart();
}
}
public String printDateTime(Calendar arg0) {
return new XsDateTimeFormat().format(arg0);
}
public String printBase64Binary(byte[] arg0) {
return Base64Binary.encode(arg0);
}
public String printHexBinary(byte[] arg0) {
return HexBinary.encode(arg0);
}
public String printUnsignedInt(long arg0) {
return Long.toString(arg0);
}
public String printUnsignedShort(int arg0) {
return Integer.toString(arg0);
}
public String printTime(Calendar arg0) {
return new XsTimeFormat().format(arg0);
}
public String printDate(Calendar arg0) {
return new XsDateFormat().format(arg0);
}
public String printAnySimpleType(String arg0) {
return arg0;
}
public String printDuration(Duration pDuration) {
return pDuration.toString();
}
}