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

package lmt;

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

public class RelatedTerm {
  String related_term_id;
  String definition_id;
  String related_term;
  String active;
  SQLConnection con;
	
  /** constructor 
   **/
  public RelatedTerm(SQLConnection con, String def_id) {
    this.con = con;
    related_term_id = "";
    definition_id = def_id;
    related_term = "";
    active = "";
  }
	
  // setters & getters
  public String getRelatedTermID() {
    return related_term_id;
  }	
  public void setRelatedTermID(String related_term_id) {
    if ( related_term_id == null )
      related_term_id = "";
    this.related_term_id = related_term_id;
  }	
  public String getDefinitionID() {
    return definition_id;
  }	
  public void setDefinitionID(String definition_id) {
    if ( definition_id == null )
      definition_id = "";
    this.definition_id = definition_id;
  }	
  public String getRelatedTerm() {
    return related_term;
  }	
  public void setRelatedTerm(String related_term) {
    if ( related_term == null )
      related_term = "";
    this.related_term = related_term;
  }	
  public void setActive (String active) {
    if ( active == null )
      active = "";
    this.active = active;
  }	

  /** Get all examples which are related with the definition
   * @param definition_id a string representing definition_id
   * @return Vector all examples fetched from the database.
   **/		
  public static Vector fetch (SQLConnection con, String definition_id) {

    Vector rtermVector = new Vector();
	
    String sql = "SELECT * FROM LMT_RELATED_TERMS WHERE";
    sql += " DEFINITION_ID = '" + definition_id + "'";
    sql += " ORDER BY RELATED_TERM";
		
    Debug.debug("-- fetch related terms: " + sql);			
		
    try {
      SQLConnection.Result r = con.query(sql);
      while (r!=null &&r.hasData()){
	RelatedTerm rterm = new RelatedTerm(con, definition_id);
	rterm.setRelatedTermID(r.rs.getString(1));
	//example.setDefinitionID(r.rs.getString(2));
	rterm.setRelatedTerm(r.rs.getString(3));	
	rterm.setActive(r.rs.getString(4));
	rtermVector.addElement(rterm);
      }
      if (r!=null) r.close();
    } catch (SQLException E) {
      System.out.println("SQLException: " + E.getMessage());
    }		

    //Debug.debug("-- size of results: " + rtermVector.size());
    return rtermVector;
  }	

  /** insert the new data into the table.
   * @return integer representing the result of operation
   **/	
  public int insert() {

    // get New Term ID				
    related_term_id = con.getNewID("related_term_id");				
		
    String sql = "INSERT INTO LMT_RELATED_TERMS VALUES (";
    sql += "'" + related_term_id + "',";
    sql += "'" + definition_id + "',";
    sql += "'" + Util.replaceSingleQuote(related_term) + "',";
    sql += "'T')";

    Debug.debug("-- Related_term insertion : " + sql);		
		
    return con.insert(sql);
  }
	
  /** delete the data from the table.
   * @return integer representing the result of operation
   **/	
  public int delete() {
    // check where this exists
    if (!isExistent())
      return Constants.DONOTEXIST;
		
    String sql = "DELETE FROM LMT_RELATED_TERMS ";
    sql += " WHERE definition_id = '" + definition_id + "'";
    sql += " AND related_term_id = '" + related_term_id + "'";
		
    Debug.debug("-- Examples delete : " + sql);		
		
    return con.delete(sql);
  }

  /** update the data in the table.
   * @return integer representing the result of operation
   **/	
  public static int update(SQLConnection con, Vector rtVector) {
    if ( rtVector == null || rtVector.size() == 0 )
      return Constants.SUCCESS;

    // make query
    Vector queryVector = new Vector();
    RelatedTerm.makeQuery(queryVector, rtVector);			
		
    return con.update(queryVector);
  }
	
  /** check whether the concept exists or not
   * @return boolean representing the result of operation
   **/	
  public boolean isExistent() {
		
    String sql = "SELECT * FROM LMT_RELATED_TERMS WHERE ";
    sql += " definition_id = '" + definition_id + "'";
    sql += " AND related_term_id = '" + related_term_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 static void makeQuery(Vector queryVector, Vector rtVector) {
    if (rtVector == null)
      return;
		
    String query;
    for ( int i=0; i<rtVector.size(); i++) {
      RelatedTerm rt = (RelatedTerm)rtVector.elementAt(i);
      query = "UPDATE LMT_RELATED_TERMS SET";
      query += " related_term = '" + Util.replaceSingleQuote(rt.getRelatedTerm()) + "'";
      query += " WHERE related_term_id = '" + rt.getRelatedTermID() + "'";
      query += " AND definition_id = '" + rt.getDefinitionID() + "'";			
      //Debug.debug("-- update Related terms: " + query[i]);
      queryVector.addElement(query);				
    }
  }			
}	
