public void addFeedProperty(DataModel model, String propertyName, long itemTimestamp) { @SuppressWarnings("unchecked") DMClassHolder<K, T> classHolder = (DMClassHolder<K, T>) model.getClassHolder(clazz); int propertyIndex = classHolder.getPropertyIndex(propertyName); if (propertyIndex < 0) throw new RuntimeException( "Class " + classHolder.getDMOClass().getName() + " has no property " + propertyName); addProperty(propertyIndex); DMPropertyHolder<K, T, ?> property = classHolder.getProperty(propertyIndex); if (!(property instanceof FeedPropertyHolder)) throw new RuntimeException("session.feedChanged() for a non-feed-valued property"); int feedPropertyIndex = classHolder.getFeedPropertyIndex(property.getName()); if (feedTimestamps == null) { feedTimestamps = new long[classHolder.getFeedPropertiesCount()]; for (int i = 0; i < feedTimestamps.length; i++) feedTimestamps[i] = Long.MAX_VALUE; } if (feedTimestamps[feedPropertyIndex] > itemTimestamp) feedTimestamps[feedPropertyIndex] = itemTimestamp; }
public void invalidate(DataModel model, long timestamp) { @SuppressWarnings("unchecked") DMClassHolder<K, T> classHolder = (DMClassHolder<K, T>) model.getClassHolder(clazz); long v = propertyMask; int propertyIndex = 0; while (v != 0) { if ((v & 1) != 0) { DMPropertyHolder<K, T, ?> property = classHolder.getProperty(propertyIndex); if (property instanceof FeedPropertyHolder) { int feedPropertyIndex = classHolder.getFeedPropertyIndex(property.getName()); model .getStore() .invalidateFeed( classHolder, key, propertyIndex, timestamp, feedTimestamps[feedPropertyIndex]); logger.debug( "Invalidated {}#{}.{}, feedTimestamp={}", new Object[] { classHolder.getDMOClass().getSimpleName(), key, property.getName(), feedTimestamps[feedPropertyIndex] }); } else { model.getStore().invalidate(classHolder, key, propertyIndex, timestamp); logger.debug( "Invalidated {}#{}.{}", new Object[] {classHolder.getDMOClass().getSimpleName(), key, property.getName()}); } } propertyIndex++; v >>= 1; } }