com.vaadin.data.util.sqlcontainer
Class SQLContainer

java.lang.Object
  extended by com.vaadin.data.util.sqlcontainer.SQLContainer
All Implemented Interfaces:
Container, Container.Filterable, Container.Indexed, Container.ItemSetChangeNotifier, Container.Ordered, Container.Sortable, Serializable

public class SQLContainer
extends Object
implements Container, Container.Filterable, Container.Indexed, Container.Sortable, Container.ItemSetChangeNotifier

See Also:
Serialized Form

Nested Class Summary
static class SQLContainer.ItemSetChangeEvent
          Simple ItemSetChangeEvent implementation.
 
Nested classes/interfaces inherited from interface com.vaadin.data.Container
Container.Editor, Container.Filter, Container.Filterable, Container.Hierarchical, Container.Indexed, Container.ItemSetChangeListener, Container.ItemSetChangeNotifier, Container.Ordered, Container.PropertySetChangeEvent, Container.PropertySetChangeListener, Container.PropertySetChangeNotifier, Container.SimpleFilterable, Container.Sortable, Container.Viewer
 
Field Summary
static int CACHE_RATIO
          Number of items to cache = CACHE_RATIO x pageLength
static int DEFAULT_PAGE_LENGTH
           
 
Constructor Summary
SQLContainer(QueryDelegate delegate)
          Creates and initializes SQLContainer using the given QueryDelegate
 
Method Summary
 void addContainerFilter(Container.Filter filter)
          Adds a filter for the container.
 void addContainerFilter(Object propertyId, String filterString, boolean ignoreCase, boolean onlyMatchPrefix)
          
 boolean addContainerProperty(Object propertyId, Class<?> type, Object defaultValue)
          Adds a new Property to all Items in the Container.
 Object addItem()
          Note! If auto commit mode is enabled, this method will still return the temporary row ID assigned for the item.
 Item addItem(Object itemId)
          Creates a new Item with the given ID in the Container.
 Object addItemAfter(Object previousItemId)
          Adds a new item after the given item.
 Item addItemAfter(Object previousItemId, Object newItemId)
          Adds a new item after the given item.
 Object addItemAt(int index)
          Adds a new item at given index (in the filtered view).
 Item addItemAt(int index, Object newItemId)
          Adds a new item at given index (in the filtered view).
 void addListener(Container.ItemSetChangeListener listener)
          Adds an Item set change listener for the object.
 void addListener(QueryDelegate.RowIdChangeListener listener)
          Adds a RowIdChangeListener to the QueryDelegate
 void addOrderBy(OrderBy orderBy)
          Adds the given OrderBy to this container and refreshes the container contents with the new sorting rules.
 void addReference(SQLContainer refdCont, String refingCol, String refdCol)
          Adds a new reference to the given SQLContainer.
 void commit()
          Commits all the changes, additions and removals made to the items of this container.
 boolean containsId(Object itemId)
          Tests if the Container contains the specified Item.
 void enableCacheFlushNotifications()
          Calling this will enable this SQLContainer to send and receive cache flush notifications for its lifetime.
protected  void fireContentsChange()
           
 Object firstItemId()
          Gets the ID of the first Item in the Container.
 Property<?> getContainerProperty(Object itemId, Object propertyId)
          Gets the Property identified by the given itemId and propertyId from the Container.
 Collection<?> getContainerPropertyIds()
          Gets the ID's of all Properties stored in the Container.
 Object getIdByIndex(int index)
          Gets the ID of an Item by an index number.
 Item getItem(Object itemId)
          Gets the Item with the given Item ID from the Container.
 Collection<?> getItemIds()
          NOTE! Do not use this method if in any way avoidable.
 Item getItemUnfiltered(Object itemId)
          Bypasses in-memory filtering to return items that are cached in memory.
 int getPageLength()
          Returns the currently set page length.
protected  QueryDelegate getQueryDelegate()
          Returns the QueryDelegate set for this SQLContainer.
 Item getReferencedItem(Object itemId, SQLContainer refdCont)
          Fetches the referenced item from the target SQLContainer.
 Object getReferencedItemId(Object itemId, SQLContainer refdCont)
          Fetches the Item Id of the referenced item from the target SQLContainer.
 Collection<?> getSortableContainerPropertyIds()
          Gets the container property IDs which can be used to sort the items.
 Class<?> getType(Object propertyId)
          Gets the data type of all Properties identified by the given Property ID.
 int indexOfId(Object itemId)
          Gets the index of the Item corresponding to the itemId.
 boolean isAutoCommit()
          Returns status of the auto commit mode.
 boolean isFirstId(Object itemId)
          Tests if the Item corresponding to the given Item ID is the first Item in the Container.
 boolean isLastId(Object itemId)
          Tests if the Item corresponding to the given Item ID is the last Item in the Container.
 boolean isModified()
          Returns modify state of the container.
 Object lastItemId()
          Gets the ID of the last Item in the Container..
 Object nextItemId(Object itemId)
          Gets the ID of the Item following the Item that corresponds to itemId.
 Object prevItemId(Object itemId)
          Gets the ID of the Item preceding the Item that corresponds to itemId.
 void refresh()
          Refreshes the container - clears all caches and resets size and offset.
 void removeAllContainerFilters()
          Remove all active filters from the container.
 boolean removeAllItems()
          Removes all Items from the Container.
 void removeContainerFilter(Container.Filter filter)
          Removes a filter from the container.
 void removeContainerFilters(Object propertyId)
          
 boolean removeContainerProperty(Object propertyId)
          Removes a Property specified by the given Property ID from the Container.
 boolean removeItem(Object itemId)
          Removes the Item identified by ItemId from the Container.
 void removeListener(Container.ItemSetChangeListener listener)
          Removes the Item set change listener from the object.
 void removeListener(QueryDelegate.RowIdChangeListener listener)
          Removes a RowIdChangeListener from the QueryDelegate
 boolean removeReference(SQLContainer refdCont)
          Removes the reference pointing to the given SQLContainer.
 void rollback()
          Rolls back all the changes, additions and removals made to the items of this container.
 void setAutoCommit(boolean autoCommitEnabled)
          Set auto commit mode enabled or disabled.
 void setPageLength(int pageLength)
          Sets the page length used in lazy fetching of items from the data source.
 boolean setReferencedItem(Object itemId, Object refdItemId, SQLContainer refdCont)
          Sets the referenced item.
 int size()
          Gets the number of visible Items in the Container.
 void sort(Object[] propertyId, boolean[] ascending)
          Sort method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_PAGE_LENGTH

public static final int DEFAULT_PAGE_LENGTH
See Also:
Constant Field Values

CACHE_RATIO

public static final int CACHE_RATIO
Number of items to cache = CACHE_RATIO x pageLength

See Also:
Constant Field Values
Constructor Detail

SQLContainer

public SQLContainer(QueryDelegate delegate)
             throws SQLException
Creates and initializes SQLContainer using the given QueryDelegate

Parameters:
delegate - QueryDelegate implementation
Throws:
SQLException
Method Detail

addItem

public Object addItem()
               throws UnsupportedOperationException
Note! If auto commit mode is enabled, this method will still return the temporary row ID assigned for the item. Implement QueryDelegate.RowIdChangeListener to receive the actual Row ID value after the addition has been committed. Creates a new Item into the Container, and assign it an automatic ID.

The new ID is returned, or null if the operation fails. After a successful call you can use the getItemmethod to fetch the Item.

This functionality is optional.

Specified by:
addItem in interface Container
Returns:
ID of the newly created Item, or null in case of a failure
Throws:
UnsupportedOperationException - if adding an item without an explicit item ID is not supported by the container

containsId

public boolean containsId(Object itemId)
Description copied from interface: Container
Tests if the Container contains the specified Item. Filtering can hide items so that they will not be visible through the container API, and this method should respect visibility of items (i.e. only indicate visible items as being in the container) if feasible for the container.

Specified by:
containsId in interface Container
Parameters:
itemId - ID the of Item to be tested
Returns:
boolean indicating if the Container holds the specified Item

getContainerProperty

public Property<?> getContainerProperty(Object itemId,
                                        Object propertyId)
Description copied from interface: Container
Gets the Property identified by the given itemId and propertyId from the Container. If the Container does not contain the item or it is filtered out, or the Container does not have the Property, null is returned.

Specified by:
getContainerProperty in interface Container
Parameters:
itemId - ID of the visible Item which contains the Property
propertyId - ID of the Property to retrieve
Returns:
Property with the given ID or null

getContainerPropertyIds

public Collection<?> getContainerPropertyIds()
Description copied from interface: Container
Gets the ID's of all Properties stored in the Container. The ID's cannot be modified through the returned collection.

Specified by:
getContainerPropertyIds in interface Container
Returns:
unmodifiable collection of Property IDs

getItem

public Item getItem(Object itemId)
Description copied from interface: Container
Gets the Item with the given Item ID from the Container. If the Container does not contain the requested Item, null is returned. Containers should not return Items that are filtered out.

Specified by:
getItem in interface Container
Parameters:
itemId - ID of the Item to retrieve
Returns:
the Item with the given ID or null if the Item is not found in the Container

getItemUnfiltered

public Item getItemUnfiltered(Object itemId)
Bypasses in-memory filtering to return items that are cached in memory. NOTE: This does not bypass database-level filtering.

Parameters:
itemId - the id of the item to retrieve.
Returns:
the item represented by itemId.

getItemIds

public Collection<?> getItemIds()
NOTE! Do not use this method if in any way avoidable. This method doesn't (and cannot) use lazy loading, which means that all rows in the database will be loaded into memory. Gets the ID's of all visible (after filtering and sorting) Items stored in the Container. The ID's cannot be modified through the returned collection. If the container is Container.Ordered, the collection returned by this method should follow that order. If the container is Container.Sortable, the items should be in the sorted order. Calling this method for large lazy containers can be an expensive operation and should be avoided when practical.

Specified by:
getItemIds in interface Container
Returns:
unmodifiable collection of Item IDs

getType

public Class<?> getType(Object propertyId)
Description copied from interface: Container
Gets the data type of all Properties identified by the given Property ID.

Specified by:
getType in interface Container
Parameters:
propertyId - ID identifying the Properties
Returns:
data type of the Properties

size

public int size()
Description copied from interface: Container
Gets the number of visible Items in the Container. Filtering can hide items so that they will not be visible through the container API.

Specified by:
size in interface Container
Returns:
number of Items in the Container

removeItem

public boolean removeItem(Object itemId)
                   throws UnsupportedOperationException
Description copied from interface: Container
Removes the Item identified by ItemId from the Container.

Containers that support filtering should also allow removing an item that is currently filtered out.

This functionality is optional.

Specified by:
removeItem in interface Container
Parameters:
itemId - ID of the Item to remove
Returns:
true if the operation succeeded, false if not
Throws:
UnsupportedOperationException - if the container does not support removing individual items

removeAllItems

public boolean removeAllItems()
                       throws UnsupportedOperationException
Description copied from interface: Container
Removes all Items from the Container.

Note that Property ID and type information is preserved. This functionality is optional.

Specified by:
removeAllItems in interface Container
Returns:
true if the operation succeeded, false if not
Throws:
UnsupportedOperationException - if the container does not support removing all items

addContainerFilter

public void addContainerFilter(Container.Filter filter)
                        throws UnsupportedFilterException
Adds a filter for the container. If a container has multiple filters, only items accepted by all filters are visible.

Specified by:
addContainerFilter in interface Container.Filterable
Throws:
UnsupportedFilterException - if the filter is not supported by the container

removeContainerFilter

public void removeContainerFilter(Container.Filter filter)
Removes a filter from the container. This requires that the equals() method considers the filters as equivalent (same instance or properly implemented equals() method).

Specified by:
removeContainerFilter in interface Container.Filterable

addContainerFilter

public void addContainerFilter(Object propertyId,
                               String filterString,
                               boolean ignoreCase,
                               boolean onlyMatchPrefix)


removeContainerFilters

public void removeContainerFilters(Object propertyId)


removeAllContainerFilters

public void removeAllContainerFilters()
Remove all active filters from the container.

Specified by:
removeAllContainerFilters in interface Container.Filterable

indexOfId

public int indexOfId(Object itemId)
Description copied from interface: Container.Indexed
Gets the index of the Item corresponding to the itemId. The following is true for the returned index: 0 <= index < size(), or index = -1 if there is no visible item with that id in the container.

Specified by:
indexOfId in interface Container.Indexed
Parameters:
itemId - ID of an Item in the Container
Returns:
index of the Item, or -1 if (the filtered and sorted view of) the Container does not include the Item

getIdByIndex

public Object getIdByIndex(int index)
Description copied from interface: Container.Indexed
Gets the ID of an Item by an index number.

Specified by:
getIdByIndex in interface Container.Indexed
Parameters:
index - Index of the requested id in (the filtered and sorted view of) the Container
Returns:
ID of the Item in the given index

nextItemId

public Object nextItemId(Object itemId)
Description copied from interface: Container.Ordered
Gets the ID of the Item following the Item that corresponds to itemId. If the given Item is the last or not found in the Container, null is returned.

Specified by:
nextItemId in interface Container.Ordered
Parameters:
itemId - ID of a visible Item in the Container
Returns:
ID of the next visible Item or null

prevItemId

public Object prevItemId(Object itemId)
Description copied from interface: Container.Ordered
Gets the ID of the Item preceding the Item that corresponds to itemId. If the given Item is the first or not found in the Container, null is returned.

Specified by:
prevItemId in interface Container.Ordered
Parameters:
itemId - ID of a visible Item in the Container
Returns:
ID of the previous visible Item or null

firstItemId

public Object firstItemId()
Description copied from interface: Container.Ordered
Gets the ID of the first Item in the Container.

Specified by:
firstItemId in interface Container.Ordered
Returns:
ID of the first visible Item in the Container

lastItemId

public Object lastItemId()
Description copied from interface: Container.Ordered
Gets the ID of the last Item in the Container..

Specified by:
lastItemId in interface Container.Ordered
Returns:
ID of the last visible Item in the Container

isFirstId

public boolean isFirstId(Object itemId)
Description copied from interface: Container.Ordered
Tests if the Item corresponding to the given Item ID is the first Item in the Container.

Specified by:
isFirstId in interface Container.Ordered
Parameters:
itemId - ID of an Item in the Container
Returns:
true if the Item is first visible item in the Container, false if not

isLastId

public boolean isLastId(Object itemId)
Description copied from interface: Container.Ordered
Tests if the Item corresponding to the given Item ID is the last Item in the Container.

Specified by:
isLastId in interface Container.Ordered
Returns:
true if the Item is last visible item in the Container, false if not

sort

public void sort(Object[] propertyId,
                 boolean[] ascending)
Description copied from interface: Container.Sortable
Sort method. Sorts the container items. Sorting a container can irreversibly change the order of its items or only change the order temporarily, depending on the container.

Specified by:
sort in interface Container.Sortable
Parameters:
propertyId - Array of container property IDs, whose values are used to sort the items in container as primary, secondary, ... sorting criterion. All of the item IDs must be in the collection returned by Container.Sortable.getSortableContainerPropertyIds()
ascending - Array of sorting order flags corresponding to each property ID used in sorting. If this array is shorter than propertyId array, ascending order is assumed for items where the order is not specified. Use true to sort in ascending order, false to use descending order.

getSortableContainerPropertyIds

public Collection<?> getSortableContainerPropertyIds()
Description copied from interface: Container.Sortable
Gets the container property IDs which can be used to sort the items.

Specified by:
getSortableContainerPropertyIds in interface Container.Sortable
Returns:
the IDs of the properties that can be used for sorting the container

refresh

public void refresh()
Refreshes the container - clears all caches and resets size and offset. Does NOT remove sorting or filtering rules!


isModified

public boolean isModified()
Returns modify state of the container.

Returns:
true if contents of this container have been modified

setAutoCommit

public void setAutoCommit(boolean autoCommitEnabled)
Set auto commit mode enabled or disabled. Auto commit mode means that all changes made to items of this container will be immediately written to the underlying data source.

Parameters:
autoCommitEnabled - true to enable auto commit mode

isAutoCommit

public boolean isAutoCommit()
Returns status of the auto commit mode.

Returns:
true if auto commit mode is enabled

getPageLength

public int getPageLength()
Returns the currently set page length.

Returns:
current page length

setPageLength

public void setPageLength(int pageLength)
Sets the page length used in lazy fetching of items from the data source. Also resets the cache size to match the new page length. As a side effect the container will be refreshed.

Parameters:
pageLength - new page length

addOrderBy

public void addOrderBy(OrderBy orderBy)
Adds the given OrderBy to this container and refreshes the container contents with the new sorting rules. Note that orderBy.getColumn() must return a column name that exists in this container.

Parameters:
orderBy - OrderBy to be added to the container sorting rules

commit

public void commit()
            throws UnsupportedOperationException,
                   SQLException
Commits all the changes, additions and removals made to the items of this container.

Throws:
UnsupportedOperationException
SQLException

rollback

public void rollback()
              throws UnsupportedOperationException,
                     SQLException
Rolls back all the changes, additions and removals made to the items of this container.

Throws:
UnsupportedOperationException
SQLException

getQueryDelegate

protected QueryDelegate getQueryDelegate()
Returns the QueryDelegate set for this SQLContainer.

Returns:
current querydelegate

addContainerProperty

public boolean addContainerProperty(Object propertyId,
                                    Class<?> type,
                                    Object defaultValue)
                             throws UnsupportedOperationException
Description copied from interface: Container
Adds a new Property to all Items in the Container. The Property ID, data type and default value of the new Property are given as parameters. This functionality is optional.

Specified by:
addContainerProperty in interface Container
Parameters:
propertyId - ID of the Property
type - Data type of the new Property
defaultValue - The value all created Properties are initialized to
Returns:
true if the operation succeeded, false if not
Throws:
UnsupportedOperationException - if the container does not support explicitly adding container properties

removeContainerProperty

public boolean removeContainerProperty(Object propertyId)
                                throws UnsupportedOperationException
Description copied from interface: Container
Removes a Property specified by the given Property ID from the Container. Note that the Property will be removed from all Items in the Container. This functionality is optional.

Specified by:
removeContainerProperty in interface Container
Parameters:
propertyId - ID of the Property to remove
Returns:
true if the operation succeeded, false if not
Throws:
UnsupportedOperationException - if the container does not support removing container properties

addItem

public Item addItem(Object itemId)
             throws UnsupportedOperationException
Description copied from interface: Container
Creates a new Item with the given ID in the Container.

The new Item is returned, and it is ready to have its Properties modified. Returns null if the operation fails or the Container already contains a Item with the given ID.

This functionality is optional.

Specified by:
addItem in interface Container
Parameters:
itemId - ID of the Item to be created
Returns:
Created new Item, or null in case of a failure
Throws:
UnsupportedOperationException - if adding an item with an explicit item ID is not supported by the container

addItemAfter

public Item addItemAfter(Object previousItemId,
                         Object newItemId)
                  throws UnsupportedOperationException
Description copied from interface: Container.Ordered
Adds a new item after the given item.

Adding an item after null item adds the item as first item of the ordered container.

Specified by:
addItemAfter in interface Container.Ordered
Parameters:
previousItemId - Id of the visible item in ordered container after which to insert the new item.
newItemId - Id of the new item to be added.
Returns:
new item or null if the operation fails.
Throws:
UnsupportedOperationException - if the operation is not supported by the container
See Also:
Ordered: adding items in filtered or sorted containers

addItemAt

public Item addItemAt(int index,
                      Object newItemId)
               throws UnsupportedOperationException
Description copied from interface: Container.Indexed
Adds a new item at given index (in the filtered view).

The indexes of the item currently in the given position and all the following items are incremented.

This method should apply filters to the added item after inserting it, possibly hiding it immediately. If the container is being sorted, the item may be added at the correct sorted position instead of the given position. See Container.Indexed, Container.SimpleFilterable and Container.Sortable for more information.

Specified by:
addItemAt in interface Container.Indexed
Parameters:
index - Index (in the filtered and sorted view) at which to add the new item.
newItemId - Id of the new item to be added.
Returns:
new Item or null if the operation fails.
Throws:
UnsupportedOperationException - if the operation is not supported by the container

addItemAt

public Object addItemAt(int index)
                 throws UnsupportedOperationException
Description copied from interface: Container.Indexed
Adds a new item at given index (in the filtered view).

The indices of the item currently in the given position and all the following items are incremented.

This method should apply filters to the added item after inserting it, possibly hiding it immediately. If the container is being sorted, the item may be added at the correct sorted position instead of the given position. See Container.Indexed, Container.Ordered, Container.SimpleFilterable and Container.Sortable for more information.

Specified by:
addItemAt in interface Container.Indexed
Parameters:
index - Index (in the filtered and sorted view) to add the new item.
Returns:
item id of the created item or null if the operation fails.
Throws:
UnsupportedOperationException - if the operation is not supported by the container

addItemAfter

public Object addItemAfter(Object previousItemId)
                    throws UnsupportedOperationException
Description copied from interface: Container.Ordered
Adds a new item after the given item.

Adding an item after null item adds the item as first item of the ordered container.

Specified by:
addItemAfter in interface Container.Ordered
Parameters:
previousItemId - Id of the visible item in ordered container after which to insert the new item.
Returns:
item id the the created new item or null if the operation fails.
Throws:
UnsupportedOperationException - if the operation is not supported by the container
See Also:
Ordered: adding items in filtered or sorted containers

addListener

public void addListener(Container.ItemSetChangeListener listener)
Description copied from interface: Container.ItemSetChangeNotifier
Adds an Item set change listener for the object.

Specified by:
addListener in interface Container.ItemSetChangeNotifier
Parameters:
listener - listener to be added

removeListener

public void removeListener(Container.ItemSetChangeListener listener)
Description copied from interface: Container.ItemSetChangeNotifier
Removes the Item set change listener from the object.

Specified by:
removeListener in interface Container.ItemSetChangeNotifier
Parameters:
listener - listener to be removed

fireContentsChange

protected void fireContentsChange()

addListener

public void addListener(QueryDelegate.RowIdChangeListener listener)
Adds a RowIdChangeListener to the QueryDelegate

Parameters:
listener -

removeListener

public void removeListener(QueryDelegate.RowIdChangeListener listener)
Removes a RowIdChangeListener from the QueryDelegate

Parameters:
listener -

enableCacheFlushNotifications

public void enableCacheFlushNotifications()
Calling this will enable this SQLContainer to send and receive cache flush notifications for its lifetime.


addReference

public void addReference(SQLContainer refdCont,
                         String refingCol,
                         String refdCol)
Adds a new reference to the given SQLContainer. In addition to the container you must provide the column (property) names used for the reference in both this and the referenced SQLContainer. Note that multiple references pointing to the same SQLContainer are not supported.

Parameters:
refdCont - Target SQLContainer of the new reference
refingCol - Column (property) name in this container storing the (foreign key) reference
refdCol - Column (property) name in the referenced container storing the referenced key

removeReference

public boolean removeReference(SQLContainer refdCont)
Removes the reference pointing to the given SQLContainer.

Parameters:
refdCont - Target SQLContainer of the reference
Returns:
true if successful, false if the reference did not exist

setReferencedItem

public boolean setReferencedItem(Object itemId,
                                 Object refdItemId,
                                 SQLContainer refdCont)
Sets the referenced item. The referencing column of the item in this container is updated accordingly.

Parameters:
itemId - Item Id of the reference source (from this container)
refdItemId - Item Id of the reference target (from referenced container)
refdCont - Target SQLContainer of the reference
Returns:
true if the referenced item was successfully set, false on failure

getReferencedItemId

public Object getReferencedItemId(Object itemId,
                                  SQLContainer refdCont)
Fetches the Item Id of the referenced item from the target SQLContainer.

Parameters:
itemId - Item Id of the reference source (from this container)
refdCont - Target SQLContainer of the reference
Returns:
Item Id of the referenced item, or null if not found

getReferencedItem

public Item getReferencedItem(Object itemId,
                              SQLContainer refdCont)
Fetches the referenced item from the target SQLContainer.

Parameters:
itemId - Item Id of the reference source (from this container)
refdCont - Target SQLContainer of the reference
Returns:
The referenced item, or null if not found


Copyright © 2000-2011 Vaadin Ltd. All Rights Reserved.