private void gatherFixtures( List<Fixture> output, FixturesMap dataInput, CallFixtureMap callOnDataInput, FixtureList verifyFact, FixtureList verifyRule, FixtureList retractFacts, boolean end) { if (verifyRule.size() > 0) output.add(verifyRule); if (verifyFact.size() > 0) output.add(verifyFact); if (retractFacts.size() > 0) dataInput.put(RETRACT_KEY, retractFacts); if (dataInput.size() > 0 || !end) output.add(dataInput); // want to have a place holder for the GUI if (callOnDataInput.size() > 0 || !end) output.add(callOnDataInput); }
/** * Called lumpy map - as this takes a flat list of fixtures, and groups things together. It will * return a list - of which each element will either be a list - or a map. If its a map - then its * a map of FactData to the fact type. If its a list, then it will be expectations or retractions. * * <p>Man, this will be so much nicer with generics. * * @return List<List<VeryifyRuleFired or VerifyFact or RetractFact> OR Map<String, List<FactData>> * OR ExecutionTrace> */ public List<Fixture> lumpyMap(List<Fixture> fixtures) { List<Fixture> output = new ArrayList<Fixture>(); FixturesMap dataInput = new FixturesMap(); CallFixtureMap callOnDataInput = new CallFixtureMap(); FixtureList verifyFact = new FixtureList(); FixtureList verifyRule = new FixtureList(); FixtureList retractFacts = new FixtureList(); for (Fixture fixture : fixtures) { if (fixture instanceof FactData) { accumulateDataForFactData(dataInput, (FactData) fixture); } else if (fixture instanceof CallMethod) { accumulateCallMethod(callOnDataInput, (CallMethod) fixture); } else if (fixture instanceof ActivateRuleFlowGroup) { accumulateDataForActivateRuleFlowGroup(dataInput, fixture); } else if (fixture instanceof RetractFact) { retractFacts.add(fixture); } else if (fixture instanceof VerifyRuleFired) { verifyRule.add(fixture); } else if (fixture instanceof VerifyFact) { verifyFact.add(fixture); } else if (fixture instanceof ExecutionTrace) { gatherFixtures( output, dataInput, callOnDataInput, verifyFact, verifyRule, retractFacts, false); output.add(fixture); verifyRule = new FixtureList(); verifyFact = new FixtureList(); retractFacts = new FixtureList(); callOnDataInput = new CallFixtureMap(); dataInput = new FixturesMap(); } } gatherFixtures(output, dataInput, callOnDataInput, verifyFact, verifyRule, retractFacts, true); return output; }