package org.neo4j.util.shell;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.Set;
public class LocalNeoShellServer extends SimpleAppServer
{
private String neoDirectory;
private Object neoObject;
private SimpleAppServer neoServer;
public LocalNeoShellServer( String neoDirectory ) throws RemoteException
{
super();
this.neoDirectory = neoDirectory;
}
private SimpleAppServer getNeoServer()
{
if ( neoServer == null )
{
try
{
neoServer = instantiateNewNeoServer();
}
catch ( ShellException e )
{
throw new RuntimeException( e.getMessage(), e );
}
}
return neoServer;
}
private void shutdownServer()
{
if ( neoServer == null )
{
return;
}
try
{
neoServer.getClass().getMethod( "shutdown" ).invoke( neoServer );
neoObject.getClass().getMethod( "shutdown" ).invoke( neoObject );
neoObject = null;
neoServer = null;
}
catch ( Exception e )
{
e.printStackTrace();
}
}
private SimpleAppServer instantiateNewNeoServer() throws ShellException
{
String neoServiceClassName = "org.neo4j.api.core.NeoService";
String neoClassName = "org.neo4j.api.core.EmbeddedNeo";
String neoShellServerClassName = "org.neo4j.impl.shell.NeoShellServer";
try
{
Class<?> neoClass = Class.forName( neoClassName );
Class<?> neoServiceClass = Class.forName( neoServiceClassName );
Class<?> neoShellServerClass =
Class.forName( neoShellServerClassName );
neoObject = neoClass.getConstructor(
String.class ).newInstance( neoDirectory );
Object neoShellServerObject = neoShellServerClass.getConstructor(
neoServiceClass ).newInstance( neoObject );
return ( SimpleAppServer ) neoShellServerObject;
}
catch ( Exception e )
{
throw new ShellException( e );
}
}
@Override
public String getName()
{
return getNeoServer().getName();
}
@Override
public Serializable getProperty( String key )
{
return getNeoServer().getProperty( key );
}
@Override
public void setProperty( String key, Serializable value )
{
getNeoServer().setProperty( key, value );
}
@Override
public Set<String> getPackages()
{
return getNeoServer().getPackages();
}
@Override
public App findApp( String command )
{
return getNeoServer().findApp( command );
}
@Override
public String welcome()
{
return getNeoServer().welcome();
}
@Override
public Serializable interpretVariable( String key, Serializable value,
Session session ) throws RemoteException
{
return getNeoServer().interpretVariable( key, value, session );
}
@Override
public void shutdown()
{
super.shutdown();
if ( neoServer == null )
{
return;
}
shutdownServer();
}
}