Ticket #23427: 23427-wip-1.patch

File 23427-wip-1.patch, 3.4 KB (added by GerdP, 19 months ago)
  • src/org/openstreetmap/josm/io/session/SessionWriter.java

     
    275275        }
    276276        root.appendChild(layersEl);
    277277
    278         for (int index = 0; index < layers.size(); ++index) {
    279             Layer layer = layers.get(index);
    280             SessionLayerExporter exporter = exporters.get(layer);
    281             ExportSupport support = new ExportSupport(doc, index+1);
    282             Element el = exporter.export(support);
    283             if (el == null) continue;
    284             el.setAttribute("index", Integer.toString(index+1));
    285             el.setAttribute("name", layer.getName());
    286             el.setAttribute("visible", Boolean.toString(layer.isVisible()));
    287             if (!Utils.equalsEpsilon(layer.getOpacity(), 1.0)) {
    288                 el.setAttribute("opacity", Double.toString(layer.getOpacity()));
    289             }
    290             Set<Layer> deps = dependencies.get(layer);
    291             final String depends = deps == null ? "" : deps.stream().map(depLayer -> {
    292                 int depIndex = layers.indexOf(depLayer);
    293                 if (depIndex == -1) {
    294                     Logging.warn("Unable to find " + depLayer);
    295                     return null;
    296                 } else {
    297                     return Integer.toString(depIndex+1);
     278        for (int stage = 0; stage < 2; stage++) {
     279            for (int index = 0; index < layers.size(); ++index) {
     280                Layer layer = layers.get(index);
     281                SessionLayerExporter exporter = exporters.get(layer);
     282                final boolean isImage = exporter instanceof GeoImageSessionExporter;
     283                if (stage == 0 && isImage || stage == 1 && !isImage)
     284                    continue;
     285                ExportSupport support = new ExportSupport(doc, index+1);
     286                Element el = exporter.export(support);
     287                if (el == null) continue;
     288                el.setAttribute("index", Integer.toString(index+1));
     289                el.setAttribute("name", layer.getName());
     290                el.setAttribute("visible", Boolean.toString(layer.isVisible()));
     291                if (!Utils.equalsEpsilon(layer.getOpacity(), 1.0)) {
     292                    el.setAttribute("opacity", Double.toString(layer.getOpacity()));
    298293                }
    299             }).filter(Objects::nonNull).collect(Collectors.joining(","));
    300             if (!depends.isEmpty()) {
    301                 el.setAttribute("depends", depends);
     294                Set<Layer> deps = dependencies.get(layer);
     295                final String depends = deps == null ? "" : deps.stream().map(depLayer -> {
     296                    int depIndex = layers.indexOf(depLayer);
     297                    if (depIndex == -1) {
     298                        Logging.warn("Unable to find " + depLayer);
     299                        return null;
     300                    } else {
     301                        return Integer.toString(depIndex+1);
     302                    }
     303                }).filter(Objects::nonNull).collect(Collectors.joining(","));
     304                if (!depends.isEmpty()) {
     305                    el.setAttribute("depends", depends);
     306                }
     307                layersEl.appendChild(el);
    302308            }
    303             layersEl.appendChild(el);
    304309        }
    305310        return doc;
    306311    }