/* * * ProLinga-Repository * * Copyright (C) 2002-2010 Xobas Software. * All rights reserved. * * This file is part of ProLinga-Repository. * * ProLinga-Repository is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ProLinga-Repository is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ProLinga-Repository. If not, see . * * More information is available at the following addresses: * * Website : http://www.prolinga.org * * Email : prolinga-list@prolinga.org * * */ #include "RepCommon.h" #include #include #include #include "RepMain.hpp" using namespace DbXml; int DocumentPut(char *applicationName, char *objectType, char *objectName, char *xmlDoc, char **externalError) { int dbStatus = 0; char xpathExecQuery[1024], docName[255]; try { /* Open container */ extern XmlManager *mgrPtr; extern XmlContainer *contPtr; extern XmlUpdateContext *updatePtr; /* Delete exising document if exist */ /* Create context */ XmlQueryContext qc = mgrPtr->createQueryContext(); qc.setVariableValue("application",applicationName); qc.setVariableValue("type",objectType); qc.setVariableValue("name",objectName); sprintf(xpathExecQuery, "collection(\"%s\")%sObject[attribute::Application=$application and attribute::Type=$type and attribute::Name=$name]", REP_SYSTEM_NAME, OBJECT_PATH); XmlResults results = mgrPtr->query(xpathExecQuery, qc); /* Create Document object */ XmlDocument document = mgrPtr->createDocument(); while (results.next(document)) contPtr->deleteDocument(document, *updatePtr); /* Put document */ std::string content(xmlDoc); sprintf(docName,"%s_%s_%s", applicationName, objectType, objectName); std::string documentName(docName); contPtr->putDocument(documentName, content, *updatePtr); /* Close container */ contPtr->sync(); } catch(XmlException &e) { dbStatus = 90001; *externalError = new char[strlen(e.what())]; strcpy(*externalError, e.what()); } catch(std::exception &e) { dbStatus = 90001; *externalError = new char[strlen(e.what())]; strcpy(*externalError, e.what()); } return dbStatus; }