[Geoserver-devel] Moving IOUtils to gs-platform

I have been recently looking into GEOS-7651, and in doing so discovered that most of the ResourceStore stuff, including FileSystemResource, lives in the gs-platform project.

IOUtils contains a bunch of usefull File and IO utilities, including a very thorough rename method. However, IOUtils is contained in the gs-main project, which has gs-platform as a dependency

FileSystemResouce is currently using the plain java File rename, leading to GEOS-7651.

It seems like it would be a good idea to have utility classes such as IOUtils as far upstream as possible (e.g. in gs-platform rather than gs-main). IOUtils current contains a couple of methods that depend on classes in gs-main (XStreamPersister related stuff, which could remain in gs-main), but everything else does not depend upon any geoserver classes.

I am aware that this is a substantial API change, and is definately not a change that is realistic to make on a short time scale, but it seems like something that would be valuable longer term.
A relatively safe approach would be copying the requisite portions to gs-platform and deprecating the gs-main version for 2.10, and actually removing the gs-main version in 2.11.

Any input or opinions? Any obvious reasons that this is a bad idea that I may have missed?

Thanks,

Torben

On Thu, Sep 8, 2016 at 6:50 PM, Torben Barsballe <
tbarsballe@anonymised.com> wrote:

I am aware that this is a substantial API change, and is definately not a
change that is realistic to make on a short time scale, but it seems like
something that would be valuable longer term.
A relatively safe approach would be copying the requisite portions to
gs-platform and deprecating the gs-main version for 2.10, and actually
removing the gs-main version in 2.11.

What if you extend IOUtils in main extend the one in platform, adding just
the extra methods? As far as I remember static class methods
can be called using a subclass reference... yep, the following compiles and
works:

public class TestInheritStatic {

    public static class Base {
        public static void hello() { System.out.println("hello");}
    }

    public static class Derived extends Base {

    }

    public static void main(String args) {
        Derived.hello();
    }
}

If you deprecate the one in main please remove all references to it in the
geoserver code base, to avoid
creating tech debt in the process.

Cheers
Andrea

--

GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.

-------------------------------------------------------

Good idea with the extends. Probably don’t really need to deprecate anything if we go that route.

And yes, if I were to move it I would make sure to do a full refactor, not just a manual move.

Torben

···

On Thu, Sep 8, 2016 at 9:59 AM, Andrea Aime <andrea.aime@anonymised.com> wrote:

On Thu, Sep 8, 2016 at 6:50 PM, Torben Barsballe <tbarsballe@anonymised.com> wrote:

I am aware that this is a substantial API change, and is definately not a change that is realistic to make on a short time scale, but it seems like something that would be valuable longer term.

A relatively safe approach would be copying the requisite portions to gs-platform and deprecating the gs-main version for 2.10, and actually removing the gs-main version in 2.11.

What if you extend IOUtils in main extend the one in platform, adding just the extra methods? As far as I remember static class methods
can be called using a subclass reference… yep, the following compiles and works:

public class TestInheritStatic {

public static class Base {
public static void hello() { System.out.println(“hello”);}
}

public static class Derived extends Base {

}

public static void main(String args) {
Derived.hello();
}
}

If you deprecate the one in main please remove all references to it in the geoserver code base, to avoid
creating tech debt in the process.

Cheers
Andrea

==
GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime

@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313

fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy’s New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc.