Skip to content

Commit 8fe8094

Browse files
committed
Add support for getting the type directly from a Value without using instance of
1 parent 4d92bd6 commit 8fe8094

6 files changed

Lines changed: 47 additions & 0 deletions

File tree

core/model-api/src/main/java/org/eclipse/rdf4j/model/BNode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ default boolean isBNode() {
2727
return true;
2828
}
2929

30+
@Override
31+
default Type getType() {
32+
return Value.Type.BNode;
33+
}
34+
3035
/**
3136
* Retrieves this blank node's identifier.
3237
*

core/model-api/src/main/java/org/eclipse/rdf4j/model/IRI.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ default boolean isIRI() {
3838
return true;
3939
}
4040

41+
@Override
42+
default Type getType() {
43+
return Value.Type.IRI;
44+
}
45+
4146
/**
4247
* Gets the namespace part of this IRI.
4348
* <p>

core/model-api/src/main/java/org/eclipse/rdf4j/model/Literal.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ default boolean isLiteral() {
4747
return true;
4848
}
4949

50+
@Override
51+
default Type getType() {
52+
return Value.Type.Literal;
53+
}
54+
5055
/**
5156
* Gets the label (the lexical value) of this literal.
5257
*

core/model-api/src/main/java/org/eclipse/rdf4j/model/Triple.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ default boolean isTriple() {
3333
return true;
3434
}
3535

36+
@Override
37+
default Type getType() {
38+
return Value.Type.Triple;
39+
}
40+
3641
/**
3742
* Gets the subject of this triple.
3843
*

core/model-api/src/main/java/org/eclipse/rdf4j/model/Value.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@
1717
*/
1818
public interface Value extends Serializable {
1919

20+
enum Type {
21+
IRI,
22+
BNode,
23+
Literal,
24+
Triple
25+
}
26+
2027
/**
2128
* Check if the object is an instance of the given type. Typically 2x than using instanceof.
2229
* <p>
@@ -72,6 +79,21 @@ default boolean isTriple() {
7279
return false;
7380
}
7481

82+
default Type getType() {
83+
84+
if (isIRI()) {
85+
return Type.IRI;
86+
} else if (isBNode()) {
87+
return Type.BNode;
88+
} else if (isLiteral()) {
89+
return Type.Literal;
90+
} else if (isTriple()) {
91+
return Type.Triple;
92+
} else {
93+
throw new IllegalStateException("Unknown value type");
94+
}
95+
}
96+
7597
/**
7698
* Returns the String-value of a <var>Value</var> object. This returns either a {@link Literal}'s label, a
7799
* {@link IRI}'s URI or a {@link BNode}'s ID.

core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/model/CorruptIRIOrBNode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public String stringValue() {
5050
return "CorruptIRIOrBNode_with_ID_" + getInternalID();
5151
}
5252

53+
@Override
54+
public Type getType() {
55+
return IRI.super.getType();
56+
}
57+
5358
@Override
5459
public String getNamespace() {
5560
return "urn:CorruptIRIOrBNode:";

0 commit comments

Comments
 (0)