rendered paste body/* ********************************************************************** **
** 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.ui.internal.views.feedview;
import java.util.List;
import org.eclipse.jface.viewers.ILazyTreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Display;
import org.rssowl.core.model.NewsModel;
import org.rssowl.core.model.dao.IApplicationLayer;
import org.rssowl.core.model.dao.ModelDAOException;
import org.rssowl.core.model.reference.FeedReference;
import org.rssowl.core.model.reference.NewsReference;
import org.rssowl.core.model.types.IFeed;
import org.rssowl.core.model.types.INews;
public class FeedContentProvider implements ILazyTreeContentProvider {
private TreeViewer fTreeViewer;
private IApplicationLayer appLayer;
public FeedContentProvider() {
appLayer = NewsModel.getDefault().getPersistanceLayer().getApplicationLayer();
}
/* ITreeContentProvider implementation
public Object[] getElements(Object inputElement) {
FeedReference feedRef = (FeedReference) inputElement;
IFeed feed = resolve(feedRef);
return feed.getNews().toArray();
}
public Object[] getChildren(Object parentElement) {
FeedReference feedRef = (FeedReference) parentElement;
IFeed feed = resolve(feedRef);
return feed.getNews().toArray();
}
public Object getParent(Object element) {
NewsReference newsRef = (NewsReference) element;
return resolve(newsRef).getFeed();
}
*/
/* Alternative ITreeContentProvider implementation
public Object[] getChildren(Object parentElement) {
FeedReference feedRef = (FeedReference) parentElement;
IFeed feed = resolve(feedRef);
try {
// return
// NewsModel.getDefault().getPersistanceLayer().getModelDAO().loadNews(feed.getNews()).toArray();
} catch (ModelDAOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public Object[] getElements(Object parentElement) {
FeedReference feedRef = (FeedReference) parentElement;
IFeed feed = resolve(feedRef);
try {
return NewsModel.getDefault().getPersistanceLayer().getModelDAO().loadNews(feed.getNews()).toArray();
} catch (ModelDAOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
*/
public Object getParent(Object element) {
if (element instanceof NewsReference) {
return resolve((NewsReference) element).getFeed();
}
if (element instanceof FeedReference) {
return null;
}
return null;
}
private IFeed resolve(FeedReference feedRef) {
try {
return feedRef.resolve();
} catch (ModelDAOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
private INews resolve(NewsReference newsRef) {
try {
if (newsRef.isCached()) {
return newsRef.resolve();
}
return appLayer.loadNewsSummary(newsRef.getId());
//return NewsModel.getDefault().getTypesCache().obtainNews(newsRef);
} catch (ModelDAOException e) {
e.printStackTrace();
}
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof NewsReference) {
return false;
}
if (element instanceof FeedReference) {
return resolve((FeedReference) element).getNews().size() > 0;
}
return false;
}
public void dispose() {}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
if (newInput == null) {
return;
}
fTreeViewer = (TreeViewer) viewer;
final FeedReference feedRef = (FeedReference) newInput;
final IFeed feed = resolve(feedRef);
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
fTreeViewer.setChildCount(feedRef, feed.getNews().size());
};
});
}
public void updateChildCount(Object element, int currentChildCount) {
if (element instanceof FeedReference) {
IFeed feed = resolve((FeedReference) element);
fTreeViewer.setChildCount(element, feed.getNews().size());
}
}
public void updateElement(Object parent, int index) {
FeedReference feedRef = (FeedReference) parent;
IFeed feed = resolve(feedRef);
List<NewsReference> newsRefs = feed.getNews();
if (index > newsRefs.size() - 1) {
return;
}
NewsReference newsRef = feed.getNews().get(index);
INews news = resolve(newsRef);
NewsReference cachedRef = new NewsReference(news);
fTreeViewer.replace(parent, index, cachedRef);
//System.out.println("Time to display virtual : " + (System.currentTimeMillis() - FeedView.time));
}
}