Hello Adam
To make a large library more accessible to neogeographers, maybe we
would need to hide lot of methods and classes in order to keep only the
most important one visible in the javadoc. A lot of classes are internal
mechanics from neogeographers perspective, and would become useful
public API only for more advanced users. However we face two difficulties:
* I'm not aware of any way in current Javadoc technology to flag a
method or class as "advanced API" to be show only when the user
browse the Javadoc in "advanced" mode. I think that such
functionality is under consideration at Oracle, but I don't know
if/when it would appear.
* It is difficult to define what is the "core API" to show to
neogeographers. For example the ISO 19115 standard (metadata), which
defines about 100 classes, tried in its 2003 version to define a
"core metadata" profile with only the few most important classes.
But in their 2013 revision, they are removing this core profile. The
reason is that everyone has a different opinion of what "core" is.
Nevertheless the need is still present and other peoples have expressed
it. When OGC accepted GeoAPI 3.0.0 as a standard, the OGC Architecture
Board (OAB) told us that for the next GeoAPI release (3.1), they will
require us to define a "core" part of that API. This is one area where
I'm going to need help on the GeoAPI side: among the 271 classes or
interfaces in GeoAPI 3.0.0, which one should be considered "core"? That
would define indirectly which SIS classes would be considered core API.
But even if we define core API, we are still facing the problem of how
to hide non-core API from javadoc. I have no technical solution to that
question yet... (but I have hope that JDK9 will help us - note that it
doesn't mean that users have to use JDK9; we would just use JDK9 for
generating the javadoc).
On the question about roadmap toward something usable (WMS or desktop
application), I have to admit that the classes committed up to date are
of little direct use in the short term. To make a WMS, we need a
renderer engine, which needs geometry objects, which need referencing
framework, which need metadata... If we take a short-cut, for example by
omitting the referencing framework for now, I find difficult to
reintroduce referencing awareness in existing code later. We are facing
a similar situation in our existing WMS server: it doesn't behave well
with data crossing the anti-meridian. We have made some attempts to fix
that problem in existing code, but the problem spread in every corners
of the libraries (we have to check every places where an Envelope is
used). This is one example of goal which seem easier to address from the
beginning of a project than to try to fix in existing code.
So it is difficult for me to give a firm roadmap for WMS... The code
exists, but I would like to commit clean code to SIS with known issues
solved...
In the last week I worked on relatively minor secondary classes (Ranges)
because I'm facing a problem with the more important classes (XML
marshalling) for which I didn't found a solution yet: there is
apparently no way to have good control on the prefixes used in XML
documents other than sub-classing the
com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper, which is not
public API. This is what we did in Geotk, but I'm not sure it is
acceptable solution for Apache SIS. I can elaborate more in a separated
thread (but I need to write a test case first for clarifying the
issue...). But admittedly I should focus more on trying to solve this
blocking issue.
Regards,
Martin