private void dumpNode( BaseNode node, String ident, Set<BaseNode> visitedNodes, BiConsumer<BaseNode, String> consumer ) { consumer.accept( node, ident ); if (!visitedNodes.add( node )) { return; } Sink[] sinks = node.getSinks(); if (sinks != null) { for (Sink sink : sinks) { if (sink instanceof BaseNode) { BaseNode sinkNode = ( BaseNode ) sink; if ( nodesFilter.test( sinkNode ) ) { dumpNode( sinkNode, ident + " ", visitedNodes, consumer ); } } } } }
public ReteDumper(String ruleName) { this( node -> Stream.of( node.getAssociatedRules() ).anyMatch( rule -> rule.getName().equals( ruleName ) ) ); }
private static void checkNodeMemory(InternalWorkingMemory wm, BaseNode node) { if (node instanceof MemoryFactory) { Memory memory = wm.getNodeMemory( (MemoryFactory) node ); if ( NodeTypeEnums.ObjectTypeNode == node.getType() ) { if ( !( memory instanceof ObjectTypeNode.ObjectTypeNodeMemory ) ) { throw new RuntimeException( "Invalid memory type. Node: " + node + " has memory " + memory ); } else if ( NodeTypeEnums.LeftInputAdapterNode == node.getType() ) { if ( !( memory instanceof LeftInputAdapterNode.LiaNodeMemory ) ) { throw new RuntimeException( "Invalid memory type. Node: " + node + " has memory " + memory ); if ( NodeTypeEnums.AccumulateNode == node.getType() ) { if ( !( memory instanceof AccumulateNode.AccumulateMemory ) ) { throw new RuntimeException( "Invalid memory type. Node: " + node + " has memory " + memory ); throw new RuntimeException( "Invalid memory type. Node: " + node + " has memory " + memory ); } else if ( NodeTypeEnums.FromNode == node.getType() ) { if ( !( memory instanceof FromNode.FromMemory ) ) { throw new RuntimeException( "Invalid memory type. Node: " + node + " has memory " + memory ); } else if ( NodeTypeEnums.WindowNode == node.getType() ) { if ( !( memory instanceof WindowNode.WindowMemory ) ) { throw new RuntimeException( "Invalid memory type. Node: " + node + " has memory " + memory ); Sink[] sinks = node.getSinks(); if (sinks != null) { for (Sink sink : sinks) {
private void dumpNode( BaseNode node, String ident ) { System.out.print(ident + node + " on " + node.getPartitionId()); try { Object declaredMask = node.getClass().getMethod("getDeclaredMask").invoke(node); Object inferreddMask = node.getClass().getMethod("getInferredMask").invoke(node); System.out.print(" d "+declaredMask + " i " + inferreddMask); } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { // do nothing. } try { Object declaredMask = node.getClass().getMethod("getLeftDeclaredMask").invoke(node); Object inferreddMask = node.getClass().getMethod("getLeftInferredMask").invoke(node); System.out.print(" Ld "+declaredMask + " Li " + inferreddMask); } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { // do nothing. } try { Object declaredMask = node.getClass().getMethod("getRightDeclaredMask").invoke(node); Object inferreddMask = node.getClass().getMethod("getRightInferredMask").invoke(node); System.out.print(" Rd "+declaredMask + " Ri " + inferreddMask); } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { // do nothing. } System.out.print("\n"); } }
private static void compareNodes(BaseNode node1, BaseNode node2) { if (!node1.equals( node2 )) { throw new RuntimeException( node1 + " and " + node2 + " are not equal as expected" ); } Sink[] sinks1 = node1.getSinks(); Sink[] sinks2 = node2.getSinks(); if (sinks1 == null) { if (sinks2 == null) { return; } else { throw new RuntimeException( node1 + " has no sinks while " + node2 + " has " + sinks2.length + " sinks" ); } } else if (sinks2 == null) { throw new RuntimeException( node1 + " has " + sinks1.length + " sinks while " + node2 + " has 0 sinks" ); } if (sinks1.length != sinks2.length) { throw new RuntimeException( node1 + " has " + sinks1.length + " sinks while " + node2 + " has no sinks" ); } Arrays.sort(sinks1, NODE_SORTER); Arrays.sort(sinks2, NODE_SORTER); for (int i = 0; i < sinks1.length; i++) { if (sinks1[i] instanceof BaseNode) { compareNodes( (BaseNode) sinks1[i], (BaseNode) sinks2[i] ); } } }
private void traverse(BaseNode node ) { checkNode(node); Sink[] sinks = node.getSinks(); if (sinks != null) { for (Sink sink : sinks) { if (sink instanceof BaseNode) { traverse((BaseNode)sink); } } } }