[JIRA] (GLAZEDLISTS-582) CompositeList writable: why not?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[JIRA] (GLAZEDLISTS-582) CompositeList writable: why not?

JIRA jira-no-reply@java.net

    [ https://java.net/jira/browse/GLAZEDLISTS-582?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=387124#comment-387124 ]

mauromol commented on GLAZEDLISTS-582:
--------------------------------------

Sorry, in the above code replace:
{code}
// add in the last position of the last list
source.get(size - 1).add(value);
{code}
with:
{code}
// add in the last position of the last list
source.get(source.size() - 1).add(value);
{code}

A better implementation, though, should check against the case in which the composite list currently has no member lists, either by creating one or by rejecting the add operation.

> CompositeList writable: why not?
> --------------------------------
>
>                 Key: GLAZEDLISTS-582
>                 URL: https://java.net/jira/browse/GLAZEDLISTS-582
>             Project: glazedlists
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.9.1
>            Reporter: mauromol
>            Assignee: jessewilson
>
> {{CompositeList}} is currently not writable.
> I think it should be useful if it were writable (at least as an opt-in).
> I wrote my {{CompositeList}} extension that returns {{true}} from {{isWritable()}} and implements {{add(int, E)}} in this way (it could probably be better optimized):
> {code}
> @Override
> public void add(final int index, final E value) {
> if (!isWritable())
> throw new IllegalStateException(
> "Non-writable List cannot be modified");
> final int size = size();
> if (index < 0 || index > size)
> throw new IndexOutOfBoundsException("Cannot add at " + index
> + " on list of size " + size);
> if (index >= size)
> // add in the last position of the last list
> source.get(size - 1).add(value);
> else {
> // add to the appropriate list
> int offset = 0;
> for (final EventList<E> list : source) {
> final int currentListSize = list.size();
> if (index < offset + currentListSize)
> // the position hits this list
> list.add(index - offset, value);
> else
> // go to next list
> offset += currentListSize;
> }
> }
> }
> {code}
> I didn't write thorough tests, but made some with the simple cases I needed to handle in my project. I hope this can be a base for discussion.



--
This message was sent by Atlassian JIRA
(v6.2.3#6260)