<commit_before>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 (<EMAIL>)
 */
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);
    }
}
<commit_msg>Update new Watch Service with producer-consumer pattern, add TODO<commit_after>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 подобран так что вручную удалить и создать файл так быстро не возможно.
 *
 * TODO добавить обработку копирования, т.к. генерируются 2 события ENTRY_CREATE и ENTRY_MODIFY
 *
 * @author Cloudraid <NAME> (<EMAIL>)
 */
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);
    }
}

{'fraction_non_alphanumeric': 0.06425591098748261, 'fraction_numerical': 0.0019471488178025036, 'mean_word_length': 3.912568306010929, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 10, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2641959', 'n_tokens_mistral': 1185, 'n_tokens_neox': 1337, 'n_words': 340}