blob: 0b4d6f4a7786c9dbe77f8d74595c92695ba99dbe [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Versant Corp.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Kuppe (mkuppe <at> versant <dot> com) - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.internal.provider.jslp;
import ch.ethz.iks.slp.*;
import java.util.*;
import org.eclipse.core.runtime.Assert;
import org.eclipse.ecf.core.util.Trace;
/**
* This decorator add additional methods which will eventually be moved to jSLP itself
*/
public class LocatorDecoratorImpl implements LocatorDecorator {
private final Locator locator;
public LocatorDecoratorImpl(final Locator aLocator) {
Assert.isNotNull(aLocator);
locator = aLocator;
}
/* (non-Javadoc)
* @see ch.ethz.iks.slp.Locator#findAttributes(ch.ethz.iks.slp.ServiceType, java.util.List, java.util.List)
*/
public ServiceLocationEnumeration findAttributes(final ServiceType type, final List scopes, final List attributeIds) throws ServiceLocationException {
return locator.findAttributes(type, scopes, attributeIds);
}
/* (non-Javadoc)
* @see ch.ethz.iks.slp.Locator#findAttributes(ch.ethz.iks.slp.ServiceURL, java.util.List, java.util.List)
*/
public ServiceLocationEnumeration findAttributes(final ServiceURL url, final List scopes, final List attributeIds) throws ServiceLocationException {
return locator.findAttributes(url, scopes, attributeIds);
}
/* (non-Javadoc)
* @see ch.ethz.iks.slp.Locator#findServices(ch.ethz.iks.slp.ServiceType, java.util.List, java.lang.String)
*/
public ServiceLocationEnumeration findServices(final ServiceType type, final List scopes, final String searchFilter) throws ServiceLocationException, IllegalArgumentException {
return locator.findServices(type, scopes, searchFilter);
}
/* (non-Javadoc)
* @see ch.ethz.iks.slp.Locator#findServiceTypes(java.lang.String, java.util.List)
*/
public ServiceLocationEnumeration findServiceTypes(final String namingAuthority, final List scopes) throws ServiceLocationException {
return locator.findServiceTypes(namingAuthority, scopes);
}
/* (non-Javadoc)
* @see ch.ethz.iks.slp.Locator#getLocale()
*/
public Locale getLocale() {
return locator.getLocale();
}
/* (non-Javadoc)
* @see ch.ethz.iks.slp.Locator#setLocale(java.util.Locale)
*/
public void setLocale(final Locale locale) {
locator.setLocale(locale);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.internal.provider.jslp.LocatorDecorator#getServiceURLs(java.lang.String, java.util.List)
*/
public List getServiceURLs(final String namingAuthority, final List scopes) throws ServiceLocationException {
final Enumeration stEnum = findServiceTypes(namingAuthority, scopes);
final Set aSet = new HashSet(Collections.list(stEnum));
final List result = new ArrayList();
for (final Iterator itr = aSet.iterator(); itr.hasNext();) {
final String type = (String) itr.next();
try {
final ServiceLocationEnumeration services = findServices(new ServiceType(type), scopes, null);
while (services.hasMoreElements()) {
final ServiceURL url = (ServiceURL) services.next();
result.add(url);
}
} catch (IllegalArgumentException e) {
// Skipping an invalid service type
// @see https://bugs.eclipse.org/397877
Trace.catching(Activator.PLUGIN_ID, JSLPDebugOptions.EXCEPTIONS_CATCHING, this.getClass(), "getServiceURLs(String, List)", e); //$NON-NLS-1$
continue;
}
}
return result;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.internal.provider.jslp.LocatorDecorator#getServiceURLs(ch.ethz.iks.slp.ServiceType, java.util.List)
*/
public Map getServiceURLs(final ServiceType aServiceType, final List scopes) throws ServiceLocationException {
final Map result = new HashMap();
final ServiceLocationEnumeration services = findServices(aServiceType, scopes, null);
while (services.hasMoreElements()) {
final ServiceURL url = (ServiceURL) services.next();
result.put(url, Collections.list(findAttributes(url, scopes, null)));
}
return result;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.internal.provider.jslp.LocatorDecorator#getServiceURLs()
*/
public Map getServiceURLs() throws ServiceLocationException {
final Enumeration stEnum = findServiceTypes(null, null);
final Set aSet = new HashSet(Collections.list(stEnum));
final Map result = new HashMap();
for (final Iterator itr = aSet.iterator(); itr.hasNext();) {
final String type = (String) itr.next();
try {
final ServiceLocationEnumeration services = findServices(new ServiceType(type), null, null);
while (services.hasMoreElements()) {
final ServiceURL url = (ServiceURL) services.next();
result.put(url, Collections.list(findAttributes(url, null, null)));
}
} catch (IllegalArgumentException e) {
// Skipping an invalid service type
// @see https://bugs.eclipse.org/397877
Trace.catching(Activator.PLUGIN_ID, JSLPDebugOptions.EXCEPTIONS_CATCHING, this.getClass(), "getServiceURLs()", e); //$NON-NLS-1$
continue;
}
}
return result;
}
}