package com.revolsys.record.io.format.saif.util; import java.util.HashMap; import java.util.Map; import com.revolsys.geometry.model.GeometryFactory; import com.revolsys.record.io.format.saif.SaifConstants; public class OsnConverterRegistry { private final Map<String, OsnConverter> converters = new HashMap<>(); private GeometryFactory geometryFactory; public OsnConverterRegistry() { final GeometryFactory geometryFactory = GeometryFactory.fixedNoSrid(1.0, 1.0, 1.0); init(geometryFactory); } public OsnConverterRegistry(final int srid) { final GeometryFactory geometryFactory = GeometryFactory.fixed(srid, 1.0, 1.0, 1.0); init(geometryFactory); } private void addConverter(final String name, final OsnConverter converter) { this.converters.put(name, converter); } public OsnConverter getConverter(String name) { if (name == null) { return null; } else { if (name.startsWith("/")) { name = name.substring(1); } return this.converters.get(name); } } public GeometryFactory getGeometryFactory() { return this.geometryFactory; } public void init(final GeometryFactory geometryFactory) { this.geometryFactory = geometryFactory; addConverter("Date", new DateConverter()); addConverter("SpatialObject", new SpatialObjectConverter(this)); addConverter(SaifConstants.ARC, new ArcConverter(geometryFactory)); addConverter(SaifConstants.ORIENTED_ARC, new OrientedArcConverter(geometryFactory, this)); addConverter(SaifConstants.ARC_DIRECTED, new ArcDirectedConverter(geometryFactory)); addConverter(SaifConstants.CONTOUR, new ContourConverter(geometryFactory, this)); addConverter(SaifConstants.POINT, new PointConverter(geometryFactory)); addConverter(SaifConstants.ALIGNED_POINT, new AlignedPointConverter(geometryFactory)); addConverter(SaifConstants.TEXT_LINE, new TextLineConverter(geometryFactory, this)); addConverter(SaifConstants.TEXT_ON_CURVE, new TextOnCurveConverter(geometryFactory, this)); } }