Package org.rssowl.core.tests.ui

Source Code of org.rssowl.core.tests.ui.RetentionStrategyTests

/*   **********************************************************************  **
**   Copyright notice                                                       **
**                                                                          **
**   (c) 2005-2006 RSSOwl Development Team                                  **
**   http://www.rssowl.org/                                                 **
**                                                                          **
**   All rights reserved                                                    **
**                                                                          **
**   This program and the accompanying materials are made available under   **
**   the terms of the Eclipse Public License v1.0 which accompanies this    **
**   distribution, and is available at:                                     **
**   http://www.rssowl.org/legal/epl-v10.html                               **
**                                                                          **
**   A copy is found in the file epl-v10.html and important notices to the  **
**   license from the team is found in the textfile LICENSE.txt distributed **
**   in this package.                                                       **
**                                                                          **
**   This copyright notice MUST APPEAR in all copies of the file!           **
**                                                                          **
**   Contributors:                                                          **
**     RSSOwl Development Team - initial API and implementation             **
**                                                                          **
**  **********************************************************************  */

package org.rssowl.core.tests.ui;

import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;
import org.rssowl.core.model.NewsModel;
import org.rssowl.core.model.dao.IModelDAO;
import org.rssowl.core.model.dao.PersistenceException;
import org.rssowl.core.model.preferences.IPreferencesScope;
import org.rssowl.core.model.reference.BookMarkReference;
import org.rssowl.core.model.reference.FeedReference;
import org.rssowl.core.model.reference.FolderReference;
import org.rssowl.core.model.types.IBookMark;
import org.rssowl.core.model.types.IEntity;
import org.rssowl.core.model.types.IFeed;
import org.rssowl.core.model.types.IFolder;
import org.rssowl.core.model.types.IMark;
import org.rssowl.core.model.types.IModelTypesFactory;
import org.rssowl.core.model.types.INews;
import org.rssowl.core.model.util.DateUtils;
import org.rssowl.ui.internal.DefaultPreferences;
import org.rssowl.ui.internal.util.RetentionStrategy;

import java.net.URL;
import java.util.Date;
import java.util.List;

/**
* Tests about Retention of News.
*
* @author bpasero
*/
public class RetentionStrategyTests {

  /* One Day in millis (-1 second crush zone) */
  private static final long DAY = 24 * 60 * 59 * 1000;

  /* One Hour in millis */
  private static final long HOUR = 60 * 60 * 1000;

  private IModelTypesFactory fFactory;
  private IModelDAO fDao;

  /**
   * @throws Exception
   */
  @Before
  public void setUp() throws Exception {
    NewsModel.getDefault().getPersistenceLayer().getModelSearch().stopIndexer();
    NewsModel.getDefault().getPersistenceLayer().recreateSchema();
    fFactory = NewsModel.getDefault().getTypesFactory();
    fDao = NewsModel.getDefault().getPersistenceLayer().getModelDAO();
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFolderByAge() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed1 = createFeedWithNews(new URL("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed1.getLink(), new FeedReference(feed1.getId()), "BookMark1");

    IFeed feed2 = createFeedWithNews(new URL("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed2.getLink(), new FeedReference(feed2.getId()), "BookMark2");

    IFeed feed3 = createFeedWithNews(new URL("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0);
    fFactory.createBookMark(null, folder, feed3.getLink(), new FeedReference(feed3.getId()), "BookMark3");

    fDao.saveFolder(folder);

    IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null;
    List<IMark> marks = folder.getMarks();
    for (IMark mark : marks) {
      if (mark.getName().equals("BookMark1"))
        bookMark1 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark2"))
        bookMark2 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark3"))
        bookMark3 = (IBookMark) mark;
    }

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookMark1);
    IPreferencesScope prefs2 = NewsModel.getDefault().getEntityScope(bookMark2);
    IPreferencesScope prefs3 = NewsModel.getDefault().getEntityScope(bookMark3);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    RetentionStrategy.process(folder);
    assertEquals(200, countNews(folder));
    assertEquals(100, countNews(bookMark1));
    assertEquals(100, countNews(bookMark2));
    assertEquals(0, countNews(bookMark3));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFolderByState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed1 = createFeedWithNews(new URL("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed1.getLink(),
        new FeedReference(feed1.getId()), "BookMark1");

    IFeed feed2 = createFeedWithNews(new URL("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed2.getLink(),
        new FeedReference(feed2.getId()), "BookMark2");

    IFeed feed3 = createFeedWithNews(new URL("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0);
    fFactory.createBookMark(null, folder, feed3.getLink(),
        new FeedReference(feed3.getId()), "BookMark3");

    fDao.saveFolder(folder);

    IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null;
    List<IMark> marks = folder.getMarks();
    for (IMark mark : marks) {
      if (mark.getName().equals("BookMark1"))
        bookMark1 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark2"))
        bookMark2 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark3"))
        bookMark3 = (IBookMark) mark;
    }

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookMark1);
    IPreferencesScope prefs2 = NewsModel.getDefault().getEntityScope(bookMark2);
    IPreferencesScope prefs3 = NewsModel.getDefault().getEntityScope(bookMark3);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    RetentionStrategy.process(folder);
    assertEquals(150, countNews(folder));
    assertEquals(100, countNews(bookMark1));
    assertEquals(50, countNews(bookMark2));
    assertEquals(0, countNews(bookMark3));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFolderByCount() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed1 = createFeedWithNews(new URL("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed1.getLink(),
        new FeedReference(feed1.getId()), "BookMark1");

    IFeed feed2 = createFeedWithNews(new URL("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed2.getLink(),
        new FeedReference(feed2.getId()), "BookMark2");

    IFeed feed3 = createFeedWithNews(new URL("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0);
    fFactory.createBookMark(null, folder, feed3.getLink(),
        new FeedReference(feed3.getId()), "BookMark3");

    fDao.saveFolder(folder);

    IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null;
    List<IMark> marks = folder.getMarks();
    for (IMark mark : marks) {
      if (mark.getName().equals("BookMark1"))
        bookMark1 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark2"))
        bookMark2 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark3"))
        bookMark3 = (IBookMark) mark;
    }

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookMark1);
    IPreferencesScope prefs2 = NewsModel.getDefault().getEntityScope(bookMark2);
    IPreferencesScope prefs3 = NewsModel.getDefault().getEntityScope(bookMark3);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20);
    prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40);
    prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80);
    RetentionStrategy.process(folder);
    assertEquals(140, countNews(folder));
    assertEquals(20, countNews(bookMark1));
    assertEquals(40, countNews(bookMark2));
    assertEquals(80, countNews(bookMark3));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFolderByAgeAndCount() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed1 = createFeedWithNews(new URL("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed1.getLink(),
        new FeedReference(feed1.getId()), "BookMark1");

    IFeed feed2 = createFeedWithNews(new URL("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed2.getLink(),
        new FeedReference(feed2.getId()), "BookMark2");

    IFeed feed3 = createFeedWithNews(new URL("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0);
    fFactory.createBookMark(null, folder, feed3.getLink(),
        new FeedReference(feed3.getId()), "BookMark3");

    fDao.saveFolder(folder);

    IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null;
    List<IMark> marks = folder.getMarks();
    for (IMark mark : marks) {
      if (mark.getName().equals("BookMark1"))
        bookMark1 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark2"))
        bookMark2 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark3"))
        bookMark3 = (IBookMark) mark;
    }

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookMark1);
    IPreferencesScope prefs2 = NewsModel.getDefault().getEntityScope(bookMark2);
    IPreferencesScope prefs3 = NewsModel.getDefault().getEntityScope(bookMark3);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20);
    prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40);
    prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80);
    RetentionStrategy.process(folder);
    assertEquals(60, countNews(folder));
    assertEquals(20, countNews(bookMark1));
    assertEquals(40, countNews(bookMark2));
    assertEquals(0, countNews(bookMark3));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFolderByAgeAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed1 = createFeedWithNews(new URL("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed1.getLink(), new FeedReference(feed1.getId()), "BookMark1");

    IFeed feed2 = createFeedWithNews(new URL("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed2.getLink(), new FeedReference(feed2.getId()), "BookMark2");

    IFeed feed3 = createFeedWithNews(new URL("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0);
    fFactory.createBookMark(null, folder, feed3.getLink(), new FeedReference(feed3.getId()), "BookMark3");

    fDao.saveFolder(folder);

    IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null;
    List<IMark> marks = folder.getMarks();
    for (IMark mark : marks) {
      if (mark.getName().equals("BookMark1"))
        bookMark1 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark2"))
        bookMark2 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark3"))
        bookMark3 = (IBookMark) mark;
    }

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookMark1);
    IPreferencesScope prefs2 = NewsModel.getDefault().getEntityScope(bookMark2);
    IPreferencesScope prefs3 = NewsModel.getDefault().getEntityScope(bookMark3);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    RetentionStrategy.process(folder);
    assertEquals(150, countNews(folder));
    assertEquals(100, countNews(bookMark1));
    assertEquals(50, countNews(bookMark2));
    assertEquals(0, countNews(bookMark3));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFolderByCountAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed1 = createFeedWithNews(new URL("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed1.getLink(),
        new FeedReference(feed1.getId()), "BookMark1");

    IFeed feed2 = createFeedWithNews(new URL("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed2.getLink(),
        new FeedReference(feed2.getId()), "BookMark2");

    IFeed feed3 = createFeedWithNews(new URL("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0);
    fFactory.createBookMark(null, folder, feed3.getLink(),
        new FeedReference(feed3.getId()), "BookMark3");

    fDao.saveFolder(folder);

    IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null;
    List<IMark> marks = folder.getMarks();
    for (IMark mark : marks) {
      if (mark.getName().equals("BookMark1"))
        bookMark1 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark2"))
        bookMark2 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark3"))
        bookMark3 = (IBookMark) mark;
    }

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookMark1);
    IPreferencesScope prefs2 = NewsModel.getDefault().getEntityScope(bookMark2);
    IPreferencesScope prefs3 = NewsModel.getDefault().getEntityScope(bookMark3);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20);
    prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40);
    prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80);
    RetentionStrategy.process(folder);
    assertEquals(60, countNews(folder));
    assertEquals(20, countNews(bookMark1));
    assertEquals(40, countNews(bookMark2));
    assertEquals(0, countNews(bookMark3));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFolderByAgeAndCountAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed1 = createFeedWithNews(new URL("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed1.getLink(),
        new FeedReference(feed1.getId()), "BookMark1");

    IFeed feed2 = createFeedWithNews(new URL("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0);
    fFactory.createBookMark(null, folder, feed2.getLink(),
        new FeedReference(feed2.getId()), "BookMark2");

    IFeed feed3 = createFeedWithNews(new URL("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0);
    fFactory.createBookMark(null, folder, feed3.getLink(),
        new FeedReference(feed3.getId()), "BookMark3");

    fDao.saveFolder(folder);

    IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null;
    List<IMark> marks = folder.getMarks();
    for (IMark mark : marks) {
      if (mark.getName().equals("BookMark1"))
        bookMark1 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark2"))
        bookMark2 = (IBookMark) mark;
      else if (mark.getName().equals("BookMark3"))
        bookMark3 = (IBookMark) mark;
    }

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookMark1);
    IPreferencesScope prefs2 = NewsModel.getDefault().getEntityScope(bookMark2);
    IPreferencesScope prefs3 = NewsModel.getDefault().getEntityScope(bookMark3);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
    prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);
    prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20);
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20);
    prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40);
    prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80);
    RetentionStrategy.process(folder);
    assertEquals(60, countNews(folder));
    assertEquals(20, countNews(bookMark1));
    assertEquals(40, countNews(bookMark2));
    assertEquals(0, countNews(bookMark3));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessBookMarkByAge() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark1");

    fDao.saveFolder(folder);

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(100, countNews(bookmark));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    RetentionStrategy.process(bookmark);
    assertEquals(0, countNews(folder));
    assertEquals(0, countNews(bookmark));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessBookMarkByState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark1");

    fDao.saveFolder(folder);

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(100, countNews(bookmark));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    RetentionStrategy.process(bookmark);
    assertEquals(80, countNews(folder));
    assertEquals(80, countNews(bookmark));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessBookMarkByCount() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark1");

    fDao.saveFolder(folder);

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(100, countNews(bookmark));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    RetentionStrategy.process(bookmark);
    assertEquals(50, countNews(folder));
    assertEquals(50, countNews(bookmark));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessBookMarkByAgeAndCount() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark1");

    fDao.saveFolder(folder);

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(100, countNews(bookmark));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    RetentionStrategy.process(bookmark);
    assertEquals(0, countNews(folder));
    assertEquals(0, countNews(bookmark));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessBookMarkByAgeAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark1");

    fDao.saveFolder(folder);

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(100, countNews(bookmark));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    RetentionStrategy.process(bookmark);
    assertEquals(0, countNews(folder));
    assertEquals(0, countNews(bookmark));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessBookMarkByCountAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark1");

    fDao.saveFolder(folder);

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(100, countNews(bookmark));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    RetentionStrategy.process(bookmark);
    assertEquals(50, countNews(folder));
    assertEquals(50, countNews(bookmark));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessBookMarkByAgeAndCountAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark1");

    fDao.saveFolder(folder);

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(100, countNews(bookmark));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    RetentionStrategy.process(bookmark);
    assertEquals(0, countNews(folder));
    assertEquals(0, countNews(bookmark));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessBookMarkByAgeAndCountAndStateWithStickyNews() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 10);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark1");

    fDao.saveFolder(folder);

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(100, countNews(bookmark));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    RetentionStrategy.process(bookmark);
    assertEquals(10, countNews(folder));
    assertEquals(10, countNews(bookmark));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFeedWithUnpersistedNewsByAge() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark");

    fDao.saveFolder(folder);

    /* Add unpersisted News */
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setTitle("News #1");
    news1.setState(INews.State.READ);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setTitle("News #2");
    news2.setPublishDate(new Date(today - 7 * DAY));
    fFactory.createNews(null, feed, new Date()).setTitle("News #3");

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(103, countNews(feed));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    assertEquals(true, RetentionStrategy.process(bookmark, feed, -1));
    assertEquals(2, countNews(feed));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFeedWithUnpersistedNewsByCount() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark");

    fDao.saveFolder(folder);

    /* Add unpersisted News */
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setTitle("News #1");
    news1.setState(INews.State.READ);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setTitle("News #2");
    news2.setPublishDate(new Date(today - 7 * DAY));
    fFactory.createNews(null, feed, new Date()).setTitle("News #3");

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(103, countNews(feed));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    assertEquals(true, RetentionStrategy.process(bookmark, feed, -1));
    assertEquals(50, countNews(feed));
  }
 
  /**
   * @throws Exception
   */
  @Test
  public void testProcessFeedWithUnpersistedNewsByCountThatExceedLimit() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark");

    fDao.saveFolder(folder);

    /* Add unpersisted News */
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setTitle("News #1");
    news1.setState(INews.State.READ);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setTitle("News #2");
    news2.setPublishDate(new Date(today - 7 * DAY));
    fFactory.createNews(null, feed, new Date()).setTitle("News #3");

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(103, countNews(feed));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    assertEquals(true, RetentionStrategy.process(bookmark, feed, 60));
    assertEquals(60, countNews(feed));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFeedWithUnpersistedNewsByState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark");

    fDao.saveFolder(folder);

    /* Add unpersisted News */
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setTitle("News #1");
    news1.setState(INews.State.READ);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setTitle("News #2");
    news2.setPublishDate(new Date(today - 7 * DAY));
    fFactory.createNews(null, feed, new Date()).setTitle("News #3");

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(103, countNews(feed));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    assertEquals(true, RetentionStrategy.process(bookmark, feed, -1));
    assertEquals(82, countNews(feed));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFeedWithUnpersistedNewsByAgeAndCount() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(), new FeedReference(feed.getId()), "BookMark");

    fDao.saveFolder(folder);

    /* Add unpersisted News */
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setTitle("News #1");
    news1.setState(INews.State.READ);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setTitle("News #2");
    news2.setPublishDate(new Date(today - 7 * DAY));
    fFactory.createNews(null, feed, new Date()).setTitle("News #3");

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(103, countNews(feed));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    assertEquals(true, RetentionStrategy.process(bookmark, feed, -1));
    assertEquals(2, countNews(feed));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFeedWithUnpersistedNewsByAgeAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(), new FeedReference(feed.getId()), "BookMark");

    fDao.saveFolder(folder);

    /* Add unpersisted News */
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setTitle("News #1");
    news1.setState(INews.State.READ);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setTitle("News #2");
    news2.setPublishDate(new Date(today - 7 * DAY));
    fFactory.createNews(null, feed, new Date()).setTitle("News #3");

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(103, countNews(feed));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    assertEquals(true, RetentionStrategy.process(bookmark, feed, -1));
    assertEquals(1, countNews(feed));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFeedWithUnpersistedNewsByCountAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark");

    fDao.saveFolder(folder);

    /* Add unpersisted News */
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setTitle("News #1");
    news1.setState(INews.State.READ);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setTitle("News #2");
    news2.setPublishDate(new Date(today - 7 * DAY));
    fFactory.createNews(null, feed, new Date()).setTitle("News #3");

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(103, countNews(feed));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    assertEquals(true, RetentionStrategy.process(bookmark, feed, -1));
    assertEquals(50, countNews(feed));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testProcessFeedWithUnpersistedNewsByAgeAndCountAndState() throws Exception {
    long today = DateUtils.getToday().getTimeInMillis();

    IFolder folder = fDao.saveFolder(fFactory.createFolder(null, null, "Root"));

    IFeed feed = createFeedWithNews(new URL("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0);
    fFactory.createBookMark(null, folder, feed.getLink(),
        new FeedReference(feed.getId()), "BookMark");

    fDao.saveFolder(folder);

    /* Add unpersisted News */
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setTitle("News #1");
    news1.setState(INews.State.READ);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setTitle("News #2");
    news2.setPublishDate(new Date(today - 7 * DAY));
    fFactory.createNews(null, feed, new Date()).setTitle("News #3");

    IBookMark bookmark = (IBookMark) folder.getMarks().get(0);
    assertEquals(103, countNews(feed));

    /* Preferences */
    IPreferencesScope prefs1 = NewsModel.getDefault().getEntityScope(bookmark);

    /* Setup Retention */
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true);
    prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true);

    /* Run and Validate Retention */
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5);
    prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50);
    assertEquals(true, RetentionStrategy.process(bookmark, feed, -1));
    assertEquals(1, countNews(feed));
  }

  private IFeed createFeedWithNews(URL url, int total, int read, long from, long to, int sticky) throws PersistenceException {
    long dateDif = to - from;
    IFeed feed = fFactory.createFeed(null, url);

    for (int i = 0; i < total; i++) {
      INews news = fFactory.createNews(null, feed, new Date());
      news.setTitle("News 1");

      if (read > i)
        news.setState(INews.State.READ);

      if (sticky > i)
        news.setFlagged(true);

      news.setPublishDate(new Date(from + (dateDif * i / total)));
    }

    return fDao.saveFeed(feed);
  }

  private int countNews(IEntity entity) throws PersistenceException {
    int count = 0;

    if (entity instanceof IFolder) {
      IFolder folder = new FolderReference(entity.getId()).resolve();
      List<IMark> marks = folder.getMarks();
      for (IMark mark : marks) {
        if (mark instanceof IBookMark) {
          IFeed feed = ((IBookMark) mark).getFeedReference().resolve();
          count += feed.getVisibleNews().size();
        }
      }
    }

    else if (entity instanceof IBookMark) {
      IBookMark bookmark = new BookMarkReference(entity.getId()).resolve();
      count += bookmark.getFeedReference().resolve().getVisibleNews().size();
    }

    else if (entity instanceof IFeed) {
      count += ((IFeed) entity).getVisibleNews().size();
    }

    return count;
  }
}
TOP

Related Classes of org.rssowl.core.tests.ui.RetentionStrategyTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.