@Override public JsonElement toJson(Multiset sourceValue, Type typeOfT, JsonSerializationContext context) { JsonArray jsonArray = new JsonArray(); sourceValue.forEach(e -> { jsonArray.add(context.serialize(e)); }); return jsonArray; }
@Override public void disconnect() { synchronized (createdDeployments) { // Kills any executing deployment actions. createdDeployments.values().forEach(CancellableRunnable::cancel); createdDeployments .keys() .forEach( project -> ProjectManager.getInstance() .removeProjectManagerListener(project, projectClosingListener)); createdDeployments.clear(); } } }
@Override public AnswerElement answer() { DetectLoopsQuestion question = (DetectLoopsQuestion) _question; Set<Flow> flows = _batfish.bddLoopDetection(); /* * There can be many flows exercising the same loop, so let's pick one per dstIp. */ Multimap<Ip, Flow> flowsPerDst = flows.stream() .collect( Multimaps.toMultimap(Flow::getDstIp, Functions.identity(), HashMultimap::create)); flows = flowsPerDst.asMap().values().stream() .flatMap(flowsWithSameDst -> flowsWithSameDst.stream().limit(1)) .collect(Collectors.toSet()); if (_batfish.debugFlagEnabled("oldtraceroute")) { FlowHistory flowHistory = _batfish.flowHistory(flows, false); Multiset<Row> rows = flowHistoryToRows(flowHistory); TableAnswerElement table = new TableAnswerElement(createMetadata(false)); table.postProcessAnswer(_question, rows); return table; } else { SortedMap<Flow, List<Trace>> flowTraces = _batfish.buildFlows(flows, false); TableAnswerElement tableAnswer = new TableAnswerElement(TracerouteAnswerer.metadata(false)); TracerouteAnswerer.flowTracesToRows(flowTraces, question.getMaxTraces()) .forEach(tableAnswer::addRow); return tableAnswer; } }
@Override public AnswerElement answer() { SpecifiersReachabilityQuestion question = (SpecifiersReachabilityQuestion) _question; AnswerElement answer = _batfish.standard(question.getReachabilityParameters()); if (answer instanceof TraceWrapperAsAnswerElement) { TableAnswerElement tableAnswer = new TableAnswerElement(TracerouteAnswerer.metadata(false)); TracerouteAnswerer.flowTracesToRows( ((TraceWrapperAsAnswerElement) answer).getFlowTraces(), question.getMaxTraces()) .forEach(tableAnswer::addRow); return tableAnswer; } else if (answer instanceof FlowHistory) { TableAnswerElement tableAnswer = new TableAnswerElement(TracerouteAnswerer.createMetadata(false)); TracerouteAnswerer.flowHistoryToRows((FlowHistory) answer, false) .forEach(tableAnswer::addRow); return tableAnswer; } else { return answer; } } }
/** * Add all the classes with a package prefix in the scope. * @param packageName the root package * @return the selector */ public Selector from(final String packageName) { Assertion.checkArgNotEmpty(packageName); checkScope(); // --- new Reflections(packageName, new TypeElementsScanner().includeAnnotations(false).includeFields(false).includeMethods(false)) .getStore() .get(TypeElementsScanner.class.getSimpleName()) .keys() .forEach(className -> from(ClassUtil.classForName(className))); return this; }
@Override public AnswerElement answer() { MultipathConsistencyParameters parameters = parameters(); Set<Flow> flows = _batfish.bddMultipathConsistency(parameters); if (_batfish.debugFlagEnabled("oldtraceroute")) { FlowHistory flowHistory = _batfish.flowHistory(flows, false); Multiset<Row> rows = flowHistoryToRows(flowHistory); TableAnswerElement table = new TableAnswerElement(createMetadata(false)); table.postProcessAnswer(_question, rows); return table; } else { SortedMap<Flow, List<Trace>> flowTraces = _batfish.buildFlows(flows, false); TableAnswerElement tableAnswer = new TableAnswerElement(TracerouteAnswerer.metadata(false)); TracerouteAnswerer.flowTracesToRows(flowTraces, parameters.getMaxTraces()) .forEach(tableAnswer::addRow); return tableAnswer; } }