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 }