diff options
author | Andrew Pellegrini <apell@google.com> | 2015-06-25 17:12:49 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2015-06-26 15:29:53 +0000 |
commit | d13716a201b2dcfe952e843ffcc566056519aaa5 (patch) | |
tree | 8f6fd28465854ed94d5915e73a746a2fa651f70d /src/tools/android/java/com/google/devtools/build/android/Converters.java | |
parent | 643063d582dcf346f276680288b11f958f5c551d (diff) |
Open source AarGeneratorAction and AndroidResourceProcessingAction.
--
MOS_MIGRATED_REVID=96883818
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/Converters.java')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/Converters.java | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/Converters.java b/src/tools/android/java/com/google/devtools/build/android/Converters.java new file mode 100644 index 0000000000..0cb7c3d7bb --- /dev/null +++ b/src/tools/android/java/com/google/devtools/build/android/Converters.java @@ -0,0 +1,157 @@ +// Copyright 2015 Google Inc. 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.android; + +import com.google.common.collect.ImmutableList; +import com.google.devtools.common.options.Converter; +import com.google.devtools.common.options.EnumConverter; +import com.google.devtools.common.options.OptionsParsingException; + +import com.android.builder.core.VariantConfiguration; +import com.android.builder.core.VariantConfiguration.Type; +import com.android.sdklib.repository.FullRevision; + +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; +import java.util.List; + +/** + * Some convenient converters used by android actions. Note: These are specific to android actions. + */ +public final class Converters { + /** + * Converter for {@link UnvalidatedAndroidData}. Relies on + * {@code UnvalidatedAndroidData#valueOf(String)} to perform conversion and validation. + */ + public static class UnvalidatedAndroidDataConverter implements Converter<UnvalidatedAndroidData> { + + @Override + public UnvalidatedAndroidData convert(String input) throws OptionsParsingException { + try { + return UnvalidatedAndroidData.valueOf(input); + } catch (IllegalArgumentException e) { + throw new OptionsParsingException("invalid UnvalidatedAndroidData specification", e); + } + } + + @Override + public String getTypeDescription() { + return "unvalidated android data in the format " + + "resources[#resources]:assets[#assets]:manifest"; + } + } + + /** + * Converter for a list of {@link DependencyAndroidData}. Relies on + * {@code DependencyAndroidData#valueOf(String)} to perform conversion and validation. + */ + public static class DependencyAndroidDataListConverter + implements Converter<List<DependencyAndroidData>> { + + @Override + public List<DependencyAndroidData> convert(String input) throws OptionsParsingException { + if (input.isEmpty()) { + return ImmutableList.<DependencyAndroidData>of(); + } + try { + ImmutableList.Builder<DependencyAndroidData> builder = ImmutableList.builder(); + for (String item : input.split(",")) { + builder.add(DependencyAndroidData.valueOf(item)); + } + return builder.build(); + } catch (IllegalArgumentException e) { + throw new OptionsParsingException("invalid DependencyAndroidData", e); + } + } + + @Override + public String getTypeDescription() { + return "a list of dependency android data in the format " + + "resources[#resources]:assets[#assets]:manifest:r.txt" + + "[,resources[#resources]:assets[#assets]:manifest:r.txt]"; + } + } + + /** + * Converter for {@link FullRevision}. Relies on {@code FullRevision#parseRevision(String)} to + * perform conversion and validation. + */ + public static class FullRevisionConverter implements Converter<FullRevision> { + + @Override + public FullRevision convert(String input) throws OptionsParsingException { + try { + return FullRevision.parseRevision(input); + } catch (NumberFormatException e) { + throw new OptionsParsingException(e.getMessage()); + } + } + + @Override + public String getTypeDescription() { + return "a revision number"; + } + } + + /** Validating converter for Paths. A Path is considered valid if it resolves to a file. */ + public static class PathConverter implements Converter<Path> { + + private final boolean mustExist; + + public PathConverter() { + this.mustExist = false; + } + + protected PathConverter(boolean mustExist) { + this.mustExist = mustExist; + } + + @Override + public Path convert(String input) throws OptionsParsingException { + try { + Path path = FileSystems.getDefault().getPath(input); + if (mustExist && !Files.exists(path)) { + throw new OptionsParsingException(String.format("%s is not a valid path.", input)); + } + return path; + } catch (InvalidPathException e) { + throw new OptionsParsingException(String.format("%s is not a valid path.", input), e); + } + } + + @Override + public String getTypeDescription() { + return "a valid filesystem path"; + } + } + + /** + * Validating converter for Paths. A Path is considered valid if it resolves to a file and exists. + */ + public static class ExistingPathConverter extends PathConverter { + public ExistingPathConverter() { + super(true); + } + } + + /** Converter for {@link VariantConfiguration}.{@link Type}. */ + public static class VariantConfigurationTypeConverter + extends EnumConverter<VariantConfiguration.Type> { + public VariantConfigurationTypeConverter() { + super(VariantConfiguration.Type.class, "variant configuration type"); + } + } +} |