Class ListWrapper
java.lang.Object
org.eclipse.persistence.sdo.helper.ListWrapper
- All Implemented Interfaces:
Serializable
,Cloneable
,Iterable
,Collection
,List
- Direct Known Subclasses:
JAXBListWrapper
INTERNAL:
Purpose:
- This class wraps the ArrayList of currentElements that implement the List interface.
Responsibilities:
- Provide access many properties on
dataObject
s
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected List
We are maintaining two pointers to potentially two ArrayList objects.protected SDODataObject
protected SDOProperty
-
Constructor Summary
ConstructorDescriptionListWrapper
(SDODataObject theDataObject, Property theProperty) ListWrapper
(SDODataObject theDataObject, Property theProperty, List theList) Constructor for non-default Pluggable ValueStore implementations
Prerequisites: Containment is already set on theList parameter. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Inserts the specified element at the index position in this list.void
INTERNAL:boolean
boolean
INTERNAL:boolean
addAll
(int position, Collection items) Inserts all of the currentElements in the specified Collection into this list, starting at the specified position.boolean
addAll
(int position, Collection items, boolean updateSequence) boolean
addAll
(Collection items) Appends all of the currentElements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator.boolean
addAll
(Collection items, boolean updateSequence) INTERNAL: Appends all of the currentElements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator.void
clear()
Removes all of the currentElements from this list.void
clear
(boolean updateSequence) INTERNAL:clone()
Clone the ListWrapper.boolean
boolean
containsAll
(Collection items) protected void
INTERNAL: Shallow copy elementsget
(int position) INTERNAL:int
boolean
isEmpty()
protected boolean
INTERNAL:iterator()
int
lastIndexOf
(Object item) listIterator
(int position) remove
(int index) Removes the element at the specified position in this list.
Position index starts at 0.remove
(int index, boolean updateSequence) INTERNAL: Removes the element at the specified position in this list.
Position index starts at 0.boolean
boolean
INTERNAL: Remove the item or first occurrence of the item.boolean
removeAll
(Collection items) Removes from this collection all of its currentElements that are contained in the specified collection.boolean
removeAll
(Collection items, boolean updateSequence) INTERNAL: Removes from this collection all of its currentElements that are contained in the specified collection.protected void
removeContainment
(int occurrence, Object item, boolean fromDelete, boolean updateSequence) INTERNAL:protected void
removeContainment
(Object item, boolean fromDelete, boolean updateSequence) INTERNAL:boolean
retainAll
(Collection itemsToKeep) Retains only the currentElements in this collection that are contained in the specified collection (optional operation).
In other words, removes from this collection all of its currentElements that are not contained in the specified collection.Replaces the element at the specified index in this list with the specified element.void
setCurrentElements
(List currentElementsList) INTERNAL: bypass containment and changesummary copy of element list on modificationsint
size()
subList
(int start, int end) Return a view of the specified portion of the listObject[]
toArray()
Object[]
Returns an array containing all of the currentElements in this list in proper sequence; the runtime type of the returned array is that of the specified array.void
INTERNAL: Undo any changes and return the original Listprotected void
updateContainment
(Object item, boolean updateSequence) INTERNAL:protected void
updateContainment
(Collection items, boolean updateSequence) protected void
updateSequence
(Property aProperty, Collection items, boolean updateSequence) INTERNAL: Iterate the collection and add settings where appropriate.INTERNAL: Defined in SDO 2.01 spec on page 65 Externalizable function is called by ObjectStream.writeObject() A replacement object for serialization can be called here.Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.util.Collection
parallelStream, removeIf, stream
Methods inherited from interface java.util.List
equals, hashCode, replaceAll, sort, spliterator
-
Field Details
-
dataObject
-
property
-
currentElements
We are maintaining two pointers to potentially two ArrayList objects. To implement ChangeSummary undo we require a copy of the original state of our model - with special handling for ListWrapper to maintain object identity of the list The List (originalElements) on ChangeSummary will maintain the current state of our model after logged changes. The List (currentElements) will be a progressively deeper distinct shallow copy of the current list as it changes
-
-
Constructor Details
-
ListWrapper
public ListWrapper() -
ListWrapper
-
ListWrapper
Constructor for non-default Pluggable ValueStore implementations
Prerequisites: Containment is already set on theList parameter. Do not use this constructor for default implementations as containment is not updated. The SDO Objects inside this ListWrapper are special case wrappers with no previous containment We do not call updateContainment on the SDO Wrapper objects surrounding the POJO's otherwise the containment of this list will be removed in the embedded detach() call TestCase: the first get on a list.
-
-
Method Details
-
add
- Specified by:
add
in interfaceCollection
- Specified by:
add
in interfaceList
-
add
INTERNAL:- Parameters:
item
-updateSequence
-- Returns:
-
add
Inserts the specified element at the index position in this list. -
add
INTERNAL:- Parameters:
index
-item
-updateSequence
-
-
isLogging
protected boolean isLogging()INTERNAL: -
copyElements
protected void copyElements()INTERNAL: Shallow copy elements -
undoChanges
INTERNAL: Undo any changes and return the original List -
updateSequence
INTERNAL: Iterate the collection and add settings where appropriate.- Parameters:
aProperty
-items
-updateSequence
-
-
updateContainment
INTERNAL:- Parameters:
item
-updateSequence
-
-
updateContainment
-
removeContainment
INTERNAL:- Parameters:
item
-fromDelete
-updateSequence
-
-
removeContainment
protected void removeContainment(int occurrence, Object item, boolean fromDelete, boolean updateSequence) INTERNAL:- Parameters:
item
-fromDelete
-updateSequence
-
-
remove
INTERNAL: Remove the item or first occurrence of the item.- Parameters:
item
-fromDelete
-updateSequence
-- Returns:
-
remove
- Specified by:
remove
in interfaceCollection
- Specified by:
remove
in interfaceList
- Parameters:
item
-- Returns:
-
addAll
Appends all of the currentElements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator. The behavior of this operation is undefined if the specified Collection is modified while the operation is in progress. (This implies that the behavior of this call is undefined if the specified Collection is this list, and this list is nonempty.)
This operation is a special case of the general addAll(int, Collection).
From the SDO Specification: p18 The getList(property) accessor is especially convenient for many-valued properties. If property.many is true then set(property, value) and setList(property, value) require that [value] be a java.util.Collection and List respectively. These methods are equivalent to getList(property).clear() followed by getList(property).addAll(value).- Specified by:
addAll
in interfaceCollection
- Specified by:
addAll
in interfaceList
- Parameters:
items
-- Returns:
- boolean
-
addAll
INTERNAL: Appends all of the currentElements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator. This function calls the public addAll(Collection) with a sequence state flag.- Parameters:
items
-updateSequence
-- Returns:
-
addAll
Inserts all of the currentElements in the specified Collection into this list, starting at the specified position. Shifts the element currently at that position (if any) and any subsequent currentElements to the right (increases their indices). The new currentElements will appear in the list in the order that they are returned by the specified Collection's iterator. -
addAll
-
removeAll
Removes from this collection all of its currentElements that are contained in the specified collection.- Specified by:
removeAll
in interfaceCollection
- Specified by:
removeAll
in interfaceList
- Parameters:
items
-- Returns:
- boolean
-
removeAll
INTERNAL: Removes from this collection all of its currentElements that are contained in the specified collection.- Parameters:
items
-updateSequence
-- Returns:
-
retainAll
Retains only the currentElements in this collection that are contained in the specified collection (optional operation).
In other words, removes from this collection all of its currentElements that are not contained in the specified collection.- Specified by:
retainAll
in interfaceCollection
- Specified by:
retainAll
in interfaceList
- Parameters:
itemsToKeep
-- Returns:
- boolean
-
clear
public void clear()Removes all of the currentElements from this list. The list will be empty after this call returns.- Specified by:
clear
in interfaceCollection
- Specified by:
clear
in interfaceList
-
clear
public void clear(boolean updateSequence) INTERNAL:- Parameters:
updateSequence
-
-
set
Replaces the element at the specified index in this list with the specified element. -
remove
INTERNAL: Removes the element at the specified position in this list.
Position index starts at 0.- Parameters:
index
-updateSequence
-- Returns:
- Object (the element previously at the specified position)
-
remove
Removes the element at the specified position in this list.
Position index starts at 0. -
listIterator
- Specified by:
listIterator
in interfaceList
-
listIterator
- Specified by:
listIterator
in interfaceList
-
subList
Return a view of the specified portion of the list -
toArray
- Specified by:
toArray
in interfaceCollection
- Specified by:
toArray
in interfaceList
-
toArray
Returns an array containing all of the currentElements in this list in proper sequence; the runtime type of the returned array is that of the specified array. Obeys the general contract of the Collection.toArray(Object[]) method.
Specified by: toArray in interface Collection<E>
Throws:
ArrayStoreException - if the runtime type of the specified array is not a supertype of the runtime type of every element in this list.
NullPointerException - if the specified array is null.- Specified by:
toArray
in interfaceCollection
- Specified by:
toArray
in interfaceList
- Parameters:
items
- -the array into which the currentElements of this list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.- Returns:
- Object[] - an array containing the currentElements of this list.
-
size
public int size()- Specified by:
size
in interfaceCollection
- Specified by:
size
in interfaceList
-
isEmpty
public boolean isEmpty()- Specified by:
isEmpty
in interfaceCollection
- Specified by:
isEmpty
in interfaceList
-
contains
- Specified by:
contains
in interfaceCollection
- Specified by:
contains
in interfaceList
-
containsAll
- Specified by:
containsAll
in interfaceCollection
- Specified by:
containsAll
in interfaceList
-
iterator
-
indexOf
-
lastIndexOf
- Specified by:
lastIndexOf
in interfaceList
-
get
-
writeReplace
INTERNAL: Defined in SDO 2.01 spec on page 65 Externalizable function is called by ObjectStream.writeObject() A replacement object for serialization can be called here.Security Note: This public function exposes a data replacement vulnerability where an outside client can gain access and modify their non-final constants. We may need to wrap the GZIP streams in some sort of encryption when we are not using HTTPS or SSL/TLS on the wire.
- See Also:
-
getCurrentElements
INTERNAL:- Returns:
-
setCurrentElements
INTERNAL: bypass containment and changesummary copy of element list on modifications -
clone
Clone the ListWrapper. This creates a new ListWrapper with the same contents as the original (shallow clone) Minimal clone operation implemented to support usage in JPA
-