// Copyright Vespa.ai. 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.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Optional; /** * Represents a subset of a file's content, owner, group, and permissions. * * @author hakonhall */ // @Immutable public class PartialFileData { private final Optional content; private final Optional ownerId; private final Optional groupId; private final Optional permissions; public static Builder builder() { return new Builder(); } private PartialFileData(Optional content, Optional ownerId, Optional groupId, Optional permissions) { this.content = content; this.ownerId = ownerId; this.groupId = groupId; this.permissions = permissions; } public Optional getContent() { return content; } public Optional getOwnerId() { return ownerId; } public Optional getGroupId() { return groupId; } public Optional getPermissions() { return permissions; } public static class Builder { private Optional content = Optional.empty(); private Optional ownerId = Optional.empty(); private Optional groupId = Optional.empty(); private Optional permissions = Optional.empty(); public Builder withContent(byte[] content) { this.content = Optional.of(content); return this; } public Builder withContent(String content, Charset charset) { return withContent(content.getBytes(charset)); } public Builder withContent(String content) { return withContent(content, StandardCharsets.UTF_8); } public Builder withOwnerId(int ownerId) { this.ownerId = Optional.of(ownerId); return this; } public Builder withGroupId(int groupId) { this.groupId = Optional.of(groupId); return this; } public Builder withPermissions(String permissions) { this.permissions = Optional.of(permissions); return this; } public PartialFileData create() { return new PartialFileData(content, ownerId, groupId, permissions); } } }