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

package lmt;
import java.sql.*;
import java.util.*;

public class SyntaxVerb extends Syntax{
  String expl_subj;
  String valency_trans;
  String valency_intrans;
  String valency_ditrans;
  String pred_passive;
  String nominalized;
	
  /** constructor 
   * @param concept_id string representing concept_id
   **/	
  SyntaxVerb(SQLConnection con, String concept_id) {
    super(con, concept_id);
    expl_subj = "";
    valency_trans = "";
    valency_intrans = "";
    valency_ditrans = "";
    pred_passive = "";
    nominalized = "";		
  }
	
  // setters and getters
  public String getExplSubj() {
    return expl_subj;
  }	
  public void setExplSubj(String expl_subj) {
    if (expl_subj == null)
      expl_subj = "";				
    this.expl_subj = expl_subj;
  }	
  public String getValencyTrans() {
    return valency_trans;
  }	
  public void setValencyTrans(String valency_trans) {
    if (valency_trans == null)
      valency_trans = "";				
    this.valency_trans = valency_trans;
  }	
  public String getValencyIntrans() {
    return valency_intrans;
  }	
  public void setValencyIntrans(String valency_intrans) {
    if (valency_intrans == null)
      valency_intrans = "";				
    this.valency_intrans = valency_intrans;
  }	
  public String getValencyDitrans() {
    return valency_ditrans;
  }	
  public void setValencyDitrans(String valency_ditrans) {
    if (valency_ditrans == null)
      valency_ditrans = "";				
    this.valency_ditrans = valency_ditrans;
  }		
  public String getPredPassive() {
    return pred_passive;
  }	
  public void setPredPassive(String pred_passive) {
    if (pred_passive == null)
      pred_passive = "";				
    this.pred_passive = pred_passive;
  }	
  public String getNominalized() {
    return nominalized;
  }	
  public void setNominalized(String nominalized) {
    if (nominalized == null)
      nominalized = "";				
    this.nominalized = nominalized;
  }	
			
  /** Get all syntaxs which have the concept_id. 
   * @param concept_id a string representing concept_id
   * @return Vector all verbs adverbs fetched from the database.
   **/
  public static SyntaxVerb fetchSyntax(SQLConnection con,String concept_id) {
    SyntaxVerb syntax = new SyntaxVerb(con, concept_id);
		
    String sql = "SELECT * FROM LMT_VERB WHERE ";
    sql += " CONCEPT_ID = '" + concept_id + "'";
    Debug.debug("-- fetchSyntaxVerb: " + sql);		
		
    try {
      SQLConnection.Result r = con.query(sql);
      if (r!=null &&r.hasData()){
	syntax.setAbbreviation(r.rs.getString(2));
	syntax.setAcronym(r.rs.getString(3));
	syntax.setComplementS(r.rs.getString(4));
	syntax.setComplementX(r.rs.getString(5));
	syntax.setComplementAP(r.rs.getString(6));
	syntax.setExplSubj(r.rs.getString(7));
	//syntax.setValencyTrans(rs.getString(8));
	//syntax.setValencyIntrans(rs.getString(9));
	//syntax.setValencyDitrans(rs.getString(10));
	syntax.setPredPassive(r.rs.getString(11));
	syntax.setNominalized(r.rs.getString(12));
	syntax.setActive(r.rs.getString(13));
      }
      if (r!=null) r.close();
    } catch (SQLException E) {
      System.out.println("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("-- SyntaxVerb 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();
    }

    Vector queryVector = new Vector();
    makeQuery(queryVector);
    Debug.debug("-- SyntaxVerb update : " + queryVector.elementAt(0));		

    return con.update(queryVector);
  }	
		
  /** 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_VERB 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_VERB VALUES (";
    sql += "'" + concept_id + "',";
    sql += "'" + abbreviation + "',";
    sql += "'" + acronym + "',";
    sql += "'" + complement_s + "',";
    sql += "'" + complement_x + "',";
    sql += "'" + complement_ap + "',";			
    sql += "'" + expl_subj + "',";	
    sql += "'',"; //"'" + valency_trans + "',";
    sql += "'',"; //"'" + valency_intrans + "',";						
    sql += "'',"; //"'" + valency_ditrans + "',";						
    sql += "'" + pred_passive + "',";
    sql += "'" + nominalized + "',";			
    sql += "'T')";
    return sql;
  }
	
  String makeUpdateQuery(){
    String sql = "UPDATE LMT_VERB SET";
    sql += " abbreviation = '" + abbreviation + "',";
    sql += " acronym = '" + acronym + "',";
    sql += " complement_s = '" + complement_s + "',";
    sql += " complement_x = '" + complement_x + "',";
    sql += " complement_ap = '" + complement_ap + "',";
    sql += " expl_subj = '" + expl_subj + "',";
    //sql += " valency_trans = '" + valency_trans + "',";
    //sql += " valency_intrans = '" + valency_intrans + "',";
    //sql += " valency_ditrans = '" + valency_ditrans + "',";
    sql += " pred_passive = '" + pred_passive + "',";
    sql += " nominalized = '" + nominalized + "'";
    sql += " WHERE concept_id = '" + concept_id + "'";
    return sql;		
  }
}
