// Path: src/main/java/nl/vu/datalayer/hbase/exceptions/NonNumericalException.java
// public class NonNumericalException extends Exception {
// 
// 	public NonNumericalException() {
// 		super();
// 	}
// 
// 	public NonNumericalException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// 
// 	public NonNumericalException(String message) {
// 		super(message);
// 	}
// 
// 	public NonNumericalException(Throwable cause) {
// 		super(cause);
// 	}
// 	
// }
// 
// Path: src/main/java/nl/vu/datalayer/hbase/exceptions/NumericalRangeException.java
// public class NumericalRangeException extends Exception {
// 
// 	private static final long serialVersionUID = 148584607226955296L;
// 
// 	public NumericalRangeException() {
// 		super();
// 	}
// 
// 	public NumericalRangeException(String message) {
// 		super(message);
// 	}
// 	
// }


import java.math.BigDecimal;
import java.math.BigInteger;
import nl.vu.datalayer.hbase.exceptions.NonNumericalException;
import nl.vu.datalayer.hbase.exceptions.NumericalRangeException;
import org.apache.hadoop.hbase.util.Bytes;
import org.openrdf.model.Literal;
import org.openrdf.model.URI;
import org.openrdf.model.impl.LiteralImpl;
import org.openrdf.model.vocabulary.XMLSchema;
			BigInteger b = l.integerValue();
			if (b.signum() != 1){
				throw new NumericalRangeException("positiveInteger does not accept non-positive values");
			}		
		
			if (b.bitLength() < Long.SIZE*8){
				Bytes.putLong(idSpace, 1, b.longValue());
			}
			else{
				byte []backingArray = b.toByteArray();
				int startOffset = backingArray.length-8;
				Bytes.putBytes(idSpace, 1, backingArray, startOffset, SIZE-1);
			}
			
			return new TypedId(XSD_POSITIVE_INTEGER, idSpace);
		}
		else if (datatype.equals(XMLSchema.DECIMAL)){//2 bytes scale; 6 bytes unscaled
			Bytes.putShort(idSpace, 1, (short)l.decimalValue().scale());
			byte []backingArray = l.decimalValue().unscaledValue().toByteArray();
			int startOffset = backingArray.length-6;
			int length = 6;
			if (startOffset < 0){
				length += startOffset;
				startOffset = 0;
			}
			Bytes.putBytes(idSpace, SIZE-length, backingArray, startOffset, length);
			
			return new TypedId(XSD_DECIMAL, idSpace);
		}
		else
// Path: src/main/java/nl/vu/datalayer/hbase/exceptions/NonNumericalException.java
// public class NonNumericalException extends Exception {
// 
// 	public NonNumericalException() {
// 		super();
// 	}
// 
// 	public NonNumericalException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// 
// 	public NonNumericalException(String message) {
// 		super(message);
// 	}
// 
// 	public NonNumericalException(Throwable cause) {
// 		super(cause);
// 	}
// 	
// }
// 
// Path: src/main/java/nl/vu/datalayer/hbase/exceptions/NumericalRangeException.java
// public class NumericalRangeException extends Exception {
// 
// 	private static final long serialVersionUID = 148584607226955296L;
// 
// 	public NumericalRangeException() {
// 		super();
// 	}
// 
// 	public NumericalRangeException(String message) {
// 		super(message);
// 	}
// 	
// }


// Path: src/main/java/nl/vu/datalayer/hbase/id/TypedId.java
import java.math.BigDecimal;
import java.math.BigInteger;
import nl.vu.datalayer.hbase.exceptions.NonNumericalException;
import nl.vu.datalayer.hbase.exceptions.NumericalRangeException;
import org.apache.hadoop.hbase.util.Bytes;
import org.openrdf.model.Literal;
import org.openrdf.model.URI;
import org.openrdf.model.impl.LiteralImpl;
import org.openrdf.model.vocabulary.XMLSchema;

			BigInteger b = l.integerValue();
			if (b.signum() != 1){
				throw new NumericalRangeException("positiveInteger does not accept non-positive values");
			}		
		
			if (b.bitLength() < Long.SIZE*8){
				Bytes.putLong(idSpace, 1, b.longValue());
			}
			else{
				byte []backingArray = b.toByteArray();
				int startOffset = backingArray.length-8;
				Bytes.putBytes(idSpace, 1, backingArray, startOffset, SIZE-1);
			}
			
			return new TypedId(XSD_POSITIVE_INTEGER, idSpace);
		}
		else if (datatype.equals(XMLSchema.DECIMAL)){//2 bytes scale; 6 bytes unscaled
			Bytes.putShort(idSpace, 1, (short)l.decimalValue().scale());
			byte []backingArray = l.decimalValue().unscaledValue().toByteArray();
			int startOffset = backingArray.length-6;
			int length = 6;
			if (startOffset < 0){
				length += startOffset;
				startOffset = 0;
			}
			Bytes.putBytes(idSpace, SIZE-length, backingArray, startOffset, length);
			
			return new TypedId(XSD_DECIMAL, idSpace);
		}
		else
			throw new NonNumericalException("Not a numerical");