Hello all

In the last days, I didn't ported significant classes. Instead, I worked on some known holes in the existing classes, so this is new code.

The formatToCharacterIterator(Object) method defined in the java.text.Format class is now implemented by AngleFormat. This allows those who are interested in such information to known which part of the formatted string is the degrees field, which part is the minutes field, etc. It is possible to go down to "which part is the fraction digits of the seconds field" for example. Some Graphical User Interfaces like javax.swing.JFormatterTextField can use this information.

This information will cascade through SIS Format implementations. So when formatting a metadata object in plain text (non-XML), it will be possible to know for example which part is the north bound latitude field of a geographic bounding box (or the fraction part of the seconds field if someone really wants to go down to that level).

The implementation details required the port of org.apache.sis.util.ObjectConverter interface. I noticed that Apache Camel has a TypeConverter interface and Spring has a Converter interface. Both uses slightly different approaches, but I think that the Spring's one is closer to the SIS needs. The interface name is ObjectConverter instead than TypeConverter because it does not necessarily change the type; it may just changes the values while keeping the same type.

Compared to the Spring interface, org.apache.sis.util.ObjectConverter has the same "convert" method (so I think that it will be possible for users to implement both the Spring one and the SIS one by the same class), and the SIS interface defines additional methods for getting some information about the conversion properties. There is many ways we could describe the properties of such conversion, so I tried to stick to concept in uses in mathematics:

  * is the conversion injective?
  * is the conversion surjective?
  * is the conversion order preserving?
  * is the conversion order reversing?

The javadoc tries to explain more what "injective" or "surjective" means. Those information become important when we need to take in account the context of the objects we are converting. For example when converting the values of a range, if the conversing is order reversing then we need to swap the min and max values. If the conversion is neither order preserving or reversing (as for example conversions from Integer to String, even if String implements Comparable) then we are not allowed to convert range of values.

    Martin

Reply via email to