//Apr_XML.cpp
#include "Apr_xml.h"

Apr_xml::Apr_xml( const char * fileName ): fName( fileName ){
	/* apr initial */
	apr_initialize();
	/*create memory pool */
	apr_pool_create(  &mp, NULL );	
	std::cout<<"Create process APR  initial success."<<std::endl;
}

Apr_xml::Apr_xml(){	

}

apr_pool_t*  Apr_xml::getMp(){
	return  mp;
}


apr_status_t  Apr_xml::statusWriteFile( const char *fName, apr_pool_t *mp ){
	 std::cout<<"Set path name "<< fName<<std::endl;         
	/* lock file */
	if(  (  rv = apr_file_open( &fp, fName, APR_WRITE, APR_OS_DEFAULT, mp ) )  !=  APR_SUCCESS ) {
		return  rv;
	}	
	if(  ( rv = apr_file_lock( fp, APR_FLOCK_EXCLUSIVE |  APR_FLOCK_NONBLOCK ) ) != APR_SUCCESS ){
		std::cout<<"Write-lock failed"<<std::endl;
		apr_file_close( fp );
		return rv;
	}
	return rv;
}

/*get path file name */
const char*  Apr_xml::getFileName(){
	return  fName;
}

/* for unlock file */
 const char* Apr_xml::unlockFile(){
	       apr_file_unlock( fp );	 
	       std::cout<<"Unlock file success"<<std::endl;
	return "Unlock";
}

apr_status_t Apr_xml::statusReadFile( const char *fName, apr_pool_t *mp ){	
	if( ( rv = apr_file_open( &fp, fName, APR_READ, APR_OS_DEFAULT,mp )) != APR_SUCCESS ){
		std::cout<<"Cannot open file "<<std::endl;
		return rv;
	}	
	if( ( rv = apr_file_lock( fp, APR_FLOCK_SHARED | APR_FLOCK_NONBLOCK ) )  != APR_SUCCESS ){
		std::cout<<"Read-lock failed"<<std::endl;
		apr_file_close( fp );
		return rv;
	}	
	return rv;

}

Apr_xml::~Apr_xml()
{
	apr_pool_destroy( mp );
	apr_terminate();
	std::cout<<"Terminate memory pool "<<std::endl;
}
