/***************************************************
//	
//	파일명 : Session.java
//	기능 : 자바 클래스 분석 정보를 위한 클래스
//	작성일 : 
//
****************************************************/

package extractor.SCA_API;

import java.io.*;
import java.util.*;
import java.sql.*;
import java.util.StringTokenizer;
import java.util.Vector;

import extractor.SCA_API.DBConnection;

public class Session 
{
	Vector sb_id = new Vector();
	Vector sb_pckgnm = new Vector();
	Vector sb_impckg = new Vector();
	Vector sb_usdcls = new Vector();
	Vector sb_mthdsg = new Vector();
	Vector sb_vrbldc = new Vector();
	Vector sb_mthdfl = new Vector();

	Statement stmt = null;
	String query = null;

// 생성자 메소드
	public Session(){
		DBConnection dbCon = new DBConnection();
		stmt = dbCon.createStatement();
		query = "select * from tj_session";

		try{
			ResultSet rs = stmt.executeQuery(query);

			ResultSetMetaData md = rs.getMetaData();

			int col_count = md.getColumnCount();
			int row = 0;
			String importedPackages;
			String usedClass;
			String methodSignatures;

			int j = 0;

			while (rs.next()){
				System.out.print("\nRow:  " + row ++ + "\t");

				for (int i = 1;i<=col_count ;i++ )
				{
					
					System.out.print(rs.getString(md.getColumnName(i)) + ", \t");
					
					// Column에 따라 각기 다른 벡터에 저장
					switch (i)
					{
					case 1:
						sb_id.addElement(rs.getString(md.getColumnName(i)));

						break;

					case 2:
						sb_pckgnm.addElement(rs.getString(md.getColumnName(i)));

						break;

					case 3:
						importedPackages = (rs.getString(md.getColumnName(i)));
						StringTokenizer st1 = new StringTokenizer(importedPackages, "|");

						while( st1.hasMoreTokens()){
							sb_impckg.addElement(st1.nextToken("|"));
							//System.out.println(st1.nextToken("|"));
						}

						break;	

					case 4:
						sb_vrbldc.addElement(rs.getString(md.getColumnName(i)));
						
						break;

					case 5:
						
						usedClass = (rs.getString(md.getColumnName(i)));
						System.out.println("usedClass = " + usedClass);
						if(usedClass == null) sb_usdcls.addElement("null");
						else{
						StringTokenizer st2 = new StringTokenizer(usedClass, "|");

						while( st2.hasMoreTokens()){
							sb_usdcls.addElement(st2.nextToken("|"));
						}
						}
						break;

					case 6:
						sb_mthdfl.addElement(rs.getString(md.getColumnName(i)));
						
						break;

					case 7:

						methodSignatures = (rs.getString(md.getColumnName(i)));

						if (rs.getString(md.getColumnName(i)) == "null")
						{
							sb_mthdsg.addElement("null");
						}else
						{
							methodSignatures = methodSignatures + "|";
							StringTokenizer st3 = new StringTokenizer(methodSignatures, "|");

							while( st3.hasMoreTokens()){
								sb_mthdsg.addElement(st3.nextToken("|"));
							}
						}
					
					}
				}
				j++;
			}
		}catch(SQLException ex){
				System.err.println("SQL문에 에러가 있습니다.\n" + ex.getMessage());
			}

	}

// 클래스가 속한 패키지 이름을 반환해주는 메소드
	
	public Vector getSbID(String fileName){
		return sb_id;
	}

	public Vector getPkgName(String sb_id){
		return sb_pckgnm;
	}

// 클래스에 포함된 패키지들의 리스트를 반환해주는 메소드
	
	public Vector getImportedPkg(String sb_id){
		return sb_impckg;
	}
	
// 자바 클래스의 변수 선언부 전체에 대한 분석 정보를 제공해주는 메소드

	public Vector getAttributes(String sb_id){
		return sb_vrbldc;
	}

// 자바 클래스에서 사용된 클래스들의 패키지명을 포함한 이름들을 제공해주는 메소드
	
	public Vector getUsedClasses(String sb_id){
		return sb_usdcls;
	}

// 자바 클래스에 포함된 메소드 전체를 반환해주는 메소드

	public Vector getBmInfo(String sb_id){
		return sb_mthdfl;
	}

// 자바 클래스에 포함된 메소드 signature
	
	public Vector getMethods(String sb_id){
		return sb_mthdsg;
	}
	
}