Changeset 12604 in josm


Ignore:
Timestamp:
2017-08-14T14:42:13+02:00 (6 weeks ago)
Author:
bastiK
Message:

fixed #14524 - save imagery layer zoom level to session (if needed)

Location:
trunk/src/org/openstreetmap/josm
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java

    r12600 r12604  
    8585        ImageryPreferenceEntry e = new ImageryPreferenceEntry(layer.getInfo());
    8686        Map<String, String> data = new LinkedHashMap<>(Preferences.serializeStruct(e, ImageryPreferenceEntry.class));
    87         if (layer instanceof AbstractTileSourceLayer) {
    88             data.putAll(((AbstractTileSourceLayer<?>) layer).getDisplaySettings().toPropertiesMap());
    89         }
     87        Utils.instanceOfThen(layer, AbstractTileSourceLayer.class, tsLayer -> {
     88            data.putAll(tsLayer.getDisplaySettings().toPropertiesMap());
     89            if (!tsLayer.getDisplaySettings().isAutoZoom()) {
     90                data.put("zoom-level", Integer.toString(tsLayer.getZoomLevel()));
     91            }
     92        });
    9093        addAttributes(layerElem, data, support);
    91         if (layer instanceof AbstractTileSourceLayer) {
    92             OffsetBookmark offset = ((AbstractTileSourceLayer<?>) layer).getDisplaySettings().getOffsetBookmark();
     94        Utils.instanceOfThen(layer, AbstractTileSourceLayer.class, tsLayer -> {
     95            OffsetBookmark offset = tsLayer.getDisplaySettings().getOffsetBookmark();
    9396            if (offset != null) {
    9497                Map<String, String> offsetProps = offset.toPropertiesMap();
     
    97100                addAttributes(offsetEl, offsetProps, support);
    98101            }
    99         }
     102        });
    100103        ImageryFilterSettings filters = layer.getFilterSettings();
    101104        if (filters != null) {
  • trunk/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java

    r12600 r12604  
    88import java.util.Map;
    99
     10import org.openstreetmap.josm.Main;
    1011import org.openstreetmap.josm.data.Preferences;
    1112import org.openstreetmap.josm.data.imagery.ImageryInfo;
     
    4445        ImageryInfo info = new ImageryInfo(prefEntry);
    4546        ImageryLayer layer = ImageryLayer.create(info);
    46         if (layer instanceof AbstractTileSourceLayer) {
    47             AbstractTileSourceLayer<?> tsLayer = (AbstractTileSourceLayer<?>) layer;
     47        Utils.instanceOfThen(layer, AbstractTileSourceLayer.class, tsLayer -> {
    4848            tsLayer.getDisplaySettings().applyFromPropertiesMap(attributes);
     49            if (!tsLayer.getDisplaySettings().isAutoZoom()) {
     50                String zoomStr = attributes.get("zoom-level");
     51                if (zoomStr != null) {
     52                        support.addPostLayersTask(() -> {
     53                            try {
     54                                tsLayer.setZoomLevel(Integer.parseInt(zoomStr));
     55                            } catch (NumberFormatException e) {
     56                                Main.warn(e);
     57                            }
     58                        });
     59                }
     60            }
    4961            Element offsetEl = getFirstElementByTagName(elem, "offset");
    5062            if (offsetEl != null) {
     
    5365                tsLayer.getDisplaySettings().setOffsetBookmark(offset);
    5466            }
    55         }
     67        });
    5668        Element filtersEl = getFirstElementByTagName(elem, "filters");
    5769        if (filtersEl != null) {
  • trunk/src/org/openstreetmap/josm/tools/Utils.java

    r12601 r12604  
    5151import java.util.concurrent.TimeUnit;
    5252import java.util.concurrent.atomic.AtomicLong;
     53import java.util.function.Consumer;
    5354import java.util.function.Function;
    5455import java.util.function.Predicate;
     
    675676                return new Iterator<B>() {
    676677
    677                     private Iterator<? extends A> it = c.iterator();
     678                    private final Iterator<? extends A> it = c.iterator();
    678679
    679680                    @Override
     
    17021703     * @param klass the class U
    17031704     * @return function converting an object to a singleton stream or null
     1705     * @since 12594
    17041706     */
    17051707    public static <T, U> Function<T, Stream<U>> castToStream(Class<U> klass) {
    17061708        return x -> klass.isInstance(x) ? Stream.of(klass.cast(x)) : null;
    17071709    }
     1710
     1711    /**
     1712     * Helper method to replace the "<code>instanceof</code>-check and cast" pattern.
     1713     * Checks if an object is instance of class T and performs an action if that
     1714     * is the case.
     1715     * Syntactic sugar to avoid typing the class name two times, when one time
     1716     * would suffice.
     1717     * @param <T> the type for the instanceof check and cast
     1718     * @param o the object to check and cast
     1719     * @param klass the class T
     1720     * @param consumer action to take when o is and instance of T
     1721     * @since 12604
     1722     */
     1723    public static <T> void instanceOfThen(Object o, Class<T> klass, Consumer<? super T> consumer) {
     1724        if (klass.isInstance(o)) {
     1725            consumer.accept((T) o);
     1726        }
     1727    }
    17081728}
Note: See TracChangeset for help on using the changeset viewer.