code: /*******************************************************************************
   * Copyright (c) 2015 VoyagerSearch
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Apache License, Version 2.0 which
   * accompanies this distribution and is available at
   *    http://www.apache.org/licenses/LICENSE-2.0.txt
   ******************************************************************************/
  
  package org.locationtech.spatial4j.io;
  
  import java.util.List;
  
  import org.locationtech.spatial4j.context.SpatialContext;
  import org.locationtech.spatial4j.shape.Shape;
  
  /**
   * Information about the formats a {@link SpatialContext} can read/write
   */
  public class SupportedFormats {
  
    private final List<ShapeReader> readers;
    private final List<ShapeWriter> writers;
  
    private final ShapeReader wktReader;
    private final ShapeWriter wktWriter;
    
    private final ShapeReader geoJsonReader;
    private final ShapeWriter geoJsonWriter;
    
    public SupportedFormats(List<ShapeReader> readers, List<ShapeWriter> writers) {
      this.readers = readers;
      this.writers = writers;
  
      wktReader = getReader(ShapeIO.WKT);
      wktWriter = getWriter(ShapeIO.WKT);
      
      geoJsonReader = getReader(ShapeIO.GeoJSON);
      geoJsonWriter = getWriter(ShapeIO.GeoJSON);
    }
    
    public List<ShapeReader> getReaders() {
      return readers;
    }
  
    public List<ShapeWriter> getWriters() {
      return writers;
    }
    
    public ShapeReader getReader(String fmt) {
      for(ShapeReader f : readers) {
        if(fmt.equals(f.getFormatName())) {
          return f;
        }
      }
      return null;
    }
  
    public ShapeWriter getWriter(String fmt) {
      for(ShapeWriter f : writers) {
        if(fmt.equals(f.getFormatName())) {
          return f;
        }
      }
      return null;
    }
    
    public ShapeReader getWktReader() {
      return wktReader;
    }
  
    public ShapeWriter getWktWriter() {
      return wktWriter;
    }
  
    public ShapeReader getGeoJsonReader() {
      return geoJsonReader;
    }
  
    public ShapeWriter getGeoJsonWriter() {
      return geoJsonWriter;
    }
  
    public Shape read(String value) {
      for(ShapeReader format : readers) {
        Shape v = format.readIfSupported(value);
        if(v!=null) {
          return v;
        }
      }
      return null;
    }
  }
  