/**
* ***************************************************************
* JADE - Java Agent DEvelopment Framework is a framework to develop
* multi-agent systems in compliance with the FIPA specifications.
* Copyright (C) 2000 CSELT S.p.A.
*
* GNU Lesser General Public License
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation,
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
* **************************************************************
*/
package jade.content;
import jade.lang.acl.ACLMessage;
import jade.core.AID;
import jade.util.leap.List;
import jade.util.leap.Iterator;
import jade.content.abs.*;
import jade.content.onto.*;
/**
* Utility class that allow using an <code>ACLMessage</code> object
* as an ontological agent action.
* @author Giovanni Caire - TILAB
*/
public class OntoACLMessage extends ACLMessage implements AgentAction {
/**
* Construct an ontological ACL message whose performative
* is ACLMessage.NOT_UNDERSTOOD
*/
public OntoACLMessage() {
super(ACLMessage.NOT_UNDERSTOOD);
}
/**
* Construct an ontological ACL message with a given
* performative
* @param performative the performative of this ACL message.
* @see ACLMessage#ACLMessage(int)
*/
public OntoACLMessage(int performative) {
super(performative);
}
/**
* Create an ontological ACL message that wraps an existing
* <code>ACLMessage</code>.
* @param msg the <code>ACLMessage</code>to be wrapped. If
* <code>msg</code>
* is already an ontological ACL message no new object is
* created and <code>msg</code> is returned with the sender
* and receivers properly wrapped if necessary.
*/
public static OntoACLMessage wrap(ACLMessage msg) {
OntoACLMessage wrapper = null;
if (msg != null) {
if (msg instanceof OntoACLMessage) {
wrapper = (OntoACLMessage) msg;
}
else {
wrapper = new OntoACLMessage(msg.getPerformative());
// This automatically performs the wrapping
wrapper.setSender(msg.getSender());
Iterator it = msg.getAllReceiver();
while (it.hasNext()) {
// This automatically performs the wrapping
wrapper.addReceiver((AID) it.next());
}
it = msg.getAllReplyTo();
while (it.hasNext()) {
// This automatically performs the wrapping
wrapper.addReplyTo((AID) it.next());
}
wrapper.setLanguage(msg.getLanguage());
wrapper.setOntology(msg.getOntology());
wrapper.setProtocol(msg.getProtocol());
wrapper.setInReplyTo(msg.getInReplyTo());
wrapper.setReplyWith(msg.getReplyWith());
wrapper.setConversationId(msg.getConversationId());
wrapper.setReplyByDate(msg.getReplyByDate());
if (msg.hasByteSequenceContent()) {
wrapper.setByteSequenceContent(msg.getByteSequenceContent());
}
else {
wrapper.setContent(msg.getContent());
}
wrapper.setEncoding(msg.getEncoding());
//FIXME: Message Envelope is missing
}
}
return wrapper;
}
/**
* This method is redefined so that the sender AID is automatically
* wrapped into an OntoAID
*/
public void setSender(AID aid) {
super.setSender(OntoAID.wrap(aid));
}
/**
* This method is redefined so that the receiver AID is automatically
* wrapped into an OntoAID
*/
public void addReceiver(AID aid) {
super.addReceiver(OntoAID.wrap(aid));
}
/**
* This method is redefined so that the replyTo AID is automatically
* wrapped into an OntoAID
*/
public void addReplyTo(AID aid) {
super.addReplyTo(OntoAID.wrap(aid));
}
// FIXME: clone method should be redefined too
}