001/*
002 * Copyright 2006-2018 the original author or authors.
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 *      https://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 */
016
017package org.springframework.batch.item;
018
019import org.springframework.lang.Nullable;
020
021/**
022 * Interface for item transformation.  Given an item as input, this interface provides
023 * an extension point which allows for the application of business logic in an item 
024 * oriented processing scenario.  It should be noted that while it's possible to return
025 * a different type than the one provided, it's not strictly necessary.  Furthermore, 
026 * returning null indicates that the item should not be continued to be processed.
027 *  
028 * @author Robert Kasanicky
029 * @author Dave Syer
030 * @author Mahmoud Ben Hassine
031 */
032public interface ItemProcessor<I, O> {
033
034        /**
035         * Process the provided item, returning a potentially modified or new item for continued
036         * processing.  If the returned result is null, it is assumed that processing of the item
037         * should not continue.
038         * 
039         * @param item to be processed
040         * @return potentially modified or new item for continued processing, {@code null} if processing of the
041         *  provided item should not continue.
042         *
043         * @throws Exception thrown if exception occurs during processing.
044         */
045        @Nullable
046        O process(I item) throws Exception;
047}