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. :white_check_mark: Coordinate API Change (above patches should be tested / applied together)

  2. Implement Closable\

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

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

    1. :white_check_mark: Patch for GeoServer
    2. :warning: 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;
}