/** * 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.internal; import java.io.IOException; import org.jboss.shrinkwrap.api.Node; import org.jboss.shrinkwrap.api.asset.Asset; import org.jboss.shrinkwrap.impl.base.ArchiveBase; import org.jboss.shrinkwrap.impl.base.AssignableBase; import org.wildfly.swarm.msc.ServiceActivatorArchive; import org.wildfly.swarm.spi.api.JARArchive; import org.wildfly.swarm.swagger.SwaggerArchive; /** * @author Lance Ball */ public class SwaggerArchiveImpl extends AssignableBase<ArchiveBase<?>> implements SwaggerArchive { public static final String SERVICE_ACTIVATOR_CLASS_NAME = "org.wildfly.swarm.swagger.deployment.SwaggerServiceActivator"; public SwaggerArchiveImpl(ArchiveBase<?> archive) throws IOException { super(archive); if (!as(ServiceActivatorArchive.class).containsServiceActivator(SERVICE_ACTIVATOR_CLASS_NAME)) { as(ServiceActivatorArchive.class).addServiceActivator(SERVICE_ACTIVATOR_CLASS_NAME); as(JARArchive.class).addModule("org.wildfly.swarm.swagger", "deployment"); } loadOrCreateConfigurationAsset(); } public SwaggerConfigurationAsset getConfigurationAsset() { return configurationAsset; } @Override public SwaggerArchive setResourcePackages(String... packages) { getConfigurationAsset().register(packages); return this; } @Override public SwaggerArchive setTitle(String title) { getConfigurationAsset().setTitle(title); return this; } @Override public SwaggerArchive setDescription(String description) { getConfigurationAsset().setDescription(description); return this; } @Override public SwaggerArchive setTermsOfServiceUrl(String url) { getConfigurationAsset().setTermsOfServiceUrl(url); return this; } @Override public SwaggerArchive setContact(String contact) { getConfigurationAsset().setContact(contact); return this; } @Override public SwaggerArchive setLicense(String license) { getConfigurationAsset().setLicense(license); return this; } @Override public SwaggerArchive setLicenseUrl(String licenseUrl) { getConfigurationAsset().setLicenseUrl(licenseUrl); return this; } @Override public SwaggerArchive setVersion(String version) { getConfigurationAsset().setVersion(version); return this; } @Override public SwaggerArchive setSchemes(String... schemes) { getConfigurationAsset().setSchemes(schemes); return this; } @Override public SwaggerArchive setHost(String host) { getConfigurationAsset().setHost(host); return this; } @Override public SwaggerArchive setContextRoot(String root) { getConfigurationAsset().setContextRoot(root); return this; } @Override public boolean hasContextRoot() { return getConfigurationAsset().getContextRoot() != null; } @Override public SwaggerArchive setPrettyPrint(boolean prettyPrint) { getConfigurationAsset().setPrettyPrint(prettyPrint); return this; } @Override public boolean hasResourcePackages() { return getConfigurationAsset().getResourcePackages() != null; } @Override public String[] getResourcePackages() { return getConfigurationAsset().getResourcePackages(); } private void loadOrCreateConfigurationAsset() throws IOException { Node node = getArchive().get(SWAGGER_CONFIGURATION_PATH); if (node == null && getArchive().getName().endsWith(".war")) { node = getArchive().get("WEB-INF/classes/" + SWAGGER_CONFIGURATION_PATH); } if (node != null) { Asset asset = node.getAsset(); if (asset instanceof SwaggerConfigurationAsset) { this.configurationAsset = (SwaggerConfigurationAsset) asset; } else { this.configurationAsset = new SwaggerConfigurationAsset(asset.openStream()); getArchive().add(this.configurationAsset, node.getPath()); } } else { this.configurationAsset = new SwaggerConfigurationAsset(); if (getArchive().getName().endsWith(".war")) { getArchive().add(this.configurationAsset, "WEB-INF/classes/" + SWAGGER_CONFIGURATION_PATH); } else { getArchive().add(this.configurationAsset, SWAGGER_CONFIGURATION_PATH); } } } private SwaggerConfigurationAsset configurationAsset; }