001: /*---------------------------------------------------------------------------*\
002: $Id: PersistentFeedItemData.java 6547 2006-11-03 03:38:55Z bmc $
003: \*---------------------------------------------------------------------------*/
004:
005: package org.clapper.curn;
006:
007: import java.util.Collection;
008: import java.util.Collections;
009: import java.util.HashSet;
010: import java.util.Set;
011:
012: /**
013: * A <tt>PersistentFeedItemData</tt> object contains data and metadata about
014: * a perticular item within a feed, in a form suitable for saving to and
015: * restoring from an external store. The data are organized to make persistence
016: * operations easier. At runtime, the data are reorganized; see the
017: * {@link PersistentFeedData} class for more inforamtion.
018: *
019: * @see FeedCache
020: * @see DataPersister
021: * @see PersistentFeedData
022: *
023: * @version <tt>$Revision: 6547 $</tt>
024: */
025: public class PersistentFeedItemData {
026: /*----------------------------------------------------------------------*\
027: Private Constants
028: \*----------------------------------------------------------------------*/
029:
030: /*----------------------------------------------------------------------*\
031: Private Instance Data
032: \*----------------------------------------------------------------------*/
033:
034: /**
035: * The FeedCacheEntry for this item
036: */
037: private FeedCacheEntry feedCacheEntry = null;
038:
039: /**
040: * Extra metadata associated with the item.
041: */
042: private Set<PersistentMetadataGroup> itemMetadata = new HashSet<PersistentMetadataGroup>();
043:
044: /*----------------------------------------------------------------------*\
045: Constructor
046: \*----------------------------------------------------------------------*/
047:
048: /**
049: * Creates a new instance of PersistentFeedData
050: *
051: * @param feedCacheEntry the {@link FeedCacheEntry} for the item
052: */
053: public PersistentFeedItemData(FeedCacheEntry feedCacheEntry) {
054: this .feedCacheEntry = feedCacheEntry;
055: }
056:
057: /*----------------------------------------------------------------------*\
058: Public Methods
059: \*----------------------------------------------------------------------*/
060:
061: /**
062: * Get the {@link FeedCacheEntry} for the item
063: *
064: * @return the {@link FeedCacheEntry}
065: */
066: public FeedCacheEntry getFeedCacheEntry() {
067: return feedCacheEntry;
068: }
069:
070: /**
071: * Add a metadata group (i.e., all the metadata within a given
072: * namespace) to this object.
073: *
074: * @param metadataGroup the group of metadata
075: */
076: public void addItemMetadataGroup(
077: PersistentMetadataGroup metadataGroup) {
078: itemMetadata.add(metadataGroup);
079: }
080:
081: /**
082: * Add a metadata group (i.e., all the metadata within a given
083: * namespace) to this object.
084: *
085: * @param metadata the metadata
086: */
087: public void addItemMetadata(
088: Collection<PersistentMetadataGroup> metadata) {
089: for (PersistentMetadataGroup metadataGroup : metadata)
090: addItemMetadataGroup(metadataGroup);
091: }
092:
093: /**
094: * Get the extra metadata associated with the feed. The returned data
095: * is aggregated into individual namespaces.
096: *
097: * @return a <tt>Collection</tt> of {@link PersistentMetadataGroup}
098: * objects, each one containing the data for one namespace.
099: */
100: public Collection<PersistentMetadataGroup> getItemMetadata() {
101: Collection<PersistentMetadataGroup> result = null;
102:
103: if (itemMetadata != null)
104: result = Collections.unmodifiableCollection(itemMetadata);
105:
106: return result;
107: }
108:
109: /*----------------------------------------------------------------------*\
110: Protected Methods
111: \*----------------------------------------------------------------------*/
112:
113: /*----------------------------------------------------------------------*\
114: Private Methods
115: \*----------------------------------------------------------------------*/
116: }
|