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 - New Free Runtime and 30 Day Trial > Check out the new simplified licensign option that enables unlimited > royalty-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 - New Free Runtime and 30 Day Trial > Check out the new simplified licensign option that enables unlimited > royalty-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 - New Free Runtime and 30 Day Trial Check out the new simplified licensign option that enables unlimited royalty-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