@SuppressWarnings("unchecked") private void write( BaseRoute route, NavigationFormat format, boolean duplicateFirstPosition, boolean ignoreMaximumPositionCount, ParserCallback parserCallback, OutputStream... targets) throws IOException { log.info( "Writing '" + format.getName() + "' position lists with 1 route and " + route.getPositionCount() + " positions"); BaseRoute routeToWrite = asFormat(route, format); commentRoute(routeToWrite); preprocessRoute(routeToWrite, format, duplicateFirstPosition, parserCallback); int positionsToWrite = routeToWrite.getPositionCount(); int writeInOneChunk = format.getMaximumPositionCount(); // check if the positions to write fit within the given files if (positionsToWrite > targets.length * writeInOneChunk) { if (ignoreMaximumPositionCount) writeInOneChunk = positionsToWrite; else throw new IOException( "Found " + positionsToWrite + " positions, " + format.getName() + " format may only contain " + writeInOneChunk + " positions in one position list."); } int startIndex = 0; for (int i = 0; i < targets.length; i++) { OutputStream target = targets[i]; int endIndex = min(startIndex + writeInOneChunk, positionsToWrite); renameRoute(route, routeToWrite, startIndex, endIndex, i, targets); format.write(routeToWrite, target, startIndex, endIndex); log.info("Wrote position list from " + startIndex + " to " + endIndex); startIndex += writeInOneChunk; } postProcessRoute(routeToWrite, format, duplicateFirstPosition); }
@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); }