/**
   * Get Model Validation Script Rules for a table/event
   *
   * @param ctx context
   * @param table_id AD_Table_ID
   * @param event Event
   * @return array of MTableScriptValidator or null if error or no validators found
   */
  public static List<MTableScriptValidator> getModelValidatorRules(
      Properties ctx, int ad_table_id, String event) {
    // Try cache
    final MultiKey key = new MultiKey(ad_table_id, event);
    List<MTableScriptValidator> mvrs = s_cacheTableEvent.get(key);
    if (mvrs != null) {
      if (mvrs.size() > 0) return mvrs;
      else return null;
    }
    //
    // Fetch now
    final String whereClause = "AD_Table_ID=? AND EventModelValidator=?";
    mvrs =
        new Query(ctx, Table_Name, whereClause, null)
            .setParameters(ad_table_id, event)
            .setOnlyActiveRecords(true)
            .setOrderBy(COLUMNNAME_SeqNo)
            .list();
    // Store to cache
    for (MTableScriptValidator rule : mvrs) {
      s_cache.put(rule.get_ID(), rule);
    }

    // Store to cache
    if (mvrs != null) s_cacheTableEvent.put(key, mvrs);
    //
    if (mvrs != null && mvrs.size() > 0) return mvrs;
    else return null;
  } //	getModelValidatorRules
 /**
  * Get table script validator from cache
  *
  * @param ctx context
  * @param AD_Table_ScriptValidator_ID id
  * @return MTableScriptValidator
  */
 public static MTableScriptValidator get(Properties ctx, int AD_Table_ScriptValidator_ID) {
   final Integer key = AD_Table_ScriptValidator_ID;
   MTableScriptValidator retValue = (MTableScriptValidator) s_cache.get(key);
   if (retValue != null) return retValue;
   retValue = new MTableScriptValidator(ctx, AD_Table_ScriptValidator_ID, null);
   if (retValue.get_ID() != 0) s_cache.put(key, retValue);
   return retValue;
 } //	get