/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.rpc.spi;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import de.rcenvironment.core.communication.rpc.ServiceCallRequest;
/**
* The result of a local service resolution. If the resolution is successful, this object is intended to be cached to avoid the overhead of
* repeated lookups. Reflection-based checks are also intended to be cached within this object.
*
* @author Robert Mischke
*/
public class LocalServiceLookupResult {
private final Object validImplementation;
private final Set<String> validMethodNames;
public LocalServiceLookupResult(Object validImplementation, Collection<String> methodNamesToAllow) {
this.validImplementation = validImplementation;
this.validMethodNames = new HashSet<>(methodNamesToAllow);
}
/**
* @return an instance that always returns 'false' on {@link #isValidRemotableService()}
*/
public static LocalServiceLookupResult createInvalidServicePlaceholder() {
return new LocalServiceLookupResult(null, new ArrayList<String>());
}
public boolean isValidRemotableService() {
return validImplementation != null;
}
/**
* Checks whether the given method name is valid to be called as part of a {@link ServiceCallRequest}.
*
* @param methodName the requested method name
* @return true if the method is allowed to be called
*/
public boolean isValidMethodRequest(String methodName) {
return validMethodNames.contains(methodName);
}
public Object getImplementation() {
return validImplementation;
}
}