ExperimentManager.java
2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.example.mina.client.base;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
/**
* @author BenJin Yin
* @date 2021/4/6
*/
@Slf4j
public class ExperimentManager<T extends AbstractExperimentFactory> {
private final ConcurrentMap<String, T> experimentFactories;
private final ConcurrentMap<String, Experiment<? extends MatrixClient,? extends ExperimentOptions>> experiments
= new ConcurrentHashMap<>(8);
public ExperimentManager(ConcurrentMap<String, T> experimentFactories) {
this.experimentFactories = experimentFactories;
}
public Experiment<? extends MatrixClient,? extends ExperimentOptions> getExperiment(String experimentId) {
return experiments.getOrDefault(experimentId, null);
}
public void stopExperiment(String experimentId) {
Experiment<? extends MatrixClient,? extends ExperimentOptions> t = getExperiment(experimentId);
if (t != null && t.isContinue()) {
t.finish();
experiments.remove(experimentId);
}
}
public T getClientFactory(String name) {
return this.experimentFactories.get(name);
}
public Experiment<? extends MatrixClient,? extends ExperimentOptions> getOrCreateExperiment(MatrixClient client, ExperimentOptions options) {
Assert.notNull(client, "matrix connect config is null");
Assert.hasLength(client.getDeviceId(), "deviceId can not be empty");
String deviceId = client.getDeviceId();
Experiment<? extends MatrixClient,? extends ExperimentOptions> experiment = experiments.get(options.getExperimentId());
if (experiment != null) {
return experiment;
}
if (!experimentFactories.containsKey(deviceId)) {
log.error("the matrix type is not supported by the system! matrix type is: " + deviceId);
throw new RuntimeException("the matrix type is not supported by the system! matrix type is: " + deviceId);
}
T t = experimentFactories.get(deviceId);
experiment = t.createExperiment(client, options);
experiments.put(options.experimentId, experiment);
return experiment;
}
}