@ -28,10 +28,10 @@ import java.text.ParseException;
import java.util.Arrays ;
import java.util.Comparator ;
import java.util.Date ;
import java.util.HashMap ;
import java.util.HashSet ;
import java.util.Map ;
import java.util.Set ;
import java.util.concurrent.ConcurrentHashMap ;
import net.yacy.cora.date.GenericFormatter ;
import net.yacy.cora.date.ISO8601Formatter ;
@ -81,12 +81,14 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
return this . keys ;
}
@Override
public String toString ( ) {
return this . keys . iterator ( ) . next ( ) ;
}
}
private static String artificialGuidPrefix = "c0_" ;
private static String calculatedGuidPrefix = "c1_" ;
public static final RSSMessage POISON = new RSSMessage ( "" , "" , "" ) ;
public static final HashSet < String > tags = new HashSet < String > ( ) ;
@ -99,7 +101,7 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
private final Map < String , String > map ;
public RSSMessage ( final String title , final String description , final String link ) {
this . map = new Concurrent HashMap< String , String > ( ) ;
this . map = new HashMap< String , String > ( ) ;
this . map . put ( "title" , title ) ;
this . map . put ( "description" , description ) ;
this . map . put ( "link" , link ) ;
@ -108,7 +110,7 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
}
public RSSMessage ( final String title , final String description , final DigestURI link ) {
this . map = new Concurrent HashMap< String , String > ( ) ;
this . map = new HashMap< String , String > ( ) ;
this . map . put ( "title" , title ) ;
this . map . put ( "description" , description ) ;
this . map . put ( "link" , link . toNormalform ( true , false ) ) ;
@ -117,22 +119,19 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
}
public RSSMessage ( ) {
this . map = new Concurrent HashMap< String , String > ( ) ;
this . map = new HashMap< String , String > ( ) ;
}
public void setValue ( final String name , final String value ) {
this . map . put ( name , value ) ;
// if possible generate a guid if not existent so far
if ( ( name . equals ( "title" ) | | name . equals ( "description" ) | | name . equals ( "link" ) ) & &
( ! this . map . containsKey ( "guid" ) | | this . map . get ( "guid" ) . startsWith ( artificialGuidPrefix ) ) ) {
this . map . put ( "guid" , artificialGuidPrefix + Integer . toHexString ( ( getTitle ( ) + getDescription ( ) + getLink ( ) ) . hashCode ( ) ) ) ;
}
}
@Override
public String getTitle ( ) {
return Token . title . valueFrom ( this . map , "" ) ;
}
@Override
public String getLink ( ) {
return Token . link . valueFrom ( this . map , "" ) ;
}
@ -158,22 +157,27 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
return o1 . compareTo ( o2 ) ;
}
@Override
public String getDescription ( ) {
return Token . description . valueFrom ( this . map , "" ) ;
}
@Override
public String getAuthor ( ) {
return Token . author . valueFrom ( this . map , "" ) ;
}
@Override
public String getCopyright ( ) {
return Token . copyright . valueFrom ( this . map , "" ) ;
}
@Override
public String getCategory ( ) {
return Token . category . valueFrom ( this . map , "" ) ;
}
@Override
public String [ ] getSubject ( ) {
final String subject = Token . subject . valueFrom ( this . map , "" ) ;
if ( subject . indexOf ( ',' ) > = 0 ) return subject . split ( "," ) ;
@ -181,14 +185,17 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
return subject . split ( " " ) ;
}
@Override
public String getReferrer ( ) {
return Token . referrer . valueFrom ( this . map , "" ) ;
}
@Override
public String getLanguage ( ) {
return Token . language . valueFrom ( this . map , "" ) ;
}
@Override
public Date getPubDate ( ) {
final String dateString = Token . pubDate . valueFrom ( this . map , "" ) ;
Date date ;
@ -204,18 +211,27 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
return date ;
}
@Override
public String getGuid ( ) {
return Token . guid . valueFrom ( this . map , "" ) ;
String guid = Token . guid . valueFrom ( this . map , "" ) ;
if ( ( guid . length ( ) = = 0 | | guid . startsWith ( artificialGuidPrefix ) ) & &
( this . map . containsKey ( "title" ) | | this . map . containsKey ( "description" ) | | this . map . containsKey ( "link" ) ) ) {
guid = calculatedGuidPrefix + Integer . toHexString ( getTitle ( ) . hashCode ( ) + getDescription ( ) . hashCode ( ) + getLink ( ) . hashCode ( ) ) ;
this . map . put ( "guid" , guid ) ;
}
return guid ;
}
public String getTTL ( ) {
return Token . ttl . valueFrom ( this . map , "" ) ;
}
@Override
public String getDocs ( ) {
return Token . docs . valueFrom ( this . map , "" ) ;
}
@Override
public long getSize ( ) {
final String size = Token . size . valueFrom ( this . map , "-1" ) ;
return ( size = = null | | size . length ( ) = = 0 ) ? - 1 : Long . parseLong ( size ) ;
@ -227,10 +243,12 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
return sb . toString ( ) ;
}
@Override
public float getLon ( ) {
return Float . parseFloat ( Token . lon . valueFrom ( this . map , "0.0" ) ) ;
}
@Override
public float getLat ( ) {
return Float . parseFloat ( Token . lat . valueFrom ( this . map , "0.0" ) ) ;
}
@ -240,18 +258,22 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
return this . map . toString ( ) ;
}
@Override
public void setAuthor ( final String author ) {
setValue ( "author" , author ) ;
}
@Override
public void setCategory ( final String category ) {
setValue ( "category" , category ) ;
}
@Override
public void setCopyright ( final String copyright ) {
setValue ( "copyright" , copyright ) ;
}
@Override
public void setSubject ( final String [ ] tags ) {
final StringBuilder sb = new StringBuilder ( tags . length * 10 ) ;
for ( final String tag : tags ) sb . append ( tag ) . append ( ',' ) ;
@ -259,38 +281,47 @@ public class RSSMessage implements Hit, Comparable<RSSMessage>, Comparator<RSSMe
setValue ( "subject" , sb . toString ( ) ) ;
}
@Override
public void setDescription ( final String description ) {
setValue ( "description" , description ) ;
}
@Override
public void setDocs ( final String docs ) {
setValue ( "docs" , docs ) ;
}
@Override
public void setGuid ( final String guid ) {
setValue ( "guid" , guid ) ;
}
@Override
public void setLanguage ( final String language ) {
setValue ( "language" , language ) ;
}
@Override
public void setLink ( final String link ) {
setValue ( "link" , link ) ;
}
@Override
public void setPubDate ( final Date pubdate ) {
setValue ( "pubDate" , ISO8601Formatter . FORMATTER . format ( pubdate ) ) ;
}
@Override
public void setReferrer ( final String referrer ) {
setValue ( "referrer" , referrer ) ;
}
@Override
public void setSize ( final long size ) {
setValue ( "size" , Long . toString ( size ) ) ;
}
@Override
public void setTitle ( final String title ) {
setValue ( "title" , title ) ;
}