| // 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; |
| } |
| } |
| } |