Ignore:
Timestamp:
2014-03-24T20:27:00+01:00 (10 years ago)
Author:
simon04
Message:

Add WMS: filter unsupported image formats, preselect jpeg or png

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/io/imagery/WMSImagery.java

    r6650 r6930  
    1212import java.util.ArrayList;
    1313import java.util.Collection;
     14import java.util.Collections;
    1415import java.util.HashSet;
    1516import java.util.List;
     
    1718import java.util.regex.Pattern;
    1819
     20import javax.imageio.ImageIO;
    1921import javax.xml.parsers.DocumentBuilder;
    2022import javax.xml.parsers.DocumentBuilderFactory;
     
    2628import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
    2729import org.openstreetmap.josm.io.UTFInputStreamReader;
     30import org.openstreetmap.josm.tools.Predicate;
    2831import org.openstreetmap.josm.tools.Utils;
    2932import org.w3c.dom.Document;
     
    6366
    6467    public List<String> getFormats() {
    65         return formats;
     68        return Collections.unmodifiableList(formats);
     69    }
     70
     71    public String getPreferredFormats() {
     72        return formats.contains("image/jpeg") ? "image/jpeg"
     73                : formats.contains("image/png") ? "image/png"
     74                : formats.isEmpty() ? null
     75                : formats.get(0);
    6676    }
    6777
     
    165175            child = getChild(child, "GetMap");
    166176
    167             formats = new ArrayList<String>(Utils.transform(getChildren(child, "Format"), new Utils.Function<Element, String>() {
    168                 @Override
    169                 public String apply(Element x) {
    170                     return x.getTextContent();
    171                 }
    172             }));
     177            formats = new ArrayList<String>(Utils.filter(Utils.transform(getChildren(child, "Format"),
     178                    new Utils.Function<Element, String>() {
     179                        @Override
     180                        public String apply(Element x) {
     181                            return x.getTextContent();
     182                        }
     183                    }
     184                    ), new Predicate<String>() {
     185                        @Override
     186                        public boolean evaluate(String format) {
     187                            boolean isFormatSupported = isImageFormatSupported(format);
     188                            if (!isFormatSupported) {
     189                                Main.info("Skipping unsupported image format {0}", format);
     190                            }
     191                            return isFormatSupported;
     192                        }
     193                    }
     194            ));
    173195
    174196            child = getChild(child, "DCPType");
     
    191213        }
    192214
     215    }
     216
     217    static boolean isImageFormatSupported(final String format) {
     218        return ImageIO.getImageReadersByMIMEType(format).hasNext()
     219                || (format.startsWith("image/tiff") || format.startsWith("image/geotiff")) && ImageIO.getImageReadersBySuffix("tiff").hasNext() // handles image/tiff image/tiff8 image/geotiff image/geotiff8
     220                || format.startsWith("image/png") && ImageIO.getImageReadersBySuffix("png").hasNext()
     221                || format.startsWith("image/svg") && ImageIO.getImageReadersBySuffix("svg").hasNext()
     222                || format.startsWith("image/bmp") && ImageIO.getImageReadersBySuffix("bmp").hasNext();
    193223    }
    194224
Note: See TracChangeset for help on using the changeset viewer.