public static void readAgenda( MarshallerReaderContext context, RuleData _ruleData, DefaultAgenda agenda) { ProtobufMessages.Agenda _agenda = _ruleData.getAgenda(); for (org.drools.core.marshalling.impl.ProtobufMessages.Agenda.AgendaGroup _agendaGroup : _agenda.getAgendaGroupList()) { InternalAgendaGroup group = (InternalAgendaGroup) agenda.getAgendaGroup(_agendaGroup.getName(), context.ruleBase); group.setActive(_agendaGroup.getIsActive()); agenda.getAgendaGroupsMap().put(group.getName(), group); } for (String _groupName : _agenda.getFocusStack().getGroupNameList()) { agenda.addAgendaGroupOnStack(agenda.getAgendaGroup(_groupName)); } for (ProtobufMessages.Agenda.RuleFlowGroup _ruleFlowGroup : _agenda.getRuleFlowGroupList()) { RuleFlowGroupImpl rfgi = new RuleFlowGroupImpl( _ruleFlowGroup.getName(), _ruleFlowGroup.getIsActive(), _ruleFlowGroup.getIsAutoDeactivate()); agenda.getRuleFlowGroupsMap().put(_ruleFlowGroup.getName(), rfgi); // readActivations( context, // _ruleFlowGroup.getActivationList() ); for (NodeInstance _nodeInstance : _ruleFlowGroup.getNodeInstanceList()) { rfgi.addNodeInstance( _nodeInstance.getProcessInstanceId(), _nodeInstance.getNodeInstanceId()); } } readActivations(context, _agenda.getActivationList(), _agenda.getRneaList()); agenda.setActivationsFilter(context.filter); }
private static void writeAgenda( MarshallerWriteContext context, ProtobufMessages.RuleData.Builder _ksb) throws IOException { InternalWorkingMemory wm = context.wm; DefaultAgenda agenda = (DefaultAgenda) wm.getAgenda(); org.drools.marshalling.impl.ProtobufMessages.Agenda.Builder _ab = ProtobufMessages.Agenda.newBuilder(); AgendaGroup[] agendaGroups = (AgendaGroup[]) agenda .getAgendaGroupsMap() .values() .toArray(new AgendaGroup[agenda.getAgendaGroupsMap().size()]); Arrays.sort(agendaGroups, AgendaGroupSorter.instance); for (AgendaGroup group : agendaGroups) { org.drools.marshalling.impl.ProtobufMessages.Agenda.AgendaGroup.Builder _agb = ProtobufMessages.Agenda.AgendaGroup.newBuilder(); _agb.setName(group.getName()); _agb.setIsActive(group.isActive()); _ab.addAgendaGroup(_agb.build()); } org.drools.marshalling.impl.ProtobufMessages.Agenda.FocusStack.Builder _fsb = ProtobufMessages.Agenda.FocusStack.newBuilder(); LinkedList<AgendaGroup> focusStack = agenda.getStackList(); for (Iterator<AgendaGroup> it = focusStack.iterator(); it.hasNext(); ) { AgendaGroup group = it.next(); _fsb.addGroupName(group.getName()); } _ab.setFocusStack(_fsb.build()); RuleFlowGroupImpl[] ruleFlowGroups = (RuleFlowGroupImpl[]) agenda .getRuleFlowGroupsMap() .values() .toArray(new RuleFlowGroupImpl[agenda.getRuleFlowGroupsMap().size()]); Arrays.sort(ruleFlowGroups, RuleFlowGroupSorter.instance); for (RuleFlowGroupImpl group : ruleFlowGroups) { org.drools.marshalling.impl.ProtobufMessages.Agenda.RuleFlowGroup.Builder _rfgb = ProtobufMessages.Agenda.RuleFlowGroup.newBuilder(); _rfgb.setName(group.getName()); _rfgb.setIsActive(group.isActive()); _rfgb.setIsAutoDeactivate(group.isAutoDeactivate()); Map<Long, String> nodeInstances = group.getNodeInstances(); for (Map.Entry<Long, String> entry : nodeInstances.entrySet()) { org.drools.marshalling.impl.ProtobufMessages.Agenda.RuleFlowGroup.NodeInstance.Builder _nib = ProtobufMessages.Agenda.RuleFlowGroup.NodeInstance.newBuilder(); _nib.setProcessInstanceId(entry.getKey()); _nib.setNodeInstanceId(entry.getValue()); _rfgb.addNodeInstance(_nib.build()); } _ab.addRuleFlowGroup(_rfgb.build()); } // serialize all dormant activations ActivationIterator it = ActivationIterator.iterator(wm); List<org.drools.spi.Activation> dormant = new ArrayList<org.drools.spi.Activation>(); for (org.drools.spi.Activation item = (org.drools.spi.Activation) it.next(); item != null; item = (org.drools.spi.Activation) it.next()) { if (!item.isActive()) { dormant.add(item); } } Collections.sort(dormant, ActivationsSorter.INSTANCE); for (org.drools.spi.Activation activation : dormant) { _ab.addActivation(writeActivation(context, (AgendaItem) activation)); } _ksb.setAgenda(_ab.build()); }