public static void write()

in src/main/java/org/apache/sling/provisioning/model/io/ModelWriter.java [83:274]


    public static void write(final Writer writer, final Model model)
    throws IOException {
        final PrintWriter pw = new PrintWriter(writer);

        boolean firstFeature = true;

        // features
        for(final Feature feature : model.getFeatures()) {
            if ( firstFeature ) {
                firstFeature = false;
            } else {
                pw.println();
            }
            writeComment(pw, feature);
            pw.print("[feature name=");
            pw.print(feature.getName());
            if (! FeatureTypes.PLAIN.equals(feature.getType()) ) {
                pw.print(" type=");
                pw.print(feature.getType());
            }
            if ( feature.getVersion() != null ) {
                pw.print(" version=");
                pw.print(feature.getVersion());
            }
            pw.println("]");

            // variables
            if ( !feature.getVariables().isEmpty() ) {
                pw.println();
                writeComment(pw, feature.getVariables());
                pw.println("[variables]");
                for(final Map.Entry<String, String> entry : feature.getVariables()) {
                    pw.print("  ");
                    pw.print(entry.getKey());
                    pw.print("=");
                    pw.println(entry.getValue());
                }
            }

            // run modes
            for(final RunMode runMode : feature.getRunModes()) {
                // settings
                if ( !runMode.getSettings().isEmpty() ) {
                    pw.println();
                    writeComment(pw, runMode.getSettings());
                    pw.print("[settings");
                    writeRunMode(pw, runMode);
                    pw.println("]");

                    for(final Map.Entry<String, String> entry : runMode.getSettings()) {
                        pw.print("  ");
                        pw.print(entry.getKey());
                        pw.print("=");
                        pw.println(entry.getValue());
                    }
                }

                // artifact groups
                for(final ArtifactGroup group : runMode.getArtifactGroups()) {
                    // skip empty groups
                    if ( group.isEmpty() ) {
                        continue;
                    }
                    pw.println();
                    writeComment(pw, group);
                    pw.print("[artifacts");
                    if ( group.getStartLevel() > 0 ) {
                        pw.print(" startLevel=");
                        pw.print(String.valueOf(group.getStartLevel()));
                    }
                    writeRunMode(pw, runMode);
                    pw.println("]");

                    // artifacts
                    for(final Artifact ad : group) {
                        writeComment(pw, ad);
                        pw.print("  ");
                        pw.print(ad.toMvnUrl().substring(4));
                        if ( !ad.getMetadata().isEmpty() ) {
                            boolean first = true;
                            for(final Map.Entry<String, String> entry : ad.getMetadata().entrySet()) {
                                if ( first ) {
                                    first = false;
                                    pw.print(" [");
                                } else {
                                    pw.print(" ");
                                }
                                pw.print(entry.getKey());
                                pw.print("=");
                                pw.print(entry.getValue());
                            }
                            pw.print("]");
                        }
                        pw.println();
                    }
                }

                // configurations
                if ( !runMode.getConfigurations().isEmpty() ) {
                    pw.println();
                    writeComment(pw, runMode.getConfigurations());
                    pw.print("[configurations");
                    writeRunMode(pw, runMode);
                    pw.println("]");
                    boolean firstConfig = true;
                    for(final Configuration config : runMode.getConfigurations()) {
                        if ( firstConfig ) {
                            firstConfig = false;
                        } else{
                            pw.println();
                        }
                        writeComment(pw, config);
                        final String raw = (String)config.getProperties().get(ModelConstants.CFG_UNPROCESSED);
                        String format = (String)config.getProperties().get(ModelConstants.CFG_UNPROCESSED_FORMAT);
                        if ( format == null ) {
                            format = ModelConstants.CFG_FORMAT_FELIX_CA;
                        }
                        String cfgMode = (String)config.getProperties().get(ModelConstants.CFG_UNPROCESSED_MODE);
                        if ( cfgMode == null ) {
                            cfgMode = ModelConstants.CFG_MODE_OVERWRITE;
                        }
                        pw.print("  ");
                        if ( config.getFactoryPid() != null ) {
                            pw.print(config.getFactoryPid());
                            pw.print("-");
                        }
                        pw.print(config.getPid());
                        final boolean isDefaultFormat = ModelConstants.CFG_FORMAT_FELIX_CA.equals(format);
                        final boolean isDefaultMode = ModelConstants.CFG_MODE_OVERWRITE.equals(cfgMode);
                        if ( !isDefaultFormat || !isDefaultMode ) {
                            pw.print(" [");
                            if ( !isDefaultFormat ) {
                                pw.print("format=");
                                pw.print(format);
                                if ( !isDefaultMode ) {
                                    pw.print(",");
                                }
                            }
                            if ( !isDefaultMode) {
                                pw.print("mode=");
                                pw.print(cfgMode);
                            }
                            pw.print("]");
                        }
                        pw.println();

                        final String configString;
                        if ( raw != null ) {
                            configString = raw;
                        } else if ( config.isSpecial() ) {
                            configString = config.getProperties().get(config.getPid()).toString();
                        } else {
                            final ByteArrayOutputStream os = new ByteArrayOutputStream();
                            try {
                                ConfigurationHandler.write(os , config.getProperties());
                            } finally {
                                os.close();
                            }
                            configString = new String(os.toByteArray(), "UTF-8");
                        }
                        // we have to read the configuration line by line to properly indent
                        final LineNumberReader lnr = new LineNumberReader(new StringReader(configString));
                        String line = null;
                        while ((line = lnr.readLine()) != null ) {
                            if ( line.trim().isEmpty() ) {
                                continue;
                            }
                            pw.print("    ");
                            pw.println(line.trim());
                        }
                    }
                }
            }

            // additional sections
            for(final Section section : feature.getAdditionalSections()) {
                pw.println();
                pw.print("  [:");
                pw.print(section.getName());
                for(final Map.Entry<String, String> entry : section.getAttributes().entrySet()) {
                    pw.print(' ');
                    pw.print(entry.getKey());
                    pw.print('=');
                    pw.print(entry.getValue());
                }
                pw.println("]");
                if ( section.getContents() != null ) {
                    pw.println(section.getContents());
                }
            }
        }
    }