RecordTypeInfo.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
- /**
- * 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.record.meta;
- import java.io.IOException;
- import java.util.*;
- import org.apache.hadoop.record.RecordInput;
- import org.apache.hadoop.record.RecordOutput;
- /**
- * A record's Type Information object which can read/write itself.
- *
- * Type information for a record comprises metadata about the record,
- * as well as a collection of type information for each field in the record.
- */
- public class RecordTypeInfo extends org.apache.hadoop.record.Record
- {
- private String name;
- // A RecordTypeInfo is really just a wrapper around StructTypeID
- StructTypeID sTid;
- // A RecordTypeInfo object is just a collection of TypeInfo objects for each of its fields.
- //private ArrayList<FieldTypeInfo> typeInfos = new ArrayList<FieldTypeInfo>();
- // we keep a hashmap of struct/record names and their type information, as we need it to
- // set filters when reading nested structs. This map is used during deserialization.
- //private Map<String, RecordTypeInfo> structRTIs = new HashMap<String, RecordTypeInfo>();
- /**
- * Create an empty RecordTypeInfo object.
- */
- public RecordTypeInfo() {
- sTid = new StructTypeID();
- }
- /**
- * Create a RecordTypeInfo object representing a record with the given name
- * @param name Name of the record
- */
- public RecordTypeInfo(String name) {
- this.name = name;
- sTid = new StructTypeID();
- }
- /*
- * private constructor
- */
- private RecordTypeInfo(String name, StructTypeID stid) {
- this.sTid = stid;
- this.name = name;
- }
-
- /**
- * return the name of the record
- */
- public String getName() {
- return name;
- }
- /**
- * set the name of the record
- */
- public void setName(String name) {
- this.name = name;
- }
- /**
- * Add a field.
- * @param fieldName Name of the field
- * @param tid Type ID of the field
- */
- public void addField(String fieldName, TypeID tid) {
- sTid.getFieldTypeInfos().add(new FieldTypeInfo(fieldName, tid));
- }
-
- private void addAll(Collection<FieldTypeInfo> tis) {
- sTid.getFieldTypeInfos().addAll(tis);
- }
- /**
- * Return a collection of field type infos
- */
- public Collection<FieldTypeInfo> getFieldTypeInfos() {
- return sTid.getFieldTypeInfos();
- }
-
- /**
- * Return the type info of a nested record. We only consider nesting
- * to one level.
- * @param name Name of the nested record
- */
- public RecordTypeInfo getNestedStructTypeInfo(String name) {
- StructTypeID stid = sTid.findStruct(name);
- if (null == stid) return null;
- return new RecordTypeInfo(name, stid);
- }
- /**
- * Serialize the type information for a record
- */
- public void serialize(RecordOutput rout, String tag) throws IOException {
- // write out any header, version info, here
- rout.startRecord(this, tag);
- rout.writeString(name, tag);
- sTid.writeRest(rout, tag);
- rout.endRecord(this, tag);
- }
- /**
- * Deserialize the type information for a record
- */
- public void deserialize(RecordInput rin, String tag) throws IOException {
- // read in any header, version info
- rin.startRecord(tag);
- // name
- this.name = rin.readString(tag);
- sTid.read(rin, tag);
- rin.endRecord(tag);
- }
-
- /**
- * This class doesn't implement Comparable as it's not meant to be used
- * for anything besides de/serializing.
- * So we always throw an exception.
- * Not implemented. Always returns 0 if another RecordTypeInfo is passed in.
- */
- public int compareTo (final Object peer_) throws ClassCastException {
- if (!(peer_ instanceof RecordTypeInfo)) {
- throw new ClassCastException("Comparing different types of records.");
- }
- throw new UnsupportedOperationException("compareTo() is not supported");
- }
- }