summaryrefslogtreecommitdiffstats
path: root/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java
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()));
    }
}