// BlogBridge -- RSS feed reader, manager, and web based service // Copyright (C) 2002-2006 by R. Pito Salas // // This program is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free Software Foundation; // either version 2 of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; // without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along with this program; // if not, write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA // // Contact: R. Pito Salas // mailto:pitosalas@users.sourceforge.net // More information: about BlogBridge // http://www.blogbridge.com // http://sourceforge.net/projects/blogbridge // // $Id: FeedsList.java,v 1.8 2007/03/01 14:18:09 spyromus Exp $ // package com.salas.bb.domain; import com.salas.bb.domain.query.articles.Query; import com.salas.bb.domain.querytypes.QueryType; import com.salas.bb.utils.IdentityList; import java.net.URL; import java.util.Collections; import java.util.List; /** * Flat list of all feeds in the system. */ public class FeedsList { private final List<IFeed> feeds = new IdentityList<IFeed>(); /** * Adds a feed. * * @param feed feed. */ public void add(IFeed feed) { if (!feeds.contains(feed)) feeds.add(feed); } /** * Removes a feed. * * @param feed feed. */ public void remove(IFeed feed) { feeds.remove(feed); } /** * Returns number of feeds currently in repository. * * @return feeds. */ public int getFeedsCount() { return feeds.size(); } /** * Returns the feed at some index. * * @param index feed index. * * @return feed. */ public IFeed getFeedAt(int index) { return feeds.get(index); } /** * Returns the immutable list of feeds. * * @return list of feeds. */ public List<IFeed> getFeeds() { return Collections.unmodifiableList(feeds); } // --------------------------------------------------------------------------------------------- // Finding feeds // --------------------------------------------------------------------------------------------- /** * Returns static direct feed by its XML URL. * * @param xmlUrl URL. * * @return feed or <code>NULL</code>. */ public DirectFeed findDirectFeed(URL xmlUrl) { return findDirectFeed(xmlUrl, false); } /** * Returns static direct feed by its XML URL. * * @param xmlUrl URL. * @param ignoreCase <code>TRUE</code> to compare links case-insensitively. * * @return feed or <code>NULL</code>. */ public DirectFeed findDirectFeed(URL xmlUrl, boolean ignoreCase) { DirectFeed feed = null; String xmlUrlS = xmlUrl == null ? null : xmlUrl.toString(); for (int i = 0; feed == null && i < feeds.size(); i++) { IFeed ifeed = feeds.get(i); if (ifeed instanceof DirectFeed) { DirectFeed dfeed = ((DirectFeed)ifeed); URL feedUrl = dfeed.getXmlURL(); String feedUrlS = feedUrl == null ? null : feedUrl.toString(); if ((xmlUrlS == null && feedUrlS == null) || (xmlUrlS != null && (ignoreCase ? xmlUrlS.equalsIgnoreCase(feedUrlS) : xmlUrlS.equals(feedUrlS)))) feed = dfeed; } } return feed; } /** * Returns query feed by its attributes. * * @param type type of the query. * @param parameter query parameter. * * @return feed or <code>NULL</code>. */ public QueryFeed findQueryFeed(QueryType type, String parameter) { if (type == null) return null; QueryFeed feed = null; for (int i = 0; feed == null && i < feeds.size(); i++) { IFeed ifeed = feeds.get(i); if (ifeed instanceof QueryFeed) { QueryFeed qfeed = (QueryFeed)ifeed; QueryType qfeedType = qfeed.getQueryType(); String qfeedParameter = qfeed.getParameter(); if (qfeedType != null && type.getType() == qfeedType.getType() && ((parameter == null && qfeedParameter == null) || (parameter != null && parameter.equals(qfeedParameter)))) feed = qfeed; } } return feed; } /** * Returns search feed by its query. * * @param query query. * * @return feed or <code>NULL</code>. */ public SearchFeed findSearchFeed(Query query) { SearchFeed feed = null; for (int i = 0; feed == null && i < feeds.size(); i++) { IFeed ifeed = feeds.get(i); if (ifeed instanceof SearchFeed) { SearchFeed sfeed = (SearchFeed)ifeed; Query sfeedQuery = sfeed.getQuery(); if ((query == null && sfeedQuery == null) || (query != null && query.equals(sfeedQuery))) feed = sfeed; } } return feed; } }