All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.uniroma2.art.sheet2rdf.pearl.NodePearlElement Maven / Gradle / Ivy

The newest version!
package it.uniroma2.art.sheet2rdf.pearl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import it.uniroma2.art.coda.interfaces.annotations.converters.RDFCapabilityType;
import it.uniroma2.art.sheet2rdf.coda.CODAConverter;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.eclipse.rdf4j.rio.helpers.NTriplesUtil;

public class NodePearlElement implements PearlElement {

    private final List nodeDefinition;

    public NodePearlElement() {
        nodeDefinition = new ArrayList<>();
    }

    /**
     * Append a node triple to the NodePearlElement
     *
     * @param placeholder
     * @param converter
     * @param fsValue
     */
    public void add(String placeholder, CODAConverter converter, String fsValue) {
        this.add(placeholder, converter, fsValue, false);
    }

    /**
     * Append a node definition to the NodePearlElement
     *
     * @param node
     */
    public void add(NodeDefinition node) {
        this.add(node, false);
    }

    /**
     * Add a node triple to the NodePearlElement. If addBefore is true, the new triple is added at the beginning and
     * the other elements are unshifted
     *
     * @param placeholder
     * @param converter
     * @param fsValue
     * @param addBefore
     */
    public void add(String placeholder, CODAConverter converter, String fsValue, boolean addBefore) {
        if (addBefore) {
            nodeDefinition.add(0, new NodeDefinition(placeholder, converter, fsValue));
        } else {
            nodeDefinition.add(new NodeDefinition(placeholder, converter, fsValue));
        }
    }

    /**
     * Add a node definition to the NodePearlElement. If addBefore is true, the new node is added at the beginning and
     * the other elements are unshifted
     *
     * @param node
     * @param addBefore
     */
    public void add(NodeDefinition node, boolean addBefore) {
        if (addBefore) {
            nodeDefinition.add(0, node);
        } else {
            nodeDefinition.add(node);
        }
    }

    /**
     * Returns the NodeTriple that defines the given placeholder
     *
     * @param placeholder
     * @return
     */
    public NodeDefinition getNodeDefinition(String placeholder) {
        for (NodeDefinition t : nodeDefinition) {
            if (t.getPlaceholder().equals(placeholder)) {
                return t;
            }
        }
        return null;
    }

    @Override
    public String serialize(String tabs, Map prefixMapping) {
        String output = "";
        for (NodeDefinition nodeDef : nodeDefinition) {
            String placeholder = nodeDef.getPlaceholder();

            CODAConverter converter = nodeDef.getConverter();
            String converterSerialization = converter != null ? converter.serialize(prefixMapping) : "%pls_provide_a_converter%";

            if (nodeDef.getDefaultNamespace() != null) {
                output += tabs + "@DefaultNamespace("
                        + NTriplesUtil.toNTriplesString(SimpleValueFactory.getInstance().createIRI(nodeDef.getDefaultNamespace()))
                        + ")\n";
            }

            //sanitization flags have been set only if needed to be written (whatever the value is), so if not null, write them
            if (nodeDef.getSanitization().getTrim() != null) {
                output += tabs + nodeDef.getSanitization().serializeTrim() + "\n";
            }
            if (nodeDef.getSanitization().getRemoveDuplicateSpaces() != null) {
                output += tabs + nodeDef.getSanitization().serializeRemoveDuplicateSpaces() + "\n";
            }
            if (nodeDef.getSanitization().getRemovePunctuation().getEnabled() != null) {
                output += tabs + nodeDef.getSanitization().serializeRemovePunctuation() + "\n";
            }
            if (nodeDef.getSanitization().getUpperCase() != null) {
                output += tabs + nodeDef.getSanitization().serializeUpperCase() + "\n";
            }
            if (nodeDef.getSanitization().getLowerCase() != null) {
                output += tabs + nodeDef.getSanitization().serializeLowerCase() + "\n";
            }
            if (nodeDef.getMemoization().isEnabled()) {
                output += tabs + "@Memoized";
                List memoizedParams = new ArrayList<>();
                if (nodeDef.getMemoization().getId() != null) {
                    memoizedParams.add(nodeDef.getMemoization().getId());
                }
                if (!nodeDef.getMemoization().isIgnoreCase()) {
                    memoizedParams.add("ignorecase=" + nodeDef.getMemoization().isIgnoreCase());
                }
                if (!memoizedParams.isEmpty()) {
                    output += "(" + String.join(",", memoizedParams) + ")";
                }
                output += "\n";
            }

            String fsValue = nodeDef.getFsValue();
            if (fsValue == null) {
                fsValue = "%pls_provide_a_fs%";
            } else {
                fsValue += "/value";
            }

            output += tabs + placeholder + " " + converterSerialization + " " + fsValue + " .\n";
        }
        return output;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy