org.usergrid.tools.ApiDoc Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of usergrid-tools Show documentation
Show all versions of usergrid-tools Show documentation
Command line tools for Usergrid system.
/*******************************************************************************
* Copyright 2012 Apigee Corporation
*
* 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.usergrid.tools;
import static org.usergrid.utils.StringUtils.readClasspathFileAsString;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.usergrid.persistence.Schema;
import org.usergrid.persistence.entities.Application;
import org.usergrid.persistence.schema.CollectionInfo;
import org.usergrid.tools.apidoc.swagger.ApiListing;
import org.usergrid.utils.JsonUtils;
import org.w3c.dom.Document;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
public class ApiDoc extends ToolBase {
private static final Logger logger = LoggerFactory.getLogger(ApiDoc.class);
@Override
public Options createOptions() {
Option generateWadl = OptionBuilder.create("wadl");
Options options = new Options();
options.addOption(generateWadl);
return options;
}
@Override
public void runTool(CommandLine line) throws Exception {
logger.info("Generating applications docs...");
ApiListing listing = loadListing("applications");
output(listing, "applications");
logger.info("Generating management docs...");
listing = loadListing("management");
output(listing, "management");
logger.info("Done!");
}
public ApiListing loadListing(String section) {
Yaml yaml = new Yaml(new Constructor(ApiListing.class));
String yamlString = readClasspathFileAsString("/apidoc/" + section
+ ".yaml");
ApiListing listing = (ApiListing) yaml.load(yamlString);
return listing;
}
public void output(ApiListing listing, String section) throws IOException,
TransformerException {
Document doc = listing.createWADLApplication();
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
transformerFactory.setAttribute("indent-number", 4);
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "4");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(section + ".wadl"));
transformer.transform(source, result);
File file = new File(section + ".json");
listing.setBasePath("${basePath}");
FileUtils.write(file, JsonUtils.mapToFormattedJsonString(listing));
}
public void addCollections(ApiListing listing) {
Map collections = Schema.getDefaultSchema()
.getCollections(Application.ENTITY_TYPE);
collections.clear();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy