}
public static void readTruthMaintenanceSystem( MarshallerReaderContext context,
RuleData _session ) throws IOException {
TruthMaintenanceSystem tms = context.wm.getTruthMaintenanceSystem();
ProtobufMessages.TruthMaintenanceSystem _tms = _session.getTms();
org.drools.marshalling.impl.ProtobufMessages.EntryPoint _ep = _session.getEntryPoint(0);
boolean wasOTCSerialized = _ep.getOtcCount() > 0; // if 0, then the OTC was not serialized (older versions of drools)
Set<String> tmsEnabled = new HashSet<String>();
for( ObjectTypeConfiguration _otc : _ep.getOtcList() ) {
if( _otc.getTmsEnabled() ) {
tmsEnabled.add( _otc.getType() );
}
}
for( ProtobufMessages.EqualityKey _key : _tms.getKeyList() ) {
InternalFactHandle handle = (InternalFactHandle) context.handles.get( _key.getHandleId() );
// ObjectTypeConf state is not marshalled, so it needs to be re-determined
ObjectTypeConf typeConf = context.wm.getObjectTypeConfigurationRegistry().getObjectTypeConf( ((NamedEntryPoint)handle.getEntryPoint()).getEntryPoint(),
handle.getObject() );
if (!typeConf.isTMSEnabled() && (!wasOTCSerialized || tmsEnabled.contains(typeConf.getTypeName()) ) ) {
typeConf.enableTMS();
}
EqualityKey key = new EqualityKey( handle,
_key.getStatus() );
handle.setEqualityKey( key );
for( Integer factHandleId : _key.getOtherHandleList() ) {
handle = (InternalFactHandle) context.handles.get( factHandleId.intValue() );
key.addFactHandle( handle );
handle.setEqualityKey( key );
}
tms.put( key );
}
for( ProtobufMessages.Justification _justification : _tms.getJustificationList() ) {
InternalFactHandle handle = (InternalFactHandle) context.handles.get( _justification.getHandleId() );
for( ProtobufMessages.Activation _activation : _justification.getActivationList() ) {
Activation activation = (Activation) context.filter.getTuplesCache().get(
PersisterHelper.createActivationKey( _activation.getPackageName(),
_activation.getRuleName(),
_activation.getTuple() ) ).getObject();
PropagationContext pc = activation.getPropagationContext();
ObjectTypeConf typeConf = context.wm.getObjectTypeConfigurationRegistry().getObjectTypeConf( ((NamedEntryPoint)handle.getEntryPoint()).getEntryPoint(),
handle.getObject() );
tms.readLogicalDependency( handle,
null,
activation,
pc,
activation.getRule(),
typeConf );