@SuppressWarnings("unchecked") private void internalRead( InputStream buffer, List<NavigationFormat> formats, ParserContext context) throws IOException { int routeCountBefore = context.getRoutes().size(); NavigationFormat firstSuccessfulFormat = null; try { for (NavigationFormat<BaseRoute> format : formats) { notifyReading(format); log.fine(format("Trying to read with %s", format)); try { format.read(buffer, context); // if no route has been read, take the first that didn't throw an exception if (firstSuccessfulFormat == null) firstSuccessfulFormat = format; } catch (Exception e) { log.severe(format("Error reading with %s: %s, %s", format, e.getClass(), e)); } if (context.getRoutes().size() > routeCountBefore) { context.addFormat(format); break; } try { buffer.reset(); } catch (IOException e) { log.severe("Cannot reset() stream to mark()"); break; } } } finally { //noinspection ThrowFromFinallyBlock buffer.close(); } if (context.getRoutes().size() == 0 && firstSuccessfulFormat != null) context.addFormat(firstSuccessfulFormat); }
@SuppressWarnings("unchecked") private ParserResult createResult(ParserContext<BaseRoute> context) throws IOException { List<BaseRoute> source = context.getRoutes(); // if (source != null && source.size() > 0) { if (source != null && context.getFormats().size() > 0) { NavigationFormat format = determineFormat(source, context.getFormats().get(0)); List<BaseRoute> destination = convertRoute(source, format); log.info( "Detected '" + format.getName() + "' with " + destination.size() + " route(s) and " + getPositionCounts(destination) + " positions"); if (destination.size() == 0) destination.add(format.createRoute(RouteCharacteristics.Route, null, new ArrayList<>())); commentRoutes(destination); return new ParserResult(new FormatAndRoutes(format, destination)); } else return new ParserResult(null); }