package newWatchingService;

import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

/**Сервис отслеживает изменения в директории синхронизации
 * (для этого надо выбрать в настройках в приложении папку синхронизации)
 *Для отслеживания события переименования сервис реализован паттерном consumer-producer.
 * Стандартные события java.nio watchingService не включают переименования.
 * Переименование выглядит как удаление старого файла и создание нового.
 * Producer отслеживает изменения в папке и добавляет события в очередь
 * Consumer переодически проверяет очередь, обрабатывает события оттуда, определяет было ли переименование
 * и вызывает слушателей. Принцип такой: в очередь добавляются события, но обрабатываются не сразу, а через промежуток
 * DELAY. если в очереди два события и первое ENTRY_DELETE а второе ENTRY_CREATE то значет было переименование. Иначе события
 * интерпретируются как есть. DELAY подобран так что вручную удалить и создать файл так быстро не возможно.
 *
 * @author Cloudraid Dev Team (cloudraid.stnetix.com)
 */
public class Service {
    Queue<ChangeEvent> queue;
    EventProducer producer;
    EventsConsumer consumer;

    public Service(){
        queue = new ArrayBlockingQueue<>(100);
        try {
            producer = new EventProducer(queue);
            consumer = new EventsConsumer(queue);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void start(){
        new Thread(producer).start();
        new Thread(consumer).start();
    }

    public void addConsumerEventListner(ChangeSyncFolderListener listener){
        consumer.addEventListeners(listener);
    }
}

@@ -1029,16 +1029,115 @@
 %D0%B6%D0%BD%D0%BE.%0A *%0A
+ * TODO %D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C %D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83 %D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F, %D1%82.%D0%BA. %D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B8%D1%80%D1%83%D1%8E%D1%82%D1%81%D1%8F 2 %D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F ENTRY_CREATE %D0%B8 ENTRY_MODIFY%0A *%0A
  * @auth

Update new Watch Service with producer-consumer pattern, add TODO