code: public ArrayList<HashMap<String, Object>> applyStg(HashMap<String, Object> data) {
          // Check if there is generator command group left
          if (hasMoreGenRules()) {
              // Apply rules to input data
              ArrayList<HashMap<String, Object>> arr = new ArrayList();
              if (genRules != null && !genRules.isEmpty()) {
                  for (int i = 0; i < genRules.size() - 1; i++) {
                      HashMap<String, String> rule = genRules.get(i);
                      applyRule(data, rule);
                  }
                  // Get generator rules
                  HashMap<String, String> gemRule = genRules.get(genRules.size() - 1);
                  if (!gemRule.isEmpty()) {
                      generators.add(gemRule);
                      arr = runGenerators(data, cur != genGroups.size());
                      generators.clear();
                  }
              }
  
              // Try yo apply next group of genertators
              if (arr.isEmpty()) {
                  return applyStg(data);
              } else {
                  return applyStg(arr);
              }
          } else {
              ArrayList<HashMap<String, Object>> results = new ArrayList();
              results.add(data);
              return results;
          }
      }
docs: Apply the groups of strategy rules to the dataset passed in.
  
  @param data The data set
  @return The list of new generated data set