public static Planner create(Config plannerConfig, boolean configure) { if (!plannerConfig.hasPath(TYPE_CONFIG_NAME)) { throw new RuntimeException("Planner type not specified"); } String plannerType = plannerConfig.getString(TYPE_CONFIG_NAME); Planner planner; try { planner = loadImplementation(Planner.class, plannerType); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } if (configure) { planner.configure(plannerConfig); } return planner; }
private void validatePlannerOutputCompatibility(Planner planner, Output output) { Set<MutationType> plannerMTs = planner.getEmittedMutationTypes(); if (planner instanceof RandomPlanner) { if (!(output instanceof RandomOutput)) { handleIncompatiblePlannerOutput(planner, output); } Set<MutationType> outputMTs = ((RandomOutput)output).getSupportedRandomMutationTypes(); for (MutationType planMT : plannerMTs) { if (!outputMTs.contains(planMT)) { handleIncompatiblePlannerOutput(planner, output); } } } else if (planner instanceof BulkPlanner) { if (!(output instanceof BulkOutput)) { handleIncompatiblePlannerOutput(planner, output); } Set<MutationType> outputMTs = ((BulkOutput)output).getSupportedBulkMutationTypes(); for (MutationType planMT : plannerMTs) { if (!outputMTs.contains(planMT)) { handleIncompatiblePlannerOutput(planner, output); } } } else { throw new RuntimeException("Unexpected planner class: " + planner.getClass().getName()); } }