code: public ArrayList<HashMap<String, Object>> applyStg(ArrayList<HashMap<String, Object>> dataArr) {
  
          ArrayList<HashMap<String, Object>> results = new ArrayList();
  
          // Check if there is generator command group left
          if (hasMoreGenRules()) {
              if (genRules != null && !genRules.isEmpty()) {
                  // Apply non-generator rules to each entry of data
                  for (HashMap<String, Object> data : dataArr) {
                      ArrayList<HashMap<String, Object>> arr = new ArrayList();
                      for (int i = 0; i < genRules.size() - 1; i++) {
                          HashMap<String, String> rule = genRules.get(i);
                          applyRule(data, rule);
                      }
                  }
                  // Apply generator rules to whole data set
                  HashMap<String, String> gemRule = genRules.get(genRules.size() - 1);
                  if (!gemRule.isEmpty()) {
                      generators.add(gemRule);
                      results = runGenerators(dataArr, cur != genGroups.size());
                      generators.clear();
                  } else {
                      results = dataArr;
                  }
              }
  
              // Try yo apply next group of genertators
              results = applyStg(results);
          } else {
              // Finish recursion
              results = dataArr;
              // Remove reference
              boolean wthRefFlg = !keysToExtractFinal.contains("weather");
              boolean soilRefFlg = !keysToExtractFinal.contains("soil");
              for (HashMap result : results) {
                  if (wthRefFlg) {
                      result.remove("weather");
                  }
                  if (soilRefFlg) {
                      result.remove("soil");
                  }
              }
          }
  
          return results;
      }
docs: Apply the groups of strategy rules to the dataset passed in.
  
  @param dataArr The list of data set
  @return The list of new generated data set