/* ********************************************************************** ** ** 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 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)); } }