package org.batfish.job; import java.nio.file.Path; import org.batfish.main.Batfish; import org.batfish.main.Settings; import org.batfish.common.BatfishException; import org.batfish.datamodel.ConfigurationFormat; import org.batfish.grammar.VendorConfigurationFormatDetector; import org.batfish.main.ParserBatfishException; import org.batfish.common.Warnings; public class FlattenVendorConfigurationJob extends BatfishJob<FlattenVendorConfigurationResult> { private String _fileText; private Path _inputFile; private Path _outputFile; private Warnings _warnings; public FlattenVendorConfigurationJob(Settings settings, String fileText, Path inputFile, Path outputFile, Warnings warnings) { super(settings); _fileText = fileText; _inputFile = inputFile; _outputFile = outputFile; _warnings = warnings; } @Override public FlattenVendorConfigurationResult call() throws Exception { long startTime = System.currentTimeMillis(); long elapsedTime; String inputFileAsString = _inputFile.toAbsolutePath().toString(); ConfigurationFormat format = VendorConfigurationFormatDetector .identifyConfigurationFormat(_fileText); if (format == ConfigurationFormat.JUNIPER || format == ConfigurationFormat.VYOS) { String header = null; if (format == ConfigurationFormat.JUNIPER) { header = VendorConfigurationFormatDetector.BATFISH_FLATTENED_JUNIPER_HEADER; } if (format == ConfigurationFormat.VYOS) { header = VendorConfigurationFormatDetector.BATFISH_FLATTENED_VYOS_HEADER; } _logger.debug( "Flattening config: \"" + _inputFile.toString() + "\"..."); String flatConfigText = null; try { flatConfigText = Batfish.flatten(_fileText, _logger, _settings, format, header); } catch (ParserBatfishException e) { String error = "Error parsing configuration file: \"" + inputFileAsString + "\""; elapsedTime = System.currentTimeMillis() - startTime; return new FlattenVendorConfigurationResult(elapsedTime, _logger.getHistory(), _outputFile, new BatfishException(error, e)); } catch (Exception e) { String error = "Error post-processing parse tree of configuration file: \"" + inputFileAsString + "\""; elapsedTime = System.currentTimeMillis() - startTime; return new FlattenVendorConfigurationResult(elapsedTime, _logger.getHistory(), _outputFile, new BatfishException(error, e)); } finally { Batfish.logWarnings(_logger, _warnings); } elapsedTime = System.currentTimeMillis() - startTime; return new FlattenVendorConfigurationResult(elapsedTime, _logger.getHistory(), _outputFile, flatConfigText); } else if (!_settings.ignoreUnsupported() && format == ConfigurationFormat.UNKNOWN) { elapsedTime = System.currentTimeMillis() - startTime; return new FlattenVendorConfigurationResult(elapsedTime, _logger.getHistory(), _outputFile, new BatfishException("Unknown configuration format for: \"" + _inputFile.toString() + "\"")); } else { _logger.debug("Skipping: \"" + _inputFile.toString() + "\"\n"); String flatConfigText = _fileText; elapsedTime = System.currentTimeMillis() - startTime; return new FlattenVendorConfigurationResult(elapsedTime, _logger.getHistory(), _outputFile, flatConfigText); } } }