#pragma once
#include "normalresponse.h"
#include "alias.h"
#include "BinaryData.h"
#import <msxml3.dll>

class CDAVPropfindResponse :
	public CNormalResponse
{
public:
	CDAVPropfindResponse(CServer *server,CWorkspaceAccess context,CRequest request,CAlias alias);
	virtual ~CDAVPropfindResponse(void);

	virtual void PreCreateResponse() {};			//	1:レスポンス生成準備		
	virtual void SetNextData(CBuffer &data);		//	2:受信データの設定(繰り返し)
	virtual void CreateResponse();					//	3:レスポンスの生成
	virtual __int64 GetResponseSize();				//	4:レスポンスサイズの取得
//	virtual CWorkspaceAccess GetResponseInfo();		//	5:レスポンス情報を取得
	virtual int GetNextData(CBuffer &data);			//	6:レスポンスの取得


protected:
	/////////////////////////////////////////////////////////////////////////////////////////////
	//	ツール関数
	/////////////////////////////////////////////////////////////////////////////////////////////
	//!	プロパティフラグの全削除
	void ClearPropFlag();

	//!	指定されたプロパティがあるか取得し、あればフラグを立てる
	int PropExistSetFlag(CString prop);

	//!	見つからなかった項目をNotFoundに
	void AddNotFound(MSXML2::IXMLDOMDocumentPtr doc, MSXML2::IXMLDOMElementPtr response);

	//!	ETgaの取得
	CString	CDAVPropfindResponse::GetETag(CFileFind &find);

	void FindAll(MSXML2::IXMLDOMDocumentPtr doc,MSXML2::IXMLDOMElementPtr res);
	void FindFiles(MSXML2::IXMLDOMDocumentPtr doc,MSXML2::IXMLDOMElementPtr res,CString url,CString path);
	void AddInfo(MSXML2::IXMLDOMDocumentPtr doc,MSXML2::IXMLDOMElementPtr res,CFileFind &find,CString url);
	void AddVolumeInfo(MSXML2::IXMLDOMDocumentPtr doc,MSXML2::IXMLDOMElementPtr res,CString volume,CString url);
	void AddAttr(MSXML2::IXMLDOMDocumentPtr doc,MSXML2::IXMLDOMElementPtr res,CString attr,CString text);

	CString EncodeUrl(CString url);

	/////////////////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	/////////////////////////////////////////////////////////////////////////////////////////////
	//!	リクエストBODY
	CBinaryData			m_requestBody;

	//!	レスポンスBODY
	CString				m_body;

	//!	プロパティリスト
	CWorkspace			m_propRoot;

	//!	プロパティリストアクセス
	CWorkspaceAccess	m_propList;

	//!	プロパティリスト
	CStringArray		m_propListNames;
};
