package org.drools.grid.service.directory.impl; import java.net.InetSocketAddress; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.collections.map.HashedMap; import org.drools.grid.CoreServicesLookup; import org.drools.grid.Grid; import org.drools.grid.GridServiceDescription; import org.drools.grid.io.Conversation; import org.drools.grid.io.IoWriter; import org.drools.grid.io.Message; import org.drools.grid.io.MessageReceiverHandler; import org.drools.grid.io.impl.CommandImpl; import org.drools.grid.service.directory.Address; import org.drools.grid.service.directory.WhitePages; import org.drools.grid.timer.impl.ServiceConfiguration; public class WhitePagesServer implements MessageReceiverHandler { private WhitePages whitePages; public WhitePagesServer(WhitePages whitePages) { this.whitePages = whitePages; } public void messageReceived(Conversation conversation, Message msg) { final CommandImpl cmd = (CommandImpl) msg.getBody(); this.execs.get( cmd.getName() ).execute( whitePages, conversation, msg, cmd ); } private Map<String, Exec> execs = new HashMap<String, Exec>() { { put( "WhitePages.create", new Exec() { public void execute(Object object, Conversation con, Message msg, CommandImpl cmd) { WhitePages whitePages = (WhitePages) object; final List list = cmd.getArguments(); GridServiceDescription gsd = whitePages.create( (String) list.get( 0 ) ); con.respond( gsd ); } } ); put( "WhitePages.remove", new Exec() { public void execute(Object object, Conversation con, Message msg, CommandImpl cmd) { WhitePages whitePages = (WhitePages) object; final List list = cmd.getArguments(); whitePages.remove( (String) list.get( 0 ) ); con.respond( null ); } } ); put( "WhitePages.lookup", new Exec() { public void execute(Object object, Conversation con, Message msg, CommandImpl cmd) { WhitePages whitePages = (WhitePages) object; final List list = cmd.getArguments(); GridServiceDescription gsd = whitePages.lookup( (String) list.get( 0 ) ); if ( gsd != null ) { gsd.setServiceInterface( null ); // FIXME URGENT (mdp) workaround due to mina serialization issues. } con.respond( gsd ); } } ); put( "GridServiceDescription.addAddress", new Exec() { public void execute(Object object, Conversation con, Message msg, CommandImpl cmd) { WhitePages whitePages = (WhitePages) object; final List list = cmd.getArguments(); GridServiceDescription gsd = whitePages.lookup( (String) list.get( 0 ) ); Address address = gsd.addAddress( (String) list.get( 1 ) ); con.respond( address ); } } ); put( "GridServiceDescription.removeAddress", new Exec() { public void execute(Object object, Conversation con, Message msg, CommandImpl cmd) { WhitePages whitePages = (WhitePages) object; final List list = cmd.getArguments(); GridServiceDescription gsd = whitePages.lookup( (String) list.get( 0 ) ); gsd.removeAddress( (String) list.get( 1 ) ); con.respond( null ); } } ); put( "GridServiceDescription.setServiceInterface", new Exec() { public void execute(Object object, Conversation con, Message msg, CommandImpl cmd) { WhitePages whitePages = (WhitePages) object; final List list = cmd.getArguments(); GridServiceDescription gsd = whitePages.lookup( (String) list.get( 0 ) ); gsd.setServiceInterface( (Class) list.get( 1 ) ); con.respond( null ); } } ); put( "Address.setObject", new Exec() { public void execute(Object object, Conversation con, Message msg, CommandImpl cmd) { WhitePages whitePages = (WhitePages) object; final List list = cmd.getArguments(); GridServiceDescription<WhitePages> gsd = whitePages.lookup( (String) list.get( 0 ) ); Address address = gsd.getAddresses().get( (String) list.get( 1 ) ); address.setObject( list.get( 2 ) ); con.respond( null ); } } ); } }; public static interface Exec { void execute(Object object, Conversation con, Message msg, CommandImpl cmd); } }