/** * Copyright 2015-2016 Red Hat, Inc, and individual contributors. * * 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 org.wildfly.swarm.swagger.webapp; import java.io.File; import java.io.IOException; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.importer.ExplodedImporter; import org.wildfly.swarm.config.runtime.AttributeDocumentation; import org.wildfly.swarm.spi.api.ArtifactLookup; import org.wildfly.swarm.spi.api.Defaultable; import org.wildfly.swarm.spi.api.Fraction; import org.wildfly.swarm.spi.api.JARArchive; import org.wildfly.swarm.spi.api.annotations.Configurable; import static org.wildfly.swarm.spi.api.Defaultable.string; import static org.wildfly.swarm.swagger.webapp.SwaggerWebAppProperties.DEFAULT_CONTEXT; /** * @author Lance Ball */ @Configurable("swarm.swagger.web-app") public class SwaggerWebAppFraction implements Fraction<SwaggerWebAppFraction> { public SwaggerWebAppFraction() { } public String getContext() { return context.get(); } public void setContext(String context) { this.context.set(context); } /** * Allows customization of the swagger-ui web interface. * The String provided can be one of either: * * - Path to a directory on disk * - Path to a jar/war/zip file on disk * - A GAV string with maven coordinates * * @param content The location of the web resources (see above) * @return this */ public SwaggerWebAppFraction addWebContent(String content) { if (content == null) { return this; } if (content.equals("")) { return this; } File maybeFile = new File(content); if (!maybeFile.exists()) { // the content string is a GAV try { this.webContent = ArtifactLookup.get().artifact(content); } catch (Exception e) { SwaggerWebAppMessages.MESSAGES.unableToLocateWebContent(content); } } else if (maybeFile.isDirectory()) { try { this.webContent = loadFromDirectory(maybeFile); } catch (IOException e) { SwaggerWebAppMessages.MESSAGES.unableToLocateWebContent(maybeFile.toString()); } } else { this.webContent = ShrinkWrap.createFromZipFile(JARArchive.class, maybeFile); } return this; } public Archive<?> getWebContent() { return this.webContent; } private Archive<?> loadFromDirectory(File directory) throws IOException { JARArchive archive = ShrinkWrap.create(JARArchive.class); archive.as(ExplodedImporter.class).importDirectory(directory); return archive; } @AttributeDocumentation("Web context path for Swagger end point") private Defaultable<String> context = string(DEFAULT_CONTEXT); private Archive<?> webContent; }