Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clarify the contract of features and capabilities #9740

Merged
merged 1 commit into from
Jun 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 81 additions & 34 deletions core/deployment/src/main/java/io/quarkus/deployment/Capabilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,48 +3,75 @@
import java.util.Set;

import io.quarkus.builder.item.SimpleBuildItem;
import io.quarkus.deployment.builditem.CapabilityBuildItem;

/**
* The list of capabilities.
* This build items holds the set of registered capabilities.
*
* @see CapabilityBuildItem
*/
public final class Capabilities extends SimpleBuildItem {

public static final String AGROAL = "io.quarkus.agroal";
public static final String CDI_ARC = "io.quarkus.cdi";
public static final String SERVLET = "io.quarkus.servlet";
public static final String TRANSACTIONS = "io.quarkus.transactions";
public static final String JACKSON = "io.quarkus.jackson";
public static final String JSONB = "io.quarkus.jsonb";
public static final String REST_JACKSON = "io.quarkus.rest.jackson";
public static final String REST_JSONB = "io.quarkus.rest.jsonb";
public static final String RESTEASY_JSON_EXTENSION = "io.quarkus.resteasy-json";
public static final String RESTEASY = "io.quarkus.resteasy";
public static final String JWT = "io.quarkus.jwt";
public static final String TIKA = "io.quarkus.tika";
public static final String MONGODB_PANACHE = "io.quarkus.mongodb.panache";
public static final String FLYWAY = "io.quarkus.flyway";
public static final String LIQUIBASE = "io.quarkus.liquibase";
public static final String SECURITY = "io.quarkus.security";
public static final String SECURITY_ELYTRON_OAUTH2 = "io.quarkus.elytron.security.oauth2";
public static final String SECURITY_ELYTRON_JDBC = "io.quarkus.elytron.security.jdbc";
public static final String SECURITY_ELYTRON_LDAP = "io.quarkus.elytron.security.ldap";
public static final String SECURITY_JPA = "io.quarkus.security.jpa";
public static final String QUARTZ = "io.quarkus.quartz";
public static final String METRICS = "io.quarkus.metrics";
public static final String RESTEASY_MUTINY_EXTENSION = "io.quarkus.resteasy-mutiny";
public static final String CONTAINER_IMAGE_JIB = "io.quarkus.container-image-jib";
public static final String CONTAINER_IMAGE_DOCKER = "io.quarkus.container-image-docker";
public static final String CONTAINER_IMAGE_S2I = "io.quarkus.container-image-s2i";
public static final String HIBERNATE_ORM = "io.quarkus.hibernate-orm";
public static final String SMALLRYE_OPENTRACING = "io.quarkus.opentracing";
public static final String HIBERNATE_REACTIVE = "io.quarkus.hibernate-reactive";
// The following constants will be removed at some point post Quarkus 1.6
@Deprecated
public static final String AGROAL = Capability.AGROAL.getName();
@Deprecated
public static final String CDI_ARC = Capability.CDI.getName();
@Deprecated
public static final String SERVLET = Capability.SERVLET.getName();
@Deprecated
public static final String TRANSACTIONS = Capability.TRANSACTIONS.getName();
@Deprecated
public static final String JACKSON = Capability.JACKSON.getName();
@Deprecated
public static final String JSONB = Capability.JSONB.getName();
@Deprecated
public static final String REST_JACKSON = Capability.REST_JACKSON.getName();
@Deprecated
public static final String REST_JSONB = Capability.REST_JSONB.getName();
@Deprecated
public static final String RESTEASY_JSON_EXTENSION = Capability.RESTEASY_JSON.getName();
@Deprecated
public static final String RESTEASY = Capability.RESTEASY.getName();
@Deprecated
public static final String JWT = Capability.JWT.getName();
@Deprecated
public static final String TIKA = Capability.TIKA.getName();
@Deprecated
public static final String MONGODB_PANACHE = Capability.MONGODB_PANACHE.getName();
@Deprecated
public static final String FLYWAY = Capability.FLYWAY.getName();
@Deprecated
public static final String LIQUIBASE = Capability.LIQUIBASE.getName();
@Deprecated
public static final String SECURITY = Capability.SECURITY.getName();
@Deprecated
public static final String SECURITY_ELYTRON_OAUTH2 = Capability.SECURITY_ELYTRON_OAUTH2.getName();
@Deprecated
public static final String SECURITY_ELYTRON_JDBC = Capability.SECURITY_ELYTRON_JDBC.getName();
@Deprecated
public static final String SECURITY_ELYTRON_LDAP = Capability.SECURITY_ELYTRON_LDAP.getName();
@Deprecated
public static final String SECURITY_JPA = Capability.SECURITY_JPA.getName();
@Deprecated
public static final String QUARTZ = Capability.QUARTZ.getName();
@Deprecated
public static final String METRICS = Capability.METRICS.getName();
@Deprecated
public static final String RESTEASY_MUTINY_EXTENSION = Capability.RESTEASY_MUTINY.getName();
@Deprecated
public static final String CONTAINER_IMAGE_JIB = Capability.CONTAINER_IMAGE_JIB.getName();
@Deprecated
public static final String CONTAINER_IMAGE_DOCKER = Capability.CONTAINER_IMAGE_DOCKER.getName();
@Deprecated
public static final String CONTAINER_IMAGE_S2I = Capability.CONTAINER_IMAGE_S2I.getName();
@Deprecated
public static final String HIBERNATE_ORM = Capability.HIBERNATE_ORM.getName();
@Deprecated
public static final String SMALLRYE_OPENTRACING = Capability.SMALLRYE_OPENTRACING.getName();

private final Set<String> capabilities;

public boolean isCapabilityPresent(String capability) {
return capabilities.contains(capability);
}

public Capabilities(Set<String> capabilities) {
this.capabilities = capabilities;
}
Expand All @@ -53,4 +80,24 @@ public Set<String> getCapabilities() {
return capabilities;
}

public boolean isCapabilityPresent(String capability) {
return isPresent(capability);
}

public boolean isPresent(Capability capability) {
return isPresent(capability.getName());
}

public boolean isPresent(String capability) {
return capabilities.contains(capability);
}

public boolean isMissing(String capability) {
return !isPresent(capability);
}

public boolean isMissing(Capability capability) {
return isMissing(capability.getName());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package io.quarkus.deployment;

/**
* Represents a capability of a core extension.
*/
public enum Capability {

/**
* A datasource connection pool implementation
*/
AGROAL,
/**
* JSR 365 compatible contexts and dependency injection
*/
CDI,
/**
* Java Servlet API
*/
SERVLET,
/**
* Java Transaction API (JTA)
*/
TRANSACTIONS,
JACKSON,
JSONB,
REST_JACKSON,
REST_JSONB,
RESTEASY,
RESTEASY_JSON,
RESTEASY_MUTINY,
JWT,
TIKA,
MONGODB_PANACHE,
FLYWAY,
LIQUIBASE,
SECURITY,
SECURITY_ELYTRON_OAUTH2,
SECURITY_ELYTRON_JDBC,
SECURITY_ELYTRON_LDAP,
SECURITY_JPA,
QUARTZ,
METRICS,
CONTAINER_IMAGE_JIB,
CONTAINER_IMAGE_DOCKER,
CONTAINER_IMAGE_S2I,
HIBERNATE_ORM,
HIBERNATE_REACTIVE,
SMALLRYE_OPENTRACING,
;

/**
*
* @return the name
*/
public String getName() {
return "io.quarkus." + toString().toLowerCase().replace("_", ".");
}

}
125 changes: 125 additions & 0 deletions core/deployment/src/main/java/io/quarkus/deployment/Feature.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package io.quarkus.deployment;

import io.quarkus.deployment.builditem.FeatureBuildItem;

/**
* Represents a feature provided by a core extension.
*
* @see FeatureBuildItem
*/
public enum Feature {

AGROAL,
AMAZON_DYNAMODB,
AMAZON_LAMBDA,
AMAZON_S3,
AMAZON_SNS,
AMAZON_SQS,
AMAZON_SES,
AMAZON_KMS,
ARTEMIS_CORE,
ARTEMIS_JMS,
CACHE,
CDI,
CONFIG_YAML,
CONSUL_CONFIG,
ELASTICSEARCH_REST_CLIENT,
FLYWAY,
GRPC_CLIENT,
GRPC_SERVER,
HIBERNATE_ORM,
HIBERNATE_ORM_PANACHE,
HIBERNATE_ORM_PANACHE_KOTLIN,
HIBERNATE_ORM_REST_DATA_PANACHE,
HIBERNATE_REACTIVE,
HIBERNATE_SEARCH_ELASTICSEARCH,
HIBERNATE_VALIDATOR,
INFINISPAN_CLIENT,
INFINISPAN_EMBEDDED,
JAEGER,
JDBC_DERBY,
JDBC_H2,
JDBC_POSTGRESQL,
JDBC_MARIADB,
JDBC_MSSQL,
JDBC_MYSQL,
JGIT,
JSCH,
KAFKA_STREAMS,
KEYCLOAK_AUTHORIZATION,
KOTLIN,
KUBERNETES,
KUBERNETES_CLIENT,
LIQUIBASE,
LOGGING_GELF,
MAILER,
MONGODB_CLIENT,
MONGODB_PANACHE,
MUTINY,
NARAYANA_JTA,
NARAYANA_STM,
REACTIVE_PG_CLIENT,
REACTIVE_MYSQL_CLIENT,
REACTIVE_DB2_CLIENT,
NEO4J,
OIDC,
OPTAPLANNER,
OPTAPLANNER_JACKSON,
OPTAPLANNER_JSONB,
PICOCLI,
QUTE,
RESTEASY,
RESTEASY_JACKSON,
RESTEASY_JAXB,
RESTEASY_JSONB,
RESTEASY_MUTINY,
RESTEASY_QUTE,
REST_CLIENT,
REST_CLIENT_JACKSON,
REST_CLIENT_JAXB,
REST_CLIENT_JSONB,
SCALA,
SCHEDULER,
SECURITY,
SECURITY_JDBC,
SECURITY_LDAP,
SECURITY_JPA,
SECURITY_PROPERTIES_FILE,
SECURITY_OAUTH2,
SERVLET,
SMALLRYE_CONTEXT_PROPAGATION,
SMALLRYE_FAULT_TOLERANCE,
SMALLRYE_HEALTH,
SMALLRYE_JWT,
SMALLRYE_METRICS,
SMALLRYE_OPENAPI,
SMALLRYE_OPENTRACING,
SMALLRYE_REACTIVE_MESSAGING,
SMALLRYE_REACTIVE_MESSAGING_KAFKA,
SMALLRYE_REACTIVE_MESSAGING_AMQP,
SMALLRYE_REACTIVE_MESSAGING_MQTT,
SMALLRYE_REACTIVE_STREAMS_OPERATORS,
SMALLRYE_REACTIVE_TYPE_CONVERTERS,
SMALLRYE_GRAPHQL,
SPRING_DI,
SPRING_WEB,
SPRING_DATA_JPA,
SPRING_SECURITY,
SPRING_BOOT_PROPERTIES,
SPRING_CACHE,
SPRING_CLOUD_CONFIG_CLIENT,
SWAGGER_UI,
TIKA,
UNDERTOW_WEBSOCKETS,
VAULT,
VERTX,
VERTX_WEB,
VERTX_GRAPHQL,
WEBJARS_LOCATOR,
;

public String getName() {
return toString().toLowerCase().replace("_", "-");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,31 @@

import io.quarkus.builder.item.MultiBuildItem;
import io.quarkus.deployment.Capabilities;
import io.quarkus.deployment.Capability;

/**
* Registers an internal feature.
* Represents a technical capability that can be queried by other extensions.
* <p>
* Build steps can inject {@link Capabilities} - a convenient build item that holds the set of registered capabilities.
* <p>
* An extension may provide multiple capabilities. Multiple extensions can provide the same capability. By default, capabilities
* are not displayed to users.
* <p>
* Capabilities should follow the naming conventions of Java packages; e.g. {@code io.quarkus.security.jpa}. Capabilities
* provided by core extensions should be listed in the {@link Capability} enum and their name should always start with the
* {@code io.quarkus} prefix.
*
* @see Capabilities#isCapabilityPresent(String)
* @see Capabilities
* @see Capability
*/
public final class CapabilityBuildItem extends MultiBuildItem {

private final String name;

public CapabilityBuildItem(Capability capability) {
this(capability.getName());
}

public CapabilityBuildItem(String name) {
if (name == null) {
throw new IllegalArgumentException("name cannot be null");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package io.quarkus.deployment.builditem;

import io.quarkus.builder.item.MultiBuildItem;
import io.quarkus.deployment.Feature;

public final class ExtensionSslNativeSupportBuildItem extends MultiBuildItem {

private String extension;

public ExtensionSslNativeSupportBuildItem(Feature feature) {
this(feature.getName());
}

public ExtensionSslNativeSupportBuildItem(String extension) {
this.extension = extension;
}
Expand Down
Loading