I see your point, although newly-created BasicFeatures aren't really an 
issue - they are always dirty by definition.  It's just features which 
have had their attributes modified which are the problem.

I'm not totally crazy about this MutableBasicFeature/BasicFeature 
dichotomy, but it might be workable.  You would have to flip BFs to MBFs 
when they were written out, since they would then become clean again.

I think I'd prefer a scheme where the container kept track of which 
features have been modified, and leave features as simple value 
objects.  I believe this is what GeoTools does. Can anyone confirm that 
before I go digging through their codebase? 

Larry Becker wrote:
>
>     Perhaps you could extend BasicFeature to be a MutableBasicFeature, and
>     this is the concrete class that would be used by Writeable DataStores.
>
>
> This is a good idea, but tough to implement.  A search for "new 
> BasicFeature" found 80 matches in the project.  The fact is that most 
> tools create BasicFeatures.  Now perhaps, if we are clever, we can use 
> that to our advantage. Hmm...
>
> Larry
>
> On Thu, Apr 23, 2009 at 6:16 PM, Martin Davis <mbda...@refractions.net 
> <mailto:mbda...@refractions.net>> wrote:
>
>     Perhaps you could extend BasicFeature to be a MutableBasicFeature, and
>     this is the concrete class that would be used by Writeable DataStores.
>     Only MutableBasicFeature would incur the overhead of tracking changes.
>     Whether the DataStore is writeable could be determined dynamically as
>     well (ie by user input when layer is created).  There are a lot of use
>     cases where the writable aspect isn't needed.
>
>     If it was me, I would still prefer the simpler single boolean
>     dirty flag
>     (although I would probably opt for still implementing
>     MutableBasicFeature, in case there was more behaviour that needed
>     to be
>     added down the road.)
>
>     If I get a chance I'll try and see what GeoTools does here - they must
>     have this same problem.
>
>     Larry Becker wrote:
>     > I think the other developers need to understand that the cost of
>     > supporting per-feature modified status will be a per-feature cost of
>     > (size of int) * number of attributes.  I'm not sure I made that
>     > clear.  Currently the memory cost is for all features on all layers.
>     > Perhaps there is needed a way to opt-in to this cost and
>     functionality
>     > at layer creation time.  Hmm...
>     >
>     > Larry
>     >
>     > On Thu, Apr 23, 2009 at 4:53 PM, Martin Davis
>     <mbda...@refractions.net <mailto:mbda...@refractions.net>
>     > <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>> wrote:
>     >
>     >     I guess the memory issue might be moot for DataStore-based
>     datasets
>     >     anyway, since the whole point is to only keep in memory what is
>     >     currently displayed on the screen.
>     >
>     >     But simpler is always better!  Alarm bells start ringing for
>     me when I
>     >     see counts being used - the semantics seems like they must
>     be more
>     >     complicated than a simple flag.
>     >
>     >     Larry Becker wrote:
>     >
>
>
>     >     > I agree that a mechanism to reset the modified status is
>     needed,
>     >     > especially after the changes to the layer have been
>     flushed to the
>     >     > database.  I'll add this to BasicFeature.
>     >     >
>     >     > Your comment about carrying around state data after it is
>     needed is
>     >     > reasonable.  The code could check for modified on-the-fly
>     while
>     >     it is
>     >     > incrementing the attribute mod count and if it is greater
>     than one,
>     >     > set a boolean instead and dispose of the array of ints.
>      You would
>     >     > lose the ability to determine individual attribute mods
>     (not sure if
>     >     > it is needed), however you would only save memory in modified
>     >     records
>     >     > which wouldn't usually be very much.
>     >     >
>     >     > I was hoping someone would come up with a clever hack that
>     wouldn't
>     >     > require the int array.  All of the optimizations that I have
>     >     > considered break in one case or another.
>     >     >
>     >     > BTW, if you really want to save memory on attribute storage, I
>     >     have a
>     >     > number of questionable schemes that load attributes on an
>     as-needed
>     >     > basis.  :-)  SkyJUMP even has an optimization were layers that
>     >     aren't
>     >     > visible are not loaded into memory until you make them
>     visible,
>     >     > although it doesn't go as far as removing them when you
>     make them
>     >     > invisible.  Of course the most famous attribute
>     memory-saving scheme
>     >     > is Michael's permgen attribute string scheme for dbf files.
>     >      That one
>     >     > saves a ton of memory on typically redundant data, until
>     you run out
>     >     > of permgen memory.
>     >     >
>     >     > Larry
>     >     >
>     >     > On Thu, Apr 23, 2009 at 4:06 PM, Martin Davis
>     >     <mbda...@refractions.net <mailto:mbda...@refractions.net>
>     <mailto:mbda...@refractions.net <mailto:mbda...@refractions.net>>
>     >     > <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>
>     >     <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>>> wrote:
>     >     >
>     >     >     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> <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>
>     >     <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net> <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>>
>     >     >     > <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>
>     >     <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>
>     >     >     <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>
>     >     <mailto: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>
>     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>>
>     >     >     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto: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>
>     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>>
>     >     >     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto: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
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto: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>
>     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >     >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto: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
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >     <mailto: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>
>     >     <mailto: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
>     <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