/* * 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.messenger.config; import java.util.*; import org.gudy.azureus2.core3.util.Debug; import com.aelitis.azureus.core.messenger.PlatformMessenger; import com.aelitis.azureus.core.messenger.PlatformMessengerException; public class PlatformMetaSearchMessenger { private static final int MAX_TEMPLATE_LIST = 512; private static final PlatformMessengerConfig dispatcher = new PlatformMessengerConfig( "searchtemplate", true ); private static final String OP_GET_TEMPLATE = "get-template"; private static final String OP_GET_TEMPLATES = "get-templates"; private static final String OP_LIST_POPULAR_TEMPLATES = "list-popular"; private static final String OP_LIST_FEATURED_TEMPLATES = "list-featured"; private static final String OP_TEMPLATE_SELECTED = "template-selected"; public static templateDetails getTemplate( String extension_key, long template_id ) throws PlatformMessengerException { Map parameters = getParameter( template_id ); if ( extension_key != null ){ parameters.put( "extension_key", extension_key ); } Map reply = dispatcher.syncInvoke( OP_GET_TEMPLATE, parameters ); templateInfo info = getTemplateInfo( reply ); if ( info == null ){ throw( new PlatformMessengerException( "Invalid reply: " + reply )); } String name = (String)reply.get( "name" ); String value = (String)reply.get( "value" ); String engine_type = (String)reply.get( "engine_id" ); if ( name == null || value == null || engine_type == null ){ throw( new PlatformMessengerException( "Invalid reply; field missing: " + reply )); } int type; if ( engine_type.equals( "json" )){ type = templateDetails.ENGINE_TYPE_JSON; }else if ( engine_type.equals( "regexp" )){ type = templateDetails.ENGINE_TYPE_REGEXP; }else{ throw( new PlatformMessengerException( "Invalid type '" + engine_type + ": " + reply )); } return( new templateDetails( info, type, name, value )); } public static templateInfo[] getTemplateDetails( String extension_key, long[] ids ) throws PlatformMessengerException { if( ids.length == 0 ){ return( new templateInfo[0]); } String str = ""; for (int i=0;i<ids.length;i++){ str += (i==0?"":",") + ids[i]; } Map parameters = new HashMap(); if ( extension_key != null ){ parameters.put( "extension_key", extension_key ); } parameters.put( "templateIds", str ); Map reply = dispatcher.syncInvoke( OP_GET_TEMPLATES, parameters ); return( getTemplatesInfo( reply )); } public static templateInfo[] listTopPopularTemplates( String extension_key, String fud ) throws PlatformMessengerException { Map parameters = new HashMap(); if ( extension_key != null ){ parameters.put( "extension_key", extension_key ); } parameters.put( "fud", fud ); Map reply = dispatcher.syncInvoke( OP_LIST_POPULAR_TEMPLATES, parameters ); return( getTemplatesInfo( reply )); } public static templateInfo[] listAllPopularTemplates( String extension_key, String fud ) throws PlatformMessengerException { Map parameters = new HashMap(); if ( extension_key != null ){ parameters.put( "extension_key", extension_key ); } parameters.put( "fud", fud ); parameters.put( "page-num", new Long( 1 )); parameters.put( "items-per-page", new Long( MAX_TEMPLATE_LIST )); Map reply = dispatcher.syncInvoke( OP_LIST_POPULAR_TEMPLATES, parameters ); return( getTemplatesInfo( reply )); } public static templateInfo[] listFeaturedTemplates( String extension_key, String fud ) throws PlatformMessengerException { Map parameters = new HashMap(); if ( extension_key != null ){ parameters.put( "extension_key", extension_key ); } parameters.put( "fud", fud ); parameters.put( "page-num", new Long( 1 )); parameters.put( "items-per-page", new Long( MAX_TEMPLATE_LIST )); Map reply = dispatcher.syncInvoke( OP_LIST_FEATURED_TEMPLATES, parameters ); return( getTemplatesInfo( reply )); } protected static templateInfo[] getTemplatesInfo( Map reply ) { List templates = (List)reply.get( "templates" ); List res = new ArrayList(); for (int i=0;i<templates.size();i++){ Map m = (Map)templates.get(i); templateInfo info = getTemplateInfo( m ); if ( info != null ){ res.add( info ); } } templateInfo[] res_a = new templateInfo[ res.size()]; res.toArray( res_a ); return( res_a ); } protected static templateInfo getTemplateInfo( Map m ) { Long id = (Long)m.get( "id" ); Boolean show = (Boolean)m.get( "show" ); Long date = (Long)m.get( "modified_dt" ); float rank_bias = 1; try{ String str = (String)m.get( "rank_bias" ); if ( str != null ){ rank_bias = Float.parseFloat( str ); } }catch( Throwable e ){ Debug.out( e ); } if ( show == null ){ show = new Boolean( true ); } if ( id == null || show == null || date == null ){ PlatformMessenger.debug( "field missing from template info (" + m + ")" ); }else{ return( new templateInfo( id.longValue(), date.longValue(), show.booleanValue(), rank_bias )); /* SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.S"); format.setTimeZone( TimeZone.getTimeZone( "UTC" )); try{ long millis = format.parse( date ).getTime(); return( new templateInfo( id.longValue(), millis, show.booleanValue())); }catch( Throwable e ){ PlatformMessenger.debug( "Invalid date received in template: " + m ); } */ } return( null ); } public static void setTemplatetSelected( String extension_key, long template_id, String user_id, boolean is_selected ) throws PlatformMessengerException { Map parameters = getParameter( template_id ); if ( extension_key != null ){ parameters.put( "extension_key", extension_key ); } parameters.put( "userId", user_id ); parameters.put( "selected", new Boolean( is_selected )); dispatcher.syncInvoke( OP_TEMPLATE_SELECTED, parameters ); } protected static Map getParameter( long template_id ) { Map parameters = new HashMap(); parameters.put( "templateId", new Long( template_id )); return( parameters ); } public static class templateInfo { private long id; private long date; private boolean visible; private float rank_bias; protected templateInfo( long _id, long _date, boolean _visible, float _rank_bias ) { id = _id; date = _date; visible = _visible; rank_bias = _rank_bias; } public long getId() { return( id ); } public long getModifiedDate() { return( date ); } public boolean isVisible() { return( visible ); } public float getRankBias() { return( rank_bias ); } } public static class templateDetails { public static final int ENGINE_TYPE_JSON = 1; public static final int ENGINE_TYPE_REGEXP = 2; private templateInfo info; private int type; private String name; private String value; protected templateDetails( templateInfo _info, int _type, String _name, String _value ) { info = _info; type = _type; name = _name; value = _value; } public int getType() { return( type ); } public long getId() { return( info.getId()); } public long getModifiedDate() { return( info.getModifiedDate()); } public float getRankBias() { return( info.getRankBias()); } public boolean isVisible() { return( info.isVisible()); } public String getName() { return( name ); } public String getValue() { return( value ); } } }