package com.revolsys.geometry.io;
import com.revolsys.collection.map.MapEx;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.io.IoFactory;
import com.revolsys.io.Writer;
public interface GeometryWriter extends Writer<Geometry> {
static boolean isWritable(final Object source) {
return IoFactory.isAvailable(GeometryWriterFactory.class, source);
}
static GeometryWriter newGeometryWriter(final Object source) {
final GeometryWriterFactory factory = IoFactory.factory(GeometryWriterFactory.class, source);
if (factory == null) {
return null;
} else {
return factory.newGeometryWriter(source);
}
}
static GeometryWriter newGeometryWriter(final Object source,
final GeometryFactory geometryFactory) {
final GeometryWriter writer = newGeometryWriter(source);
if (writer != null) {
writer.setGeometryFactory(geometryFactory);
}
return writer;
}
static GeometryWriter newGeometryWriter(final Object source, final MapEx properties) {
final GeometryWriter writer = newGeometryWriter(source);
if (writer != null) {
writer.setProperties(properties);
}
return writer;
}
static void writeAll(final Object source, final GeometryFactory geometryFactory,
final Iterable<? extends Geometry> geometries) {
try (
GeometryWriter writer = newGeometryWriter(source, geometryFactory)) {
if (writer == null) {
throw new IllegalArgumentException("Cannot create writer for: " + source);
} else {
writer.writeAll(geometries);
}
}
}
static void writeAll(final Object source, final MapEx properties,
final Iterable<? extends Geometry> geometries) {
try (
GeometryWriter writer = newGeometryWriter(source, properties)) {
if (writer == null) {
throw new IllegalArgumentException("Cannot create writer for: " + source);
} else {
writer.writeAll(geometries);
}
}
}
void setGeometryFactory(GeometryFactory geometryFactory);
default void writeAll(final Iterable<? extends Geometry> geometries) {
if (geometries != null) {
for (final Geometry geometry : geometries) {
if (geometry != null) {
write(geometry);
}
}
}
}
}