diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2018-07-30 16:14:47 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2018-07-30 16:14:47 +0200 |
commit | 81012d2a0dd1e1c431751f0c478061c6d950b30c (patch) | |
tree | ecfedc9603ac9952d8f40b53ac9682d1f074e08a /node-admin | |
parent | 02c02dbb63c7f7b2d25d699113e80b6e22e7eaa6 (diff) |
Add StoredInteger
Diffstat (limited to 'node-admin')
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/StoredInteger.java | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/StoredInteger.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/StoredInteger.java new file mode 100644 index 00000000000..61c0624e6a9 --- /dev/null +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/StoredInteger.java @@ -0,0 +1,52 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.node.admin.task.util.file; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; +import java.util.OptionalInt; +import java.util.function.Supplier; + +/** + * Class wrapping an integer stored on disk + * + * @author freva + */ +public class StoredInteger implements Supplier<OptionalInt> { + + private final Path path; + private OptionalInt value; + private boolean hasBeenRead = false; + + public StoredInteger(Path path) { + this.path = path; + } + + @Override + public OptionalInt get() { + if (!hasBeenRead) { + try { + String value = new String(Files.readAllBytes(path)); + this.value = OptionalInt.of(Integer.valueOf(value)); + } catch (NoSuchFileException e) { + this.value = OptionalInt.empty(); + } catch (IOException e) { + throw new UncheckedIOException("Failed to read integer in " + path, e); + } + hasBeenRead = true; + } + return value; + } + + public void write(int value) { + try { + Files.write(path, Integer.toString(value).getBytes()); + this.value = OptionalInt.of(value); + this.hasBeenRead = true; + } catch (IOException e) { + throw new UncheckedIOException("Failed to store integer in " + path, e); + } + } +} |