Exemplo n.º 1
0
bool XmlProcessing::XmlDocument::addRoot(const std::string &tag)
{
	//adds root if the tree is empty otherwise return false
	bool flag = false;
	if (pDocElement_)
	{
		for(auto elem:pDocElement_->getChildren())
		{
			if (dynamic_cast<TaggedElement *>(elem.get()) != nullptr)
				flag = true;
		}
		if (flag)
			return false;
		else
		{
			pDocElement_ = makeDocElement();
			std::shared_ptr<AbstractXmlElement> addRoot = makeTaggedElement(tag);
			pDocElement_->addChild(addRoot);
			return true;
		}
	}
	else
	{
		pDocElement_ = makeDocElement();
		std::shared_ptr<AbstractXmlElement> addRoot = makeTaggedElement(tag);
		pDocElement_->addChild(addRoot);
		return true;
	}
}
Exemplo n.º 2
0
int main(int argc, char* argv[])
{
	DisplayData::title("Testing Display Package", '=');
	std::shared_ptr < XmlProcessing::AbstractXmlElement > root = XmlProcessing::makeTaggedElement("root");
	root->addChild(XmlProcessing::makeTextElement("this is a test"));
	std::shared_ptr < XmlProcessing::AbstractXmlElement > child = XmlProcessing::makeTaggedElement("child");
	child->addChild(XmlProcessing::makeTextElement("this is another test"));
	child->addAttrib("first", "test");
	root->addChild(child);
	std::shared_ptr < XmlProcessing::AbstractXmlElement > docEl = makeDocElement(root);

	DisplayData::title(" show xml tree ", '-');
	DisplayData::showXmlTree(docEl);

	std::vector<std::shared_ptr <XmlProcessing::AbstractXmlElement >> result;
	result.push_back(root);
	result.push_back(child);
	DisplayData::title("show xml elements ", '-');
	DisplayData::showData(result);

	std::vector<std::pair<std::string, std::string>> attributePairs;
	std::pair < std::string, std::string> pair1 = std::make_pair("att1", "val1");
	std::pair < std::string, std::string> pair2 = std::make_pair("att2", "val2");
	std::pair < std::string, std::string> pair3 = std::make_pair("att3", "val3");
	attributePairs.push_back(pair1);
	attributePairs.push_back(pair2);
	attributePairs.push_back(pair3);
	DisplayData::title("show xml attribute pairs ", '-');
	DisplayData::showAttributesPair(attributePairs);

	std::cout << "\n\n";
	return 0;
}
Exemplo n.º 3
0
//Returns list of packages in XmlDocument
XmlDocument Repository::getPackagesList() {
	vector<sPtr> packages = _packagesInfo->element("Version").select();
	vector<string> packageNames;
	if (packages.size() > 0) {
		for (auto pckg : packages) {
			string pckgnm = pckg->getAttrib("Name");
			if (pckgnm != ""&& pckgnm != " ") {
				packageNames.push_back(pckgnm);
			}
		}
	}
	sPtr rootElem = makeTaggedElement("Packages");
	for (auto eachpckg : packageNames) {
		sPtr pckgelem = makeTaggedElement("Package");
		pckgelem->addAttrib("Name", eachpckg);
		rootElem->addChild(pckgelem);
	}
	XmlDocument xmlPackagesList(makeDocElement(rootElem));
	return xmlPackagesList;
}
Exemplo n.º 4
0
//Save dependency info to disk
bool Repository::saveDependencyInfotoDisk(string packageName, string dependencyInfoString) {
	sPtr latestPackgeVersion = getLatestPackageVersion(packageName);
	string path = latestPackgeVersion->getAttrib("Directory");
	string xmlFileNameonDisk = path + "\\DependencyInfo.xml";
	XmlDocument dependencyInfoXML(dependencyInfoString);
	vector<string> depPackVector;
	vector<string> depVersionVector;
	std::vector<sPtr> found = dependencyInfoXML.element("Package").select();
	for (auto pElem : found)
	{
		string pckName = pElem->getAttrib("Name");
		if (pckName != ""&&pckName != " ") {
			cout << "\nDependent Package: " << packageName << " found";
			depPackVector.push_back(pckName);
		}
	}
	for (auto depPack : depPackVector)
	{
		sPtr pck = getLatestPackageVersion(depPack);
		string Version = pck->getAttrib("Name");
		if (Version != ""&&Version != " ")
			depVersionVector.push_back(Version);
	}
	
	sPtr root = makeTaggedElement("Dependency");
	for (auto latest : depVersionVector) {
		sPtr latestDpPck = makeTaggedElement("Package");
		latestDpPck->addAttrib("Name", latest);
		root->addChild(latestDpPck);
	}
	XmlDocument depXml(makeDocElement(root));
	if (path != ""&&path != " ") {
		ofstream file;
		//cout << "Writing to file" << xmlFileNameonDisk;
		file.open(xmlFileNameonDisk, ios::ate);
		file << depXml.toString();
		file.close();
	}
	return false;
}
Exemplo n.º 5
0
//Create a package directory on Disk
bool Repository::createPackageOnDisk(string packageName, string moduleName) {
	//cout << "Getting latest Package";
	sPtr pckgPtr = getLatestPackageVersion(packageName);
	if (pckgPtr) {
		PackageDetails pckg = convertsPtrToPackageDetails(pckgPtr, packageName);
		if (pckg.status() == "Open") {
			cout << "\nPackage: " << packageName << " already exists with Open status";
			return true;
		}
		if (pckg.status() == "Closed") {
			cout << "\nPackage: " << packageName << "exists with closed Status. Creating new version";
		}
	}
	string timestamp = getTimeStamp();
	string path = rootDirectory + "\\" + packageName + "_" + timestamp;
	cout << "\nCreating package: " << packageName << ", with directory: " << path;
	std::wstring stemp = std::wstring(path.begin(), path.end());
	LPCWSTR sw = stemp.c_str();
	::SHCreateDirectoryEx(NULL, sw, NULL);
	sPtr XMLroot = _packagesInfo->xmlRoot();
	sPtr packageElement = makeTaggedElement("Package");
	packageElement->addAttrib("Name", packageName);
	XMLroot->addChild(packageElement);
	string versionName = packageName + "_" + timestamp;
	sPtr versionElement = makeTaggedElement("Version");
	versionElement->addAttrib("Name", versionName);
	versionElement->addAttrib("Directory", path);
	versionElement->addAttrib("Status", "Open");
	packageElement->addChild(versionElement);
	savePackageInfoXMLtoDisk();
	sPtr metRoot = makeTaggedElement("Package Metadata");
	XmlDocument metadataDoc(makeDocElement(metRoot));
	ofstream file;
	string metaDataFileOnDisk = path + "\\Metadata.xml";
	file.open(metaDataFileOnDisk, ios::ate);
	file << metadataDoc.toString();
	return true;
}
Exemplo n.º 6
0
void main() {
	string thePath = "C:\\Users\\Martin\\Desktop\\TestingFolder";

	string timestamp = __TIMESTAMP__;
	cout << endl << "TimeStamp before concatenation: " << timestamp;
	for (string::iterator i = timestamp.begin(); i < timestamp.end(); ++i) {
		if (*i == ':' || *i == ' ' || *i == '  ')
			timestamp.erase(i);
	}
	cout << endl << "TimeStamp after concatenation: " << timestamp;
	string folderwithDate = thePath + timestamp;
	cout << endl << "Folder along with TimeStamp" << folderwithDate;
	std::wstring stemp = std::wstring(folderwithDate.begin(), folderwithDate.end());
	LPCWSTR sw = stemp.c_str();
	::SHCreateDirectoryEx(NULL, sw, NULL);
	vector<string> folders = FileSystem::Directory::getDirectories("C:\\Users\\Martin\\Desktop\\TestingFolder");
	for (auto folder : folders)
		cout << endl << folder;

	sPtr rootElement = makeTaggedElement("Dependency");
	for (auto folder : folders) {
		if (folder != "."&&folder != "..") {
			sPtr folderElement = makeTaggedElement("Package");
			folderElement->addAttrib("Name", folder);
			rootElement->addChild(folderElement);
			cout << endl << folder;
		}
	}

	XmlDocument xmlFolderDocument(makeDocElement(rootElement));
	std::ofstream file;
	file.open("PackagesDependency.xml", ios::ate);
	file << xmlFolderDocument.toString();
	file.close();


	string xmlString = xmlFolderDocument.toString();
	XmlDocument xml(xmlString);
	XmlDocument xmlInputFile("PackagesDependency.xml", XmlDocument::file);
	vector<sPtr> packages = xml.element("Package").select();
	cout << "No. of Packages found: " << packages.size();

	vector<string> foldersList;
	for (auto package : packages) {
		if (package->getAttrib("Name") != "."&&package->getAttrib("Name") != ".."&&package->getAttrib("Name") != "") {
			cout << "Hello\n";
			foldersList.push_back(package->getAttrib("Name"));
		}
	}
	vector<string> filesList;
	for (auto folder : foldersList) {
		std::vector<std::string> files = FileSystem::Directory::getFiles(thePath + "\\" + folder);
		filesList.insert(filesList.end(), files.begin(), files.end());
	}

	for (auto file : filesList)
		cout << endl << file;






	sPtr XMLroot = makeTaggedElement("Packages");

	sPtr packageElement = makeTaggedElement("Package");
	packageElement->addAttrib("Name", "Package 1");
	XMLroot->addChild(packageElement);


	sPtr versionElement = makeTaggedElement("Version");
	versionElement->addAttrib("Name", "1");
	versionElement->addAttrib("Directory", "Package1_1");
	versionElement->addAttrib("Status", "Closed");
	packageElement->addChild(versionElement);

	versionElement = makeTaggedElement("Version");
	versionElement->addAttrib("Name", "2");
	versionElement->addAttrib("Directory", "Package1_2");
	versionElement->addAttrib("Status", "Open");
	packageElement->addChild(versionElement);

	packageElement = makeTaggedElement("Package");
	packageElement->addAttrib("Name", "Package 2");
	XMLroot->addChild(packageElement);


	versionElement = makeTaggedElement("Version");
	versionElement->addAttrib("Name", "1");
	versionElement->addAttrib("Directory", "Package2_1");
	versionElement->addAttrib("Status", "Open");
	packageElement->addChild(versionElement);



	XmlDocument xmlMessage(makeDocElement(XMLroot));
	//cout << xmlMessage.toString();

	cout << endl;
	/*string fileSpec = "Package XML Structure.xml";
	XmlDocument file(fileSpec, XmlDocument::file);
	XmlDocument* filePointer = &file;*/

	/*Repository repo;
	repo.addPackageInfoXML(&xmlMessage);


	vector<PackageDetails> packages = repo.getPackageVersions("Package 1");
	cout << endl << "Printing all Packages with name: Package 1";
	for (auto packg : packages) {
	packg.print();
	}*/

	cout << endl;

	string xmlInputFileName = "PackagesStructure.xml";
	XmlDocument xmlMessagefromDisk(xmlInputFileName, XmlDocument::file);
	cout << endl << "Printing XML read from disk: " << xmlMessagefromDisk.toString();

	Repository repo2("C:\\Users\\Martin\\Desktop\\OODFolder");
	repo2.addPackageInfoXML(&xmlMessagefromDisk);
	repo2.closePackageVersion("Package 1", "2");
	cout << endl << "Printing XML read from disk after closing module status: " << xmlMessagefromDisk.toString();
	string xmlOutputFileName = "PackagesStructure.xml";

	cout << "Writing file to output: " << xmlOutputFileName;

	ofstream xmlFileWrite;
	xmlFileWrite.open(xmlOutputFileName, ios::ate);
	xmlFileWrite << xmlMessagefromDisk.toString();
	cout << endl;

	/*try
	{
	XmlDocument xmlMessagefromDisk(xmlInputFileName, XmlDocument::file);
	cout << "Printing XML read from disk: " << xmlMessagefromDisk.toString();
	}
	catch (std::exception& ex)
	{
	std::cout << "\n\n  " << ex.what();
	}*/

	cout << endl;

	/*PackageDetails package = repo.getLatestPackageVersion("Package 1");
	cout << endl << "Printing latest package version with name: Package 1";
	package.print();

	cout << endl;

	packages = repo.getPackageVersions("Package 2");
	cout << endl << "Printing all Packages with name: Package 2";
	for (auto packg : packages) {
	packg.print();
	}*/
	cout << endl;
}