Example usage for org.apache.commons.net.nntp NewsgroupInfo getFirstArticle

List of usage examples for org.apache.commons.net.nntp NewsgroupInfo getFirstArticle

Introduction

In this page you can find the example usage for org.apache.commons.net.nntp NewsgroupInfo getFirstArticle.

Prototype

@Deprecated
    public int getFirstArticle() 

Source Link

Usage

From source file:com.almarsoft.GroundhogReader.lib.NNTPExtended.java

public long[] getGroupArticles(String group, long fromArticle, int limit) throws IOException {

    Vector<Long> list;
    long firstToGet, firstArticle, lastArticle;
    NewsgroupInfo groupInfo = new NewsgroupInfo();

    if (!selectNewsgroup(group, groupInfo))
        return null;

    firstArticle = groupInfo.getFirstArticle();
    lastArticle = groupInfo.getLastArticle();

    if (firstArticle == 0 && lastArticle == 0)
        return new long[0];

    // First sync with this group; see the comment below 
    if (fromArticle == -1)
        firstToGet = firstArticle;//from w ww.j  a  v a  2 s  .  co m

    else {
        if (fromArticle > lastArticle) { // No new articles
            return new long[0];
        } else {
            firstToGet = fromArticle;
        }
    }

    // Now select the first article and start looping until limit or last article reached
    ArticlePointer art = new ArticlePointer();

    list = new Vector<Long>(limit);

    // FIRST CONNECTION TO THE GROUP
    // If this is the first connection we only want the last "limit" articles from the group, 
    // so we ask for the last message and go backwards until we have "limit" articles or 
    // the first one.
    if (fromArticle == -1) {
        if (!selectArticle(lastArticle, art))
            return new long[0];

        for (int i = 0; i < limit; i++) {
            list.insertElementAt((long) art.articleNumber, 0);

            if (art.articleNumber == firstToGet)
                break;

            if (!selectPreviousArticle(art))
                break;
        }
    }

    // NON-FIRST CONNECTION TO THE GROUP
    // For normal non-first connection we start with the last article we got on the previous session and advance from that
    // until limit or last article reached
    else {
        if (!selectArticle(firstToGet, art))
            return new long[0];

        for (int i = 0; i <= limit; i++) {
            list.add((long) art.articleNumber);

            if (art.articleNumber == lastArticle)
                break;

            if (!selectNextArticle(art))
                break;
        }
    }
    int listSize = list.size();
    long[] articleNumbers = new long[listSize];

    for (int i = 0; i < listSize; i++) {
        articleNumbers[i] = list.get(i);
    }

    return articleNumbers;
}

From source file:org.ossmeter.platform.communicationchannel.nntp.local.NNTPDownloader.java

public void downloadMessages(NntpNewsGroup newsgroup) throws Exception {
    final long startTime = System.currentTimeMillis();
    long previousTime = startTime;
    previousTime = printTimeMessage(startTime, previousTime, "Download started");

    NNTPClient nntpClient = NntpUtil.connectToNntpServer(newsgroup);

    NewsgroupInfo newsgroupInfo = NntpUtil.selectNewsgroup(nntpClient, newsgroup);

    int lastArticleChecked = newsgroupInfo.getFirstArticle();
    previousTime = printTimeMessage(startTime, previousTime,
            "First message in newsgroup:\t" + lastArticleChecked);

    int lastArticle = newsgroupInfo.getLastArticle();
    previousTime = printTimeMessage(startTime, previousTime, "Last message in newsgroup:\t" + lastArticle);

    previousTime = printTimeMessage(startTime, previousTime,
            "Articles in newsgroup:\t" + newsgroupInfo.getArticleCount());
    System.err.println();//from  w w w. jav a 2 s  .c o  m

    Mongo mongo = new Mongo();
    DB db = mongo.getDB(newsgroup.getName() + "LocalStorage");
    Messages dbMessages = new Messages(db);

    NewsgroupData newsgroupData = dbMessages.getNewsgroup().findOneByName(newsgroup.getName());
    if (newsgroupData != null) {
        int newsgroupLastArticleChecked = Integer.parseInt(newsgroupData.getLastArticleChecked());
        if (newsgroupLastArticleChecked > lastArticleChecked) {
            lastArticleChecked = newsgroupLastArticleChecked;
        }
        previousTime = printTimeMessage(startTime, previousTime,
                "Last article checked set to:\t" + lastArticleChecked);
    } else {
        newsgroupData = new NewsgroupData();
        newsgroupData.setName(newsgroup.getName());
        newsgroupData.setUrl(newsgroup.getUrl());
        newsgroupData.setAuthenticationRequired(newsgroup.getAuthenticationRequired());
        newsgroupData.setUsername(newsgroup.getUsername());
        newsgroupData.setPassword(newsgroup.getPassword());
        newsgroupData.setPort(newsgroup.getPort());
        newsgroupData.setInterval(newsgroup.getInterval());
        newsgroupData.setFirstArticle(lastArticleChecked + "");
        dbMessages.getNewsgroup().add(newsgroupData);
    }

    int retrievalStep = RETRIEVAL_STEP;
    while (lastArticleChecked < lastArticle) {
        if (lastArticleChecked + retrievalStep > lastArticle) {
            retrievalStep = lastArticle - lastArticleChecked;
        }
        Article[] articles = NntpUtil.getArticleInfo(nntpClient, lastArticleChecked + 1,
                lastArticleChecked + retrievalStep);
        if (articles.length > 0) {
            Article lastArticleRetrieved = articles[articles.length - 1];
            lastArticleChecked = lastArticleRetrieved.getArticleNumber();
            newsgroupData.setLastArticleChecked(lastArticleChecked + "");
        }
        previousTime = printTimeMessage(startTime, previousTime,
                "downloaded:\t" + articles.length + " nntp articles");
        previousTime = printTimeMessage(startTime, previousTime, "downloading contents\t");

        for (Article article : articles) {
            ArticleData articleData = new ArticleData();
            articleData.setUrl(newsgroup.getUrl());
            articleData.setArticleNumber(article.getArticleNumber());
            articleData.setArticleId(article.getArticleId());
            articleData.setDate(article.getDate());
            articleData.setFrom(article.getFrom());
            articleData.setSubject(article.getSubject());
            for (String referenceId : article.getReferences())
                articleData.getReferences().add(referenceId);
            articleData.setBody(NntpUtil.getArticleBody(nntpClient, article.getArticleNumber()));
            dbMessages.getArticles().add(articleData);
        }
        dbMessages.sync();
        previousTime = printTimeMessage(startTime, previousTime, "stored:\t" + dbMessages.getArticles().size()
                + " / " + newsgroupInfo.getArticleCount() + " nntp articles sofar");
        System.err.println();
    }
    nntpClient.disconnect();
    dbMessages.sync();
    previousTime = printTimeMessage(startTime, previousTime, "stored:\t" + dbMessages.getArticles().size()
            + " / " + newsgroupInfo.getArticleCount() + " nntp articles");
}

From source file:org.ossmeter.platform.communicationchannel.nntp.NntpManager.java

@Override
public CommunicationChannelDelta getDelta(DB db, NntpNewsGroup newsgroup, Date date) throws Exception {
    NNTPClient nntpClient = NntpUtil.connectToNntpServer(newsgroup);

    NewsgroupInfo newsgroupInfo = NntpUtil.selectNewsgroup(nntpClient, newsgroup);
    int lastArticle = newsgroupInfo.getLastArticle();

    //       The following statement is not really needed, but I added it to speed up running,
    //       in the date is far latter than the first day of the newsgroup.
    //      if (Integer.parseInt(newsgroup.getLastArticleChecked())<134500)
    //         newsgroup.setLastArticleChecked("134500"); //137500");

    String lac = newsgroup.getLastArticleChecked();
    if (lac == null || lac.equals("") || lac.equals("null"))
        lac = "-1";
    int lastArticleChecked = Integer.parseInt(lac);
    if (lastArticleChecked < 0)
        lastArticleChecked = newsgroupInfo.getFirstArticle();

    // FIXME: certain eclipse newsgroups return 0 for both FirstArticle and LastArticle which causes exceptions
    if (lastArticleChecked == 0)
        return null;

    CommunicationChannelDelta delta = new CommunicationChannelDelta();
    delta.setNewsgroup(newsgroup);/*  www  .  j  a v a  2 s .c om*/

    int retrievalStep = RETRIEVAL_STEP;
    Boolean dayCompleted = false;
    while (!dayCompleted) {
        if (lastArticleChecked + retrievalStep > lastArticle) {
            retrievalStep = lastArticle - lastArticleChecked;
            dayCompleted = true;
        }
        Article[] articles;
        Date articleDate = date;
        // The following loop discards messages for days earlier than the required one.
        do {
            articles = NntpUtil.getArticleInfo(nntpClient, lastArticleChecked + 1,
                    lastArticleChecked + retrievalStep);
            if (articles.length > 0) {
                Article lastArticleRetrieved = articles[articles.length - 1];
                java.util.Date javaArticleDate = NntpUtil.parseDate(lastArticleRetrieved.getDate());
                articleDate = new Date(javaArticleDate);
                if (date.compareTo(articleDate) > 0)
                    lastArticleChecked = lastArticleRetrieved.getArticleNumber();
            }
        } while (date.compareTo(articleDate) > 0);

        for (Article article : articles) {
            java.util.Date javaArticleDate = NntpUtil.parseDate(article.getDate());
            if (javaArticleDate != null) {
                articleDate = new Date(javaArticleDate);
                if (date.compareTo(articleDate) < 0) {
                    dayCompleted = true;
                    //                  System.out.println("dayCompleted");
                } else if (date.compareTo(articleDate) == 0) {
                    CommunicationChannelArticle communicationChannelArticle = new CommunicationChannelArticle();
                    communicationChannelArticle.setArticleId(article.getArticleId());
                    communicationChannelArticle.setArticleNumber(article.getArticleNumber());
                    communicationChannelArticle.setDate(javaArticleDate);
                    //                  I haven't seen any messageThreadIds on NNTP servers, yet.
                    //                  communicationChannelArticle.setMessageThreadId(article.messageThreadId());
                    NntpNewsGroup newNewsgroup = new NntpNewsGroup();
                    newNewsgroup.setUrl(newsgroup.getUrl());
                    newNewsgroup.setAuthenticationRequired(newsgroup.getAuthenticationRequired());
                    newNewsgroup.setUsername(newsgroup.getUsername());
                    newNewsgroup.setPassword(newsgroup.getPassword());
                    newNewsgroup.setNewsGroupName(newsgroup.getNewsGroupName());
                    newNewsgroup.setPort(newsgroup.getPort());
                    newNewsgroup.setInterval(newsgroup.getInterval());
                    communicationChannelArticle.setNewsgroup(newNewsgroup);
                    communicationChannelArticle.setReferences(article.getReferences());
                    communicationChannelArticle.setSubject(article.getSubject());
                    communicationChannelArticle.setUser(article.getFrom());
                    communicationChannelArticle
                            .setText(getContents(db, newNewsgroup, communicationChannelArticle));
                    delta.getArticles().add(communicationChannelArticle);
                    lastArticleChecked = article.getArticleNumber();
                    //                  System.out.println("dayNOTCompleted");
                } else {

                    //TODO: In this case, there are unprocessed articles whose date is earlier than the date requested.
                    //      This means that the deltas of those article dates are incomplete, 
                    //      i.e. the deltas did not contain all articles of those dates.
                }
            } else {
                // If an article has no correct date, then ignore it
                System.err.println("\t\tUnparsable article date: " + article.getDate());
            }
        }
    }
    nntpClient.disconnect();
    newsgroup.setLastArticleChecked(lastArticleChecked + "");
    System.out.println(
            "delta (" + date.toString() + ") contains:\t" + delta.getArticles().size() + " nntp articles");

    return delta;
}

From source file:org.ossmeter.platform.communicationchannel.nntp.NntpManager.java

@Override
public Date getFirstDate(DB db, NntpNewsGroup newsgroup) throws Exception {
    NNTPClient nntpClient = NntpUtil.connectToNntpServer(newsgroup);
    NewsgroupInfo newsgroupInfo = NntpUtil.selectNewsgroup(nntpClient, newsgroup);
    int firstArticleNumber = newsgroupInfo.getFirstArticle();

    if (firstArticleNumber == 0) {
        return null; // This is to deal with message-less newsgroups.
    }/* w w w .  j  ava 2 s  .  c o  m*/

    Reader reader = nntpClient.retrieveArticle(firstArticleNumber);
    while (reader == null) {
        firstArticleNumber++;
        reader = nntpClient.retrieveArticle(firstArticleNumber);
        if (firstArticleNumber >= newsgroupInfo.getLastArticle())
            break;
    }

    ArticleHeader articleHeader = new ArticleHeader(reader);
    //      Article article = NntpUtil.getArticleInfo(nntpClient, articleId);
    nntpClient.disconnect();
    //      String date = article.getDate();

    return new Date(NntpUtil.parseDate(articleHeader.getDate().trim()));
}