blob: 8f2b89f9a2f02ce80b0a95d47a658cdee3b970f1 [file] [log] [blame]
// Copyright 2015 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.build.lib.bazel.repository;
import com.google.common.base.Optional;
import com.google.devtools.build.lib.bazel.repository.DecompressorValue.Decompressor;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
import com.google.devtools.build.lib.vfs.Path;
import java.util.Objects;
import javax.annotation.Nullable;
/**
* Description of an archive to be decompressed.
* TODO(bazel-team): this should be an autovalue class.
*/
public class DecompressorDescriptor {
private final String targetKind;
private final String targetName;
private final Path archivePath;
private final Path repositoryPath;
private final Optional<String> prefix;
private final boolean executable;
private final Decompressor decompressor;
private DecompressorDescriptor(
String targetKind, String targetName, Path archivePath, Path repositoryPath,
@Nullable String prefix, boolean executable, Decompressor decompressor) {
this.targetKind = targetKind;
this.targetName = targetName;
this.archivePath = archivePath;
this.repositoryPath = repositoryPath;
this.prefix = Optional.fromNullable(prefix);
this.executable = executable;
this.decompressor = decompressor;
}
public String targetKind() {
return targetKind;
}
public String targetName() {
return targetName;
}
public Path archivePath() {
return archivePath;
}
public Path repositoryPath() {
return repositoryPath;
}
public Optional<String> prefix() {
return prefix;
}
public boolean executable() {
return executable;
}
public Decompressor getDecompressor() {
return decompressor;
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (!(other instanceof DecompressorDescriptor)) {
return false;
}
DecompressorDescriptor descriptor = (DecompressorDescriptor) other;
return Objects.equals(targetKind, descriptor.targetKind)
&& Objects.equals(targetName, descriptor.targetName)
&& Objects.equals(archivePath, descriptor.archivePath)
&& Objects.equals(repositoryPath, descriptor.repositoryPath)
&& Objects.equals(prefix, descriptor.prefix)
&& Objects.equals(executable, descriptor.executable)
&& decompressor == descriptor.decompressor;
}
@Override
public int hashCode() {
return Objects.hash(targetKind, targetName, archivePath, repositoryPath, prefix);
}
public static Builder builder() {
return new Builder();
}
/**
* Builder for describing the file to be decompressed. The fields set will depend on the type
* of file.
*/
public static class Builder {
private String targetKind;
private String targetName;
private Path archivePath;
private Path repositoryPath;
private String prefix;
private boolean executable;
private Decompressor decompressor;
private Builder() {
}
public DecompressorDescriptor build() throws RepositoryFunctionException {
if (decompressor == null) {
decompressor = DecompressorValue.getDecompressor(archivePath);
}
return new DecompressorDescriptor(
targetKind, targetName, archivePath, repositoryPath, prefix, executable, decompressor);
}
public Builder setTargetKind(String targetKind) {
this.targetKind = targetKind;
return this;
}
public Builder setTargetName(String targetName) {
this.targetName = targetName;
return this;
}
public Builder setArchivePath(Path archivePath) {
this.archivePath = archivePath;
return this;
}
public Builder setRepositoryPath(Path repositoryPath) {
this.repositoryPath = repositoryPath;
return this;
}
public Builder setPrefix(String prefix) {
this.prefix = prefix;
return this;
}
public Builder setExecutable(boolean executable) {
this.executable = executable;
return this;
}
public Builder setDecompressor(Decompressor decompressor) {
this.decompressor = decompressor;
return this;
}
}
}