All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.davidmoten.rx.SchedulerWithId Maven / Gradle / Ivy

package com.github.davidmoten.rx;

import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import rx.Scheduler;
import rx.Subscription;
import rx.functions.Action0;

public class SchedulerWithId extends Scheduler {

    private final Scheduler scheduler;
    private final String id;
    private final static Pattern pattern = Pattern.compile("\\bschedId=\\[[^\\]]+\\]+\\b");

    public SchedulerWithId(Scheduler scheduler, String id) {
        this.scheduler = scheduler;
        this.id = "[" + id + "]";
    }

    @Override
    public Worker createWorker() {

        final Worker worker = scheduler.createWorker();
        Worker w = new Worker() {

            @Override
            public void unsubscribe() {
                worker.unsubscribe();
            }

            @Override
            public boolean isUnsubscribed() {
                return worker.isUnsubscribed();
            }

            @Override
            public Subscription schedule(final Action0 action) {
                Action0 a = new Action0() {
                    @Override
                    public void call() {
                        setThreadName();
                        action.call();
                    }
                };
                return worker.schedule(a);
            }

            @Override
            public Subscription schedule(final Action0 action, long delayTime, TimeUnit unit) {
                Action0 a = new Action0() {
                    @Override
                    public void call() {
                        setThreadName();
                        action.call();
                    }
                };
                return worker.schedule(a, delayTime, unit);
            }

        };
        return w;

    }

    private void setThreadName() {
        String name = Thread.currentThread().getName();
        String newName = updateNameWithId(name, id);
        Thread.currentThread().setName(newName);
    }

    private static String updateNameWithId(String name, String id) {
        final String newName;
        if (name == null) {
            newName = id;
        } else {
            Matcher matcher = pattern.matcher(name);
            if (matcher.find()) {
                newName = name.replace(matcher.group(), "schedId=" + id);
            } else {
                newName = name + "|schedId=" + id;
            }
        }
        return newName;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy