package org.drools.grid.distributed;
import java.util.Properties;
import java.util.UUID;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
import org.drools.KnowledgeBaseFactoryService;
import org.drools.command.NewKnowledgeBaseCommand;
import org.drools.command.SetVariableCommand;
import org.drools.grid.GenericConnection;
import org.drools.grid.GenericNodeConnector;
import org.drools.grid.internal.Message;
import org.drools.grid.internal.MessageSession;
import org.drools.runtime.Environment;
import org.drools.runtime.KnowledgeSessionConfiguration;
public class KnowledgeBaseProviderGridClient
implements
KnowledgeBaseFactoryService {
private GenericConnection connection;
private String localId = "";
private GenericNodeConnector connector;
private MessageSession messageSession;
public KnowledgeBaseProviderGridClient(GenericNodeConnector connector,
GenericConnection connection) {
this.connection = connection;
this.messageSession = new MessageSession();
this.connector = connector;
}
public Environment newEnvironment() {
// TODO Auto-generated method stub
return null;
}
public KnowledgeBase newKnowledgeBase() {
return newKnowledgeBase( (KnowledgeBaseConfiguration) null );
}
public KnowledgeBase newKnowledgeBase(KnowledgeBaseConfiguration conf) {
//return new NewKnowledgeBaseCommand(null);
if ( this.localId == null || this.localId.equals( "" ) ) {
this.localId = UUID.randomUUID().toString();
}
Message msg = new Message( this.messageSession.getSessionId(),
this.messageSession.counter.incrementAndGet(),
false,
new SetVariableCommand( "__TEMP__",
this.localId,
new NewKnowledgeBaseCommand( conf ) ) );
try {
Object object = this.connector.write( msg ).getPayload();
// if ( !(object instanceof FinishedCommand) ) {
// throw new RuntimeException( "Response was not correctly ended" );
// }
} catch ( Exception e ) {
throw new RuntimeException( "Unable to execute message",
e );
}
return new KnowledgeBaseGridClient( this.localId,
this.connector,
this.messageSession,
this.connection );
}
public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration() {
// TODO: change this to use a remote implementation instead the local factory?
return KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
}
public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration(Properties properties,
ClassLoader classLoader) {
// TODO Auto-generated method stub
return null;
}
public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration() {
// TODO Auto-generated method stub
return null;
}
public KnowledgeSessionConfiguration newKnowledgeSessionConfiguration(Properties properties) {
// TODO Auto-generated method stub
return null;
}
public KnowledgeBase newKnowledgeBase(String kbaseId) {
this.localId = kbaseId;
Message msg = new Message( this.messageSession.getSessionId(),
this.messageSession.counter.incrementAndGet(),
false,
new SetVariableCommand( "__TEMP__",
this.localId,
new NewKnowledgeBaseCommand( null ) ) );
try {
Object object = this.connector.write( msg ).getPayload();
// if ( !(object instanceof FinishedCommand) ) {
// throw new RuntimeException( "Response was not correctly ended" );
// }
} catch ( Exception e ) {
throw new RuntimeException( "Unable to execute message",
e );
}
return new KnowledgeBaseGridClient( this.localId,
this.connector,
this.messageSession,
this.connection );
}
public KnowledgeBase newKnowledgeBase(String kbaseId,
KnowledgeBaseConfiguration conf) {
this.localId = kbaseId;
Message msg = new Message( this.messageSession.getSessionId(),
this.messageSession.counter.incrementAndGet(),
false,
new SetVariableCommand( "__TEMP__",
this.localId,
new NewKnowledgeBaseCommand( conf ) ) );
try {
Object object = this.connector.write( msg ).getPayload();
// if ( !(object instanceof FinishedCommand) ) {
// throw new RuntimeException( "Response was not correctly ended" );
// }
} catch ( Exception e ) {
throw new RuntimeException( "Unable to execute message",
e );
}
return new KnowledgeBaseGridClient( this.localId,
this.connector,
this.messageSession,
this.connection );
}
public String getLocalId() {
return this.localId;
}
public void setLocalId(String localId) {
this.localId = localId;
}
public KnowledgeBaseConfiguration newKnowledgeBaseConfiguration(Properties properties,
ClassLoader... classLoader) {
throw new UnsupportedOperationException( "Not supported yet." );
}
}