/* Check Feed Deleted and News Deleted */
final IFeed feed = fFactory.createFeed(null, new URI("http://www.foobar.com"));
final IPerson person1 = fFactory.createPerson(null, feed);
person1.setName("Person1");
final FeedReference feedRef = new FeedReference(DynamicDAO.save(feed).getId());
final PersonReference personRef1 = new PersonReference(feedRef.resolve().getAuthor().getId());
final boolean feedDeleted[] = new boolean[1];
final boolean newsDeletedFromFeed[] = new boolean[1];
feedListener = new FeedAdapter() {
@Override
public void entitiesDeleted(Set<FeedEvent> events) {
for (FeedEvent event : events) {
assertFalse("Already received feedDeleted Event", feedDeleted[0]);
assertTrue("Expected this Event to be Root Event", event.isRoot());
if (feedRef.references(event.getEntity()))
feedDeleted[0] = true;
}
}
};
DynamicDAO.addEntityListener(IFeed.class, feedListener);
/* Check News Deleted */
final INews news1 = fFactory.createNews(null, feedRef.resolve(), new Date());
news1.setTitle("News1 Title");
news1.setLink(new URI("http://www.news.com/news1.html"));
final IPerson person2 = fFactory.createPerson(null, news1);
person2.setName("Person2");
fFactory.createSource(news1).setLink(new URI("http://www.source1.com"));
fFactory.createGuid(news1, "Guid1");
final NewsReference[] newsRef = new NewsReference[1];
newsAdapter = new NewsAdapter() {
@Override
public void entitiesAdded(Set<NewsEvent> events) {
assertEquals(1, events.size());
newsRef[0] = new NewsReference(events.iterator().next().getEntity().getId());
}
};
DynamicDAO.addEntityListener(INews.class, newsAdapter);
/* Must save parent because it gets changed during creation of news */
DynamicDAO.save(feedRef.resolve());
final NewsReference newsRef1 = newsRef[0];
final PersonReference personRef2 = new PersonReference(newsRef1.resolve().getAuthor().getId());
final INews news2 = fFactory.createNews(null, feedRef.resolve(), new Date());
news2.setTitle("News2 Title");
news2.setLink(new URI("http://www.news.com/news2.html"));
fFactory.createSource(news2).setLink(new URI("http://www.source2.com"));
fFactory.createGuid(news2, "Guid2");
/* Must save parent because it gets changed during creation of news */
DynamicDAO.save(feedRef.resolve());
final NewsReference newsRef2 = newsRef[0];
final INews news3 = fFactory.createNews(null, feedRef.resolve(), new Date());
news3.setTitle("News3 Title");
news3.setLink(new URI("http://www.news.com/news3.html"));
fFactory.createSource(news3).setLink(new URI("http://www.source3.com"));
fFactory.createGuid(news3, "Guid3");
/* Must save parent because it gets changed during creation of news */
DynamicDAO.save(feedRef.resolve());
final NewsReference newsRef3 = newsRef[0];
final boolean newsDeleted[] = new boolean[3];
newsListener = new NewsAdapter() {
@Override
public void entitiesDeleted(Set<NewsEvent> events) {
for (NewsEvent event : events) {
assertFalse("Expected this Event to be no Root Event", event.isRoot());
NewsReference newsRef = new NewsReference(event.getEntity().getId());
if (newsRef.equals(newsRef1))
newsDeleted[0] = true;
else if (newsRef.equals(newsRef2))
newsDeleted[1] = true;
else if (newsRef.equals(newsRef3))
newsDeleted[2] = true;
}
if (events.size() == 3)
newsDeletedFromFeed[0] = true;
}
};
DynamicDAO.addEntityListener(INews.class, newsListener);
/* Check Attachment Deleted */
final IAttachment attachment1 = fFactory.createAttachment(null, newsRef1.resolve());
final AttachmentReference attachmentRef1 = new AttachmentReference(DynamicDAO.save(attachment1).getId());
final IAttachment attachment2 = fFactory.createAttachment(null, newsRef2.resolve());
final AttachmentReference attachmentRef2 = new AttachmentReference(DynamicDAO.save(attachment2).getId());
final IAttachment attachment3 = fFactory.createAttachment(null, newsRef3.resolve());
final AttachmentReference attachmentRef3 = new AttachmentReference(DynamicDAO.save(attachment3).getId());
final boolean attachmentDeleted[] = new boolean[3];
attachmentListener = new AttachmentAdapter() {
@Override
public void entitiesDeleted(Set<AttachmentEvent> events) {
for (AttachmentEvent event : events) {
assertFalse("Expected this Event to be no Root Event", event.isRoot());
IAttachment attachment = event.getEntity();
if (attachmentRef1.references(attachment))
attachmentDeleted[0] = true;
else if (attachmentRef2.references(attachment))
attachmentDeleted[1] = true;
else if (attachmentRef3.references(attachment))
attachmentDeleted[2] = true;
}
}
};
DynamicDAO.addEntityListener(IAttachment.class, attachmentListener);
/* Check Person Deleted */
final boolean personDeleted[] = new boolean[2];
personListener = new PersonAdapter() {
@Override
public void entitiesDeleted(Set<PersonEvent> events) {
for (PersonEvent event : events) {
assertFalse("Expected this Event to be no Root Event", event.isRoot());
IPerson person = event.getEntity();
if (personRef1.references(person))
personDeleted[0] = true;
else if (personRef2.references(person))
personDeleted[1] = true;
}
}
};
DynamicDAO.addEntityListener(IPerson.class, personListener);
/* Check Category Deleted */
final ICategory category1 = fFactory.createCategory(null, newsRef1.resolve());
final CategoryReference categoryRef1 = new CategoryReference(DynamicDAO.save(category1).getId());
final ICategory category2 = fFactory.createCategory(null, newsRef2.resolve());
final CategoryReference categoryRef2 = new CategoryReference(DynamicDAO.save(category2).getId());
final boolean categoryDeleted[] = new boolean[2];
categoryListener = new CategoryAdapter() {
@Override
public void entitiesDeleted(Set<CategoryEvent> events) {
for (CategoryEvent event : events) {
assertFalse("Expected this Event to be no Root Event", event.isRoot());
ICategory category = event.getEntity();
if (categoryRef1.references(category))
categoryDeleted[0] = true;
else if (categoryRef2.references(category))
categoryDeleted[1] = true;
}
}
};
DynamicDAO.addEntityListener(ICategory.class, categoryListener);
/* Delete Feed */
DynamicDAO.delete(feedRef.resolve());
/* Asserts Follow */
assertTrue("Missed feedDeleted Event in FeedListener!", feedDeleted[0]);
assertTrue("Set<NewsEvent> in feedDeleted of FeedListener did not contain 3 News-References!", newsDeletedFromFeed[0]);