Moving from enunciate to OpenAPI documentation

This commit is contained in:
Martin Stockhammer 2020-06-22 20:08:22 +02:00
parent 20257a2d59
commit 167c335856
30 changed files with 664 additions and 74 deletions

View File

@ -31,50 +31,43 @@
<properties>
<enunciate.docsDir>${project.build.outputDirectory}/rest-docs-archiva-rest-api</enunciate.docsDir>
<site.staging.base>${project.parent.parent.parent.basedir}</site.staging.base>
<swagger-maven-plugin-version>2.1.2</swagger-maven-plugin-version>
<io.swagger.version>2.1.2</io.swagger.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-security-common</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-repository-admin-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-policies</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>metadata-model</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva.maven</groupId>
<artifactId>archiva-maven-model</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-repository-scanner</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>repository-statistics</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>metadata-statistics-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva.redback</groupId>
<artifactId>redback-authorization-api</artifactId>
@ -89,6 +82,42 @@
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-core</artifactId>
<scope>compile</scope>
<version>${io.swagger.version}</version>
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-jaxrs2</artifactId>
<version>${io.swagger.version}</version>
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${io.swagger.version}</version>
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- normally not needed but here for wadl feature currently in cxf -->
<dependency>
<groupId>org.apache.cxf</groupId>
@ -104,6 +133,17 @@
<build>
<plugins>
<plugin>
<groupId>org.apache.rat</groupId>
<artifactId>apache-rat-plugin</artifactId>
<configuration>
<excludes>
<exclude>target/generated</exclude>
<exclude>src/main/resources/templates/*</exclude>
<exclude>src/main/resources/openapi-codegen-ignore</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
@ -116,7 +156,83 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>${swagger-maven-plugin-version}</version>
<configuration>
<outputFileName>openapi</outputFileName>
<outputPath>${project.build.directory}/generated</outputPath>
<outputFormat>JSONANDYAML</outputFormat>
<resourcePackages>
<package>org.apache.archiva.rest.api</package>
</resourcePackages>
<prettyPrint>TRUE</prettyPrint>
<configurationFilePath>${project.basedir}/src/main/resources/openapi-configuration.yaml</configurationFilePath>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>resolve</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>3.0.20</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.build.directory}/generated/openapi.yaml</inputSpec>
<language>html</language>
<output>${project.build.directory}/generated-sources</output>
<ignoreFileOverride>${project.basedir}/src/main/resources/openapi-codegen-ignore</ignoreFileOverride>
<templateDirectory>${project.basedir}/src/main/resources/templates</templateDirectory>
<supportingFilesToGenerate>index.html,index2.html</supportingFilesToGenerate>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>site</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/site/openapi/</outputDirectory>
<resources>
<resource>
<directory>${project.build.directory}/generated</directory> <!-- source directory -->
<filtering>false</filtering>
<include>openapi.json</include>
<include>openapi.yaml</include>
</resource>
<resource>
<directory>${project.build.directory}/generated-sources/</directory>
<filtering>false</filtering>
<include>**/*</include>
<exclude>.swagger-codegen/**</exclude>
<exclude>.swagger-codegen-ignore</exclude>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

View File

@ -23,6 +23,8 @@
<title>Apache Archiva REST API</title>
<modules>
<obj-c-xml-client disabled="true" />
<csharp-xml-client disabled="true" />
<cxf disabled="false"/>
<jersey disabled="true" />
<c disabled="true"/>

View File

@ -18,6 +18,9 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.admin.model.beans.FileType;
import org.apache.archiva.admin.model.beans.LegacyArtifactPath;
import org.apache.archiva.admin.model.beans.NetworkConfiguration;
@ -42,32 +45,33 @@ import java.util.List;
* @since 1.4-M1
*/
@Path( "/archivaAdministrationService/" )
@Tag( name = "Administration", description = "Admin Service" )
public interface ArchivaAdministrationService
{
@Path( "getLegacyArtifactPaths" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<LegacyArtifactPath> getLegacyArtifactPaths()
List<LegacyArtifactPath> getLegacyArtifactPaths( )
throws ArchivaRestServiceException;
@Path( "deleteLegacyArtifactPath" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean deleteLegacyArtifactPath( @QueryParam( "path" ) String path )
throws ArchivaRestServiceException;
@Path( "addFileTypePattern" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean addFileTypePattern( @QueryParam( "fileTypeId" ) String fileTypeId, @QueryParam( "pattern" ) String pattern )
throws ArchivaRestServiceException;
@Path( "removeFileTypePattern" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean removeFileTypePattern( @QueryParam( "fileTypeId" ) String fileTypeId,
@QueryParam( "pattern" ) String pattern )
@ -75,35 +79,43 @@ public interface ArchivaAdministrationService
@Path( "getFileType" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
FileType getFileType( @QueryParam( "fileTypeId" ) String fileTypeId )
@Operation(
summary = "Return the file type and its patterns",
description = "Returns a object that contains the file type and the configured patterns for this type"
)
FileType getFileType(
@Parameter( name = "fileTypeId", description = "The identifier of the file type",
allowEmptyValue = false, required = true )
@QueryParam( "fileTypeId" ) String fileTypeId )
throws ArchivaRestServiceException;
@Path( "addFileType" )
@POST
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
void addFileType( FileType fileType )
throws ArchivaRestServiceException;
@Path( "removeFileType" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean removeFileType( @QueryParam( "fileTypeId" ) String fileTypeId )
throws ArchivaRestServiceException;
@Path( "enabledKnownContentConsumer/{knownContentConsumer}" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean enabledKnownContentConsumer( @PathParam( "knownContentConsumer" ) String knownContentConsumer )
throws ArchivaRestServiceException;
@Path( "enabledKnownContentConsumers" )
@POST
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
void enabledKnownContentConsumers( List<String> knownContentConsumers )
throws ArchivaRestServiceException;
@ -111,44 +123,44 @@ public interface ArchivaAdministrationService
@Path( "disabledKnownContentConsumer/{knownContentConsumer}" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean disabledKnownContentConsumer( @PathParam( "knownContentConsumer" ) String knownContentConsumer )
throws ArchivaRestServiceException;
@Path( "enabledInvalidContentConsumer/{invalidContentConsumer}" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean enabledInvalidContentConsumer( @PathParam( "invalidContentConsumer" ) String invalidContentConsumer )
throws ArchivaRestServiceException;
@Path( "enabledInvalidContentConsumers" )
@POST
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
void enabledInvalidContentConsumers( List<String> invalidContentConsumers )
throws ArchivaRestServiceException;
@Path( "disabledInvalidContentConsumer/{invalidContentConsumer}" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean disabledInvalidContentConsumer( @PathParam( "invalidContentConsumer" ) String invalidContentConsumer )
throws ArchivaRestServiceException;
@Path( "getFileTypes" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<FileType> getFileTypes()
List<FileType> getFileTypes( )
throws ArchivaRestServiceException;
@Path( "getKnownContentConsumers" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<String> getKnownContentConsumers()
List<String> getKnownContentConsumers( )
throws ArchivaRestServiceException;
/**
@ -156,9 +168,9 @@ public interface ArchivaAdministrationService
*/
@Path( "getKnownContentAdminRepositoryConsumers" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<AdminRepositoryConsumer> getKnownContentAdminRepositoryConsumers()
List<AdminRepositoryConsumer> getKnownContentAdminRepositoryConsumers( )
throws ArchivaRestServiceException;
/**
@ -166,49 +178,49 @@ public interface ArchivaAdministrationService
*/
@Path( "getInvalidContentAdminRepositoryConsumers" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<AdminRepositoryConsumer> getInvalidContentAdminRepositoryConsumers()
List<AdminRepositoryConsumer> getInvalidContentAdminRepositoryConsumers( )
throws ArchivaRestServiceException;
@Path( "getInvalidContentConsumers" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<String> getInvalidContentConsumers()
List<String> getInvalidContentConsumers( )
throws ArchivaRestServiceException;
@Path( "getOrganisationInformation" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN} )
@RedbackAuthorization( noPermission = true, noRestriction = true )
OrganisationInformation getOrganisationInformation()
OrganisationInformation getOrganisationInformation( )
throws ArchivaRestServiceException;
@Path( "setOrganisationInformation" )
@POST
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
void setOrganisationInformation( OrganisationInformation organisationInformation )
throws ArchivaRestServiceException;
@Path( "getUiConfiguration" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
UiConfiguration getUiConfiguration()
UiConfiguration getUiConfiguration( )
throws ArchivaRestServiceException;
@Path( "registrationDisabled" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( noRestriction = true, noPermission = true )
Boolean registrationDisabled()
Boolean registrationDisabled( )
throws ArchivaRestServiceException;
@Path( "setUiConfiguration" )
@POST
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
void setUiConfiguration( UiConfiguration uiConfiguration )
throws ArchivaRestServiceException;
@ -220,20 +232,20 @@ public interface ArchivaAdministrationService
@GET
@Produces( MediaType.TEXT_PLAIN )
@RedbackAuthorization( noRestriction = true, noPermission = true )
String getApplicationUrl()
String getApplicationUrl( )
throws ArchivaRestServiceException;
@Path( "getNetworkConfiguration" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
NetworkConfiguration getNetworkConfiguration()
NetworkConfiguration getNetworkConfiguration( )
throws ArchivaRestServiceException;
@Path( "setNetworkConfiguration" )
@POST
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} )
@RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
void setNetworkConfiguration( NetworkConfiguration networkConfiguration )
throws ArchivaRestServiceException;

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.admin.model.beans.ArchivaRuntimeConfiguration;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.security.common.ArchivaRoleConstants;
@ -34,6 +35,7 @@ import javax.ws.rs.core.MediaType;
* @since 1.4-M4
*/
@Path( "/archivaRuntimeConfigurationService/" )
@Tag( name="Configuration" )
public interface ArchivaRuntimeConfigurationService
{
@Path( "archivaRuntimeConfiguration" )

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.maven2.model.Artifact;
import org.apache.archiva.maven2.model.TreeEntry;
@ -46,6 +47,7 @@ import java.util.List;
* @since 1.4-M3
*/
@Path("/browseService/")
@Tag( name = "Browse", description = "Repository Browse Service")
public interface BrowseService
{
@Path("rootGroups")

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import javax.ws.rs.GET;
@ -33,6 +34,7 @@ import javax.ws.rs.core.MediaType;
* @since 1.4-M3
*/
@Path( "/commonServices/" )
@Tag( name="ArchivaCommon" )
public interface CommonServices
{

View File

@ -19,6 +19,8 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.tags.Tags;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.rest.api.model.ArchivaRepositoryStatistics;
@ -39,6 +41,10 @@ import java.util.List;
* @since 1.4-M1
*/
@Path( "/managedRepositoriesService/" )
@Tags( {
@Tag( name = "ManagedRepositories", description = "Administration for managed repositories" ),
@Tag( name = "Repositories" )
})
public interface ManagedRepositoriesService
{
@Path( "getManagedRepositories" )

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.maven2.model.Artifact;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.security.common.ArchivaRoleConstants;
@ -36,6 +37,7 @@ import java.util.List;
* @since 1.4-M3
*/
@Path ("/mergeRepositoriesService/")
@Tag(name="RepositoryMerge", description = "Merging repositories")
public interface MergeRepositoriesService
{

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.admin.model.beans.NetworkProxy;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.security.common.ArchivaRoleConstants;
@ -36,6 +37,7 @@ import java.util.List;
* @since 1.4-M1
*/
@Path( "/networkProxyService/" )
@Tag(name="Proxy", description = "Managing Network Proxies")
public interface NetworkProxyService
{
@Path( "getNetworkProxies" )

View File

@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import javax.ws.rs.GET;
@ -31,6 +32,7 @@ import javax.ws.rs.core.MediaType;
* @since 1.4-M1
*/
@Path( "/pingService/" )
@Tag(name="Ping")
public interface PingService
{

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import javax.ws.rs.GET;
@ -32,6 +33,7 @@ import javax.ws.rs.core.MediaType;
* @since 1.4.0
*/
@Path("/pluginsService/")
@Tag( name="Plugins" )
public interface PluginsService
{

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.admin.model.beans.ProxyConnectorRule;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.security.common.ArchivaRoleConstants;
@ -37,6 +38,7 @@ import java.util.List;
* @since 1.4-M3
*/
@Path ( "/proxyConnectorRuleService/" )
@Tag(name="Proxy-Repository", description="Handling of proxy repositories that delegate to remote repositories")
public interface ProxyConnectorRuleService
{
@Path ( "proxyConnectorRules" )

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.admin.model.beans.ProxyConnector;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.rest.api.model.PolicyInformation;
@ -39,6 +40,7 @@ import java.util.List;
* @since 1.4-M1
*/
@Path( "/proxyConnectorService/" )
@Tag(name="Proxy-Repository")
public interface ProxyConnectorService
{
@Path( "getProxyConnectors" )

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.admin.model.beans.LdapConfiguration;
import org.apache.archiva.admin.model.beans.RedbackRuntimeConfiguration;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
@ -40,6 +41,7 @@ import java.util.List;
* @since 1.4-M4
*/
@Path("/redbackRuntimeConfigurationService/")
@Tag( name="Redback",description = "Configuration of Redback Backend")
public interface RedbackRuntimeConfigurationService
{
@Path("redbackRuntimeConfiguration")

View File

@ -19,6 +19,8 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.tags.Tags;
import org.apache.archiva.admin.model.beans.RemoteRepository;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.security.common.ArchivaRoleConstants;
@ -37,6 +39,10 @@ import java.util.List;
* @since 1.4-M1
*/
@Path("/remoteRepositoriesService/")
@Tags( {
@Tag( name = "RemoteRepositories", description = "Administration of remote repositories" ),
@Tag( name = "Repositories", description = "Administration of remote repositories" )
})
public interface RemoteRepositoriesService
{
@Path("getRemoteRepositories")

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.metadata.model.facets.RepositoryProblemFacet;
import org.apache.archiva.metadata.repository.stats.model.RepositoryStatistics;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
@ -39,6 +40,7 @@ import java.util.List;
* @since 1.4-M3
*/
@Path( "/reportServices/" )
@Tag( name="Statistics", description = "Statistics and Health reports")
public interface ReportRepositoriesService
{

View File

@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.maven2.model.Artifact;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.repository.scanner.RepositoryScanStatistics;
@ -41,6 +42,7 @@ import javax.ws.rs.core.MediaType;
* @since 1.4-M1
*/
@Path ("/repositoriesService/")
@Tag( name="Repositories", description = "Managing repositories")
public interface RepositoriesService
{

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.admin.model.beans.RepositoryGroup;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.security.common.ArchivaRoleConstants;
@ -37,6 +38,7 @@ import java.util.List;
* @since 1.4-M1
*/
@Path( "/repositoryGroupService/" )
@Tag( name="Repository-Group", description = "Managing of groups of repositories")
public interface RepositoryGroupService
{
@Path( "getRepositoriesGroups" )

View File

@ -20,6 +20,7 @@ package org.apache.archiva.rest.api.services;
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.maven2.model.Artifact;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.rest.api.model.ChecksumSearch;
@ -37,6 +38,7 @@ import javax.ws.rs.core.Response;
import java.util.List;
@Path( "/searchService/" )
@Tag( name="Search", description = "Searching repositories")
public interface SearchService
{
/*

View File

@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services;
* under the License.
*/
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.rest.api.model.CacheEntry;
import org.apache.archiva.rest.api.model.QueueEntry;
@ -36,6 +37,7 @@ import java.util.List;
* @since 1.4-M3
*/
@Path( "/systemStatusService/" )
@Tag( name="System", description = "System information")
public interface SystemStatusService
{
@Path( "memoryStatus" )

View File

@ -0,0 +1,16 @@
resourcePackages:
- org.apache.archiva.rest.api
prettyPrint: true
cacheTTL: 0
openAPI:
info:
version: '3.0'
title: Apache Archiva REST API
description: 'This is the Apache Archiva REST API documentation'
termsOfService: https://archiva.apache.org
contact:
email: dev@archiva.apache.org
url: https://archiva.apache.org/index.html
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html

View File

@ -0,0 +1,4 @@
{{#is this 'body-param'}}<div class="param">{{baseName}} {{#baseType}}<a href="#{{baseType}}">{{baseType}}</a>{{/baseType}} {{^required}}(optional){{/required}}{{#required}}(required){{/required}}</div>
<div class="param-desc"><span class="param-type">Body Parameter</span> &mdash; {{unescapedDescription}} {{#defaultValue}}default: {{{defaultValue}}}{{/defaultValue}}</div>{{/is}}
{{#example}}<div class="param-desc"><span class="param-type">example: <code>{{example}}</code></span></div>{{/example}}

View File

@ -0,0 +1,3 @@
{{#is this 'form-param'}}<div class="param">{{baseName}} {{^required}}(optional){{/required}}{{#required}}(required){{/required}}</div>
<div class="param-desc"><span class="param-type">Form Parameter</span> &mdash; {{unescapedDescription}} {{#defaultValue}}default: {{{defaultValue}}} {{/defaultValue}}{{#dataFormat}}format: {{{dataFormat}}}{{/dataFormat}}</div>{{/is}}

View File

@ -0,0 +1,3 @@
{{#is this 'header-param'}}<div class="param">{{baseName}} {{^required}}(optional){{/required}}{{#required}}(required){{/required}}</div>
<div class="param-desc"><span class="param-type">Header Parameter</span> &mdash; {{unescapedDescription}} {{#defaultValue}}default: {{{defaultValue}}} {{/defaultValue}}{{#dataFormat}}format: {{{dataFormat}}}{{/dataFormat}}</div>{{/is}}

View File

@ -0,0 +1,213 @@
<!doctype html>
<html>
<head>
<title>{{{appName}}}</title>
<style type="text/css">
{{>style.css}}
</style>
</head>
<body>
<h1>{{{appName}}}</h1>
<div class="app-desc">{{{appDescription}}}</div>
{{#infoUrl}}<div class="app-desc">More information: <a href="{{{infoUrl}}}">{{{infoUrl}}}</a></div>{{/infoUrl}}
{{#infoEmail}}<div class="app-desc">Contact Info: <a href="{{{infoEmail}}}">{{{infoEmail}}}</a></div>{{/infoEmail}}
{{#version}}<div class="app-desc">Version: {{{version}}}</div>{{/version}}
{{#basePathWithoutHost}}<div class="app-desc">BasePath:{{basePathWithoutHost}}</div>{{/basePathWithoutHost}}
<div class="license-info">{{{licenseInfo}}}</div>
<div class="license-url">{{{licenseUrl}}}</div>
<h2>Access</h2>
{{#hasAuthMethods}}
<ol>
{{#authMethods}}
<li>{{#is this 'basic'}}HTTP Basic Authentication{{/is}}{{#is this 'oauth'}}OAuth AuthorizationUrl:{{authorizationUrl}}TokenUrl:{{tokenUrl}}{{/is}}{{#is this 'api-key'}}APIKey KeyParamName:{{keyParamName}} KeyInQuery:{{isKeyInQuery}} KeyInHeader:{{isKeyInHeader}}{{/is}}</li>
{{/authMethods}}
</ol>
{{/hasAuthMethods}}
<h2><a name="__Methods">Methods</a></h2>
[ Jump to <a href="#__Models">Models</a> ]
{{! for the tables of content, I cheat and don't use CSS styles.... }}
<h3>Table of Contents </h3>
<div class="method-summary">{{access}}</div>
{{#apiInfo}}
{{#apis}}
{{#operations}}
<h4><a href="#{{baseName}}">{{baseName}}</a></h4>
<ul>
{{#operation}}
<li><a href="#{{nickname}}"><code><span class="http-method">{{httpMethod}}</span> {{path}}</code></a></li>
{{/operation}}
</ul>
{{/operations}}
{{/apis}}
{{/apiInfo}}
{{#apiInfo}}
{{#apis}}
{{#operations}}
<h1><a name="{{baseName}}">{{baseName}}</a></h1>
{{#operation}}
<div class="method"><a name="{{nickname}}"></a>
<div class="method-path">
<a class="up" href="#__Methods">Up</a>
<pre class="{{httpMethod}}"><code class="huge"><span class="http-method">{{httpMethod}}</span> {{path}}</code></pre></div>
<div class="method-summary">{{summary}} (<span class="nickname">{{nickname}}</span>)</div>
{{! notes is operation.description. So why rename it and make it super confusing???? }}
<div class="method-notes">{{notes}}</div>
{{#hasPathParams}}
<h3 class="field-label">Path parameters</h3>
<div class="field-items">
{{#pathParams}}{{>pathParam}}{{/pathParams}}
</div> <!-- field-items -->
{{/hasPathParams}}
{{#has this 'consumes'}}
<h3 class="field-label">Consumes</h3>
This API call consumes the following media types via the <span class="header">Content-Type</span> request header:
<ul>
{{#consumes}}
<li><code>{{{mediaType}}}</code></li>
{{/consumes}}
</ul>
{{/has}}
{{#hasBodyParam}}
<h3 class="field-label">Request body</h3>
<div class="field-items">
{{#bodyParams}}{{>bodyParam}}{{/bodyParams}}
</div> <!-- field-items -->
{{/hasBodyParam}}
{{#hasHeaderParams}}
<h3 class="field-label">Request headers</h3>
<div class="field-items">
{{#headerParam}}{{>headerParam}}{{/headerParam}}
</div> <!-- field-items -->
{{/hasHeaderParams}}
{{#hasQueryParams}}
<h3 class="field-label">Query parameters</h3>
<div class="field-items">
{{#queryParams}}{{>queryParam}}{{/queryParams}}
</div> <!-- field-items -->
{{/hasQueryParams}}
{{#hasFormParams}}
<h3 class="field-label">Form parameters</h3>
<div class="field-items">
{{#formParams}}{{>formParam}}{{/formParams}}
</div> <!-- field-items -->
{{/hasFormParams}}
{{#returnType}}
<h3 class="field-label">Return type</h3>
<div class="return-type">
{{#hasReference}}{{^returnSimpleType}}{{returnContainer}}[{{/returnSimpleType}}<a href="#{{returnBaseType}}">{{returnBaseType}}</a>{{^returnSimpleType}}]{{/returnSimpleType}}{{/hasReference}}
{{^hasReference}}{{returnType}}{{/hasReference}}
</div>
{{/returnType}}
<!--Todo: process Response Object and its headers, schema, examples -->
{{#hasExamples}}
{{#examples}}
<h3 class="field-label">Example data</h3>
<div class="example-data-content-type">Content-Type: {{{contentType}}}</div>
<pre class="example"><code>{{{example}}}</code></pre>
{{/examples}}
{{/hasExamples}}
{{#has this 'produces'}}
<h3 class="field-label">Produces</h3>
This API call produces the following media types according to the <span class="header">Accept</span> request header;
the media type will be conveyed by the <span class="header">Content-Type</span> response header.
<ul>
{{#produces}}
<li><code>{{{mediaType}}}</code></li>
{{/produces}}
</ul>
{{/has}}
<h3 class="field-label">Responses</h3>
{{#responses}}
<h4 class="field-label">{{code}}</h4>
{{message}}
{{#simpleType}}<a href="#{{dataType}}">{{dataType}}</a>{{/simpleType}}
{{#examples}}
<h3 class="field-label">Example data</h3>
<div class="example-data-content-type">Content-Type: {{{contentType}}}</div>
<pre class="example"><code>{{example}}</code></pre>
{{/examples}}
{{/responses}}
</div> <!-- method -->
<hr/>
{{/operation}}
{{/operations}}
{{/apis}}
{{/apiInfo}}
<h2><a name="__Models">Models</a></h2>
[ Jump to <a href="#__Methods">Methods</a> ]
<h3>Table of Contents</h3>
<ol>
{{#models}}
{{#model}}
<li><a href="#{{name}}"><code>{{name}}</code>{{#title}} - {{title}}{{/title}}</a></li>
{{/model}}
{{/models}}
</ol>
{{#models}}
{{#model}}
<div class="model">
<h3><a name="{{name}}"><code>{{name}}</code>{{#title}} - {{title}}{{/title}}</a> <a class="up" href="#__Models">Up</a></h3>
{{#unescapedDescription}}<div class='model-description'>{{unescapedDescription}}</div>{{/unescapedDescription}}
<div class="field-items">
{{#vars}}<div class="param">{{name}} {{^required}}(optional){{/required}}</div><div class="param-desc"><span class="param-type">{{#isNot this 'primitive-type'}}<a href="#{{complexType}}">{{datatype}}</a>{{/isNot}}</span> {{unescapedDescription}} {{#dataFormat}}format: {{{dataFormat}}}{{/dataFormat}}</div>
{{#is this 'enum'}}
<div class="param-enum-header">Enum:</div>
{{#_enum}}<div class="param-enum">{{this}}</div>{{/_enum}}
{{/is}}
{{#example}}
<div class="param-desc"><span class="param-type">example: {{example}}</span></div>
{{/example}}
{{#vendorExtensions.oneOf-model}}
<div class="param-desc"><span class="param-type">oneOf:</span>
{{#vendorExtensions.x-model-names}}
<a href="#{{this}}"><code>{{this}}</code></a>&nbsp;&nbsp;&nbsp;
{{/vendorExtensions.x-model-names}}
</div>
{{/vendorExtensions.oneOf-model}}
{{#vendorExtensions.anyOf-model}}
<div class="param-desc"><span class="param-type">anyOf:</span>
{{#vendorExtensions.x-model-names}}
<a href="#{{this}}"><code>{{this}}</code></a>&nbsp;&nbsp;&nbsp;
{{/vendorExtensions.x-model-names}}
</div>
{{/vendorExtensions.anyOf-model}}
{{#items}}
{{#vendorExtensions.oneOf-model}}
<div class="param-desc"><span class="param-type">items oneOf:</span>
{{#vendorExtensions.x-model-names}}
<a href="#{{this}}"><code>{{this}}</code></a>&nbsp;&nbsp;&nbsp;
{{/vendorExtensions.x-model-names}}
</div>
{{/vendorExtensions.oneOf-model}}
{{#vendorExtensions.anyOf-model}}
<div class="param-desc"><span class="param-type">items anyOf:</span>
{{#vendorExtensions.x-model-names}}
<a href="#{{this}}"><code>{{this}}</code></a>&nbsp;&nbsp;&nbsp;
{{/vendorExtensions.x-model-names}}
</div>
{{/vendorExtensions.anyOf-model}}
{{/items}}
{{/vars}}
</div> <!-- field-items -->
</div>
{{/model}}
{{/models}}
</body>
</html>

View File

@ -0,0 +1,3 @@
{{#is this 'path-param'}}<div class="param">{{baseName}} {{^required}}(optional){{/required}}{{#required}}(required){{/required}}</div>
<div class="param-desc"><span class="param-type">Path Parameter</span> &mdash; {{unescapedDescription}} {{#defaultValue}}default: {{{defaultValue}}} {{/defaultValue}}{{#dataFormat}}format: {{{dataFormat}}}{{/dataFormat}}</div>{{/is}}

View File

@ -0,0 +1,3 @@
{{#is this 'query-param'}}<div class="param">{{baseName}} {{^required}}(optional){{/required}}{{#required}}(required){{/required}}</div>
<div class="param-desc"><span class="param-type">Query Parameter</span> &mdash; {{unescapedDescription}} {{#defaultValue}}default: {{{defaultValue}}} {{/defaultValue}}{{#dataFormat}}format: {{{dataFormat}}}{{/dataFormat}}</div>{{/is}}

View File

@ -0,0 +1,172 @@
body {
font-family: Trebuchet MS, sans-serif;
font-size: 15px;
color: #444;
margin-right: 24px;
}
h1 {
font-size: 25px;
}
h2 {
font-size: 20px;
}
h3 {
font-size: 16px;
font-weight: bold;
}
hr {
height: 1px;
border: 0;
color: #ddd;
background-color: #ddd;
}
.app-desc {
clear: both;
margin-left: 20px;
}
.param-name {
width: 100%;
}
.license-info {
margin-left: 20px;
}
.license-url {
margin-left: 20px;
}
.model {
margin: 0 0 0px 20px;
}
.method {
margin-left: 20px;
}
.method-notes {
margin: 10px 0 20px 0;
font-size: 90%;
color: #555;
}
pre {
padding: 10px;
margin-bottom: 2px;
}
.http-method {
text-transform: uppercase;
}
pre.get {
background-color: #0f6ab4;
}
pre.post {
background-color: #10a54a;
}
pre.put {
background-color: #c5862b;
}
pre.delete {
background-color: #a41e22;
}
.huge {
color: #fff;
}
pre.example {
background-color: #f3f3f3;
padding: 10px;
border: 1px solid #ddd;
}
code {
white-space: pre;
}
.nickname {
font-weight: bold;
}
.method-path {
font-size: 1.5em;
background-color: #0f6ab4;
}
.up {
float:right;
}
.parameter {
width: 500px;
}
.param {
width: 500px;
padding: 10px 0 0 20px;
font-weight: bold;
}
.param-desc {
width: 700px;
padding: 0 0 0 20px;
color: #777;
}
.param-type {
font-style: italic;
}
.param-enum-header {
width: 700px;
padding: 0 0 0 60px;
color: #777;
font-weight: bold;
}
.param-enum {
width: 700px;
padding: 0 0 0 80px;
color: #777;
font-style: italic;
}
.field-label {
padding: 0;
margin: 0;
clear: both;
}
.field-items {
padding: 0 0 15px 0;
margin-bottom: 15px;
}
.return-type {
clear: both;
padding-bottom: 10px;
}
.param-header {
font-weight: bold;
}
.method-tags {
text-align: right;
}
.method-tag {
background: none repeat scroll 0% 0% #24A600;
border-radius: 3px;
padding: 2px 10px;
margin: 2px;
color: #FFF;
display: inline-block;
text-decoration: none;
}

View File

@ -4,40 +4,31 @@
archiva-modules
archiva-base
archiva-common
archiva-storage-api
archiva-storage-fs
archiva-filelock
archiva-model
archiva-checksum
archiva-policies
archiva-common
archiva-configuration
archiva-repository-api
archiva-xml-tools
archiva-repository-layer
archiva-proxy-api
archiva-proxy
archiva-repository-scanner
archiva-security-common
archiva-consumers
archiva-consumers-api
archiva-consumer-archetype
archiva-core-consumers
archiva-lucene-consumer
archiva-metadata-consumer
archiva-signature-consumer
archiva-lucene-consumer
archiva-consumer-archetype
archiva-filelock
archiva-model
archiva-policies
archiva-proxy
archiva-proxy-api
archiva-repository-api
archiva-repository-admin
archiva-repository-admin-api
archiva-repository-admin-default
archiva-scheduler
archiva-scheduler-api
archiva-scheduler-repository-api
archiva-scheduler-repository
archiva-scheduler-indexer
metadata
metadata-statistics-api
metadata-repository-api
metadata-model
archiva-repository-layer
archiva-repository-scanner
archiva-security-common
archiva-storage-api
archiva-storage-fs
archiva-xml-tools
archiva-maven
archiva-maven-common
archiva-maven-model
@ -47,15 +38,25 @@ archiva-modules
archiva-maven-indexer
archiva-maven-repository
archiva-maven-scheduler
archiva-scheduler
archiva-scheduler-api
archiva-scheduler-indexer
archiva-scheduler-repository-api
archiva-scheduler-repository
metadata
metadata-model
metadata-repository-api
metadata-statistics-api
test-repository
plugins
audit
generic-metadata-support
metadata-store-cassandra
metadata-store-file
metadata-store-jcr
problem-reports
repository-statistics
stage-repository-merge
metadata-store-file
audit
problem-reports
metadata-store-cassandra