blob: c90b37a4c2acc3bb2c75b734a06f1cd7f157a4a9 (
plain) (
blame)
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
|
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.service.duper;
import com.yahoo.config.model.api.ApplicationInfo;
import com.yahoo.config.provision.ApplicationId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
* A non-thread-safe mutable container of ApplicationInfo in the DuperModel, also taking care of listeners on changes.
*
* @author hakonhall
*/
public class DuperModel {
private final Map<ApplicationId, ApplicationInfo> applications = new TreeMap<>();
private final List<DuperModelListener> listeners = new ArrayList<>();
public void registerListener(DuperModelListener listener) {
applications.values().forEach(listener::applicationActivated);
listeners.add(listener);
}
public boolean contains(ApplicationId applicationId) {
return applications.containsKey(applicationId);
}
public void add(ApplicationInfo applicationInfo) {
applications.put(applicationInfo.getApplicationId(), applicationInfo);
listeners.forEach(listener -> listener.applicationActivated(applicationInfo));
}
public void remove(ApplicationId applicationId) {
if (applications.remove(applicationId) != null) {
listeners.forEach(listener -> listener.applicationRemoved(applicationId));
}
}
public List<ApplicationInfo> getApplicationInfos() {
return Collections.unmodifiableList(new ArrayList<>(applications.values()));
}
}
|