/*  OpenOlap viewer
 *  パッケージ名：openolap.viewer.controller
 *  ファイル：GetAxisMemberInfoByAxisIDCommand.java
 *  説明：指定されたディメンションとそのメンバーの情報をXML形式で出力します。
 *
 *  作成日: 2004/02/13
 */
package openolap.viewer.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;

import javax.servlet.ServletException;

import openolap.viewer.Axis;
import openolap.viewer.Report;
import openolap.viewer.common.CommonSettings;
import openolap.viewer.common.Constants;
import openolap.viewer.dao.DAOFactory;
import openolap.viewer.dao.DimensionMemberDAO;

/**
 *  クラス：GetAxisMemberInfoByAxisIDCommand
 *  説明：指定されたディメンションとそのメンバーの情報をXML形式で出力します。
 */
public class GetAxisMemberInfoByAxisIDCommand implements Command {

	/**
	 * 指定されたディメンションとそのメンバーの情報をXML形式で生成する。<br>
	 * JSPへdispatchを行わずに直接XMLを出力するため、nullを戻す。
	 * @param helper RequestHelperオブジェクト
	 * @param commonSettings アプリケーションの共通設定オブジェクト
	 * @return null
	 * @exception ServletException 処理中に例外が発生した
	 * @exception IOException 処理中に例外が発生した
	 */
	public String execute(RequestHelper helper, CommonSettings commonSettings)
		throws ServletException, IOException {

		Report report = (Report) helper.getRequest().getSession().getAttribute("report");
		String targetAxisID = (String) helper.getRequest().getParameter("axisID");
		if(Constants.MeasureID.equals(targetAxisID)) {	// 次元メンバのXML生成なので、メジャーであることはありえない
			throw new IllegalArgumentException();
		}

		Axis axis = report.getAxisByID(targetAxisID);

		Connection conn = null;
		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		try {
			conn = daoFactory.getConnection();
	
			helper.getResponse().setContentType("text/xml; charset=Shift_JIS");
			PrintWriter out = helper.getResponse().getWriter();
	
			// XML 出力
			out.println("<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>");	// XML ヘッダ
			DimensionMemberDAO dimMemberDAO =  daoFactory.getDimensionMemberDAO(conn);
			dimMemberDAO.outputDimensionMemberAsXML(report, axis , false, out);	// ディメンションメンバーリスト

		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) { 
			e.printStackTrace();
		} finally {
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}

		return null;
	}

}
