DRDE/AusRegEPPTK/se/ContactInfoResponse.cpp

254 lines
9.0 KiB
C++

#include "se/ContactInfoResponse.hpp"
#include "se/StandardObjectType.hpp"
#include "se/IntPostalInfo.hpp"
#include "se/LocalPostalInfo.hpp"
#include "se/DiscloseItem.hpp"
const std::string ContactInfoResponse::CON_ROID_EXPR
(exprReplace(InfoResponse::ROID_EXPR()));
const std::string ContactInfoResponse::CON_CR_ID_EXPR
(exprReplace(InfoResponse::CR_ID_EXPR()));
const std::string ContactInfoResponse::CON_UP_ID_EXPR
(exprReplace(InfoResponse::UP_ID_EXPR()));
const std::string ContactInfoResponse::CON_CL_ID_EXPR
(exprReplace(InfoResponse::CL_ID_EXPR()));
const std::string ContactInfoResponse::CON_CR_DATE_EXPR
(exprReplace(InfoResponse::CR_DATE_EXPR()));
const std::string ContactInfoResponse::CON_UP_DATE_EXPR
(exprReplace(InfoResponse::UP_DATE_EXPR()));
const std::string ContactInfoResponse::CON_TR_DATE_EXPR
(exprReplace(InfoResponse::TR_DATE_EXPR()));
const std::string ContactInfoResponse::CON_STATUS_COUNT_EXPR
(exprReplace(InfoResponse::STATUS_COUNT_EXPR()));
const std::string ContactInfoResponse::CON_STATUS_EXPR
(exprReplace(InfoResponse::STATUS_EXPR()));
const std::string ContactInfoResponse::CON_INF_DATA_EXPR
(exprReplace(InfoResponse::INF_DATA_EXPR()));
const std::string ContactInfoResponse::CON_ID_EXPR
(CON_INF_DATA_EXPR + "/contact:id/text()");
const std::string ContactInfoResponse::CON_PW_EXPR
(CON_INF_DATA_EXPR + "/contact:authInfo/contact:pw/text()");
const std::string ContactInfoResponse::CON_PINFO_INT_EXPR
(CON_INF_DATA_EXPR + "/contact:postalInfo[@type='int']");
const std::string ContactInfoResponse::CON_PINFO_INT_NAME_EXPR
(CON_PINFO_INT_EXPR + "/contact:name/text()");
const std::string ContactInfoResponse::CON_PINFO_INT_ORG_EXPR
(CON_PINFO_INT_EXPR + "/contact:org/text()");
const std::string ContactInfoResponse::CON_PINFO_INT_STREET_EXPR
(CON_PINFO_INT_EXPR + "/contact:addr/contact:street");
const std::string ContactInfoResponse::CON_PINFO_INT_CITY_EXPR
(CON_PINFO_INT_EXPR + "/contact:addr/contact:city/text()");
const std::string ContactInfoResponse::CON_PINFO_INT_SP_EXPR
(CON_PINFO_INT_EXPR + "/contact:addr/contact:sp/text()");
const std::string ContactInfoResponse::CON_PINFO_INT_PC_EXPR
(CON_PINFO_INT_EXPR + "/contact:addr/contact:pc/text()");
const std::string ContactInfoResponse::CON_PINFO_INT_CC_EXPR
(CON_PINFO_INT_EXPR + "/contact:addr/contact:cc/text()");
const std::string ContactInfoResponse::CON_PINFO_LOC_EXPR
(CON_INF_DATA_EXPR + "/contact:postalInfo[@type='loc']");
const std::string ContactInfoResponse::CON_PINFO_LOC_NAME_EXPR
(CON_PINFO_LOC_EXPR + "/contact:name/text()");
const std::string ContactInfoResponse::CON_PINFO_LOC_ORG_EXPR
(CON_PINFO_LOC_EXPR + "/contact:org/text()");
const std::string ContactInfoResponse::CON_PINFO_LOC_STREET_EXPR
(CON_PINFO_LOC_EXPR + "/contact:addr/contact:street");
const std::string ContactInfoResponse::CON_PINFO_LOC_CITY_EXPR
(CON_PINFO_LOC_EXPR + "/contact:addr/contact:city/text()");
const std::string ContactInfoResponse::CON_PINFO_LOC_SP_EXPR
(CON_PINFO_LOC_EXPR + "/contact:addr/contact:sp/text()");
const std::string ContactInfoResponse::CON_PINFO_LOC_PC_EXPR
(CON_PINFO_LOC_EXPR + "/contact:addr/contact:pc/text()");
const std::string ContactInfoResponse::CON_PINFO_LOC_CC_EXPR
(CON_PINFO_LOC_EXPR + "/contact:addr/contact:cc/text()");
const std::string ContactInfoResponse::CON_VOICE_EXPR
(CON_INF_DATA_EXPR + "/contact:voice/text()");
const std::string ContactInfoResponse::CON_VOICEX_EXPR
(CON_INF_DATA_EXPR + "/contact:voice/@x");
const std::string ContactInfoResponse::CON_FAX_EXPR
(CON_INF_DATA_EXPR + "/contact:fax/text()");
const std::string ContactInfoResponse::CON_FAXX_EXPR
(CON_INF_DATA_EXPR + "/contact:fax/@x");
const std::string ContactInfoResponse::CON_EMAIL_EXPR
(CON_INF_DATA_EXPR + "/contact:email/text()");
const std::string ContactInfoResponse::CON_DISCLOSE_EXPR
(CON_INF_DATA_EXPR + "/contact:disclose");
const std::string ContactInfoResponse::CON_DISCLOSE_COUNT_EXPR
("count(" + CON_DISCLOSE_EXPR + "/*)");
const std::string ContactInfoResponse::CON_DISCLOSE_FLAG_EXPR
(CON_DISCLOSE_EXPR + "/@flag");
const std::string ContactInfoResponse::CON_DISCLOSE_CHILD_EXPR
(CON_DISCLOSE_EXPR + "/*[IDX]");
const std::string ContactInfoResponse::CON_DISCLOSE_NAME_EXPR ("/local-name()");
const std::string ContactInfoResponse::CON_DISCLOSE_TYPE_EXPR ("/@type");
ContactInfoResponse::ContactInfoResponse()
: InfoResponse (StandardObjectType::CONTACT()),
intPostalInfo(NULL),
locPostalInfo(NULL),
voiceX(-1),
faxX(-1)
{ }
ContactInfoResponse::~ContactInfoResponse()
{
if (intPostalInfo)
delete intPostalInfo;
if (locPostalInfo)
delete locPostalInfo;
}
const LocalPostalInfo & ContactInfoResponse::getLocPostalInfo() const
throw (EmptyPostalInfoException)
{
if (locPostalInfo)
return *locPostalInfo;
else
throw EmptyPostalInfoException();
}
const IntPostalInfo & ContactInfoResponse::getIntPostalInfo() const
throw (EmptyPostalInfoException)
{
if (intPostalInfo)
return *intPostalInfo;
else
throw EmptyPostalInfoException();
}
bool ContactInfoResponse::isDisclosed() const
throw (NoDiscloseItemsException)
{
if (items.size() > 0)
return discloseFlag;
else
throw NoDiscloseItemsException();
}
void ContactInfoResponse::fromXML (XMLDocument *xmlDoc) throw (ParsingException)
{
debugLogger->LOG_FINEST("enter");
InfoResponse::fromXML (xmlDoc);
if (!(resultArray[0].succeeded())) {
return;
}
try
{
id = xmlDoc->getNodeValue (CON_ID_EXPR);
std::string iName = xmlDoc->getNodeValue (CON_PINFO_INT_NAME_EXPR);
std::string iOrg = xmlDoc->getNodeValue (CON_PINFO_INT_ORG_EXPR);
std::vector<std::string> iStreet =
xmlDoc->getNodeValues (CON_PINFO_INT_STREET_EXPR);
std::string iCity = xmlDoc->getNodeValue (CON_PINFO_INT_CITY_EXPR);
std::string iSP = xmlDoc->getNodeValue (CON_PINFO_INT_SP_EXPR);
std::string iPC = xmlDoc->getNodeValue (CON_PINFO_INT_PC_EXPR);
std::string iCC = xmlDoc->getNodeValue (CON_PINFO_INT_CC_EXPR);
intPostalInfo =
new IntPostalInfo(iName, iOrg, iStreet, iCity, iSP, iPC, iCC);
std::string lName = xmlDoc->getNodeValue (CON_PINFO_LOC_NAME_EXPR);
if (lName.length() > 0)
{
std::string lOrg = xmlDoc->getNodeValue (CON_PINFO_LOC_ORG_EXPR);
std::vector<std::string> lStreet =
xmlDoc->getNodeValues(CON_PINFO_LOC_STREET_EXPR);
std::string lCity = xmlDoc->getNodeValue(CON_PINFO_LOC_CITY_EXPR);
std::string lSP = xmlDoc->getNodeValue(CON_PINFO_LOC_SP_EXPR);
std::string lPC = xmlDoc->getNodeValue(CON_PINFO_LOC_PC_EXPR);
std::string lCC = xmlDoc->getNodeValue(CON_PINFO_LOC_CC_EXPR);
locPostalInfo =
new LocalPostalInfo(lName, lOrg, lStreet, lCity, lSP, lPC, lCC);
}
voice = xmlDoc->getNodeValue(CON_VOICE_EXPR);
std::string voiceXStr = xmlDoc->getNodeValue(CON_VOICEX_EXPR);
if (voiceXStr.length() > 0)
voiceX = atoi(voiceXStr.c_str());
fax = xmlDoc->getNodeValue (CON_FAX_EXPR);
std::string faxXStr = xmlDoc->getNodeValue (CON_FAXX_EXPR);
if (faxXStr.length() > 0)
faxX = atoi(faxXStr.c_str());
email = xmlDoc->getNodeValue (CON_EMAIL_EXPR);
pw = xmlDoc->getNodeValue (CON_PW_EXPR);
std::string flagStr = xmlDoc->getNodeValue (CON_DISCLOSE_FLAG_EXPR);
discloseFlag = (flagStr == "1") ? true : false;
int count = xmlDoc->getNodeCount (CON_DISCLOSE_COUNT_EXPR);
for (int i = 0; i < count; i++)
{
std::string qry = ReceiveSE::replaceIndex (CON_DISCLOSE_CHILD_EXPR, i+1);
std::string childName =
xmlDoc->getNodeValue (qry + CON_DISCLOSE_NAME_EXPR);
std::string childType =
xmlDoc->getNodeValue (qry + CON_DISCLOSE_TYPE_EXPR);
if (childType.length() == 0)
items.push_back (DiscloseItem(childName));
else
items.push_back (DiscloseItem(childName, childType));
}
}
catch (XPathExpressionException& e)
{
maintLogger->warning(e.getMessage());
ParsingException p;
p.causedBy(e);
throw p;
}
debugLogger->LOG_FINEST("exit");
}
std::string ContactInfoResponse::exprReplace (const std::string &expr)
{
return StringUtils::replaceAll (expr,
DataResponse::OBJ(),
StandardObjectType::CONTACT()->getName());
}