001 /* 002 * Copyright (c) 2007-2014 Concurrent, Inc. All Rights Reserved. 003 * 004 * Project and contact information: http://www.cascading.org/ 005 * 006 * This file is part of the Cascading project. 007 * 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 */ 020 021 package cascading.scheme; 022 023 import cascading.tuple.TupleEntry; 024 025 /** 026 * SourceCall provides access to the current {@link Scheme#source(cascading.flow.FlowProcess, SourceCall)} invocation 027 * arguments. 028 * <p/> 029 * Use the Context to store thread local values. 030 * 031 * @param <Context> 032 * @param <Input> 033 */ 034 public interface SourceCall<Context, Input> 035 { 036 /** 037 * Method getContext returns the context of this SourceCall object. 038 * 039 * @return the context (type C) of this SourceCall object. 040 */ 041 Context getContext(); 042 043 /** 044 * Method setContext sets the context of this SourceCall object. 045 * 046 * @param context the context of this SourceCall object. 047 */ 048 void setContext( Context context ); 049 050 /** 051 * Method getIncomingEntry returns a pre-prepared {@link TupleEntry} to be populated 052 * with the input values from {@link #getInput()}. 053 * <p/> 054 * That is, using the getInput() method, retrieve the current incoming values and 055 * place them into the getIncomingEntry() via {@link TupleEntry#setTuple(cascading.tuple.Tuple)} 056 * or by modifying the tuple returned from {@link cascading.tuple.TupleEntry#getTuple()}. 057 * <p/> 058 * The returned Tuple entry is guaranteed to be the size of the declared incoming source fields. 059 * <p/> 060 * The returned TupleEntry from this method is modifiable and is intended to be re-used. This is an exception to 061 * the general rule that passed TupleEntry instances must not be modified. 062 * 063 * @return TupleEntry 064 */ 065 TupleEntry getIncomingEntry(); 066 067 /** 068 * Method getInput returns the input mechanism for the underlying platform used to retrieve new values (records, 069 * lines, etc). 070 * <p/> 071 * Do not cache the returned value as it may change. 072 * 073 * @return the platform dependent input handler 074 */ 075 Input getInput(); 076 }