/*
* Copyright (C) 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.ros.namespace;
import org.ros.node.Node;
/**
* Resolver for {@link Node} names. {@link Node} namespace must handle the ~name
* syntax for private names.
*
* @author ethan.rublee@gmail.com (Ethan Rublee)
* @author kwc@willowgarage.com (Ken Conley)
*/
public class NodeNameResolver extends NameResolver {
private final GraphName privateNamespace;
/**
* @param nodeName
* the name of the {@link Node}
* @param defaultResolver
* the {@link NameResolver} to use if asked to resolve a non-private
* name
*/
public NodeNameResolver(GraphName nodeName, NameResolver defaultResolver) {
super(defaultResolver.getNamespace(), defaultResolver.getRemappings());
this.privateNamespace = nodeName;
}
/**
* @param name
* name to resolve
* @return the name resolved relative to the default or private namespace
*/
@Override
public GraphName resolve(GraphName name) {
GraphName graphName = lookUpRemapping(name);
if (graphName.isPrivate()) {
return resolve(privateNamespace, graphName.toRelative());
}
return super.resolve(name);
}
/**
* @see #resolve(GraphName)
*/
@Override
public GraphName resolve(String name) {
return resolve(GraphName.of(name));
}
}