Java 7 try with resource compatibility - STEMLab/geotools GitHub Wiki

Description

Reading the Java 7 planned try-with-resource syntax I am convinced that supporting the Closable interface is necessary change for GeoTools 9.x.

Reading:

Status

This proposal is shaping up, ask question on the email list or vote below:

Tasks

  1. ✅ Coordinate API Change (above patches should be tested / applied together)

  2. Implement Closable\

    • ✅ FeatureIterator
    • ✅ FeatureReader
    • ✅ FeatureWriter
  3. ✅ A lot of this work got rolled into the FeatureCollection clean up

  4. Warn / Patch downstream applications (Combined with FeatureCollection cleanup)\

    1. ✅ Patch for GeoServer
    2. ⚠️ Patch for uDig (patch ready held up waiting for 1.3.3 release)
  5. Check the code examples in user guide\

API Changes

FeatureIterator

BEFORE:

public interface FeatureIterator<F extends Feature> {
    public boolean hasNext();
    public F next() throws java.util.NoSuchElementException;
    public void close();
}

AFTER:

import java.lang.Closable;
public interface FeatureIterator<F extends Feature> extends Closable {
    public boolean hasNext();
    public F next() throws java.util.NoSuchElementException;
    public void close() throws IOException;
}

FeatureReader

BEFORE:

public interface FeatureReader<T extends FeatureType, F extends Feature> {
    T getFeatureType();
    F next() throws IOException, IllegalArgumentException, NoSuchElementException;
    boolean hasNext() throws IOException;
    void close() throws IOException;
}

AFTER:

import java.lang.Closable;
public interface FeatureReader<T extends FeatureType, F extends Feature> extends Closable {
    T getFeatureType();
    F next() throws IOException, IllegalArgumentException, NoSuchElementException;
    boolean hasNext() throws IOException;
    void close() throws IOException;
}

FeatureWriter

BEFORE:

public interface FeatureWriter<T extends FeatureType, F extends Feature> {
    T getFeatureType();
    F next() throws IOException;
    void remove() throws IOException;
    void write() throws IOException;
    boolean hasNext() throws IOException;
    void close() throws IOException;
}

AFTER:

import java.lang.Closable;
public interface FeatureWriter<T extends FeatureType, F extends Feature> extends Closable {
    T getFeatureType();
    F next() throws IOException;
    void remove() throws IOException;
    void write() throws IOException;
    boolean hasNext() throws IOException;
    void close() throws IOException;
}
⚠️ **GitHub.com Fallback** ⚠️