Coverage Summary for Class: DataSelector (org.kitodo.production.metadata.copier)

Class Class, % Method, % Line, %
DataSelector 0% (0/1) 0% (0/2) 0% (0/10)


 /*
  * (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
  *
  * This file is part of the Kitodo project.
  *
  * It is licensed under GNU General Public License version 3 or later.
  *
  * For the full copyright and license information, please read the
  * GPL3-License.txt file that was distributed with this source code.
  */
 
 package org.kitodo.production.metadata.copier;
 
 import org.apache.commons.configuration.ConfigurationException;
 
 /**
  * A DataSelector is useful to access a data object. There are different
  * DataSelectors available to access metadata and program variables.
  *
  * <p>
  * The factory method {{@link #create(String)} can be used to retrieve a
  * DataSelector instance for a given path.
  */
 public abstract class DataSelector {
     /**
      * Symbol indicating that the element of several to choose shall be the last
      * one.
      */
     protected static final String LAST_CHILD_QUANTIFIER = ">";
 
     /**
      * Symbol indicating that the next segment of the path is a document
      * structure hierarchy level.
      */
     protected static final String METADATA_PATH_SEPARATOR = "/";
 
     /**
      * Symbol indicating that the next segment of the path is a metadata.
      */
     protected static final String METADATA_SEPARATOR = "@";
 
     /**
      * Symbol indicating that the next segment of the path is a reference to the
      * node of the logical document structure that the metadata will be written
      * to.
      */
     protected static final String RESPECTIVE_DESTINATION_REFERENCE = "#";
 
     /**
      * Symbol indicating that the value is a static string.
      */
     private static final String STRING_MARK = "\"";
 
     /**
      * Symbol indicating that the selector is to select a variable.
      */
     protected static final String VARIABLE_REFERENCE = "$";
 
     /**
      * Factory method to create a DataSelector.
      *
      * @param path
      *            path to the data object to access
      * @return a subclass implementing the data selector required for the given
      *         path
      * @throws ConfigurationException
      *             if the path cannot be evaluated
      */
     public static DataSelector create(String path) throws ConfigurationException {
         if (path.startsWith(METADATA_PATH_SEPARATOR) || path.startsWith(METADATA_SEPARATOR)) {
             return MetadataSelector.create(path);
         }
         if (path.startsWith(VARIABLE_REFERENCE)) {
             return new VariableSelector(path);
         }
         if (path.startsWith(STRING_MARK)) {
             return new StringSelector(path);
         }
         if (path.startsWith(RESPECTIVE_DESTINATION_REFERENCE)) {
             return new DestinationReferenceSelector(path);
         }
         throw new ConfigurationException(
                 "Cannot create data selector: Path must start with \"@\", \"/\" or \"$\", but is: " + path);
     }
 
     /**
      * Calling findIn() on the implementing instance should return the value of
      * the metadata named by the path used to construct the metadata selector.
      * Should return null if either the path or the metadata at the end of the
      * path aren’t available.
      *
      * @param data
      *            data collection to locate the metadata in
      * @return the value the path points to, or null if absent
      * @throws RuntimeException
      *             if the path cannot be resolved
      */
     public abstract String findIn(CopierData data);
 }