/**
*    Copyright 2011, Big Switch Networks, Inc. 
*    Originally created by David Erickson, Stanford University
* 
*    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 net.floodlightcontroller.storage;

public class NullValueStorageException extends StorageException {

    private static final long serialVersionUID = 897572085681189926L;

    private static String makeExceptionMessage(String columnName) {
        String message = "Null column value could not be converted to built-in type";
        if (columnName != null) {
            message += ": column name = ";
            message += columnName;
        }
        return message;
    }
    
    public NullValueStorageException() {
        super(makeExceptionMessage(null));
    }
    
    public NullValueStorageException(String columnName) {
        super(makeExceptionMessage(columnName));
    }
    
    public NullValueStorageException(String columnName, Throwable exc) {
        super(makeExceptionMessage(columnName), exc);
    }
}
