aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CertifiedOsVersionSerializer.java
blob: 8fd696cffc4a932264100fcc39a5a02b0a7904cd (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
46
47
48
49
50
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.persistence;

import com.yahoo.component.Version;
import com.yahoo.config.provision.CloudName;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.vespa.hosted.controller.versions.CertifiedOsVersion;
import com.yahoo.vespa.hosted.controller.versions.OsVersion;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * Serializer for {@link com.yahoo.vespa.hosted.controller.versions.CertifiedOsVersion}.
 *
 * @author mpolden
 */
public class CertifiedOsVersionSerializer {

    private static final String versionField = "version";
    private static final String cloudField = "cloud";
    private static final String vespaVersionField = "vespaVersion";

    public Slime toSlime(Set<CertifiedOsVersion> versions) {
        Slime slime = new Slime();
        Cursor array = slime.setArray();
        for (var version : versions) {
            Cursor root = array.addObject();
            root.setString(versionField, version.osVersion().version().toFullString());
            root.setString(cloudField, version.osVersion().cloud().value());
            root.setString(vespaVersionField, version.vespaVersion().toFullString());
        }
        return slime;
    }

    public Set<CertifiedOsVersion> fromSlime(Slime slime) {
        Cursor array = slime.get();
        Set<CertifiedOsVersion> certifiedOsVersions = new HashSet<>();
        array.traverse((ArrayTraverser) (idx, object) -> certifiedOsVersions.add(
                new CertifiedOsVersion(new OsVersion(Version.fromString(object.field(versionField).asString()),
                                                     CloudName.from(object.field(cloudField).asString())),
                                       Version.fromString(object.field(vespaVersionField).asString())))
        );
        return Collections.unmodifiableSet(certifiedOsVersions);
    }

}