public static void main()

in src/main/java/com/netflix/imflibrary/app/IMFTrackFileReader.java [691:772]


    public static void main(String[] args) throws IOException
    {

        if (args.length != 2)
        {
            logger.error(usage());
            throw new IllegalArgumentException("Invalid parameters");
        }

        File inputFile = new File(args[0]);
        if(!inputFile.exists()){
            logger.error(String.format("File %s does not exist", inputFile.getAbsolutePath()));
            System.exit(-1);
        }
        File workingDirectory = new File(args[1]);

        ResourceByteRangeProvider resourceByteRangeProvider = new FileByteRangeProvider(inputFile);
        IMFTrackFileReader imfTrackFileReader = null;
        IMFTrackFileCPLBuilder imfTrackFileCPLBuilder = null;
        IMFErrorLogger imfErrorLogger = new IMFErrorLoggerImpl();
        try {
            imfTrackFileReader = new IMFTrackFileReader(workingDirectory, resourceByteRangeProvider);
            imfTrackFileCPLBuilder = new IMFTrackFileCPLBuilder(workingDirectory, inputFile);
        }
        catch (IMFException | MXFException e){
            if(e instanceof IMFException){
                IMFException imfException = (IMFException)e;
                imfErrorLogger.addAllErrors(imfException.getErrors());
            }
            else if(e instanceof MXFException){
                MXFException mxfException = (MXFException)e;
                imfErrorLogger.addAllErrors(mxfException.getErrors());
            }
            imfErrorLogger.addAllErrors(imfErrorLogger.getErrors());
        }
        Set<HeaderPartition.EssenceTypeEnum> supportedEssenceComponentTypes = new HashSet<>();
        supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MainImageEssence);
        supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MainAudioEssence);
        supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MarkerEssence);
        supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MGASADMEssence);
        if(imfTrackFileReader != null
                && imfTrackFileCPLBuilder != null
                && supportedEssenceComponentTypes.contains(imfTrackFileReader.getEssenceType(imfErrorLogger))) {
            try {
                for (InterchangeObject.InterchangeObjectBO essenceDescriptor : imfTrackFileReader.getEssenceDescriptors(imfErrorLogger)) {
                /* create dom */
                    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
                    Document document = docBuilder.newDocument();
                /*Output file containing the RegXML representation of the EssenceDescriptor*/
                    KLVPacket.Header essenceDescriptorHeader = essenceDescriptor.getHeader();
                    List<KLVPacket.Header> subDescriptorHeaders = imfTrackFileReader.getSubDescriptorKLVHeader(essenceDescriptor, imfErrorLogger);
                    File outputFile = imfTrackFileCPLBuilder.getEssenceDescriptorAsXMLFile(document, essenceDescriptorHeader, subDescriptorHeaders, imfErrorLogger);
                    logger.info(String.format("The EssenceDescriptor in the IMFTrackFile has been written to a XML document at the following location %s", outputFile.getAbsolutePath()));
                }
            } catch (ParserConfigurationException | TransformerException e) {
                throw new MXFException(e);
            }
        }
        List<ErrorLogger.ErrorObject> errors = imfErrorLogger.getErrors();
        if(errors.size() > 0){
            long warningCount = errors.stream().filter(e -> e.getErrorLevel().equals(IMFErrorLogger.IMFErrors.ErrorLevels
                    .WARNING)).count();
            logger.info(String.format("IMFTrackFile has %d errors and %d warnings",
                    errors.size() - warningCount, warningCount));
            for(ErrorLogger.ErrorObject errorObject : errors){
                if(errorObject.getErrorLevel() != IMFErrorLogger.IMFErrors.ErrorLevels.WARNING) {
                    logger.error(errorObject.toString());
                }
                else if(errorObject.getErrorLevel() == IMFErrorLogger.IMFErrors.ErrorLevels.WARNING) {
                    logger.warn(errorObject.toString());
                }
            }
        }
        else{
            /*if(imfTrackFileReader != null
                    && imfTrackFileCPLBuilder != null) {
                logger.info(String.format("%n %s", imfTrackFileReader.toString()));
            }*/
            logger.info("No errors were detected in the IMFTrackFile");
        }
    }