/**
*
* Copyright 2004-2005 The Apache Software Foundation
*
* 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.apache.geronimo.interop.rmi.iiop.server;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
import org.apache.geronimo.interop.adapter.Adapter;
import org.apache.geronimo.interop.naming.NameService;
import org.apache.geronimo.interop.naming.NameServiceLog;
import org.apache.geronimo.interop.rmi.iiop.CorbaObject;
import org.omg.CosNaming.BindingIteratorHolder;
import org.omg.CosNaming.BindingListHolder;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtPackage.InvalidAddress;
import org.omg.CosNaming.NamingContextPackage.AlreadyBound;
import org.omg.CosNaming.NamingContextPackage.CannotProceed;
import org.omg.CosNaming.NamingContextPackage.InvalidName;
import org.omg.CosNaming.NamingContextPackage.NotFound;
import org.omg.CosNaming.NamingContextPackage.NotFoundReason;
import org.omg.CosNaming.NamingContextPackage.NotEmpty;
public class ServerNamingContext extends CorbaObject implements NamingContextExt {
private NameService nameService;
protected static ServerNamingContext snc = null;
public ServerNamingContext()
{
nameService = NameService.getInstance();
}
public org.omg.CORBA.Object resolve_str(String name) throws NotFound, CannotProceed, InvalidName {
return lookup(name, null);
}
public String to_string(NameComponent[] n) throws InvalidName {
throw NoImplement();
}
public NameComponent[] to_name(String sn) throws InvalidName {
throw NoImplement();
}
public String to_url(String addr, String sn) throws InvalidAddress, InvalidName {
throw NoImplement();
}
public org.omg.CORBA.Object resolve(NameComponent[] name) throws NotFound, CannotProceed, InvalidName {
return lookup(toString(name), name);
}
public void bind(NameComponent[] n, org.omg.CORBA.Object obj) throws NotFound, CannotProceed, InvalidName, AlreadyBound {
throw NoImplement();
}
public void bind_context(NameComponent[] n, NamingContext nc) throws NotFound, CannotProceed, InvalidName, AlreadyBound {
throw NoImplement();
}
public void rebind(NameComponent[] n, org.omg.CORBA.Object obj) throws NotFound, CannotProceed, InvalidName {
throw NoImplement();
}
public void rebind_context(NameComponent[] n, NamingContext nc) throws NotFound, CannotProceed, InvalidName {
throw NoImplement();
}
public void unbind(NameComponent[] n) throws NotFound, CannotProceed, InvalidName {
throw NoImplement();
}
public void list(int how_many, BindingListHolder bl, BindingIteratorHolder bi) {
throw NoImplement();
}
public NamingContext new_context() {
throw NoImplement();
}
public NamingContext bind_new_context(NameComponent[] n) throws NotFound, AlreadyBound, CannotProceed, InvalidName {
throw NoImplement();
}
public void destroy() throws NotEmpty {
//TODO what should this do?
}
protected org.omg.CORBA.NO_IMPLEMENT NoImplement() {
return new org.omg.CORBA.NO_IMPLEMENT();
}
protected org.omg.CORBA.Object lookup(String nameString, NameComponent[] name) throws NotFound {
try {
Object object = nameService.lookup(nameString);
if (object instanceof Adapter) {
Adapter a = (Adapter) object;
//RemoteInterface remote = a.getRemoteInterface();
//return remote.$getObjectRef();
return a.getObjectRef();
} else {
NameServiceLog.getInstance().warnObjectHasNoRemoteInterface(nameString, object.getClass().getName());
throw new NotFound(NotFoundReason.not_object, name);
}
} catch (NameNotFoundException notFound) {
// Assume warning message has already been logged.
throw new NotFound(NotFoundReason.missing_node, name);
} catch (NamingException ex) {
NameServiceLog.getInstance().warnNameNotFound(nameString, ex);
throw new NotFound(NotFoundReason.missing_node, name);
}
}
protected String toString(NameComponent[] name) {
int n = name.length;
if (n == 1) {
return name[0].id;
} else {
StringBuffer nameBuffer = new StringBuffer();
for (int i = 0; i < n; i++) {
if (i > 0) {
nameBuffer.append('/');
}
nameBuffer.append(name[i].id);
if (name[i].kind.length() > 0) {
nameBuffer.append(",kind=");
nameBuffer.append(name[i].kind);
}
}
return nameBuffer.toString();
}
}
}