in src/main/java/org/apache/sling/feature/io/json/FeatureJSONWriter.java [364:428]
private void writeFeature(final Writer writer, final Feature feature)
throws IOException {
JsonGenerator generator = newGenerator(writer);
generator.writeStartObject();
writeFeatureId(generator, feature);
if (feature.isFinal()) {
generator.write(JSONConstants.FEATURE_FINAL, true);
}
if (feature.isComplete()) {
generator.write(JSONConstants.FEATURE_COMPLETE, true);
}
// title, description, vendor, license, docURL, scmInfo
writeProperty(generator, JSONConstants.FEATURE_TITLE, feature.getTitle());
writeProperty(generator, JSONConstants.FEATURE_DESCRIPTION, feature.getDescription());
writeProperty(generator, JSONConstants.FEATURE_VENDOR, feature.getVendor());
writeProperty(generator, JSONConstants.FEATURE_LICENSE, feature.getLicense());
writeProperty(generator, JSONConstants.FEATURE_DOC_URL, feature.getDocURL());
writeProperty(generator, JSONConstants.FEATURE_SCM_INFO, feature.getSCMInfo());
// categories
writeList(generator, JSONConstants.FEATURE_CATEGORIES, feature.getCategories());
// variables
writeVariables(generator, feature.getVariables());
// prototype
writePrototype(generator, feature.getPrototype());
// requirements
writeRequirements(generator, feature.getRequirements());
// capabilities
writeCapabilities(generator, feature.getCapabilities());
// bundles
writeBundles(generator, feature.getBundles(), feature.getConfigurations());
// configurations
final Configurations cfgs = new Configurations();
for(final Configuration cfg : feature.getConfigurations()) {
final String artifactProp = (String)cfg.getProperties().get(Configuration.PROP_ARTIFACT_ID);
if ( artifactProp == null ) {
cfgs.add(cfg);
}
}
writeConfigurations(generator, cfgs);
// framework properties
writeFrameworkProperties(generator, feature.getFrameworkProperties());
// write metadata for variables and framework properties
if ( feature.getExtensions().getByName(Extension.EXTENSION_NAME_INTERNAL_DATA) != null ) {
throw new IOException("Feature must not contain internal data extension");
}
writeInternalData(generator, feature);
// extensions
writeExtensions(generator, feature.getExtensions(), feature.getConfigurations());
generator.writeEnd().close();
}