Re: [Geoserver-devel] review of csw pull request

2013-02-12 Thread Niels Charlier

Hi Justin,

Sorry for the late response, lost track of this a bit.


Rather than being needlessly complicated I believe I have caused
confusion by giving these two methods the same name - I should not
have done that. What they have in common is that they both convert
from Name to PropertyName, other than that they serve a completely
different purpose.


Right, so let's rename the method. What would be a good name?


It is the method in the record descriptor that translates between
the internal and exposed data model.

The method in the store is merely there to tell what sort of
conversion we need for a particular purpose; this is different in
both stores for very good reasons, which I could elaborate. By
creating the method it is possible to keep a bunch of other code
the same for both stores. It's all been a part of the process of
making code more generic and prevent copy-pasting, and simplifying
- not complicating things. I should be more careful with name
choosing to avoid confusion though.


Makes sense. Maybe you could elaborate on how the method operates 
differently for both stores, if anything so we can come up with a 
suitable name?


So, it is being used for GetRecords with properties selection. Also for 
GetDomain but that is just a special case of the same thing.
The simple catalog store will select the properties after building the 
feature using RetypingFeatureCollection, as it was already done. This it 
the easiest way to do it in this case. The user's specified property 
names are the ones we need.


In the case of the internal catalog store, the situation is different. 
You cannot use the RetypingFeatureCollection because we are working with 
nested complex feature structure here and the properties can be paths. 
However the properties can also be names that are sort of shortcuts for 
the paths but don't reflect the structure of the feature at all (see the 
iso metadata standard). And why build too much of the feature? Can make 
it considerably slower in this case. So that is why I select the 
properties on the level of the mapping, I cut down the mapping. It makes 
most sense here. So now the property names need to be understood by the 
mapping, i.e. we need a full translation of the property.


I guess you could call the method preparePropertyForSelection or 
something. The reason I made an extra method, is because the query wants 
PropertyNames, not Names, so they need to be passed as such in the query 
by whoever is calling the RecordStore.  An alternative approach that 
would work in this case is to only do the basic conversion from 
propertyname to name and then let the internal catalog store do the 
extra conversion in the beginning of the getRecordsInternal method. If 
you really want to get rid of it, it seems like that should work as 
well, now I look at it again. I seem to remember there was a reason I 
didn't do that though, but I can't quite remember. The way I did it 
seemed the most logical at the time working from the existing code to 
make it more generic and support future alternatives.




Question. For RecordDescriptor.translateProperty is the translation 
one way, from the internal model to the exposed model? 
And similarly for the CatalogStore.translateProperty method, is the 
mapping from the exposed model to the internal model?



For RecordDescriptor: No, the other way around, from exposed to internal.
For CatalogStore: in the case of the simple store (or the default case) 
it does not do this, it merely converts from Name to PropertyName.


Cheers
NIels

--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-02-07 Thread Niels Charlier
On 02/06/2013 06:22 PM, Andrea Aime wrote:

 The idea that there are two separate ways to translate between the 
 internal data model and
 the exposed data model bugs me, seems redundant and needlessly 
 complicated.


How do you mean there are two separate ways to translate between 
internal and exposed data model?
I don't believe there is, I'm a bit puzzled here by what you mean exactly.

Niels

--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-02-07 Thread Andrea Aime
On Thu, Feb 7, 2013 at 1:57 PM, Niels Charlier ni...@scitus.be wrote:

 On 02/06/2013 06:22 PM, Andrea Aime wrote:


 The idea that there are two separate ways to translate between the
 internal data model and
 the exposed data model bugs me, seems redundant and needlessly
 complicated.


 How do you mean there are two separate ways to translate between internal
 and exposed data model?
 I don't believe there is, I'm a bit puzzled here by what you mean exactly.


The record descriptor provides one, and then you added another to the store

Cheers
Andrea

-- 
==
Our support, Your Success! Visit http://opensdi.geo-solutions.it for more
information.
==

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054  Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39  339 8844549

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

---
--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-02-07 Thread Niels Charlier

On 02/07/2013 02:02 PM, Andrea Aime wrote:
On Thu, Feb 7, 2013 at 1:57 PM, Niels Charlier ni...@scitus.be 
mailto:ni...@scitus.be wrote:


On 02/06/2013 06:22 PM, Andrea Aime wrote:


The idea that there are two separate ways to translate between
the internal data model and
the exposed data model bugs me, seems redundant and needlessly
complicated.


How do you mean there are two separate ways to translate between
internal and exposed data model?
I don't believe there is, I'm a bit puzzled here by what you mean
exactly.


The record descriptor provides one, and then you added another to the 
store


Rather than being needlessly complicated I believe I have caused 
confusion by giving these two methods the same name - I should not have 
done that. What they have in common is that they both convert from Name 
to PropertyName, other than that they serve a completely different purpose.


It is the method in the record descriptor that translates between the 
internal and exposed data model.


The method in the store is merely there to tell what sort of conversion 
we need for a particular purpose; this is different in both stores for 
very good reasons, which I could elaborate. By creating the method it is 
possible to keep a bunch of other code the same for both stores. It's 
all been a part of the process of making code more generic and prevent 
copy-pasting, and simplifying - not complicating things. I should be 
more careful with name choosing to avoid confusion though.


Of course I'd be happy with any ideas or suggestions to improve the code.

Niels

--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-02-07 Thread Justin Deoliveira
Thanks for the explanation Niels. Some comments/questions inline.

On Thu, Feb 7, 2013 at 6:18 AM, Niels Charlier ni...@scitus.be wrote:

  On 02/07/2013 02:02 PM, Andrea Aime wrote:

 On Thu, Feb 7, 2013 at 1:57 PM, Niels Charlier ni...@scitus.be wrote:

 On 02/06/2013 06:22 PM, Andrea Aime wrote:


 The idea that there are two separate ways to translate between the
 internal data model and
 the exposed data model bugs me, seems redundant and needlessly
 complicated.


  How do you mean there are two separate ways to translate between
 internal and exposed data model?
 I don't believe there is, I'm a bit puzzled here by what you mean exactly.


  The record descriptor provides one, and then you added another to the
 store

   Rather than being needlessly complicated I believe I have caused
 confusion by giving these two methods the same name - I should not have
 done that. What they have in common is that they both convert from Name to
 PropertyName, other than that they serve a completely different purpose.


Right, so let's rename the method. What would be a good name?


 It is the method in the record descriptor that translates between the
 internal and exposed data model.

 The method in the store is merely there to tell what sort of conversion we
 need for a particular purpose; this is different in both stores for very
 good reasons, which I could elaborate. By creating the method it is
 possible to keep a bunch of other code the same for both stores. It's all
 been a part of the process of making code more generic and prevent
 copy-pasting, and simplifying - not complicating things. I should be more
 careful with name choosing to avoid confusion though.


Makes sense. Maybe you could elaborate on how the method operates
differently for both stores, if anything so we can come up with a suitable
name?

Question. For RecordDescriptor.translateProperty is the translation one
way, from the internal model to the exposed model? And similarly for the
CatalogStore.translateProperty method, is the mapping from the exposed
model to the internal model?


 Of course I'd be happy with any ideas or suggestions to improve the code.

 Niels




-- 
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.
--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-02-06 Thread Justin Deoliveira
Just a ping on this one, wondering how to move forward.


On Mon, Jan 28, 2013 at 5:28 PM, Justin Deoliveira jdeol...@opengeo.orgwrote:

 Ok, i have updated the javadoc and pushed the discussed changes to the csw
 branch in my repo.

 @Andrea: I'll wait to hear from you about when to merge in or if you think
 we need a bit more deeper review.

 On Mon, Jan 28, 2013 at 3:44 AM, Niels Charlier ni...@scitus.be wrote:

 Hi Justin,

 In response to your questions.


 On 01/25/2013 05:24 PM, Justin Deoliveira wrote:



 1. This method wold never be called by client code, it is more an
 internal method used to the mapping?


 I think it is right that it's probably not really useful to the client
 code, however it is used by the services GetDomain and GetRecords which
 don't know what kind of mapping they are working with.


  2. How does this method relate to RecordDescriptor.**translateProperty()
 ?


 In the case of the InternalCatalogStore, the record store calls the
 method RecordDescriptor.**translateProperty, which does not only convert
 from Name to PropertyName, it also makes  changes to the syntax of the
 property depending on the kind of RecordDescriptor you are dealing with, so
 that it gets in the right form, for example for DC /dc:value is added to
 the path and for ISO the asipo 'short' property name is converted to a full
 path. In the case of the SimpleCatalogStore however, this method isn't
 called, and a simple convert from Name to PropertyName is all that is done
 here.

 I hope this helps.

 Kind Regards
 Niels




 --
 Justin Deoliveira
 OpenGeo - http://opengeo.org
 Enterprise support for open source geospatial.




-- 
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.
--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-02-06 Thread Andrea Aime
On Wed, Feb 6, 2013 at 5:15 PM, Justin Deoliveira jdeol...@opengeo.orgwrote:

 Just a ping on this one, wondering how to move forward.


Justin,
unfortunately I did not find time to look into this further.
The idea that there are two separate ways to translate between the internal
data model and
the exposed data model bugs me, seems redundant and needlessly complicated.

However, as long as there are community modules, I'd say go ahead and we'll
try to fix this design problem later...

Cheers
Andrea


-- 
==
Our support, Your Success! Visit http://opensdi.geo-solutions.it for more
information.
==

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054  Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39  339 8844549

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

---
--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-02-06 Thread Justin Deoliveira
Ok cool. I will commit the changes as is and will wait on guidance on how
to proceed further.


On Wed, Feb 6, 2013 at 10:22 AM, Andrea Aime
andrea.a...@geo-solutions.itwrote:

 On Wed, Feb 6, 2013 at 5:15 PM, Justin Deoliveira jdeol...@opengeo.orgwrote:

 Just a ping on this one, wondering how to move forward.


 Justin,
 unfortunately I did not find time to look into this further.
 The idea that there are two separate ways to translate between the
 internal data model and
 the exposed data model bugs me, seems redundant and needlessly complicated.

 However, as long as there are community modules, I'd say go ahead and we'll
 try to fix this design problem later...

 Cheers
 Andrea


 --
 ==
 Our support, Your Success! Visit http://opensdi.geo-solutions.it for more
 information.
 ==

 Ing. Andrea Aime
 @geowolf
 Technical Lead

 GeoSolutions S.A.S.
 Via Poggio alle Viti 1187
 55054  Massarosa (LU)
 Italy
 phone: +39 0584 962313
 fax: +39 0584 1660272
 mob: +39  339 8844549

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

 ---




-- 
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.
--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-01-28 Thread Niels Charlier
Hi Justin,

In response to your questions.

On 01/25/2013 05:24 PM, Justin Deoliveira wrote:


 1. This method wold never be called by client code, it is more an 
 internal method used to the mapping?

I think it is right that it's probably not really useful to the client 
code, however it is used by the services GetDomain and GetRecords which 
don't know what kind of mapping they are working with.

 2. How does this method relate to RecordDescriptor.translateProperty() ?


In the case of the InternalCatalogStore, the record store calls the 
method RecordDescriptor.translateProperty, which does not only convert 
from Name to PropertyName, it also makes  changes to the syntax of the 
property depending on the kind of RecordDescriptor you are dealing with, 
so that it gets in the right form, for example for DC /dc:value is added 
to the path and for ISO the asipo 'short' property name is converted to 
a full path. In the case of the SimpleCatalogStore however, this method 
isn't called, and a simple convert from Name to PropertyName is all that 
is done here.

I hope this helps.

Kind Regards
Niels

--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d
___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-01-28 Thread Justin Deoliveira
Ok, i have updated the javadoc and pushed the discussed changes to the csw
branch in my repo.

@Andrea: I'll wait to hear from you about when to merge in or if you think
we need a bit more deeper review.

On Mon, Jan 28, 2013 at 3:44 AM, Niels Charlier ni...@scitus.be wrote:

 Hi Justin,

 In response to your questions.


 On 01/25/2013 05:24 PM, Justin Deoliveira wrote:



 1. This method wold never be called by client code, it is more an
 internal method used to the mapping?


 I think it is right that it's probably not really useful to the client
 code, however it is used by the services GetDomain and GetRecords which
 don't know what kind of mapping they are working with.


  2. How does this method relate to RecordDescriptor.**translateProperty()
 ?


 In the case of the InternalCatalogStore, the record store calls the method
 RecordDescriptor.**translateProperty, which does not only convert from
 Name to PropertyName, it also makes  changes to the syntax of the property
 depending on the kind of RecordDescriptor you are dealing with, so that it
 gets in the right form, for example for DC /dc:value is added to the path
 and for ISO the asipo 'short' property name is converted to a full path. In
 the case of the SimpleCatalogStore however, this method isn't called, and a
 simple convert from Name to PropertyName is all that is done here.

 I hope this helps.

 Kind Regards
 Niels




-- 
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.
--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-01-25 Thread Justin Deoliveira
On Thu, Jan 24, 2013 at 6:56 AM, Niels Charlier ni...@scitus.be wrote:



 So if I understand this correctly this means two additional changes.

 1. Remove the ElementSet argument from CatalogStore.getRecords() method.
 2. Remove CatalogStore.**translateProperty()

 (1) is trivial, more or less all calls to it passed in null. Made that
 change and tests are happy.

 (2) is not so clear to me. At the moment there is code calling this
 method, and multiple implementations of of it, one from
 AbstractCatalogStore and one from InternalCatalogStore which appear to be
 doing different things. So it's not quite obvious to me what should be done
 here.


 Oh no, only 1 needs to be changed, the second is indeed necessary as I
 explained further in the email. I was just apologising for the missing
 javadoc for the method, making it harder to understand.

 Ok cool. Thanks Niels. So (1) is indeed trivial, made that change.

For (2) all we need is a javadoc. I am still having a bit of trouble
understanding, mostly due to my inexperience with catalog. But it sounds
something like this:

/**
  * Maps a qualified name to it's equivalent property name used to query
the backend store.
  */

A couple of additional questions though.

1. This method wold never be called by client code, it is more an
internal method used to the mapping?
2. How does this method relate to RecordDescriptor.translateProperty() ?


Don't worry - the changes are in fact trivial.

 Kind Regards
 Niels




-- 
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.
--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-01-24 Thread Justin Deoliveira
On Wed, Jan 23, 2013 at 11:10 AM, Niels Charlier ni...@scitus.be wrote:

  Hello Andrea,

 Sorry for my late reponses.


 On 01/19/2013 06:54 PM, Andrea Aime wrote:

 Here is some more I've found during the review.

  There's a change in DefaultCatalogFacade.java that I'm not sure about:

   if (null != sortByList) {
 for (int i = sortByList.length - 1; i =0 ; i--) {
  SortBy sortBy = sortByList[i];
  OrderingObject ordering =
 Ordering.from(comparator(sortBy));
  if (SortOrder.DESCENDING.equals(sortBy.getSortOrder())) {
  ordering = ordering.reverse();
  }
  all = ordering.sortedCopy(all);
 }
 }

  What guarantees are there that sorting the same list multiple times
 we'll get
 to a result that is ordered on sortBy1, then sortBy2, and so on?
 What I'm trying to say is, the second time we sort the algorithm might as
 well
 ruin the partial ordering established by the first sort... the Java 6
 algorithm might
 work, but Java 7 has a different sorting algorithm (TimSort), not sure if
 the
 multiple sorts are going to be preserved there.

 I see your point. I remember I needed to include support for sorting with
 more than one sortby, which wasn't yet supported previously.
 But perhaps we have to revise that algorithm and see if there is a more
 appropriate solution.



  Anyways, no big deal, I guess it can be handled as a bug later, if it
 turns
 out to misbehave.

  What's a bit more troublesome is changes in the CatalogStore interface.
 Mind, I'm not against them per se, but in order to change a interface that
 was
 discussed openly on the ml I would have expected the same opennes, or at
 least some explanation on why they happened, instead I'm looking at the
 diff trying to understand them.
 The changes propagate in other portions as well, it seems bits of the CSW
 service code have been refactored, again, without providing any clue as to
 why.

  I'm not saying the changes are right or wrong (on the contraty, I'm
 confident
 they have been done for good reasons), but they should have been
 discussed: since the patch is out already, can we have some rationale
 about them?

  It would make reviewing the patch a lot easier.



 First my apologies for not explaining the changes in advance. I usually
 try to make sure I am certain that particular changes are necessary or
 useful before I propose them, perhaps that is why I didn't do it earlier.

 Then I also have to apologise about something else, I did my best cleaning
 up all the code and filling in the javadoc before I did my pull request but
 I seemed to have missed this file. The javadoc for translateProperty wasn't
 filled in, and on top of that one of the changes had to be removed before
 committing. The extra parameter elementSet was supposed to be removed
 again, this was a change I made at some point but became unnecessary later.
 So please remove this change all together, this can be done in the
 interface and all its implementations without a problem. Again, sorry about
 that, that was not my intention.


So if I understand this correctly this means two additional changes.

1. Remove the ElementSet argument from CatalogStore.getRecords() method.
2. Remove CatalogStore.translateProperty()

(1) is trivial, more or less all calls to it passed in null. Made that
change and tests are happy.

(2) is not so clear to me. At the moment there is code calling this method,
and multiple implementations of of it, one from AbstractCatalogStore and
one from InternalCatalogStore which appear to be doing different things. So
it's not quite obvious to me what should be done here.


 The other two changes however were for a good reasons and have both to do
 with making CSW more generic.

 A lot of the generic stuff relies on using the RecordDescriptor interface.
 At points where the old code simply calls CSWRecordDescriptor.SOME_CONSTANT
 the new code often uses an instance of the RecordDescriptor interface and a
 method to get this information, for obvious reasons. Another thing is that
 as a consequence of parsing .xsd files the name of the record type is not
 any more in the FeatureType, but in an AttributeDescriptor. For example,
 the name of the CSW DC type is not Record but RecordType, there is a
 descriptor with the name Record that points to RecordType. This is good
 because it corresponds with how this is coded in the .xsd file. This is
 just one of the reasons why I don't pass on FeatureType objects any more,
 but rather RecordDescriptor objects. From here all sorts of information can
 be retrieved, like a namespace set which is also frequently used.

 Considering the translateProperty method, this method converts a Name to
 PropertyName. This is used for property selection. This happens differently
 with the two Catalog Stores. The Abstract Catalog Store selects properties
 from a finished feature, so the PropertyName applies to a finished feature.
 

Re: [Geoserver-devel] review of csw pull request

2013-01-24 Thread Niels Charlier


 So if I understand this correctly this means two additional changes.

 1. Remove the ElementSet argument from CatalogStore.getRecords() method.
 2. Remove CatalogStore.translateProperty()

 (1) is trivial, more or less all calls to it passed in null. Made that 
 change and tests are happy.

 (2) is not so clear to me. At the moment there is code calling this 
 method, and multiple implementations of of it, one from 
 AbstractCatalogStore and one from InternalCatalogStore which appear to 
 be doing different things. So it's not quite obvious to me what should 
 be done here.

Oh no, only 1 needs to be changed, the second is indeed necessary as I 
explained further in the email. I was just apologising for the missing 
javadoc for the method, making it harder to understand.

Don't worry - the changes are in fact trivial.

Kind Regards
Niels

--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d
___
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Re: [Geoserver-devel] review of csw pull request

2013-01-23 Thread Niels Charlier

Hello Andrea,

Sorry for my late reponses.

On 01/19/2013 06:54 PM, Andrea Aime wrote:

Here is some more I've found during the review.

There's a change in DefaultCatalogFacade.java that I'm not sure about:

 if (null != sortByList) {
for (int i = sortByList.length - 1; i =0 ; i--) {
SortBy sortBy = sortByList[i];
 OrderingObject ordering = Ordering.from(comparator(sortBy));
 if (SortOrder.DESCENDING.equals(sortBy.getSortOrder())) {
 ordering = ordering.reverse();
 }
 all = ordering.sortedCopy(all);
}
}

What guarantees are there that sorting the same list multiple times 
we'll get

to a result that is ordered on sortBy1, then sortBy2, and so on?
What I'm trying to say is, the second time we sort the algorithm might 
as well
ruin the partial ordering established by the first sort... the Java 6 
algorithm might
work, but Java 7 has a different sorting algorithm (TimSort), not sure 
if the

multiple sorts are going to be preserved there.
I see your point. I remember I needed to include support for sorting 
with more than one sortby, which wasn't yet supported previously.
But perhaps we have to revise that algorithm and see if there is a more 
appropriate solution.




Anyways, no big deal, I guess it can be handled as a bug later, if it 
turns

out to misbehave.

What's a bit more troublesome is changes in the CatalogStore interface.
Mind, I'm not against them per se, but in order to change a interface 
that was

discussed openly on the ml I would have expected the same opennes, or at
least some explanation on why they happened, instead I'm looking at the
diff trying to understand them.
The changes propagate in other portions as well, it seems bits of the CSW
service code have been refactored, again, without providing any clue 
as to why.


I'm not saying the changes are right or wrong (on the contraty, I'm 
confident

they have been done for good reasons), but they should have been
discussed: since the patch is out already, can we have some rationale 
about them?


It would make reviewing the patch a lot easier.



First my apologies for not explaining the changes in advance. I usually 
try to make sure I am certain that particular changes are necessary or 
useful before I propose them, perhaps that is why I didn't do it earlier.


Then I also have to apologise about something else, I did my best 
cleaning up all the code and filling in the javadoc before I did my pull 
request but I seemed to have missed this file. The javadoc for 
translateProperty wasn't filled in, and on top of that one of the 
changes had to be removed before committing. The extra parameter 
elementSet was supposed to be removed again, this was a change I made at 
some point but became unnecessary later. So please remove this change 
all together, this can be done in the interface and all its 
implementations without a problem. Again, sorry about that, that was not 
my intention.


The other two changes however were for a good reasons and have both to 
do with making CSW more generic.


A lot of the generic stuff relies on using the RecordDescriptor 
interface. At points where the old code simply calls 
CSWRecordDescriptor.SOME_CONSTANT the new code often uses an instance of 
the RecordDescriptor interface and a method to get this information, for 
obvious reasons. Another thing is that as a consequence of parsing .xsd 
files the name of the record type is not any more in the FeatureType, 
but in an AttributeDescriptor. For example, the name of the CSW DC type 
is not Record but RecordType, there is a descriptor with the name 
Record that points to RecordType. This is good because it 
corresponds with how this is coded in the .xsd file. This is just one of 
the reasons why I don't pass on FeatureType objects any more, but rather 
RecordDescriptor objects. From here all sorts of information can be 
retrieved, like a namespace set which is also frequently used.


Considering the translateProperty method, this method converts a Name to 
PropertyName. This is used for property selection. This happens 
differently with the two Catalog Stores. The Abstract Catalog Store 
selects properties from a finished feature, so the PropertyName applies 
to a finished feature. The Internal Catalog Store selects properties 
earlier in the process, in the mapping, so it needs property names that 
the mapping understands (so for example, with '/value' included).


I hope this helps, if there are any more questions, please ask.

Kind Regards
Niels Charlier
--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d___

Re: [Geoserver-devel] review of csw pull request

2013-01-21 Thread Justin Deoliveira
On Sat, Jan 19, 2013 at 10:54 AM, Andrea Aime
andrea.a...@geo-solutions.itwrote:

 On Thu, Jan 17, 2013 at 2:10 AM, Justin Deoliveira 
 jdeol...@opengeo.orgwrote:

 Hi all,

 I spent a few hours today reviewing the pending pull request from Niels
 that adds support for iso application profile and a catalog store based
 directly from the geoserver catalog to the existing csw community module.

   https://github.com/geoserver/geoserver/pull/84/files


 Hi,
 just having a look at it right now.



 All in all it looks great. Big thanks to Niels and Andrea for all this
 work. I did however run into a few hiccups when trying to build the modules
 with tests.

 1. UTF-8 vs ISO-8859-1 encoding issues

 A few tests fail with error message complaining about invalid UTF-8 byte
 sequences. Some of the test files contain some extended latin characters.
 For instance:


 https://github.com/geoserver/geoserver/blob/master/src/community/csw/csw-core/src/test/resources/org/geoserver/csw/records/Record_e9330592-0932-474b-be34-c3a3bb67c7db.xml

 The error occurs when one of the tests tries to parse a
 GetRecord response that contains the record. The resulting doc reports a
 UTF-8 encoding and the getAsDOM method fails to parse it. Not sure the best
 way to solve this one but i was able to fix the test with two approaches.

   a. Change the record transformer to report a document encoding
 of ISO-8859-1
   b. Specify manually the ISO-8859-1 encoding when parsing the response,
 essentially ovrerriding the UTF-8 encoding reported on the doc

 This is an example of one of the tests that fail.


 https://github.com/geoserver/geoserver/blob/master/src/community/csw/csw-core/src/test/java/org/geoserver/csw/GetRecordsTest.java#L243


 Hmm... that file comes straigth from CITE tests data for CSW 2.0.2, did
 you try running
 the CITE tests after the change?
 I have no failures due to encoding, but I'm seeing those:

  testAllRecords(org.geoserver.csw.store.internal.GetRecordsTest):
 expected:[abstract about Forests] but was:[]
   testAllRecords(org.geoserver.csw.records.iso.GetRecordsTest):
 expected:[abstract about Forests] but was:[]
   testAllRecordsBrief(org.geoserver.csw.records.iso.GetRecordsTest):
 expected:[urn:x-ogc:def:crs:EPSG:6.11:4326] but was:[]


Yeah, I saw these, I think all three are the paging/ordering issue I
described.

I didn't actually run the cite tests. Will do so though.


 The first two you talk about later, simple fix, the last one seems new
 though, did you experience it as well?



 2. Location of schema files

 The pull request moves the csw schema files from the classpath root to a
 package prefix of net/opengis so that AppSchemaResolver can find them. But
 this then causes the classpath publisher to fail to find the and makes it
 so that the schemas are no longer web accessible which causes a test to
 fail.

 An obvious solution would be to just copy the files back to the root,
 keeping them in both places. But I wonder if AppSchemaResolver can be
 configured to load them without the package prefix. Or we could potentially
 modify ClasspathPublisher and add the ability to add a package prefix.


 Imho it would be best to fix the AppSchemaResolver, since every other
 schema in GeoServer is already
 published without issues with the ClasspathPublisher


Agreed. Will need feedback from Ben or Niels on this one though. A simple
hack would be to try and fall back on new package prefix net.opengis or
to add a flag to forgo the use of the package prefix.




 3. org.geoserver.csw.records.iso.GetRecordsTest failures

 Some of the ISO GetRecords tests fail as they make
 assertions assuming that the cite:Forests record will be in the first
 page of results. Easy fix seemed to just increase the page size by using
 maxRecords to ensure all results returned.

 And that is it. Aside from those issues the modules build just fine. I
 have pushed some changes up to my github that contain fixes for these
 issues:

   https://github.com/jdeolive/geoserver/tree/csw

 But i am not confident on the fixes for issues 1 and 2 above and would
 like to hear from Andrea and Niels.

 I also took the liberty of fixing some minor issues as well including:

 * cleaned up formatting issues with changes to main module catalog
 classes (tabs vs spaces)

 * removed csw- prefix from csw modules, as per convention with other multi
 module roots like web, etc... the directory tree now looks like:

 csw/
 api/
 core/
 simple-store/

 The artifact ids retain the csw prefix though.


 This works for me.

 Here is some more I've found during the review.

 There's a change in DefaultCatalogFacade.java that I'm not sure about:

  if (null != sortByList) {
 for (int i = sortByList.length - 1; i =0 ; i--) {
  SortBy sortBy = sortByList[i];
  OrderingObject ordering =
 Ordering.from(comparator(sortBy));
 if 

Re: [Geoserver-devel] review of csw pull request

2013-01-19 Thread Andrea Aime
On Thu, Jan 17, 2013 at 2:10 AM, Justin Deoliveira jdeol...@opengeo.orgwrote:

 Hi all,

 I spent a few hours today reviewing the pending pull request from Niels
 that adds support for iso application profile and a catalog store based
 directly from the geoserver catalog to the existing csw community module.

   https://github.com/geoserver/geoserver/pull/84/files


Hi,
just having a look at it right now.



 All in all it looks great. Big thanks to Niels and Andrea for all this
 work. I did however run into a few hiccups when trying to build the modules
 with tests.

 1. UTF-8 vs ISO-8859-1 encoding issues

 A few tests fail with error message complaining about invalid UTF-8 byte
 sequences. Some of the test files contain some extended latin characters.
 For instance:


 https://github.com/geoserver/geoserver/blob/master/src/community/csw/csw-core/src/test/resources/org/geoserver/csw/records/Record_e9330592-0932-474b-be34-c3a3bb67c7db.xml

 The error occurs when one of the tests tries to parse a
 GetRecord response that contains the record. The resulting doc reports a
 UTF-8 encoding and the getAsDOM method fails to parse it. Not sure the best
 way to solve this one but i was able to fix the test with two approaches.

   a. Change the record transformer to report a document encoding
 of ISO-8859-1
   b. Specify manually the ISO-8859-1 encoding when parsing the response,
 essentially ovrerriding the UTF-8 encoding reported on the doc

 This is an example of one of the tests that fail.


 https://github.com/geoserver/geoserver/blob/master/src/community/csw/csw-core/src/test/java/org/geoserver/csw/GetRecordsTest.java#L243


Hmm... that file comes straigth from CITE tests data for CSW 2.0.2, did you
try running
the CITE tests after the change?
I have no failures due to encoding, but I'm seeing those:

 testAllRecords(org.geoserver.csw.store.internal.GetRecordsTest):
expected:[abstract about Forests] but was:[]
  testAllRecords(org.geoserver.csw.records.iso.GetRecordsTest):
expected:[abstract about Forests] but was:[]
  testAllRecordsBrief(org.geoserver.csw.records.iso.GetRecordsTest):
expected:[urn:x-ogc:def:crs:EPSG:6.11:4326] but was:[]

The first two you talk about later, simple fix, the last one seems new
though, did you experience it as well?



 2. Location of schema files

 The pull request moves the csw schema files from the classpath root to a
 package prefix of net/opengis so that AppSchemaResolver can find them. But
 this then causes the classpath publisher to fail to find the and makes it
 so that the schemas are no longer web accessible which causes a test to
 fail.

 An obvious solution would be to just copy the files back to the root,
 keeping them in both places. But I wonder if AppSchemaResolver can be
 configured to load them without the package prefix. Or we could potentially
 modify ClasspathPublisher and add the ability to add a package prefix.


Imho it would be best to fix the AppSchemaResolver, since every other
schema in GeoServer is already
published without issues with the ClasspathPublisher



 3. org.geoserver.csw.records.iso.GetRecordsTest failures

 Some of the ISO GetRecords tests fail as they make
 assertions assuming that the cite:Forests record will be in the first
 page of results. Easy fix seemed to just increase the page size by using
 maxRecords to ensure all results returned.

 And that is it. Aside from those issues the modules build just fine. I
 have pushed some changes up to my github that contain fixes for these
 issues:

   https://github.com/jdeolive/geoserver/tree/csw

 But i am not confident on the fixes for issues 1 and 2 above and would
 like to hear from Andrea and Niels.

 I also took the liberty of fixing some minor issues as well including:

 * cleaned up formatting issues with changes to main module catalog classes
 (tabs vs spaces)

* removed csw- prefix from csw modules, as per convention with other multi
 module roots like web, etc... the directory tree now looks like:

 csw/
 api/
 core/
 simple-store/

 The artifact ids retain the csw prefix though.


This works for me.

Here is some more I've found during the review.

There's a change in DefaultCatalogFacade.java that I'm not sure about:

 if (null != sortByList) {
for (int i = sortByList.length - 1; i =0 ; i--) {
 SortBy sortBy = sortByList[i];
OrderingObject ordering = Ordering.from(comparator(sortBy));
if (SortOrder.DESCENDING.equals(sortBy.getSortOrder())) {
ordering = ordering.reverse();
}
all = ordering.sortedCopy(all);
}
}

What guarantees are there that sorting the same list multiple times we'll
get
to a result that is ordered on sortBy1, then sortBy2, and so on?
What I'm trying to say is, the second time we sort the algorithm might as
well
ruin the partial ordering established by the first sort... the Java 6
algorithm might
work, but Java