Currently, in the Bundle.addBitstream() method the 'bitstream_order' setting is always set to the same value as the 'sequence_id'.
This makes a large assumption that these two fields should always be equal for newly created bitstreams.
However, in scenarios where you are restoring an Item and its Bitstreams (like via AIP Backup & Restore), this assumption falls flat. In 'restore' scenarios, it's very possible you may want to restore the 'sequence_id' as 2 while the 'bitstream_order' should be 1. Unfortunately, this becomes problematic, as the 'addBitstream()' method will always assume bitstream_order=sequence_id.
My proposal is to instead implement Bundle.addBitstream() so that it is always appending the newly added bitstream to the end of the current list of Bitstreams. So, instead it should set:
bitstream_order = bitstreams.size()
This will work fine for 'restore' scenarios, as Bitstreams are always restored in order, so the bitstream_order may be restored to a different value to the sequence_id.
A proposed patch to the Bundle class is attached. I've done some minimal testing so far, but it seems stable. I have verified that with this patch in place, I can now restore both an Item's bitstream_order and sequence_id to different values (as necessary), via the AIP Backup & Restore tools.
I'd appreciate feedback on this approach.