package org.aksw.rdfunit.model.writers.shacl;

import org.aksw.rdfunit.model.interfaces.shacl.ComponentParameter;
import org.aksw.rdfunit.model.writers.ElementWriter;
import org.aksw.rdfunit.vocabulary.SHACL;
import org.apache.jena.datatypes.xsd.XSDDatatype;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.ResourceFactory;
import org.apache.jena.vocabulary.RDF;

/**
 *
 *
 * @author Dimitris Kontokostas
 * @since 6/17/15 5:57 PM

 */
public final class ComponentParameterWriter implements ElementWriter {

    private final ComponentParameter componentParameter;

    private ComponentParameterWriter(ComponentParameter componentParameter) {
        this.componentParameter = componentParameter;
    }

    public static ComponentParameterWriter create(ComponentParameter componentParameter) {return new ComponentParameterWriter(componentParameter);}


    @Override
    public Resource write(Model model) {
        Resource resource = ElementWriter.copyElementResourceInModel(componentParameter, model);

        // rdf:type sh:ComponentParameter
        resource.addProperty(RDF.type, SHACL.ParameterCls);

        // sh:path sh:argX
        resource.addProperty(SHACL.path, componentParameter.getPredicate()) ;

        //Optional
        if (componentParameter.isOptional()) {
            resource.addProperty(SHACL.optional, ResourceFactory.createTypedLiteral("true", XSDDatatype.XSDboolean)) ;
        }
        return resource;
    }
}