blob: 30fd4e36a0d4fd62403571e27f3ad25ccc6b398a [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* 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.android.jill.api;
import java.util.Collection;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
/**
* Provides instances of {@link JillConfig}.
*/
public interface JillProvider {
/**
* Creates a {@link JillConfig} instance for an interface representing a {@link JillConfig} API
* version.
* @param cls the {@link JillConfig} API interface
* @return the {@link JillConfig} instance
* @throws ConfigNotSupportedException If no implementation is found for the given interface.
*/
@Nonnull
<T extends JillConfig> T createConfig(@Nonnull Class<T> cls) throws ConfigNotSupportedException;
/**
* Returns whether an interface representing a {@link JillConfig} API version is supported.
*
* @param cls the {@link JillConfig} API interface
* @return <code>true</true> if the config is supported
*/
@Nonnull
<T extends JillConfig> boolean isConfigSupported(@Nonnull Class<T> cls);
/**
* Gives a {@link Collection} containing supported {@link JillConfig} API versions.
* @return the supported {@link JillConfig} API versions
*/
@Nonnull
Collection<Class<? extends JillConfig>> getSupportedConfigs();
/**
* Gives the version of this Jill, summarized in one string (e.g. "1.1-rc1", "2.0-a2",
* ...).
*
* @return the version
*/
@Nonnull
String getTranslatorVersion();
/**
* Gives the release name of this Jill (e.g. Arzon, Brest, ...).
*
* @return the release name
*/
@Nonnull
String getTranslatorReleaseName();
/**
* Gives an integer value that represents the release of this Jill, relative to other
* releases.
*
* @return the release code
*/
@Nonnegative
int getTranslatorReleaseCode();
/**
* Gives an integer value that represents the sub-release of this Jill, relative to other
* sub-releases of the same release.
*
* @return the sub-release code
*/
@Nonnegative
int getTranslatorSubReleaseCode();
/**
* Gives the kind of sub-release of this Jill.
*
* @return the sub-release kind
*/
@Nonnull
SubReleaseKind getTranslatorSubReleaseKind();
/**
* The kind of sub-release.
*/
public enum SubReleaseKind {
/**
* A sub-release from an engineering development, not tested, not in the code base repository.
*/
ENGINEERING,
/**
* A sub-release that is not feature complete, not tested.
*/
PRE_ALPHA,
/**
* A sub-release that is not feature complete, tested.
*/
ALPHA,
/**
* A sub-release that is feature complete, tested, but likely contains known or unknown bugs.
*/
BETA,
/**
* A pre-production sub-release, tested.
*/
CANDIDATE,
/**
* A production and stable sub-release.
*/
RELEASE;
}
/**
* The build ID of this Jill.
* @return the build ID, or null if not available
*/
@CheckForNull
String getTranslatorBuildId();
/**
* Identify the source code base of this Jill.
* @return the source code base, or null if not available
*/
@CheckForNull
String getTranslatorSourceCodeBase();
}