/* ********************************************************************** **
** 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.internal.persist;
import org.eclipse.core.runtime.Assert;
import org.rssowl.core.Owl;
import org.rssowl.core.persist.IAttachment;
import org.rssowl.core.persist.IBookMark;
import org.rssowl.core.persist.ICategory;
import org.rssowl.core.persist.ICloud;
import org.rssowl.core.persist.IConditionalGet;
import org.rssowl.core.persist.IEntity;
import org.rssowl.core.persist.IFeed;
import org.rssowl.core.persist.IFilterAction;
import org.rssowl.core.persist.IFolder;
import org.rssowl.core.persist.IFolderChild;
import org.rssowl.core.persist.IGuid;
import org.rssowl.core.persist.IImage;
import org.rssowl.core.persist.ILabel;
import org.rssowl.core.persist.IModelFactory;
import org.rssowl.core.persist.INews;
import org.rssowl.core.persist.INewsBin;
import org.rssowl.core.persist.IPersistable;
import org.rssowl.core.persist.IPerson;
import org.rssowl.core.persist.IPreference;
import org.rssowl.core.persist.ISearch;
import org.rssowl.core.persist.ISearchCondition;
import org.rssowl.core.persist.ISearchField;
import org.rssowl.core.persist.ISearchFilter;
import org.rssowl.core.persist.ISearchMark;
import org.rssowl.core.persist.ISource;
import org.rssowl.core.persist.ITextInput;
import org.rssowl.core.persist.SearchSpecifier;
import org.rssowl.core.persist.reference.FeedLinkReference;
import java.net.URI;
import java.util.Date;
/**
* Default implementation of IModelFactory. It instantiates the concrete classes
* provided in the {@link org.rssowl.core.internal.persist} package.
*
* @author Ismael Juma (ismael@juma.me.uk)
*/
public class DefaultModelFactory implements IModelFactory {
/*
* @see org.rssowl.core.model.types.IModelFactory#createNews(java.lang.Long,
* org.rssowl.core.model.types.IFeed, java.util.Date)
*/
public INews createNews(Long id, IFeed feed, Date receiveDate) {
News news = new News(id, feed, receiveDate);
/* Automatically add to the Feed */
feed.addNews(news);
return news;
}
/*
* @see
* org.rssowl.core.persist.IModelFactory#createNews(org.rssowl.core.persist
* .INews, org.rssowl.core.persist.INewsBin)
*/
public INews createNews(INews news, INewsBin newsBin) {
Assert.isNotNull(newsBin.getId(), "ID of the Bin must not be null!"); //$NON-NLS-1$
INews copy = new News((News) news, newsBin.getId());
copy.setId(Owl.getPersistenceService().getIDGenerator().getNext());
newsBin.addNews(copy);
return copy;
}
/*
* @see org.rssowl.core.model.types.IModelFactory#createPerson(long,
* org.rssowl.core.model.reference.ModelReference)
*/
public IPerson createPerson(Long id, IPersistable parentRef) {
Person person = new Person(id);
/* Automatically add to the Feed or News */
if (parentRef instanceof IFeed)
((IFeed) parentRef).setAuthor(person);
else if (parentRef instanceof INews)
((INews) parentRef).setAuthor(person);
return person;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createImage(org.rssowl.core.model
* .types.IFeed)
*/
public IImage createImage(IFeed feed) {
Image image = new Image();
/* Automatically add to the Feed */
feed.setImage(image);
return image;
}
/*
* @see org.rssowl.core.model.types.IModelFactory#createAttachment(long,
* java.net.URI, org.rssowl.core.model.reference.NewsReference)
*/
public IAttachment createAttachment(Long id, INews news) {
Attachment attachment = new Attachment(id, news);
news.addAttachment(attachment);
return attachment;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createCategory(java.lang.Long,
* org.rssowl.core.model.types.IEntity)
*/
public ICategory createCategory(Long id, IEntity parent) {
Category category = new Category(id);
/* Automatically add to the Feed or News */
if (parent instanceof IFeed)
((IFeed) parent).addCategory(category);
else if (parent instanceof INews)
((INews) parent).addCategory(category);
return category;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createSource(org.rssowl.core.
* model.types.INews)
*/
public ISource createSource(final INews news) {
Source source = new Source();
/* Automatically set to the News */
news.setSource(source);
return source;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createGuid(org.rssowl.core.model
* .types.INews, java.lang.String)
*/
public IGuid createGuid(final INews news, String value, Boolean permaLink) {
Guid guid = new Guid(value, permaLink);
/* Automatically set to the News */
news.setGuid(guid);
return guid;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createCloud(org.rssowl.core.model
* .types.IFeed)
*/
public ICloud createCloud(IFeed feed) {
CloudAdapter cloud = new CloudAdapter();
/* Automatically set to the Feed */
feed.setCloud(cloud);
return cloud;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createTextInput(org.rssowl.core
* .model.types.IFeed)
*/
public ITextInput createTextInput(IFeed feed) {
TextInputAdapter textInput = new TextInputAdapter();
/* Automatically set to the Feed */
feed.setTextInput(textInput);
return textInput;
}
/*
* @see org.rssowl.core.model.types.IModelFactory#createFeed(java.lang.Long,
* java.net.URI)
*/
public IFeed createFeed(Long id, URI link) {
return new Feed(id, link);
}
/*
* @see org.rssowl.core.model.types.IModelFactory#createFolder(long,
* java.lang.String, org.rssowl.core.model.reference.FolderReference)
*/
public IFolder createFolder(Long id, IFolder parent, String name) {
return createFolder(id, parent, name, null, null);
}
/*
* @see org.rssowl.core.persist.IModelFactory#createFolder(java.lang.Long,
* org.rssowl.core.persist.IFolder, java.lang.String,
* org.rssowl.core.persist.IFolderChild, boolean)
*/
public IFolder createFolder(Long id, IFolder parent, String name, IFolderChild position, Boolean after) {
Folder folder = new Folder(id, parent, name);
/* Automatically add to the Folder */
if (parent != null)
parent.addFolder(folder, position, after);
return folder;
}
/*
* @see org.rssowl.core.model.types.IModelFactory#createLabel(long,
* java.lang.String)
*/
public ILabel createLabel(Long id, String name) {
return new Label(id, name);
}
/*
* @see org.rssowl.core.model.types.IModelFactory#createSearchMark(long,
* java.lang.String, org.rssowl.core.model.reference.FolderReference)
*/
public ISearchMark createSearchMark(Long id, IFolder folder, String name) {
return createSearchMark(id, folder, name, null, null);
}
/*
* @see org.rssowl.core.persist.IModelFactory#createSearchMark(java.lang.Long,
* org.rssowl.core.persist.IFolder, java.lang.String,
* org.rssowl.core.persist.IFolderChild, boolean)
*/
public ISearchMark createSearchMark(Long id, IFolder folder, String name, IFolderChild position, Boolean after) {
SearchMark searchMark = new SearchMark(id, folder, name);
/* Automatically add to the Folder */
folder.addMark(searchMark, position, after);
return searchMark;
}
public INewsBin createNewsBin(Long id, IFolder folder, String name) {
return createNewsBin(id, folder, name, null, null);
}
public INewsBin createNewsBin(Long id, IFolder folder, String name, IFolderChild position, Boolean after) {
NewsBin newsBin = new NewsBin(id, folder, name);
/* Automatically add to the Folder */
folder.addMark(newsBin, position, after);
return newsBin;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createBookMark(java.lang.Long,
* org.rssowl.core.model.types.IFolder,
* org.rssowl.core.model.reference.FeedLinkReference, java.lang.String)
*/
public IBookMark createBookMark(Long id, IFolder folder, FeedLinkReference feedRef, String name) {
return createBookMark(id, folder, feedRef, name, null, null);
}
/*
* @see org.rssowl.core.persist.IModelFactory#createBookMark(java.lang.Long,
* org.rssowl.core.persist.IFolder,
* org.rssowl.core.persist.reference.FeedLinkReference, java.lang.String,
* org.rssowl.core.persist.IFolderChild, boolean)
*/
public IBookMark createBookMark(Long id, IFolder folder, FeedLinkReference feedRef, String name, IFolderChild position, Boolean after) {
BookMark bookMark = new BookMark(id, folder, feedRef, name);
/* Automatically add to the Folder */
folder.addMark(bookMark, position, after);
return bookMark;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createSearchCondition(java.lang
* .Long, org.rssowl.core.model.types.ISearchMark,
* org.rssowl.core.model.search.ISearchField,
* org.rssowl.core.model.search.SearchSpecifier, java.lang.Object)
*/
public ISearchCondition createSearchCondition(Long id, ISearchMark searchMark, ISearchField field, SearchSpecifier specifier, Object value) {
SearchCondition condition = new SearchCondition(id, field, specifier, value);
/* Automatically add to the SearchMark */
searchMark.addSearchCondition(condition);
return condition;
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createSearchCondition(org.rssowl
* .core.model.search.ISearchField,
* org.rssowl.core.model.search.SearchSpecifier, java.lang.Object)
*/
public ISearchCondition createSearchCondition(ISearchField field, SearchSpecifier specifier, Object value) {
return new SearchCondition(field, specifier, value);
}
/*
* @see org.rssowl.core.model.types.IModelFactory#createSearchField(int,
* java.lang.String)
*/
public ISearchField createSearchField(int id, String entityName) {
return new SearchField(id, entityName);
}
/*
* @see
* org.rssowl.core.model.types.IModelFactory#createConditionalGet(java.lang
* .String, java.net.URI, java.lang.String)
*/
public IConditionalGet createConditionalGet(String ifModifiedSince, URI link, String ifNoneMatch) {
return new ConditionalGet(ifModifiedSince, link, ifNoneMatch);
}
/*
* @see
* org.rssowl.core.persist.IModelFactory#createPreference(java.lang.String)
*/
public IPreference createPreference(String key) {
return new Preference(key);
}
/*
* @see org.rssowl.core.persist.IModelFactory#createSearch(java.lang.Long)
*/
public ISearch createSearch(Long id) {
return new Search(id);
}
/*
* @see
* org.rssowl.core.persist.IModelFactory#createFilterAction(java.lang.String)
*/
public IFilterAction createFilterAction(String actionId) {
return new FilterAction(actionId);
}
/*
* @see
* org.rssowl.core.persist.IModelFactory#createSearchFilter(java.lang.Long,
* org.rssowl.core.persist.ISearch, java.lang.String)
*/
public ISearchFilter createSearchFilter(Long id, ISearch search, String name) {
return new SearchFilter(id, search, name);
}
}