void ProgramManager::AddProgram( string json )
{
	Program* program = UpcbJsonParser::Instance()->ParseProgram( json );

	if( program == NULL )
		return;

	this->availablePrograms[program->Id()] = json;

	//delete program;

	//Save Program & Mapping:
	string storageFolderPath = Configuration::Instance()->GetStringParam( PROGRAMS_STORAGE_DIR );

	struct stat st;
	if ( stat( storageFolderPath.c_str(), &st ) != 0 )
		mkdir( storageFolderPath.c_str(), 0777 );

	string programSavePath = storageFolderPath + "/" + program->Name() + ".xml";
	DataSerializationManager::Save( json, programSavePath.c_str() );
}
void ProgramManager::DeleteProgram( int programId )
{
	Process* process = this->runningPrograms[programId];
	if ( process != NULL )
	{
		this->StopProgram( programId );
	}

	string programDescription = this->availablePrograms[programId];

	if( programDescription == "" )
		return;

	Program* program = UpcbJsonParser::Instance()->ParseProgram( programDescription );

	if ( program == NULL )
		return;


	//Delete Program & Mapping:
	string storageFolderPath = Configuration::Instance()->GetStringParam( PROGRAMS_STORAGE_DIR );

	struct stat st;
	if ( stat( storageFolderPath.c_str(), &st ) != 0 )
		mkdir( storageFolderPath.c_str(), 0777 );

	string programSavePath = storageFolderPath + "/" + program->Name() + ".xml";
	string mappingSavePath = storageFolderPath + "/" + program->Name() + "_mapping.xml";

	program = NULL;
	this->availablePrograms.erase( programId );
	this->programMappings.erase( programId );

	DataSerializationManager::Delete( mappingSavePath.c_str() );
	DataSerializationManager::Delete( programSavePath.c_str() );
}