Package de.saumya.mojo.gems.spec.yaml

Source Code of de.saumya.mojo.gems.spec.yaml.YamlGemSpecificationIO

package de.saumya.mojo.gems.spec.yaml;

import java.io.IOException;

import org.codehaus.plexus.component.annotations.Component;
import org.yaml.snakeyaml.Dumper;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Loader;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;

import de.saumya.mojo.gems.spec.GemSpecification;
import de.saumya.mojo.gems.spec.GemSpecificationIO;

/**
* This is here just be able to quickly switch between snakeYaml and YamlBeans,
* since they are both good, with their own quirks. SnakeYaml won ;) So we can
* clear up this later.
*
* @author cstamas
*/
@SuppressWarnings("deprecation")
@Component(role = GemSpecificationIO.class, hint = "yaml")
public class YamlGemSpecificationIO implements GemSpecificationIO {
    protected Yaml _yaml;

    public GemSpecification read(final String string) throws IOException {
        return readGemSpecfromYaml(string);
    }

    public String write(final GemSpecification gemspec) throws IOException {
        return writeGemSpectoYaml(gemspec);
    }

    // ==

    protected Yaml getYaml() {
        if (this._yaml == null) {
            final Constructor constructor = new MappingConstructor();
            final Loader loader = new Loader(constructor);

            final DumperOptions dumperOptions = new DumperOptions();
            dumperOptions.setExplicitStart(true);
            dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
            dumperOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.PLAIN);

            final MappingRepresenter representer = new MappingRepresenter();
            final Dumper dumper = new Dumper(representer, dumperOptions);

            this._yaml = new Yaml(loader, dumper);
        }

        return this._yaml;
    }

    protected GemSpecification readGemSpecfromYaml(final String gemspecString)
            throws IOException {
        // snake has some problems i could not overcome
        // return readGemSpecfromYamlWithSnakeYaml( gemspec );
        // yamlbeans makes better yaml at 1st glance
        return readGemSpecfromYamlWithSnakeYaml(gemspecString);
    }

    protected String writeGemSpectoYaml(final GemSpecification gemspec)
            throws IOException {
        // snake has some problems i could not overcome
        // return writeGemSpectoYamlWithSnakeYaml( gemspec );
        // yamlbeans makes better yaml at 1st glance
        return writeGemSpectoYamlWithSnakeYaml(gemspec);
    }

    // == SnakeYaml

    protected GemSpecification readGemSpecfromYamlWithSnakeYaml(
            final String gemspecString) throws IOException {
        return (GemSpecification) getYaml().load(gemspecString);
    }

    protected String writeGemSpectoYamlWithSnakeYaml(
            final GemSpecification gemspec) throws IOException {
        return getYaml().dump(gemspec);
    }
}
TOP

Related Classes of de.saumya.mojo.gems.spec.yaml.YamlGemSpecificationIO

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.