com.aelitis.azureus.core.metasearch.impl.web.WebResult.java Source code

Java tutorial

Introduction

Here is the source code for com.aelitis.azureus.core.metasearch.impl.web.WebResult.java

Source

/*
 * Created on May 6, 2008
 * Created by Paul Gardner
 * 
 * Copyright 2008 Vuze, Inc.  All rights reserved.
 * 
 * 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; version 2 of the License only.
 * 
 * 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.
 */

package com.aelitis.azureus.core.metasearch.impl.web;

import java.util.Date;
import java.util.StringTokenizer;

import org.apache.commons.lang.*;
import org.gudy.azureus2.core3.util.Base32;
import org.gudy.azureus2.core3.util.ByteFormatter;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.UrlUtils;

import com.aelitis.azureus.core.metasearch.Engine;
import com.aelitis.azureus.core.metasearch.Result;
import com.aelitis.azureus.core.metasearch.impl.DateParser;

public class WebResult extends Result {

    String searchQuery;

    String rootPageURL;
    String basePageURL;
    DateParser dateParser;

    String contentType = "";
    String name;
    String category = "";

    String drmKey = null;

    Date publishedDate;

    long size = -1;
    int nbPeers = -1;
    int nbSeeds = -1;
    int nbSuperSeeds = -1;
    int comments = -1;
    int votes = -1;
    int votesDown = -1;
    float rank = -1;

    boolean privateTorrent;

    String cdpLink;
    String torrentLink;
    String downloadButtonLink;
    String playLink;

    String uid;
    String hash;

    public WebResult(Engine engine, String rootPageURL, String basePageURL, DateParser dateParser,
            String searchQuery) {
        super(engine);
        this.rootPageURL = rootPageURL;
        this.basePageURL = basePageURL;
        this.dateParser = dateParser;
        this.searchQuery = searchQuery;
    }

    public void setName(String name) {
        if (name != null) {
            this.name = name;
        }
    }

    public void setNameFromHTML(String name) {
        if (name != null) {
            name = removeHTMLTags(name);
            this.name = Entities.HTML40.unescape(name);
        }
    }

    public void setCommentsFromHTML(String comments) {
        if (comments != null) {
            comments = removeHTMLTags(comments);
            comments = Entities.HTML40.unescape(comments);
            comments = comments.replaceAll(",", "");
            comments = comments.replaceAll(" ", "");
            try {
                this.comments = Integer.parseInt(comments);
            } catch (Throwable e) {
                //e.printStackTrace();
            }
        }
    }

    public void setCategoryFromHTML(String category) {
        if (category != null) {
            category = removeHTMLTags(category);
            this.category = Entities.HTML40.unescape(category).trim();
            /*int separator = this.category.indexOf(">");
                
            if(separator != -1) {
               this.category = this.category.substring(separator+1).trim();
            }*/
        }
    }

    public void setUID(String _uid) {
        uid = _uid;
    }

    public String getUID() {
        return (uid);
    }

    public void setNbPeersFromHTML(String nbPeers) {
        if (nbPeers != null) {
            nbPeers = removeHTMLTags(nbPeers);
            String nbPeersS = Entities.HTML40.unescape(nbPeers);
            nbPeersS = nbPeersS.replaceAll(",", "");
            nbPeersS = nbPeersS.replaceAll(" ", "");
            try {
                this.nbPeers = Integer.parseInt(nbPeersS);
            } catch (Throwable e) {
                //this.nbPeers = 0;
                //e.printStackTrace();
            }
        }
    }

    public void setNbSeedsFromHTML(String nbSeeds) {
        if (nbSeeds != null) {
            nbSeeds = removeHTMLTags(nbSeeds);
            String nbSeedsS = Entities.HTML40.unescape(nbSeeds);
            nbSeedsS = nbSeedsS.replaceAll(",", "");
            nbSeedsS = nbSeedsS.replaceAll(" ", "");
            try {
                this.nbSeeds = Integer.parseInt(nbSeedsS);
            } catch (Throwable e) {
                //this.nbSeeds = 0;
                //e.printStackTrace();
            }
        }
    }

    public void setNbSuperSeedsFromHTML(String nbSuperSeeds) {
        if (nbSuperSeeds != null) {
            nbSuperSeeds = removeHTMLTags(nbSuperSeeds);
            String nbSuperSeedsS = Entities.HTML40.unescape(nbSuperSeeds);
            nbSuperSeedsS = nbSuperSeedsS.replaceAll(",", "");
            nbSuperSeedsS = nbSuperSeedsS.replaceAll(" ", "");
            try {
                this.nbSuperSeeds = Integer.parseInt(nbSuperSeedsS);
            } catch (Throwable e) {
                //this.nbSeeds = 0;
                //e.printStackTrace();
            }
        }
    }

    public void setRankFromHTML(String rank_str) {
        if (rank_str != null) {
            try {
                // either a float 0->1 or integer 0->100

                float f = Float.parseFloat(rank_str.trim());

                if (rank_str.indexOf(".") == -1) {

                    if (f >= 0 && f <= 100) {

                        rank = f / 100;
                    }
                } else {

                    if (f >= 0 && f <= 1) {

                        rank = f;
                    }
                }
            } catch (Throwable e) {
            }
        }
    }

    public float getRank() {
        if (rank != -1) {

            return (applyRankBias(rank));
        }

        return (super.getRank());
    }

    public void setPublishedDate(Date date) {
        this.publishedDate = date;
    }

    public void setPublishedDateFromHTML(String publishedDate) {
        if (publishedDate != null) {
            publishedDate = removeHTMLTags(publishedDate);
            String publishedDateS = Entities.HTML40.unescape(publishedDate).replace((char) 160, (char) 32);
            this.publishedDate = dateParser.parseDate(publishedDateS);
        }
    }

    public void setSizeFromHTML(String size) {
        if (size != null) {
            size = removeHTMLTags(size);
            String sizeS = Entities.HTML40.unescape(size).replace((char) 160, (char) 32);
            sizeS = sizeS.replaceAll("<[^>]+>", " ");
            //Add a space between the digits and unit if there is none
            sizeS = sizeS.replaceFirst("(\\d)([a-zA-Z])", "$1 $2");
            try {
                StringTokenizer st = new StringTokenizer(sizeS, " ");
                double base = Double.parseDouble(st.nextToken());
                String unit = "b";
                try {
                    unit = st.nextToken().toLowerCase();
                } catch (Throwable e) {
                    //No unit
                }
                long multiplier = 1;
                long KB_UNIT = 1024;
                long KIB_UNIT = 1024;
                if ("mb".equals(unit)) {
                    multiplier = KB_UNIT * KB_UNIT;
                } else if ("mib".equals(unit)) {
                    multiplier = KIB_UNIT * KIB_UNIT;
                } else if ("m".equals(unit)) {
                    multiplier = KIB_UNIT * KIB_UNIT;
                } else if ("gb".equals(unit)) {
                    multiplier = KB_UNIT * KB_UNIT * KB_UNIT;
                } else if ("gib".equals(unit)) {
                    multiplier = KIB_UNIT * KIB_UNIT * KIB_UNIT;
                } else if ("g".equals(unit)) {
                    multiplier = KIB_UNIT * KIB_UNIT * KIB_UNIT;
                } else if ("kb".equals(unit)) {
                    multiplier = KB_UNIT;
                } else if ("kib".equals(unit)) {
                    multiplier = KIB_UNIT;
                } else if ("k".equals(unit)) {
                    multiplier = KIB_UNIT;
                }

                this.size = (long) (base * multiplier);
            } catch (Throwable e) {
                //e.printStackTrace();
            }
        }
    }

    public void setVotesFromHTML(String votes_str) {
        if (votes_str != null) {
            votes_str = removeHTMLTags(votes_str);
            votes_str = Entities.HTML40.unescape(votes_str);
            votes_str = votes_str.replaceAll(",", "");
            votes_str = votes_str.replaceAll(" ", "");
            try {
                this.votes = Integer.parseInt(votes_str);
            } catch (Throwable e) {
                //e.printStackTrace();
            }
        }
    }

    public void setVotesDownFromHTML(String votes_str) {
        if (votes_str != null) {
            votes_str = removeHTMLTags(votes_str);
            votes_str = Entities.HTML40.unescape(votes_str);
            votes_str = votes_str.replaceAll(",", "");
            votes_str = votes_str.replaceAll(" ", "");
            try {
                this.votesDown = Integer.parseInt(votes_str);
            } catch (Throwable e) {
                //e.printStackTrace();
            }
        }
    }

    public void setPrivateFromHTML(String privateTorrent) {
        if (privateTorrent != null && !"".equals(privateTorrent)) {
            this.privateTorrent = true;
        }
    }

    public int getVotes() {
        return (votes);
    }

    public int getVotesDown() {
        return (votesDown);
    }

    public void setCDPLink(String cdpLink) {
        this.cdpLink = cdpLink;
    }

    public void setDownloadButtonLink(String downloadButtonLink) {
        this.downloadButtonLink = downloadButtonLink;
    }

    public void setTorrentLink(String torrentLink) {
        this.torrentLink = torrentLink;
    }

    public void setPlayLink(String playLink) {
        this.playLink = playLink;
    }

    public String getContentType() {
        return this.contentType;
    }

    public String getPlayLink() {
        return (reConstructLink(playLink));
    }

    public void setCategory(String category) {
        this.category = category;

    }

    public void setContentType(String contentType) {
        this.contentType = contentType;

    }

    public void setDrmKey(String drmKey) {
        this.drmKey = drmKey;
    }

    public void setHash(String _hash) {
        try {
            hash = _hash.trim();

            if (hash.length() == 32) {

                // base 32 hash

            } else if (hash.length() == 40) {

                // base 16

                hash = Base32.encode(ByteFormatter.decodeString(hash));

            } else {

                hash = null;
            }
        } catch (Throwable e) {

            Debug.printStackTrace(e);

            hash = null;
        }

        if (hash != null && downloadButtonLink == null) {
            setDownloadButtonLink(UrlUtils.normaliseMagnetURI(hash));
        }
        if (hash != null && torrentLink == null) {
            setTorrentLink(UrlUtils.normaliseMagnetURI(hash));
        }
    }

    public String getHash() {
        return (hash);
    }

    public String getCDPLink() {

        return reConstructLink(cdpLink);
    }

    public String getCategory() {
        return category;
    }

    public String getDownloadLink() {

        return reConstructLink(torrentLink);

    }

    public String getDownloadButtonLink() {

        //If we don't have a download button link, but we do have a direct download link,
        //then we should use the direct download link...
        if (downloadButtonLink != null) {
            return reConstructLink(downloadButtonLink);
        } else {
            return getDownloadLink();
        }

    }

    private String reConstructLink(String link) {
        if (link != null) {

            String lc_link = link.toLowerCase();

            if (lc_link.startsWith("http://") || lc_link.startsWith("https://") || lc_link.startsWith("azplug:")
                    || lc_link.startsWith("magnet:") || lc_link.startsWith("bc:") || lc_link.startsWith("bctp:")
                    || lc_link.startsWith("dht:")) {

                return (link);
            }

            if (link.startsWith("/")) {

                return ((rootPageURL == null ? "" : rootPageURL) + link);
            }

            return ((basePageURL == null ? "" : basePageURL) + link);
        }

        return ("");
    }

    public String getName() {
        return name;
    }

    public int getNbPeers() {
        return nbPeers;
    }

    public int getNbSeeds() {
        return nbSeeds;
    }

    public int getNbSuperSeeds() {
        return nbSuperSeeds;
    }

    public Date getPublishedDate() {
        return publishedDate;
    }

    public long getSize() {
        return size;
    }

    public int getComments() {
        return (comments);
    }

    public String getSearchQuery() {
        return searchQuery;
    }

    public boolean isPrivate() {
        return privateTorrent;
    }

    public String getDRMKey() {
        return drmKey;
    }

    public float getAccuracy() {
        return -1;
    }
}