001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package org.apache.hadoop.record.compiler;
020    
021    import java.io.IOException;
022    import java.util.ArrayList;
023    
024    import org.apache.hadoop.classification.InterfaceAudience;
025    import org.apache.hadoop.classification.InterfaceStability;
026    
027    /**
028     * Container for the Hadoop Record DDL.
029     * The main components of the file are filename, list of included files,
030     * and records defined in that file.
031     * 
032     * @deprecated Replaced by <a href="https://hadoop.apache.org/avro/">Avro</a>.
033     */
034    @Deprecated
035    @InterfaceAudience.Public
036    @InterfaceStability.Stable
037    public class JFile {
038      /** Possibly full name of the file */
039      private String mName;
040      /** Ordered list of included files */
041      private ArrayList<JFile> mInclFiles;
042      /** Ordered list of records declared in this file */
043      private ArrayList<JRecord> mRecords;
044        
045      /** Creates a new instance of JFile
046       *
047       * @param name possibly full pathname to the file
048       * @param inclFiles included files (as JFile)
049       * @param recList List of records defined within this file
050       */
051      public JFile(String name, ArrayList<JFile> inclFiles,
052                   ArrayList<JRecord> recList) {
053        mName = name;
054        mInclFiles = inclFiles;
055        mRecords = recList;
056      }
057        
058      /** Strip the other pathname components and return the basename */
059      String getName() {
060        int idx = mName.lastIndexOf('/');
061        return (idx > 0) ? mName.substring(idx) : mName; 
062      }
063        
064      /** Generate record code in given language. Language should be all
065       *  lowercase.
066       */
067      public int genCode(String language, String destDir, ArrayList<String> options)
068        throws IOException {
069        CodeGenerator gen = CodeGenerator.get(language);
070        if (gen != null) {
071          gen.genCode(mName, mInclFiles, mRecords, destDir, options);
072        } else {
073          System.err.println("Cannnot recognize language:"+language);
074          return 1;
075        }
076        return 0;
077      }
078    }