// Distributed Decision making system framework
// Copyright (c) 2014, Jordi Coll Corbilla
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// - Neither the name of this library nor the names of its contributors may be
// used to endorse or promote products derived from this software without
// specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
package ddm.jade;
import jade.core.AID;
import jade.core.Agent;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.SearchConstraints;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import java.util.Iterator;
/**
*
* @author jordi Corbilla
* Search agent in the DF functionality
*/
public class JadeAgents {
/**
* Search Jade agents
* @param a
* @param type
* @param name
* @return Agent
*/
public static jade.util.leap.List SearchAgents(Agent a, String type,
String name) {
jade.util.leap.List results = new jade.util.leap.ArrayList();
DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
if (type != null)
sd.setType(type);
if (name != null)
sd.setName(name);
dfd.addServices(sd);
try {
SearchConstraints c = new SearchConstraints();
c.setMaxResults(new Long(-1));
DFAgentDescription[] DFAgents = DFService.search(a, dfd, c);
int i = 0;
while ((DFAgents != null) && (i < DFAgents.length)) {
DFAgentDescription agent = DFAgents[i];
i++;
@SuppressWarnings("rawtypes")
Iterator services = agent.getAllServices();
boolean found = false;
ServiceDescription service = null;
while (services.hasNext() && !found) {
service = (ServiceDescription) services.next();
found = (service.getType().equals(type) || service
.getName().equals(name));
}
if (found) {
results.add((AID) agent.getName());
}
}
} catch (FIPAException e) {
System.out.println("ERROR: " + e.toString());
}
return results;
}
}