/*
* Created on Jun 20, 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.plugin;
import java.util.Date;
import java.util.Map;
import org.gudy.azureus2.core3.util.Base32;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.LightHashMap;
import org.gudy.azureus2.plugins.utils.search.SearchResult;
import com.aelitis.azureus.core.metasearch.*;
public class
PluginResult
extends Result
{
private static final Object NULL_OBJECT = PluginResult.class;
private SearchResult result;
private String search_term;
private Map property_cache = new LightHashMap();
protected
PluginResult(
PluginEngine _engine,
SearchResult _result,
String _search_term )
{
super( _engine );
result = _result;
search_term = _search_term;
}
public Date
getPublishedDate()
{
return((Date)getResultProperty( SearchResult.PR_PUB_DATE ));
}
public String
getCategory()
{
return(getStringProperty( SearchResult.PR_CATEGORY ));
}
public void
setCategory(
String category )
{
}
public String
getContentType()
{
return(getStringProperty( SearchResult.PR_CONTENT_TYPE ));
}
public void
setContentType(
String contentType )
{
}
public String
getName()
{
return(getStringProperty( SearchResult.PR_NAME ));
}
public long
getSize()
{
return(getLongProperty( SearchResult.PR_SIZE ));
}
public int
getNbPeers()
{
return(getIntProperty( SearchResult.PR_LEECHER_COUNT ));
}
public int
getNbSeeds()
{
return(getIntProperty( SearchResult.PR_SEED_COUNT ));
}
public int
getNbSuperSeeds()
{
return(getIntProperty( SearchResult.PR_SUPER_SEED_COUNT ));
}
public int
getComments()
{
return(getIntProperty( SearchResult.PR_COMMENTS ));
}
public int
getVotes()
{
return(getIntProperty( SearchResult.PR_VOTES ));
}
public int
getVotesDown()
{
return(getIntProperty( SearchResult.PR_VOTES_DOWN ));
}
public boolean
isPrivate()
{
return( getBooleanProperty( SearchResult.PR_PRIVATE ));
}
public String
getDRMKey()
{
return(getStringProperty( SearchResult.PR_DRM_KEY ));
}
public String
getDownloadLink()
{
return(getStringProperty( SearchResult.PR_DOWNLOAD_LINK ));
}
public String
getDownloadButtonLink()
{
return(getStringProperty( SearchResult.PR_DOWNLOAD_BUTTON_LINK ));
}
public String
getCDPLink()
{
return( getStringProperty( SearchResult.PR_DETAILS_LINK ));
}
public String
getPlayLink()
{
return(getStringProperty( SearchResult.PR_PLAY_LINK ));
}
public String
getUID()
{
return(getStringProperty( SearchResult.PR_UID ));
}
public String
getHash()
{
byte[] hash = getByteArrayProperty( SearchResult.PR_HASH );
if ( hash == null ){
return( null );
}
return( Base32.encode( hash ));
}
public float
getRank()
{
if (((PluginEngine)getEngine()).useAccuracyForRank()){
return( applyRankBias( getAccuracy()));
}
long l_rank = getLongProperty( SearchResult.PR_RANK );
// if we have seeds/peers just use the usual mechanism
if ( getLongProperty( SearchResult.PR_SEED_COUNT ) >= 0 && getLongProperty( SearchResult.PR_LEECHER_COUNT ) >= 0 ){
l_rank = Long.MIN_VALUE;
}
if ( l_rank == Long.MIN_VALUE ){
return( super.getRank());
}
float rank = l_rank;
if ( rank > 100 ){
rank = 100;
}else if ( rank < 0 ){
rank = 0;
}
return( applyRankBias( rank / 100 ));
}
public float
getAccuracy()
{
long l_accuracy = getLongProperty( SearchResult.PR_ACCURACY );
if ( l_accuracy == Long.MIN_VALUE ){
return( -1 );
}
float accuracy = l_accuracy;
if ( accuracy > 100 ){
accuracy = 100;
}else if ( accuracy < 0 ){
accuracy = 0;
}
return( accuracy / 100 );
}
public String
getSearchQuery()
{
return( search_term );
}
protected int
getIntProperty(
int name )
{
return((int)getLongProperty( name ));
}
protected long
getLongProperty(
int name )
{
return( getLongProperty( name, Long.MIN_VALUE ));
}
protected long
getLongProperty(
int name,
long def )
{
try{
Long l = (Long)getResultProperty( name );
if ( l == null ){
return( def );
}
return( l.longValue());
}catch( Throwable e ){
Debug.out( "Invalid value returned for Long property " + name );
return( def );
}
}
protected boolean
getBooleanProperty(
int name )
{
return( getBooleanProperty( name, false ));
}
protected boolean
getBooleanProperty(
int name,
boolean def )
{
try{
Boolean b = (Boolean)getResultProperty( name );
if ( b == null ){
return( def );
}
return( b.booleanValue());
}catch( Throwable e ){
Debug.out( "Invalid value returned for Boolean property " + name );
return( def );
}
}
protected String
getStringProperty(
int name )
{
return( getStringProperty( name, "" ));
}
protected String
getStringProperty(
int name,
String def )
{
try{
String l = (String)getResultProperty( name );
if ( l == null ){
return( def );
}
return( unescapeEntities( removeHTMLTags( l )));
}catch( Throwable e ){
Debug.out( "Invalid value returned for String property " + name );
return( def );
}
}
protected byte[]
getByteArrayProperty(
int name )
{
try{
return((byte[])getResultProperty( name ));
}catch( Throwable e ){
Debug.out( "Invalid value returned for byte[] property " + name );
return( null );
}
}
protected synchronized Object
getResultProperty(
int prop )
{
Integer i_prop = new Integer( prop );
Object res = property_cache.get( i_prop );
if ( res == null ){
res = result.getProperty( prop );
if ( res == null ){
res = NULL_OBJECT;
}
property_cache.put( i_prop, res );
}
if ( res == NULL_OBJECT ){
return( null );
}
return( res );
}
}