[java]
/** **** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is WebService Integration Gateway (WSIG).
*
* The Initial Developer of the Original Code is
* Whitestein Technologies AG.
* Portions created by the Initial Developer are Copyright (C) 2005
* the Initial Developer. All Rights Reserved.
*
* Contributor(s): Jozef Nagy (jna at whitestein.com)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
package com.whitestein.wsig.test;
import jade.core.AID;
import jade.core.Agent;
import jade.core.behaviours.CyclicBehaviour;
import jade.core.behaviours.OneShotBehaviour;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPANames;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.Property;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import jade.lang.acl.ACLMessage;
import java.util.Iterator;
import org.apache.log4j.Logger;
import com.whitestein.wsig.Configuration;
import com.whitestein.wsig.fipa.SL0Helper;
import com.whitestein.wsig.translator.SOAPToFIPASL0;
/**
* @author jna
*
* testing agent as a client.
* A client agent is implemented for testing purpose.
*/
public class TestAgentForAmazon extends Agent {
private static String nickName = "TestAgent_forAmazon";
private int convId = 0;
private Logger log = Logger.getLogger(TestAgentForAmazon.class.getName());
public static final String wsdlOperation = "Help";
public static String getNickName() {
return nickName;
}
protected void setup() {
// set a nick name by informations registered
nickName = getAID().getLocalName();
log.info("A " + nickName + " is starting.");
// add behaviours of this Agent
this.addBehaviour( new OneShotBehaviour( this ) {
public void action() {
doSearch();
}
});
// make an external class to access AID
log.debug("A " + nickName + " is started.");
}
private void doSearch() {
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
Property p = new Property(
Configuration.WEB_SERVICE + ".operation",
wsdlOperation );
sd.addProperties( p );
template.addServices( sd );
try {
DFAgentDescription[] res = DFService.search( this, template);
if ( res.length < 1 ) {
log.info( "No service is found." );
doDelete();
return;
} else {
AID aid;
String serviceName;
aid = res[0].getName();
serviceName = findServiceName( res[0] );
if ( null == serviceName ) {
log.info( "No service is found in results." );
doDelete();
return;
}
this.addBehaviour( new CyclicBehaviour( this ) {
public void action() {
ACLMessage msg = myAgent.receive();
if ( msg != null ) {
processResponse( msg );
}else {
block();
}
}
});
final ACLMessage m = createRequest( aid, serviceName );
this.addBehaviour( new OneShotBehaviour( this ) {
public void action() {
send( m );
}
});
}
} catch ( FIPAException fe ) {
log.debug( fe );
}
}
private String findServiceName( DFAgentDescription dfad ) {
String res = null;
ServiceDescription sd;
Iterator it = dfad.getAllServices();
while( it.hasNext() ) {
sd = (ServiceDescription) it.next();
res = findServiceName( sd );
if ( null != res ) {
break;
}
}
return res;
}
private String findServiceName( ServiceDescription sd ) {
Property p;
Iterator it = sd.getAllProperties();
while( it.hasNext() ) {
p = (Property) it.next();
if ( wsdlOperation.equalsIgnoreCase( (String) p.getValue()) ) {
return sd.getName();
}
}
return null;
}
private void processResponse( ACLMessage msg ) {
log.debug(" response is: " + SL0Helper.toString(msg) );
doDelete();
}
private synchronized ACLMessage createRequest( AID aid, String service ) {
ACLMessage msg = new ACLMessage( ACLMessage.REQUEST );
msg.addReceiver( aid );
msg.setSender( this.getAID());
msg.setProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST);
msg.setConversationId( "conv_" + convId ++ );
msg.setLanguage(FIPANames.ContentLanguage.FIPA_SL0);
msg.setOntology("AnOntology");
msg.setContent(
"((action \n" +
" (agent-identifier " +
":name " + aid + " )\n" +
" (" + service + "\n" +
// FIXME: a "Request" is translated as a FIPA keyword in FIPA SL0’s code
// a translator generates aditional fipa-attributes
// "(Request (Author \"Tolkien\")" +
// " (Brand \"book\")" +
// " (Title \"The Lord of the Rings\") )" +
"\n ) ))");
log.debug(" request is: " + SL0Helper.toString(msg) );
return msg;
}
private synchronized ACLMessage createSearch( String wsdlOperation ) {
ACLMessage msg = new ACLMessage( ACLMessage.REQUEST );
msg.addReceiver( Configuration.getInstance().getGatewayAID());
msg.setSender( this.getAID());
msg.setProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST);
msg.setConversationId( "conv_" + convId ++ );
msg.setLanguage(FIPANames.ContentLanguage.FIPA_SL0);
msg.setOntology("FIPA-Agent-Management");
msg.setContent(
"((action " +
"(agent-identifier " +
":name " +
Configuration.getInstance().getGatewayAID() +
") " +
"(search " +
" (df-agent-description " +
" :services (set " +
" (service-description :properties (set " +
" (property :name web-service.operation :value " + wsdlOperation + " )" +
" " +
" )) " +
" ) ) " +
" (search-constraint) " +
") ))");
return msg;
}
private ACLMessage createRequestXMLtagged( AID aid, String service ) {
ACLMessage msg = new ACLMessage( ACLMessage.REQUEST );
msg.addReceiver( aid );
msg.setSender( this.getAID());
msg.setProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST);
msg.setConversationId( "conv_" + convId ++ );
msg.setLanguage(FIPANames.ContentLanguage.FIPA_SL0);
msg.setOntology("AnOntology");
msg.setContent(
"((action \n" +
" (agent-identifier \n" +
" :name " + aid + " ) \n" +
" (" + SOAPToFIPASL0.XML_TAG_ + service + "\n" +
" :" + SOAPToFIPASL0.XML_ATTRIBUTES + " (set (property :name color :value blue))\n" +
" :" + SOAPToFIPASL0.XML_ELEMENT + " (" + service + ")\n" +
" ) ))");
return msg;
}
protected void takeDown() {
log.debug("A " + nickName + " is taken down now.");
}
}
[/java]