re Mutating Geometry in-place - JTS discourages this, but does not 
prevent it.  Sometimes people do this when they are transforming 
coordinates (eg. translation or affine transform)..    It's quite 
possible that all the JUMP code is clean, however.  In any case, this 
will only be an issue if that particular function is used.

re tracking modifications - how about providing a method that lets you 
clear the modified flag?  Then the feature can be constructed as 
necessary and then marked as clean.

It seems heavyweight to carry around a set of data which is only really 
of use during the construction phase of a Feature.  To avoid this, I'd 
even suggest constructing a Feature as needed, then creating a new 
Feature from it via a constructor which sets the modified flag 
appropriately.  Anything to avoid requiring more storage.

How does GeoTools handle this?

Larry Becker wrote:
> The tricky thing about modifications is not to find a record is 
> modified just because you set the initial value.  It is only modified 
> if you set it more than once, otherwise all records would be set as 
> modified as soon as they are loaded.
>
> The next trick is to consider that you call setAttribute multiple 
> times with different attribute indexes, so it is necessary to track 
> the changes to each one separately.
>
> Mutating Geometries in place is a concern.  I have never seen code 
> that does this, and certainly none of the edit tools or any plugins 
> that use transactions do this, but it may be possible.  Could you just 
> modify the Coordinate.x and y values?  I'll try to construct a 
> Beanshell test for this, but I doubt that this is a serious concern.  
> All of the tools and plugins that I have tried so far play by the rules.
>
> Larry
>
> On Thu, Apr 23, 2009 at 2:12 PM, Martin Davis <mbda...@refractions.net 
> <mailto:mbda...@refractions.net>> wrote:
>
>     Larry, why do you use an int rather than a boolean to flag changed
>     attributes?
>
>     BTW, In order to track changes to Geometry attributes correctly, the
>     JUMP codebase needs to be scrutinized to make sure it isn't mutating
>     Geometries "in place".
>
>
>
>     Larry Becker wrote:
>     > Hi,
>     >
>     >   As I mentioned in the other thread, before the problem of partial
>     > database updates can be solved, we must first be able to
>     determine if
>     > a Feature has been modified.  This is not currently possible in
>     all of
>     > the JUMP variants that I am familiar with, although Kosmo may have
>     > implemented it.
>     >
>     > The simplest way of implementing it that I can see is to modify
>     > BasicFeature to include:
>     >
>     > private int[] attributeModCount;  //this is a parallel array to
>     > Object[] attributes
>     >
>     > Then it would be necessary to allocate the attributeModCount array
>     > when setAttributes(Object[] attributes) is called.
>     >
>     > In addition each time setAttribute(int attributeIndex, Object
>     > newAttribute) is called, add the line of code:
>     >
>     > attributeModCount[attributeIndex]++
>     >
>     > With these modifications we could then define:
>     >
>     > public boolean isFeatureModified() {
>     >     for (int i=0; i<attributeModCount.length; i++) {
>     >       if (attributeModCount[i] > 1)  //modified is defined as
>     setting
>     > an attribute more than once
>     >          return true;
>     >     }
>     > return false;
>     > }
>     >
>     > Would this work and does this seem like something we should
>     consider?
>     >
>     > regards,
>     > Larry
>     > --
>     > http://amusingprogrammer.blogspot.com/
>     >
>     ------------------------------------------------------------------------
>     >
>     >
>     
> ------------------------------------------------------------------------------
>     >
>     >
>     ------------------------------------------------------------------------
>     >
>     > _______________________________________________
>     > Jump-pilot-devel mailing list
>     > Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >
>
>     --
>     Martin Davis
>     Senior Technical Architect
>     Refractions Research, Inc.
>     (250) 383-3022
>
>
>     
> ------------------------------------------------------------------------------
>     Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     Check out the new simplified licensign option that enables unlimited
>     royalty&#45;free distribution of the report engine for externally
>     facing
>     server and web deployment.
>     http://p.sf.net/sfu/businessobjects
>     _______________________________________________
>     Jump-pilot-devel mailing list
>     Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>
>
>
>
> -- 
> http://amusingprogrammer.blogspot.com/
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Crystal Reports &#45; New Free Runtime and 30 Day Trial
> Check out the new simplified licensign option that enables unlimited
> royalty&#45;free distribution of the report engine for externally facing 
> server and web deployment.
> http://p.sf.net/sfu/businessobjects
> ------------------------------------------------------------------------
>
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>   

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022


------------------------------------------------------------------------------
Crystal Reports &#45; New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty&#45;free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to