View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *  http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17
    18  package org.apache.any23.extractor.xpath;
    19
    20  import java.util.Locale;
    21
    22  import org.eclipse.rdf4j.model.Value;
    23  import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
    24
    25  /**
    26   * Represents a <i>Quad</i> object <i>template</i>.
    27   *
    28   * @author Michele Mostarda (mostarda@fbk.eu)
    29   */
    30  public class TemplateObject extends Term {
    31
    32      /**
    33       * Supported object types.
    34       */
    35      public enum Type {
    36          URI, BNODE, LITERAL
    37      }
    38
    39      /**
    40       * Current template type.
    41       */
    42      private final Type type;
    43
    44      /**
    45       * Constructor.
    46       *
    47       * @param type
    48       *            object template type.
    49       * @param value
    50       *            internal value.
    51       * @param isVar
    52       *            if <code>true</code> it the given <code>value</code> will be resolved with the variable value.
    53       */
    54      public TemplateObject(Type type, String value, boolean isVar) {
    55          super(value, isVar);
    56          if (type == null) {
    57              throw new NullPointerException("object type cannot be null.");
    58          }
    59          this.type = type;
    60      }
    61
    62      @Override
    63      protected Value getValueInternal(String value) {
    64          switch (type) {
    65          case URI:
    66              return createIRI(value);
    67          case BNODE:
    68              return SimpleValueFactory.getInstance().createBNode(value);
    69          case LITERAL:
    70              return SimpleValueFactory.getInstance().createLiteral(value);
    71          default:
    72              throw new IllegalStateException();
    73          }
    74      }
    75
    76      private Value createIRI(String value) {
    77          try {
    78              return SimpleValueFactory.getInstance().createIRI(value);
    79          } catch (IllegalArgumentException iae) {
    80              throw new IllegalArgumentException(
    81                      String.format(Locale.ROOT, "Expected a valid IRI for object template, found '%s'", value), iae);
    82          }
    83      }
    84
    85      @Override
    86      public String toString() {
    87          final String superStr = super.toString();
    88          switch (type) {
    89          case URI:
    90              return "<" + superStr + ">";
    91          case BNODE:
    92              return "_:" + superStr;
    93          case LITERAL:
    94              return "'" + superStr + "'";
    95          default:
    96              throw new IllegalStateException();
    97          }
    98      }
    99
    100 }