@Override public Future<List<Service>> searchServices(Service filter, IIdentity node) throws ServiceDiscoveryException { if (logger.isDebugEnabled()) logger.debug("Searching repository for a given service, on node: " + node.getJid()); List<Service> result = new ArrayList<Service>(); try { String myLocalJid = getCommMngr().getIdManager().getThisNetworkNode().getJid(); if (myLocalJid.equals(node.getJid())) { if (logger.isDebugEnabled()) logger.debug("It's the local node, so we do a local call"); return searchServices(filter); } if (logger.isDebugEnabled()) logger.debug("Trying to query the remote node..."); ServiceDiscoveryRemoteClient callback = new ServiceDiscoveryRemoteClient(); getServiceDiscoveryRemote().searchService(filter, node, callback); result = callback.getResultList(); } catch (Exception ex) { ex.printStackTrace(); logger.error("Exception while searching for services!"); throw new ServiceDiscoveryException("Exception while searching for services!", ex); } return new AsyncResult<List<Service>>(result); }
@Override public Future<Service> getService(ServiceResourceIdentifier serviceId) throws ServiceDiscoveryException { if (logger.isDebugEnabled()) logger.debug("Service Discovery::getService()"); Service result = null; try { // First we check the local repository result = getServiceReg().retrieveService(serviceId); // Did we find it there? if (result == null) { if (logger.isDebugEnabled()) logger.debug( "Didn't find service on local repository, now checking if it's a remote service!"); String myLocalJid = getCommMngr().getIdManager().getThisNetworkNode().getJid(); String serviceJid = ServiceModelUtils.getJidFromServiceIdentifier(serviceId); // Is it supposed to be local? if (!myLocalJid.equals(serviceJid)) { if (logger.isDebugEnabled()) logger.debug("It's a remote service from node: " + serviceJid); INetworkNode node = getCommMngr().getIdManager().fromFullJid(serviceJid); // We call the other network node to get the information on the service ServiceDiscoveryRemoteClient callback = new ServiceDiscoveryRemoteClient(); getServiceDiscoveryRemote().getService(serviceId, node, callback); List<Service> resultList = callback.getResultList(); // Only one service should be returned. If not, we're dealing with some sort of problem if (resultList.size() == 1) { result = resultList.get(0); if (logger.isDebugEnabled()) logger.debug("Found service remotely!"); } } } } catch (Exception ex) { ex.printStackTrace(); logger.error("getService():: Exception getting Service: " + ex); throw new ServiceDiscoveryException("getService():: Exception getting Service", ex); } if (result == null) return null; else return new AsyncResult<Service>(result); }
/* * (non-Javadoc) * * @see * org.societies.api.internal.servicelifecycle.IServiceDiscovery#getServices * (org.societies.api.comm.xmpp.datatypes.Identity) */ @Override @Async public Future<List<Service>> getServices(IIdentity node) throws ServiceDiscoveryException { List<Service> serviceList = new ArrayList<Service>(); if (logger.isDebugEnabled()) logger.debug("getServices(Identity node) for node: " + node.getJid()); boolean myNode; boolean myCIS = false; INetworkNode currentNode = commMngr.getIdManager().getThisNetworkNode(); if (!currentNode.getJid().contentEquals(node.getJid())) myNode = false; else myNode = true; try { // Is it our node? If so, local search if (myNode) { if (logger.isDebugEnabled()) logger.debug("We're dealing with our own node!"); serviceList = getServiceReg().retrieveServicesSharedByCSS(node.getJid()); } else { // Is it one of my CIS? If so, local search ICisOwned localCis = getCisManager().getOwnedCis(node.getJid()); if (localCis != null) { if (logger.isDebugEnabled()) logger.debug("We're dealing with our CIS! Local search!"); serviceList = getServiceReg().retrieveServicesSharedByCIS(node.getJid()); myCIS = true; } } /* switch (node.getType()) { case CSS: case CSS_RICH: case CSS_LIGHT: serviceList = getServiceReg().retrieveServicesSharedByCSS(node.getJid()); break; case CIS: if(logger.isDebugEnabled()) logger.debug("Retrieving services of a CIS"); ICisOwned myCis = getCisManager().getOwnedCis(node.getJid()); if(myCis != null){ if(logger.isDebugEnabled()) logger.debug("We're dealing with our CIS! Local search!"); serviceList = getServiceReg().retrieveServicesSharedByCIS(node.getJid()); } break; default: logger.warn("Unknown node!"); break; } */ } catch (ServiceRetrieveException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (serviceList == null || serviceList.isEmpty()) { if (logger.isDebugEnabled()) logger.debug("No services retrieved from local node..."); // IIdentity currentNode = commMngr.getIdManager().getThisNetworkNode(); if (!myNode && !myCIS) { if (logger.isDebugEnabled()) logger.debug("Attempting to retrieve services from remote node: " + node.getJid()); ServiceDiscoveryRemoteClient callback = new ServiceDiscoveryRemoteClient(); getServiceDiscoveryRemote().getServices(node, callback); serviceList = callback.getResultList(); } } // Quick log message if (logger.isDebugEnabled()) { if (serviceList.isEmpty()) logger.debug("getServices: no services found!"); else { Iterator<Service> it = serviceList.iterator(); String logStuff = "getServices: "; while (it.hasNext()) { logStuff += it.next().getServiceName() + "; \n"; } logger.debug(logStuff); } } return new AsyncResult<List<Service>>(serviceList); }