/* ********************************************************************** **
** Copyright notice **
** **
** (c) 2005-2009 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.model;
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.rssowl.core.Owl;
import org.rssowl.core.internal.persist.service.DBHelper;
import org.rssowl.core.internal.persist.service.EntityIdsByEventType;
import org.rssowl.core.persist.IAttachment;
import org.rssowl.core.persist.ICategory;
import org.rssowl.core.persist.IEntity;
import org.rssowl.core.persist.IFeed;
import org.rssowl.core.persist.ILabel;
import org.rssowl.core.persist.INews;
import org.rssowl.core.persist.IPerson;
import org.rssowl.core.persist.ISearchCondition;
import org.rssowl.core.persist.ISearchField;
import org.rssowl.core.persist.ISource;
import org.rssowl.core.persist.SearchSpecifier;
import org.rssowl.core.persist.INews.State;
import org.rssowl.core.persist.dao.DynamicDAO;
import org.rssowl.core.persist.reference.NewsReference;
import org.rssowl.core.persist.service.PersistenceException;
import org.rssowl.core.tests.TestUtils;
import org.rssowl.core.tests.TestUtils.NullProgressLongOperationMonitor;
import org.rssowl.core.util.SearchHit;
import java.net.URI;
import java.util.Calendar;
import java.util.Date;
import java.util.EnumSet;
import java.util.List;
/**
* Test searching types from the persistence layer.
*
* @author bpasero
*/
public class ModelSearchTest1 extends AbstractModelSearchTest {
/**
* Tests that uncommitted news are saved and loaded correctly in the presence
* of an emergency or normal shutdown.
*
* @throws Exception
*/
@Test
public void testSaveLoadEntitiesToBeIndexed() throws Exception {
EntityIdsByEventType entitiesToBeIndexed = DBHelper.getEntitiesToBeIndexedDAO().load();
assertEquals(0, entitiesToBeIndexed.size());
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
INews news2 = createNews(feed, " Bar", "http://www.news.com/news2.html", State.NEW);
DynamicDAO.save(feed);
entitiesToBeIndexed = DBHelper.getEntitiesToBeIndexedDAO().load();
assertEquals(2, entitiesToBeIndexed.size());
Owl.getPersistenceService().shutdown(true);
Owl.getPersistenceService().startup(new NullProgressLongOperationMonitor());
entitiesToBeIndexed = DBHelper.getEntitiesToBeIndexedDAO().load();
assertEquals(2, entitiesToBeIndexed.size());
for (long id : entitiesToBeIndexed.getPersistedEntityIds().toArray()) {
assertTrue(id == news1.getId().longValue() || id == news2.getId().longValue());
}
Owl.getPersistenceService().shutdown(false);
Owl.getPersistenceService().startup(new NullProgressLongOperationMonitor());
assertEquals(0, entitiesToBeIndexed.size());
}
/**
* @throws Exception
*/
@Test
@SuppressWarnings("nls")
public void testSearchNewsWith_IS_Specifier() throws Exception {
try {
Calendar cal = Calendar.getInstance();
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
ICategory news1cat1 = fFactory.createCategory(null, news1);
news1cat1.setName("apple");
ILabel label1 = fFactory.createLabel(null, "work");
news1.addLabel(label1);
IAttachment att1news1 = fFactory.createAttachment(null, news1);
att1news1.setLink(new URI("http://www.attachment.com/att1news1.file"));
att1news1.setType("bin/mp3");
INews news2 = createNews(feed, " Bar", "http://www.news.com/news2.html", State.NEW);
news2.setRating(10);
ICategory news2cat1 = fFactory.createCategory(null, news2);
news2cat1.setName("apple");
ICategory news2cat2 = fFactory.createCategory(null, news2);
news2cat2.setName("windows");
ILabel label2 = fFactory.createLabel(null, "todo");
news2.addLabel(label2);
IAttachment att1news2 = fFactory.createAttachment(null, news2);
att1news2.setLink(new URI("http://www.attachment.com/att1news2.file"));
att1news2.setType("bin/doc");
IAttachment att2news2 = fFactory.createAttachment(null, news2);
att2news2.setLink(new URI("http://www.attachment.com/att2news2.file"));
att2news2.setType("bin/wav");
cal.setTimeInMillis(System.currentTimeMillis() - DAY);
news2.setPublishDate(cal.getTime());
INews news3 = createNews(feed, "Foo Bar", "http://www.news.com/news3.html", State.NEW);
IPerson author3 = fFactory.createPerson(null, news3);
author3.setName("Benjamin Pasero");
ICategory news3cat1 = fFactory.createCategory(null, news3);
news3cat1.setName("apple");
ICategory news3cat2 = fFactory.createCategory(null, news3);
news3cat2.setName("windows");
ICategory news3cat3 = fFactory.createCategory(null, news3);
news3cat3.setName("slashdot");
cal.setTimeInMillis(System.currentTimeMillis() - 5 * DAY);
news3.setModifiedDate(cal.getTime());
cal.setTimeInMillis(System.currentTimeMillis() - 10 * DAY);
news3.setPublishDate(cal.getTime());
INews news4 = createNews(feed, null, "http://www.news.com/news4.html", State.UPDATED);
Date news4Date = new Date(1000000);
news4.setPublishDate(news4Date);
IPerson author4 = fFactory.createPerson(null, news4);
author4.setName("Pasero");
ISource source4 = fFactory.createSource(news4);
source4.setLink(new URI("http://www.source.com"));
INews news5 = createNews(feed, null, "http://www.news.com/news5.html", State.NEW);
news5.setFlagged(true);
IPerson author5 = fFactory.createPerson(null, news5);
author5.setEmail(new URI("test@rssowl.org"));
ISource source5 = fFactory.createSource(news5);
source5.setName("Source for News 5");
ICategory news5cat1 = fFactory.createCategory(null, news5);
news5cat1.setName("Apache Lucene");
ICategory news5cat2 = fFactory.createCategory(null, news5);
news5cat2.setName("Java");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
/* Condition 1a: Enum (match) */
{
ISearchField field = fFactory.createSearchField(INews.STATE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, EnumSet.of(State.READ));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
}
/* Condition 1b: Enum (no match) */
{
ISearchField field = fFactory.createSearchField(INews.STATE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, EnumSet.of(State.DELETED));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
/* Condition 2a: Integer (match) */
{
/* Rating */
ISearchField field = fFactory.createSearchField(INews.RATING, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, 10);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2);
/* Age in Days */
field = fFactory.createSearchField(INews.AGE_IN_DAYS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, 0);
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news5);
field = fFactory.createSearchField(INews.AGE_IN_DAYS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, 5);
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
field = fFactory.createSearchField(INews.AGE_IN_DAYS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, 1);
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2);
}
/* Condition 2b: Integer (no match) */
{
/* Rating */
ISearchField field = fFactory.createSearchField(INews.RATING, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, 15);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Age in Days */
field = fFactory.createSearchField(INews.AGE_IN_DAYS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, 100);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.AGE_IN_DAYS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, 8);
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
/* Condition 3a: String (match) */
{
/* Categories */
ISearchField field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "apple");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "windows");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "slash*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "a*le");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "apache lucene");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
/* Labels */
field = fFactory.createSearchField(INews.LABEL, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, label1.getName());
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
/* Source Name */
field = fFactory.createSearchField(INews.SOURCE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "Source for News 5");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
}
/* Condition 3b: String (no match) */
{
/* Author */
ISearchField field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "Pasero Benjamin");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Categories */
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "apple slashdot");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "sleshdod");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "lucene apache");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Source Name */
field = fFactory.createSearchField(INews.SOURCE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "Source for");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
/* Condition 4a: Date (match) */
{
ISearchField field = fFactory.createSearchField(INews.PUBLISH_DATE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, news4Date);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news4);
}
/* Condition 4b: Date (no match) */
{
Date wrongDate = new Date();
ISearchField field = fFactory.createSearchField(INews.PUBLISH_DATE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, wrongDate);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
/* Condition 5a: Boolean (one match) */
{
ISearchField field = fFactory.createSearchField(INews.IS_FLAGGED, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, true);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
/* Attachments */
field = fFactory.createSearchField(INews.HAS_ATTACHMENTS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, true);
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2);
}
/* Condition 5b: Boolean (other matches) */
{
ISearchField field = fFactory.createSearchField(INews.IS_FLAGGED, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, false);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
/* Attachments */
field = fFactory.createSearchField(INews.HAS_ATTACHMENTS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, false);
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4, news5);
}
/* Condition 6a: Link (match) */
{
/* News Link */
ISearchField field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.news.com/news1.html");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.news.com/news?.html");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "*www.news.com/news1.html");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
/* Source Link */
field = fFactory.createSearchField(INews.SOURCE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.source.com");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news4);
/* Feed Link */
field = fFactory.createSearchField(INews.FEED, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.feed.com/feed.xml");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.FEED, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.feed.com/*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
}
/* Condition 6b: Link (no match) */
{
/* News Link */
ISearchField field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.news.com/news6.html");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.news.com/news?");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "*www.news.com/");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Source Link */
field = fFactory.createSearchField(INews.SOURCE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.othersource.com");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Feed Link */
field = fFactory.createSearchField(INews.FEED, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.feed.com/feed2.xml");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.FEED, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, "http://www.otherfeed.com/*");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
@SuppressWarnings("nls")
public void testSearchNewsWith_IS_NOT_Specifier() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
ICategory news1cat1 = fFactory.createCategory(null, news1);
news1cat1.setName("apple");
ILabel label1 = fFactory.createLabel(null, "work");
news1.addLabel(label1);
IAttachment att1news1 = fFactory.createAttachment(null, news1);
att1news1.setLink(new URI("http://www.attachment.com/att1news1.file"));
att1news1.setType("bin/mp3");
INews news2 = createNews(feed, " Bar", "http://www.news.com/news2.html", State.NEW);
news2.setRating(10);
ICategory news2cat1 = fFactory.createCategory(null, news2);
news2cat1.setName("apple");
ICategory news2cat2 = fFactory.createCategory(null, news2);
news2cat2.setName("windows");
ILabel label2 = fFactory.createLabel(null, "todo");
news2.addLabel(label2);
IAttachment att1news2 = fFactory.createAttachment(null, news2);
att1news2.setLink(new URI("http://www.attachment.com/att1news2.file"));
att1news2.setType("bin/doc");
IAttachment att2news2 = fFactory.createAttachment(null, news2);
att2news2.setLink(new URI("http://www.attachment.com/att2news2.file"));
att2news2.setType("bin/wav");
INews news3 = createNews(feed, "Foo Bar", "http://www.news.com/news3.html", State.NEW);
IPerson author3 = fFactory.createPerson(null, news3);
author3.setName("Benjamin Pasero");
ICategory news3cat1 = fFactory.createCategory(null, news3);
news3cat1.setName("apple");
ICategory news3cat2 = fFactory.createCategory(null, news3);
news3cat2.setName("windows");
ICategory news3cat3 = fFactory.createCategory(null, news3);
news3cat3.setName("slashdot");
INews news4 = createNews(feed, null, "http://www.news.com/news4.html", State.UPDATED);
Date news4Date = new Date(1000000);
news4.setPublishDate(news4Date);
IPerson author4 = fFactory.createPerson(null, news4);
author4.setName("Pasero");
ISource source4 = fFactory.createSource(news4);
source4.setLink(new URI("http://www.source.com"));
INews news5 = createNews(feed, null, "http://www.news.com/news5.html", State.NEW);
news5.setFlagged(true);
IPerson author5 = fFactory.createPerson(null, news5);
author5.setEmail(new URI("test@rssowl.org"));
ISource source5 = fFactory.createSource(news5);
source5.setName("Source for News 5");
ICategory news5cat1 = fFactory.createCategory(null, news5);
news5cat1.setName("Apache Lucene");
ICategory news5cat2 = fFactory.createCategory(null, news5);
news5cat2.setName("Java");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
/* Condition 1a: Enum */
{
ISearchField field = fFactory.createSearchField(INews.STATE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, EnumSet.of(State.READ));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
}
/* Condition 1b: Enum */
{
ISearchField field = fFactory.createSearchField(INews.STATE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, EnumSet.of(State.DELETED));
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
}
/* Condition 2a: Integer */
{
/* Rating */
ISearchField field = fFactory.createSearchField(INews.RATING, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, 10);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4, news5);
}
/* Condition 2b: Integer */
{
/* Rating */
ISearchField field = fFactory.createSearchField(INews.RATING, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, 15);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
}
/* Condition 3a: String (match) */
{
/* Categories */
ISearchField field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "apple");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news4, news5);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "windows");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news4, news5);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "slash*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news4, news5);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "a*le");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news4, news5);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "apache lucene");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
/* Labels */
field = fFactory.createSearchField(INews.LABEL, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, label1.getName());
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
/* Source Name */
field = fFactory.createSearchField(INews.SOURCE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "Source for News 5");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
}
/* Condition 3b: String (no match) */
{
/* Author */
ISearchField field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "Pasero Benjamin");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
/* Categories */
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "apple slashdot");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "sleshdod");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.CATEGORIES, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "lucene apache");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
/* Source Name */
field = fFactory.createSearchField(INews.SOURCE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "Source for");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
}
/* Condition 4a: Date (match) */
{
ISearchField field = fFactory.createSearchField(INews.PUBLISH_DATE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, news4Date);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news5);
}
/* Condition 4b: Date */
{
Date wrongDate = new Date();
ISearchField field = fFactory.createSearchField(INews.PUBLISH_DATE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, wrongDate);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
}
/* Condition 5a: Boolean (one match) */
{
ISearchField field = fFactory.createSearchField(INews.IS_FLAGGED, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, true);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
/* Attachments */
field = fFactory.createSearchField(INews.HAS_ATTACHMENTS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, true);
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4, news5);
}
/* Condition 5b: Boolean (other matches) */
{
ISearchField field = fFactory.createSearchField(INews.IS_FLAGGED, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, false);
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
/* Attachments */
field = fFactory.createSearchField(INews.HAS_ATTACHMENTS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, false);
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2);
}
/* Condition 6a: Link (match) */
{
/* News Link */
ISearchField field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.news.com/news1.html");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.news.com/news?.html");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "*www.news.com/news1.html");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
/* Source Link */
field = fFactory.createSearchField(INews.SOURCE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.source.com");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news5);
/* Feed Link */
field = fFactory.createSearchField(INews.FEED, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.feed.com/feed.xml");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.FEED, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.feed.com/*");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
/* Condition 6b: Link */
{
/* News Link */
ISearchField field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.news.com/news6.html");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.news.com/news?");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.LINK, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "*www.news.com/");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
/* Source Link */
field = fFactory.createSearchField(INews.SOURCE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.othersource.com");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
/* Feed Link */
field = fFactory.createSearchField(INews.FEED, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.feed.com/feed2.xml");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.FEED, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.IS_NOT, "http://www.otherfeed.com/*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
@SuppressWarnings("nls")
public void testSearchNewsWith_CONTAINS_Specifier() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
ICategory news1cat1 = fFactory.createCategory(null, news1);
news1cat1.setName("apple");
ILabel label1 = fFactory.createLabel(null, "work");
news1.addLabel(label1);
IAttachment att1news1 = fFactory.createAttachment(null, news1);
att1news1.setLink(new URI("http://www.attachment.com/att1news1.file"));
att1news1.setType("bin/mp3");
INews news2 = createNews(feed, " Bar", "http://www.news.com/news2.html", State.NEW);
news2.setDescription("This is a longer description with <html><h2>included!</h2></html>");
ICategory news2cat1 = fFactory.createCategory(null, news2);
news2cat1.setName("apple");
ICategory news2cat2 = fFactory.createCategory(null, news2);
news2cat2.setName("pasero");
ILabel label2 = fFactory.createLabel(null, "todo");
news2.addLabel(label2);
IAttachment att1news2 = fFactory.createAttachment(null, news2);
att1news2.setLink(new URI("http://www.attachment.com/att1news2.file"));
att1news2.setType("bin/doc");
IAttachment att2news2 = fFactory.createAttachment(null, news2);
att2news2.setLink(new URI("http://www.attachment.com/att2news2.file"));
att2news2.setType("bin/wav");
INews news3 = createNews(feed, "Foo Bar", "http://www.news.com/news3.html", State.NEW);
news3.setDescription("This is a longer description with \n newlines and <html><h2>included!</h2></html>");
IPerson author3 = fFactory.createPerson(null, news3);
author3.setName("Benjamin Pasero");
ICategory news3cat1 = fFactory.createCategory(null, news3);
news3cat1.setName("apple");
ICategory news3cat2 = fFactory.createCategory(null, news3);
news3cat2.setName("windows");
ICategory news3cat3 = fFactory.createCategory(null, news3);
news3cat3.setName("slashdot");
INews news4 = createNews(feed, "BAR FOO", "http://www.news.com/news4.html", State.UPDATED);
Date news4Date = new Date(1000000);
news4.setPublishDate(news4Date);
IPerson author4 = fFactory.createPerson(null, news4);
author4.setName("Pasero");
ISource source4 = fFactory.createSource(news4);
source4.setLink(new URI("http://www.source.com"));
INews news5 = createNews(feed, null, "http://www.news.com/news5.html", State.NEW);
news5.setFlagged(true);
IPerson author5 = fFactory.createPerson(null, news5);
author5.setEmail(new URI("test@rssowl.org"));
ISource source5 = fFactory.createSource(news5);
source5.setName("Source for News 5");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
/* Condition 1a: String (match) */
{
/* Title */
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "foo bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "bar foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "b* f*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "fo? b*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
/* Description */
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "included");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "lon?er description");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
/* Attachments */
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "bin/mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "*mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "www.attachment.com*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2);
/* Author */
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Benjamin Pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Ben?amin Pase*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Ben*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "test@rssowl.org");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "test@rssowl?*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
/* All Fields */
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "*pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "description new?ines");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
}
/* Condition 1b: String (no match) */
{
/* Title */
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "barfoo");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "f? b?");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Description */
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "html");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "loner desription");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Attachment */
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "bin/ogg");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "*ogg");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "www.attachments.com*");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* All Fields */
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "foobar");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "*barfoo");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
@SuppressWarnings("nls")
public void testSearchNewsWith_CONTAINS_ALL_Specifier_Behaves_Like_CONTAINS_For_Single_Terms() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
ICategory news1cat1 = fFactory.createCategory(null, news1);
news1cat1.setName("apple");
ILabel label1 = fFactory.createLabel(null, "work");
news1.addLabel(label1);
IAttachment att1news1 = fFactory.createAttachment(null, news1);
att1news1.setLink(new URI("http://www.attachment.com/att1news1.file"));
att1news1.setType("bin/mp3");
INews news2 = createNews(feed, " Bar", "http://www.news.com/news2.html", State.NEW);
news2.setDescription("This is a longer description with <html><h2>included!</h2></html>");
ICategory news2cat1 = fFactory.createCategory(null, news2);
news2cat1.setName("apple");
ICategory news2cat2 = fFactory.createCategory(null, news2);
news2cat2.setName("pasero");
ILabel label2 = fFactory.createLabel(null, "todo");
news2.addLabel(label2);
IAttachment att1news2 = fFactory.createAttachment(null, news2);
att1news2.setLink(new URI("http://www.attachment.com/att1news2.file"));
att1news2.setType("bin/doc");
IAttachment att2news2 = fFactory.createAttachment(null, news2);
att2news2.setLink(new URI("http://www.attachment.com/att2news2.file"));
att2news2.setType("bin/wav");
INews news3 = createNews(feed, "Foo Bar", "http://www.news.com/news3.html", State.NEW);
news3.setDescription("This is a longer description with \n newlines and <html><h2>included!</h2></html>");
IPerson author3 = fFactory.createPerson(null, news3);
author3.setName("Benjamin Pasero");
ICategory news3cat1 = fFactory.createCategory(null, news3);
news3cat1.setName("apple");
ICategory news3cat2 = fFactory.createCategory(null, news3);
news3cat2.setName("windows");
ICategory news3cat3 = fFactory.createCategory(null, news3);
news3cat3.setName("slashdot");
INews news4 = createNews(feed, "BAR FOO", "http://www.news.com/news4.html", State.UPDATED);
Date news4Date = new Date(1000000);
news4.setPublishDate(news4Date);
IPerson author4 = fFactory.createPerson(null, news4);
author4.setName("Pasero");
ISource source4 = fFactory.createSource(news4);
source4.setLink(new URI("http://www.source.com"));
INews news5 = createNews(feed, null, "http://www.news.com/news5.html", State.NEW);
news5.setFlagged(true);
IPerson author5 = fFactory.createPerson(null, news5);
author5.setEmail(new URI("test@rssowl.org"));
ISource source5 = fFactory.createSource(news5);
source5.setName("Source for News 5");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
/* Condition 1a: String (match) */
{
/* Title */
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "foo");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "b?r");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "b?r");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "b*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "b*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4);
/* Description */
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "included");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "included");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "inc?uded");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "inc?uded");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "inc*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "inc*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
/* Attachments */
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "bin/mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "bin/mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "*mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "*mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
/* Author */
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Pa?ero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Pa?ero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Pa*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "Pa*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
/* All Fields */
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "f?o");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "f?o");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "fo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS, "fo*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
@SuppressWarnings("nls")
public void testSearchNewsWith_CONTAINS_ALL_Specifier() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
ICategory news1cat1 = fFactory.createCategory(null, news1);
news1cat1.setName("apple");
ILabel label1 = fFactory.createLabel(null, "work");
news1.addLabel(label1);
IAttachment att1news1 = fFactory.createAttachment(null, news1);
att1news1.setLink(new URI("http://www.attachment.com/att1news1.file"));
att1news1.setType("bin/mp3");
INews news2 = createNews(feed, " Bar", "http://www.news.com/news2.html", State.NEW);
news2.setDescription("This is a longer description with <html><h2>included!</h2></html>");
ICategory news2cat1 = fFactory.createCategory(null, news2);
news2cat1.setName("apple");
ICategory news2cat2 = fFactory.createCategory(null, news2);
news2cat2.setName("pasero");
ILabel label2 = fFactory.createLabel(null, "todo");
news2.addLabel(label2);
IAttachment att1news2 = fFactory.createAttachment(null, news2);
att1news2.setLink(new URI("http://www.attachment.com/att1news2.file"));
att1news2.setType("bin/doc");
IAttachment att2news2 = fFactory.createAttachment(null, news2);
att2news2.setLink(new URI("http://www.attachment.com/att2news2.file"));
att2news2.setType("bin/wav");
INews news3 = createNews(feed, "Foo Bar", "http://www.news.com/news3.html", State.NEW);
news3.setDescription("This is a longer description with \n newlines and <html><h2>included!</h2></html>");
IPerson author3 = fFactory.createPerson(null, news3);
author3.setName("Benjamin Pasero");
ICategory news3cat1 = fFactory.createCategory(null, news3);
news3cat1.setName("apple");
ICategory news3cat2 = fFactory.createCategory(null, news3);
news3cat2.setName("windows");
ICategory news3cat3 = fFactory.createCategory(null, news3);
news3cat3.setName("slashdot");
INews news4 = createNews(feed, "BAR FOO", "http://www.news.com/news4.html", State.UPDATED);
Date news4Date = new Date(1000000);
news4.setPublishDate(news4Date);
IPerson author4 = fFactory.createPerson(null, news4);
author4.setName("Pasero");
ISource source4 = fFactory.createSource(news4);
source4.setLink(new URI("http://www.source.com"));
INews news5 = createNews(feed, null, "http://www.news.com/news5.html", State.NEW);
news5.setFlagged(true);
IPerson author5 = fFactory.createPerson(null, news5);
author5.setEmail(new URI("test@rssowl.org"));
ISource source5 = fFactory.createSource(news5);
source5.setName("Source for News 5");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
/* Condition 1a: String (match) */
{
/* Title */
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "foo bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "bar foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "b* f*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "fo? b*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
/* Description */
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "newlines included");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "new?ines description");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
/* Attachments */
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "bin/mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "*mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "www.attachment.com*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2);
/* Author */
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Benjamin Pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Ben?amin Pase*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "Ben*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "test@rssowl.org");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "test@rssowl?*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
/* All Fields */
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "*pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "description new?ines");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "foo appl? bin/mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "ba? Apple descript*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "BAR FOO PASERO");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4);
}
/* Condition 1b: String (no match) */
{
/* Title */
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "barfoo");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "f? b?");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Description */
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "html");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "loner desription");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* Attachment */
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "bin/ogg");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "*ogg");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "www.attachments.com*");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
/* All Fields */
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "foobar");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_ALL, "*barfoo");
result = fModelSearch.searchNews(list(condition), false);
assertEquals(0, result.size());
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
/**
* @throws Exception
*/
@Test
@SuppressWarnings("nls")
public void testSearchNewsWith_CONTAINS_NOT_Specifier() throws Exception {
try {
/* First add some Types */
IFeed feed = fFactory.createFeed(null, new URI("http://www.feed.com/feed.xml"));
INews news1 = createNews(feed, "Foo", "http://www.news.com/news1.html", State.READ);
ICategory news1cat1 = fFactory.createCategory(null, news1);
news1cat1.setName("apple");
ILabel label1 = fFactory.createLabel(null, "work");
news1.addLabel(label1);
IAttachment att1news1 = fFactory.createAttachment(null, news1);
att1news1.setLink(new URI("http://www.attachment.com/att1news1.file"));
att1news1.setType("bin/mp3");
INews news2 = createNews(feed, " Bar", "http://www.news.com/news2.html", State.NEW);
ICategory news2cat1 = fFactory.createCategory(null, news2);
news2cat1.setName("apple");
ICategory news2cat2 = fFactory.createCategory(null, news2);
news2cat2.setName("pasero");
ILabel label2 = fFactory.createLabel(null, "todo");
news2.addLabel(label2);
IAttachment att1news2 = fFactory.createAttachment(null, news2);
att1news2.setLink(new URI("http://www.attachment.com/att1news2.file"));
att1news2.setType("bin/doc");
IAttachment att2news2 = fFactory.createAttachment(null, news2);
att2news2.setLink(new URI("http://www.attachment.com/att2news2.file"));
att2news2.setType("bin/wav");
INews news3 = createNews(feed, "Foo Bar", "http://www.news.com/news3.html", State.NEW);
news3.setDescription("This is a longer description with \n newlines and <html><h2>included!</h2></html>");
IPerson author3 = fFactory.createPerson(null, news3);
author3.setName("Benjamin Pasero");
ICategory news3cat1 = fFactory.createCategory(null, news3);
news3cat1.setName("apple");
ICategory news3cat2 = fFactory.createCategory(null, news3);
news3cat2.setName("windows");
ICategory news3cat3 = fFactory.createCategory(null, news3);
news3cat3.setName("slashdot");
INews news4 = createNews(feed, "BAR FOO", "http://www.news.com/news4.html", State.UPDATED);
Date news4Date = new Date(1000000);
news4.setPublishDate(news4Date);
IPerson author4 = fFactory.createPerson(null, news4);
author4.setName("Pasero");
ISource source4 = fFactory.createSource(news4);
source4.setLink(new URI("http://www.source.com"));
INews news5 = createNews(feed, null, "http://www.news.com/news5.html", State.NEW);
news5.setFlagged(true);
IPerson author5 = fFactory.createPerson(null, news5);
author5.setEmail(new URI("test@rssowl.org"));
ISource source5 = fFactory.createSource(news5);
source5.setName("Source for News 5");
DynamicDAO.save(feed);
/* Wait for Indexer */
waitForIndexer();
/* Condition 1a: String (match) */
{
/* Title */
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "foo bar");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "bar foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "b* f*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "fo? b*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news5);
/* Description */
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "included");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news4, news5);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "lon?er description");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news4, news5);
/* Attachments */
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "bin/mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "*mp3");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "www.attachment.com*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news3, news4, news5);
/* Author */
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "Benjamin Pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news5);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "Pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news5);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "Ben?amin Pase*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news5);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "Ben*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news4, news5);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "test@rssowl.org");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
field = fFactory.createSearchField(INews.AUTHOR, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "test@rssowl?*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4);
/* All Fields */
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "foo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news2, news5);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "*pasero");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news5);
}
/* Condition 1b: String (no match) */
{
/* Title */
ISearchField field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "barfoo");
List<SearchHit<NewsReference>> result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.TITLE, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "f? b?");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
/* Description */
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "html");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.DESCRIPTION, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "loner desription");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
/* Attachment */
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "bin/ogg");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "*ogg");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(INews.ATTACHMENTS_CONTENT, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "www.attachments.com*");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
/* All Fields */
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "foobar");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
field = fFactory.createSearchField(IEntity.ALL_FIELDS, fNewsEntityName);
condition = fFactory.createSearchCondition(field, SearchSpecifier.CONTAINS_NOT, "*barfoo");
result = fModelSearch.searchNews(list(condition), false);
assertSame(result, news1, news2, news3, news4, news5);
}
} catch (PersistenceException e) {
TestUtils.fail(e);
}
}
}