defs/Query.java

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. Query
  2. replaceVars
  3. getStruct
  4. startDoc
  5. endDoc

/**
 * RIPE attribute.
 *
 * @author ottrey@ripe.net
 * @version $Version$
 *
 */
public class Query {
/* [<][>][^][v][top][bottom][index][help] */
  
  private String qrytype;
  private boolean lookup;
  private String keytype;
  private String code;
  private String clars;
  private String sqlQuery;
  private String Querydesc;

  // -----------------oOo-----------------
  //              Constructors
  // -----------------oOo-----------------
  /**
   * Creates a Query structure.
   *               
   * @author ottrey@ripe.net
   *               
   */
  public Query(String qrytype, boolean lookup, String keytype, String code, String clars, String sqlQuery) {
   
    this.qrytype = qrytype;
    this.lookup = lookup;
    this.keytype = keytype.toUpperCase();
    this.code = code;
    this.clars = clars;
    this.sqlQuery = sqlQuery;

    // now prepare a query description 
    if( qrytype.equals("SQL") ) {
        Querydesc = qrytype + ":" + clars + "/" + code + "/" + this.keytype;
    } else {
        Querydesc = qrytype + ":" + clars + "/" + this.keytype;
    }
  }// Query()

    private String replaceVars(Defs defs) {
/* [<][>][^][v][top][bottom][index][help] */
        String finalQuery = "";
        int lastindex = 0;
        
        
        // paste into finalQuery, replacing the symbols
        do {
            int begin, end;
            
            begin = sqlQuery.indexOf("$(", lastindex);
            
            if( begin != -1 ) {
                end = sqlQuery.indexOf(")", begin);
                String variable = sqlQuery.substring(begin+2, end);
                
                //System.out.println( "var: " +  variable );
                
                finalQuery = finalQuery.concat(sqlQuery.substring(lastindex, begin));
                finalQuery = finalQuery.concat(defs.getValueByEnum(variable) );
                lastindex = end + 1;
            } else {
                //System.out.println( "finishing: " + sqlQuery.substring(lastindex));
                finalQuery = finalQuery.concat(sqlQuery.substring(lastindex));
                lastindex = sqlQuery.length();
            }
            
            //System.out.println( "final: " + finalQuery);
            
        } while( lastindex < sqlQuery.length() );
        
        return finalQuery;
        
    } // replaceVars

  /**
   * @return String C - structure in the form:
   * {
   *   R_SQL,
   *   Q_LOOKUP,
   *   WK_NAME,
   *   A_PN,
   *   "SELECT N01.pe_ro_id FROM %s WHERE %s",
   *   0, 
   *   0  
   * },
   * @param String the level of indenting.
   *
   */
  public String getStruct(String indent, Defs defs) {
/* [<][>][^][v][top][bottom][index][help] */
    String result = new String();
    
    String FinalQuery = replaceVars(defs);

    result += indent + "{" + "\n  ";
    result += indent + "R_" + qrytype.toUpperCase() + ",\n  ";
    if (lookup) {
      result += indent + "Q_LOOKUP";
    }                                       
    else {                                  
      result += indent + "Q_INVERSE";
    }                                       
    result += ",\n  ";
    result += indent + keytype.toUpperCase() + ",\n  ";
    result += indent + "A_" + code.toUpperCase() + ",\n  ";
    if (clars.equals("ANY")) {
      result += indent + "-1" + ",\n  ";
    }
    else {
      result += indent + "C_" + clars.toUpperCase() + ",\n  ";
    }
    result += indent + "\"" + FinalQuery.replace('\n', ' ') + "\""  + ",\n  ";

    result += indent + "\"" + Querydesc  + "\""  + "\n  ";

    result += indent + "},";

    return result;
  } //  getStruct()
 
  public static String startDoc() {
/* [<][>][^][v][top][bottom][index][help] */
    String result = new String();

    // depend on external structure definition in defs.h
    result += "Query_t Query[] = {\n";

    return result;
  } // startDoc()

  public static String endDoc() {
/* [<][>][^][v][top][bottom][index][help] */
    String result = new String();

    result += "  {\n";
    result += "    0,\n";
    result += "    0,\n";
    result += "    0,\n";
    result += "    0,\n";
    result += "    0,\n";
    result += "    NULL\n";
    result += "  }\n";
    result += "}; /* Query[] */\n";

    return result;
  } // endDoc()

} // Query


/* [<][>][^][v][top][bottom][index][help] */