/** 
 * Project    : KANT (LMT)
 * Source Name: SyntaxSym.java
 * Copyright  : Copyright (c) LTI, Carnegie Mellon University
 * Description: Class for Syntax symbol
 * @version     1.0 (created by jko - 10/01/01)
 **/


package lmt;

import java.sql.*;
import java.util.*;

public class SyntaxSym extends Syntax{
  String single_letter;
  String roman_numeral;
	
  /** constructor 
   * @param concept_id string representing concept_id
   **/	
  SyntaxSym(SQLConnection con, String concept_id) {
    super(con, concept_id);
    single_letter = "";
    roman_numeral = "";
  }
	
  // setters and getters
  public String getSingleLetter() {
    return single_letter;
  }	
  public void setSingleLetter(String single_letter) {
    if ( single_letter== null)
      single_letter = "";
    this.single_letter = single_letter;
  }	
  public String getRomanNumeral() {
    return roman_numeral;
  }	
  public void setRomanNumeral(String roman_numeral) {
    if ( roman_numeral== null)
      roman_numeral = "";
    this.roman_numeral = roman_numeral;
  }
			
  /** Get all syntaxs which have the concept_id. 
   * @param concept_id a string representing concept_id
   * @return Vector all symbols adverbs fetched from the database.
   **/
  public static SyntaxSym fetchSyntax(SQLConnection con, String concept_id) {
    SyntaxSym syntax = new SyntaxSym(con, concept_id);
		
    String sql = "SELECT * FROM LMT_SYMBOL WHERE";
    sql += " CONCEPT_ID = '" + concept_id + "'";
    Debug.debug("-- fetchSyntaxSym: " + sql);		
		
    try {
      SQLConnection.Result r = con.query(sql);
      if (r!=null && r.hasData()){
	syntax.setSingleLetter(r.rs.getString(2));
	syntax.setRomanNumeral(r.rs.getString(3));
	syntax.setActive(r.rs.getString(4));
      }
      if (r!=null) r.close();
    } catch (SQLException E) {
      Debug.debug("SQLException: " + E.getMessage());
    }	
	
    return syntax;
  }

  /** insert the new data into the table.
   * @return integer representing the result of operation
   **/		
  public int insert() {
    String sql = makeInsertQuery();
    Debug.debug("-- SyntaxSym insertion : " + sql);		
    return con.insert(sql);
  }
		
  /** update this data in the table.
   * @return integer representing the result of operation
   **/
  public int update() {
    // check where this exists. If not, insert this 
    if (!isExistent()) {
      return insert();
    }					
    String sql = makeUpdateQuery();	
    return con.update(sql);
  }	
		
  /** check whether the information exists or not in the database
   * @return boolean representing the result of operation
   **/	
  public boolean isExistent() {
		
    String sql = "SELECT * FROM LMT_SYMBOL WHERE ";
    sql += " concept_id = '" + concept_id + "'";
		
    return con.isExistent(sql);
  }		
	
  /** make the query 
   * @return String[] array including SQL 
   **/	
  public void makeQuery(Vector queryVector) {
    String sql = ( isExistent() ? makeUpdateQuery() : makeInsertQuery() );
    queryVector.addElement(sql);
  }				
	
  String makeInsertQuery(){
    String sql = "INSERT INTO LMT_SYMBOL VALUES (";
    sql += "'" + concept_id + "',";
    sql += "'" + single_letter + "',";
    sql += "'" + roman_numeral + "',";
    sql += "'T')";
    return sql;
  }
	
  String makeUpdateQuery() {
    String sql = "UPDATE LMT_SYMBOL SET";
    sql += " single_letter = '" + single_letter + "',";
    sql += " roman_numeral = '" + roman_numeral + "'";
    sql += " WHERE concept_id = '" + concept_id + "'";
    return sql;				
  }
}
