void PolicyEnforcementEngine::run()
{
	PolicyEnforcement* aPolicyEnforcement;
	PolicyEnforcementContainerIterator iter;
	DateAndTime currentTime;
	int waitingSleepTime = 1;
	int sleepTimeSeconds = 1;
	
	while (1)
	{
		if(policyEnforcements.size() != 0) 
		{
			currentTime.update();
			{
				boost::mutex::scoped_lock lock(mtx);
				iter = policyEnforcements.begin();
			}
			std::cout << "PolicyEnforcementEngine::run() - First element: '" << (*iter)->getName() << "' has start time = " << (*iter)->getStart() << endl;
			std::cout << "PolicyEnforcementEngine::run() - Current time: '" << currentTime << endl;
			
			if (currentTime == (*iter)->getStart() )
			{
				std::cout << "PolicyEnforcementEngine::run() - Removing and running top element in PolicyEnforcement Container ..." << endl;
				aPolicyEnforcement = popContainer();
				aPolicyEnforcement->run();
			}
			else
			{
				std::cout << "PolicyEnforcementEngine::run() - Waiting to run next PolicyEnforcement ..." << endl;
				sleep(waitingSleepTime);
			}
			
		}
		else
		{
			std::cout << "PolicyEnforcementEngine::run() - Waiting for new PolicyEnforcements ..." << endl;
			sleep(waitingSleepTime);
		}
	}
}