public void run() {

		/*
		 * Get the list of all promotions
		 */

		facade.getListPromotion(copyListOfAllPromotion);

		try {
			this.takerPromotionsList = copyListOfAllPromotion.take();
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}

		/*
		 * Transfers the list of promotions like BlockingQueue to List.
		 */

		for (Promotion promotion : takerPromotionsList) {
			groupPromotions.add(promotion);
		}

		/*
		 * Get the map with the product preferences of each client
		 */

		facade.getListProductPreferredAllClients(copyPreferencesOfAllClients);

		try {
			takerProductPreferredClient = copyPreferencesOfAllClients.take();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		/*
		 * Create and send the promotions for Clients
		 */

		this.groupClients = takerProductPreferredClient.keySet();

		for (Client client : groupClients) {

			String creatorPromotionClient = "Promotional Products: \n";
			List<Product> listProductPreferredAux = takerProductPreferredClient
					.get(client);

			for (Product product : listProductPreferredAux) {
				if (groupPromotions.contains(product)) {
					Promotion promotion = groupPromotions.get(groupPromotions
							.indexOf(product));
					creatorPromotionClient += promotion + "\n";
				}
			}

			logger.info("Promotion successfully sent to e-mail: "
					+ client.getMail() + "\nBelonging to the client: "
					+ client.getName() + "\nSent Copies of the Promotion: \n"
					+ creatorPromotionClient);

			creatorPromotionClient = "";
		}
	}