| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 org.apache.hadoop.streaming.io; |
| |
| import org.apache.hadoop.io.BytesWritable; |
| import org.apache.hadoop.io.Text; |
| import org.apache.hadoop.typedbytes.TypedBytesWritable; |
| |
| /** |
| * This class is used to resolve a string identifier into the required IO |
| * classes. By extending this class and pointing the property |
| * <tt>stream.io.identifier.resolver.class</tt> to this extension, additional |
| * IO classes can be added by external code. |
| */ |
| public class IdentifierResolver { |
| |
| // note that the identifiers are case insensitive |
| public static final String TEXT_ID = "text"; |
| public static final String RAW_BYTES_ID = "rawbytes"; |
| public static final String TYPED_BYTES_ID = "typedbytes"; |
| |
| private Class<? extends InputWriter> inputWriterClass = null; |
| private Class<? extends OutputReader> outputReaderClass = null; |
| private Class outputKeyClass = null; |
| private Class outputValueClass = null; |
| |
| /** |
| * Resolves a given identifier. This method has to be called before calling |
| * any of the getters. |
| */ |
| public void resolve(String identifier) { |
| if (identifier.equalsIgnoreCase(RAW_BYTES_ID)) { |
| setInputWriterClass(RawBytesInputWriter.class); |
| setOutputReaderClass(RawBytesOutputReader.class); |
| setOutputKeyClass(BytesWritable.class); |
| setOutputValueClass(BytesWritable.class); |
| } else if (identifier.equalsIgnoreCase(TYPED_BYTES_ID)) { |
| setInputWriterClass(TypedBytesInputWriter.class); |
| setOutputReaderClass(TypedBytesOutputReader.class); |
| setOutputKeyClass(TypedBytesWritable.class); |
| setOutputValueClass(TypedBytesWritable.class); |
| } else { // assume TEXT_ID |
| setInputWriterClass(TextInputWriter.class); |
| setOutputReaderClass(TextOutputReader.class); |
| setOutputKeyClass(Text.class); |
| setOutputValueClass(Text.class); |
| } |
| } |
| |
| /** |
| * Returns the resolved {@link InputWriter} class. |
| */ |
| public Class<? extends InputWriter> getInputWriterClass() { |
| return inputWriterClass; |
| } |
| |
| /** |
| * Returns the resolved {@link OutputReader} class. |
| */ |
| public Class<? extends OutputReader> getOutputReaderClass() { |
| return outputReaderClass; |
| } |
| |
| /** |
| * Returns the resolved output key class. |
| */ |
| public Class getOutputKeyClass() { |
| return outputKeyClass; |
| } |
| |
| /** |
| * Returns the resolved output value class. |
| */ |
| public Class getOutputValueClass() { |
| return outputValueClass; |
| } |
| |
| |
| /** |
| * Sets the {@link InputWriter} class. |
| */ |
| protected void setInputWriterClass(Class<? extends InputWriter> |
| inputWriterClass) { |
| this.inputWriterClass = inputWriterClass; |
| } |
| |
| /** |
| * Sets the {@link OutputReader} class. |
| */ |
| protected void setOutputReaderClass(Class<? extends OutputReader> |
| outputReaderClass) { |
| this.outputReaderClass = outputReaderClass; |
| } |
| |
| /** |
| * Sets the output key class class. |
| */ |
| protected void setOutputKeyClass(Class outputKeyClass) { |
| this.outputKeyClass = outputKeyClass; |
| } |
| |
| /** |
| * Sets the output value class. |
| */ |
| protected void setOutputValueClass(Class outputValueClass) { |
| this.outputValueClass = outputValueClass; |
| } |
| |
| } |