@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); }
public static int getNumberOfFilesToWriteFor( BaseRoute route, NavigationFormat format, boolean duplicateFirstPosition) { return ceiling( route.getPositionCount() + (duplicateFirstPosition ? 1 : 0), format.getMaximumPositionCount(), true); }
private List<Integer> getPositionCounts(List<BaseRoute> routes) { List<Integer> positionCounts = new ArrayList<>(); for (BaseRoute route : routes) positionCounts.add(route.getPositionCount()); return positionCounts; }