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

package lmt;

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

public class SemanticVerb {
  SQLConnection con;
  String semantic_id;
  String concept_id;
  String classes;
  String active;
	
  /** constructor 
   * @param concept_id string representing concept_id
   **/		
  SemanticVerb(String concept_id, SQLConnection con) {
    this.concept_id = concept_id;
    this.con = con;
    semantic_id = "";
    classes = "";
    active = "T";
  }
	
  // setters and getters
  public String getSemanticID() {
    return semantic_id;
  }	
  public void setSemanticID(String semantic_id) {
    if ( semantic_id == null )
      semantic_id = "";
    this.semantic_id = semantic_id;
  }	
  public String getConceptID() {
    return concept_id;
  }	
  public void setConceptID(String concept_id) {
    if ( concept_id == null )
      concept_id = "";
    this.concept_id = concept_id;
  }	
  public String getClasses() {
    return classes;
  }	
  public void setClasses(String classes) {
    if ( classes == null )
      classes = "";
    this.classes = classes;
  }	
  public void setActive (String active) {
    if ( active == null )
      active = "";		
    this.active = active;
  }	
		
  /** Get all semantics which have the concept_id. 
   * @param concept_id a string representing concept_id
   * @return Vector all sematic verbs adverbs fetched from the database.
   **/	
  public static SemanticVerb fetchSemanticVerb(SQLConnection con, String concept_id) {
    //Vector semVector = new Vector();
    SemanticVerb sem = new SemanticVerb(concept_id,con);		
    sem.setConceptID(concept_id);
		
    String sql = "SELECT * FROM LMT_SEM_VERB WHERE ";
    sql += " CONCEPT_ID = '" + concept_id + "'";
	
    try {
      SQLConnection.Result r = con.query(sql);
      if (r!=null &&r.hasData()){
	sem.setSemanticID(r.rs.getString(1));	
	sem.setConceptID(r.rs.getString(2));					
	sem.setClasses(r.rs.getString(3));
	sem.setActive(r.rs.getString(4));
      }
      if (r!=null) r.close();
    } catch (SQLException E) {
      System.out.println("SQLException: " + E.getMessage());
    }	
		
    Debug.debug("-- fetchSemanticVerb: " + sql);		
    //Debug.debug("size of result: " + semVector.size());
    //Debug.debug("--" + term_id +"," + type_phrase +"," + phrase_head);		
		
    return sem;
  }

  public int insert() {
    // get New ID				
    String sql = makeInsertQuery();
    Debug.debug("-- Sem-verb insertion : " + sql);		
    return con.insert(sql);
  }	
	
  public int update() {
    // check where this exists
    if (!isExistent()) 
      return insert();
						
    Vector queryVector = new Vector();
    makeQuery(queryVector);
    Debug.debug("-- Definition update : " + queryVector.elementAt(0));
		
    return con.update(queryVector);
  }	
	
  public boolean isExistent() {
		
    String sql = "SELECT * FROM LMT_SEM_VERB WHERE ";
    sql += " concept_id = '" + concept_id + "'";
    sql += " AND semantic_id = '" + semantic_id + "'";
		
    return con.isExistent(sql);
  }	
	
  /** make the query using input vector
   * @param comVector	vector which has objects of this class
   * @return String[] array including SQL
   **/	
  public void makeQuery(Vector queryVector) {
    String sql = ( isExistent() ? makeUpdateQuery() : makeInsertQuery() );
    queryVector.addElement(sql);
  }			
	
  String makeInsertQuery() {
    semantic_id = con.getNewID("SEMANTIC_ID");				
    String sql = "INSERT INTO LMT_SEM_VERB VALUES (";
    sql += "'" + semantic_id + "',";
    //sql += "semantic_id.NEXTVAL, ";
    sql += "'" + concept_id + "',";
    sql += "'" + Util.replaceSingleQuote(classes) + "',";
    sql += "'" + active + "')";
    return sql;		
  }
	
  String makeUpdateQuery(){
    String query = "UPDATE LMT_SEM_VERB SET";
    query += " class = '" + Util.replaceSingleQuote(classes) + "'";
    query += " WHERE concept_id = '" + concept_id + "'";
    query += " AND semantic_id = '" + semantic_id + "'";
    return query;
  }
}
