001/*
002 *  Copyright 2011 Chris Pheby
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.jadira.bindings.core.api;
017
018/**
019 * Interface for explicitly defining conversions from I to a destination
020 * object type O.
021 * <p>
022 * We utilise super-type tokens to avoid having to include the class type on the
023 * defined method
024 * <p>
025 * Implementations of this class should be idempotent (behaviour should not vary
026 * between calls) and thread-safe.
027 * @param <I> Input type for the conversion
028 * @param <O> Output type
029 */
030public interface Converter<I, O> {
031
032    /**
033     * Converts from the given I into the specified object
034     * @param inputObject I to transform, not null
035     * @return transformed instance of O (this can be null if appropriate)
036     */
037    O convert(I inputObject);
038    
039    /**
040     * Obtain the bound class
041     * @return Class
042     */
043    Class<I> getInputClass();
044    
045    /**
046     * Obtain the bound class
047     * @return Class
048     */
049    Class<O> getOutputClass();
050}