/**
  * singleton pattern
  *
  * @return PlentyItemDataPushCategory
  */
 public static function getInstance()
 {
     if (!isset(self::$instance) || !self::$instance instanceof PlentyItemDataPushCategory) {
         self::$instance = new PlentyItemDataPushCategory();
     }
     return self::$instance;
 }
 public function __construct()
 {
     /*
      * select some data, we will use them for new items
      */
     PlentyItemDataPushCategory::getInstance()->execute();
     PlentyItemDataPushWarehouse::getInstance()->execute();
     PlentyItemDataPushProducer::getInstance()->execute();
     $this->warehouseId = PlentyItemDataPushWarehouse::getInstance()->getFirstWarehouseId();
 }
 public function execute()
 {
     foreach (array_keys($this->urlList) as $category) {
         $this->getLogger()->debug(__FUNCTION__ . ' current category: ' . $category);
         /*
          * check category
          */
         $categoryId = PlentyItemDataPushCategory::getInstance()->checkCategoryLevel1($category);
         if (!$categoryId) {
             /*
              * save category
              */
             PlentyItemDataPushCategory::getInstance()->saveNewCategoryLevel1($category);
             $categoryId = PlentyItemDataPushCategory::getInstance()->checkCategoryLevel1($category);
         }
         if ($categoryId > 0) {
             foreach ($this->urlList[$category] as $url) {
                 $itemUrls = $this->getItemUrlList($url);
                 if (isset($itemUrls) && is_array($itemUrls)) {
                     foreach ($itemUrls as $itemUrl) {
                         if (count($this->itemList) > 0 && $this->quantity <= count($this->itemList)) {
                             $this->getLogger()->debug(__FUNCTION__ . ' quantity ' . $this->quantity . ' reached');
                             break 3;
                         } else {
                             $this->generateItem($categoryId, $itemUrl);
                             /*
                              * sleep a while 
                              */
                             usleep(500000);
                         }
                     }
                 }
             }
         } else {
             $this->getLogger()->crit(__FUNCTION__ . ' I can not add a new category. I will shut down.');
             exit;
         }
     }
 }