@Override
  @SuppressWarnings({"unchecked", "rawtypes"})
  protected boolean evaluateAndPopulateValueStores(
      GraphRewrite event, EvaluationContext context, FrameCreationContext frameCreationContext) {
    ParameterStore store = DefaultParameterStore.getInstance(context);

    QueryBuilderFrom query = Query.fromType(ParameterWiringTestModel.class);
    if (!StringUtils.isBlank(fromVarname)) {
      query = Query.from(fromVarname);
    }

    Pattern compiledPattern = pattern.getCompiledPattern(store);
    query.withProperty(
        ParameterWiringTestModel.VALUE,
        QueryPropertyComparisonType.REGEX,
        compiledPattern.pattern());

    String uuid = UUID.randomUUID().toString();
    query.as(uuid);

    List<WindupVertexFrame> allFrameResults = new ArrayList<>();
    if (query.evaluate(event, context)) {
      Iterable<? extends WindupVertexFrame> frames = Variables.instance(event).findVariable(uuid);
      for (WindupVertexFrame frame : frames) {
        ParameterWiringTestModel model = (ParameterWiringTestModel) frame;

        ParameterizedPatternResult parseResult = pattern.parse(model.getValue());
        if (parseResult.matches()) {
          Map<String, List<WindupVertexFrame>> variables = new LinkedHashMap<>();
          frameCreationContext.beginNew((Map) variables);
          if (parseResult.submit(event, context)) {
            allFrameResults.add(model);
            Maps.addListValue(variables, varname, model);
          } else {
            System.out.println("nope: " + model);
            frameCreationContext.rollback();
          }
        } else {
          System.out.println("nope: " + model);
        }
      }
      Variables.instance(event).removeVariable(uuid);
      Variables.instance(event).setVariable(varname, allFrameResults);
      return true;
    }

    return false;
  }
  @Override
  protected boolean evaluateWithValueStore(
      GraphRewrite event, EvaluationContext context, FrameContext frameContext) {
    ParameterStore store = DefaultParameterStore.getInstance(context);

    QueryBuilderFrom query = Query.fromType(ParameterWiringTestModel.class);
    if (!StringUtils.isBlank(fromVarname)) {
      query = Query.from(fromVarname);
    }

    Pattern compiledPattern = pattern.getCompiledPattern(store);
    query.withProperty(
        ParameterWiringTestModel.VALUE,
        QueryPropertyComparisonType.REGEX,
        compiledPattern.pattern());

    String uuid = UUID.randomUUID().toString();
    query.as(uuid);
    if (query.evaluate(event, context)) {
      boolean result = false;
      List<WindupVertexFrame> results = new ArrayList<>();
      Iterable<? extends WindupVertexFrame> frames = Variables.instance(event).findVariable(uuid);
      for (WindupVertexFrame frame : frames) {
        ParameterWiringTestModel model = (ParameterWiringTestModel) frame;

        String value = model.getValue();
        ParameterizedPatternResult parseResult = pattern.parse(value);
        if (parseResult.submit(event, context)) {
          result = true;
          results.add(model);
        }
      }

      Variables.instance(event).removeVariable(uuid);
      if (result) {
        Variables.instance(event).setVariable(varname, results);
        return true;
      }
    }

    frameContext.reject();
    return false;
  }