Skip to content

Commit ff8c411

Browse files
committed
GH-5327 updated basedir impl to use BaseDirection enum as input param
1 parent 968e855 commit ff8c411

File tree

30 files changed

+134
-134
lines changed

30 files changed

+134
-134
lines changed

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

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,32 @@ public interface Literal extends Value {
4444
String LTR_SUFFIX = "--ltr";
4545
String RTL_SUFFIX = "--rtl";
4646
String BASE_DIR_SEPARATOR = "--";
47-
int BASE_DIR_LEN = LTR_SUFFIX.length();
47+
48+
enum BaseDirection {
49+
NONE(""),
50+
LTR(LTR_SUFFIX),
51+
RTL(RTL_SUFFIX);
52+
53+
private final String suffix;
54+
55+
BaseDirection(final String suffix) {
56+
this.suffix = suffix;
57+
}
58+
59+
public String toString() {
60+
return suffix;
61+
}
62+
63+
public static BaseDirection fromString(String dir) {
64+
if (dir == null || dir.isEmpty())
65+
return NONE;
66+
if (dir.equals(LTR_SUFFIX))
67+
return LTR;
68+
if (dir.equals(RTL_SUFFIX))
69+
return RTL;
70+
throw new IllegalArgumentException("Unknown BaseDirection: " + dir);
71+
}
72+
}
4873

4974
@Override
5075
default boolean isLiteral() {
@@ -65,8 +90,8 @@ default boolean isLiteral() {
6590
*/
6691
Optional<String> getLanguage();
6792

68-
default String getBaseDirection() {
69-
return "";
93+
default BaseDirection getBaseDirection() {
94+
return BaseDirection.NONE;
7095
}
7196

7297
/**

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public interface ValueFactory {
9696
* @param baseDirection The literal's base direction, either "", "--ltr", or "--rtl".
9797
* @return A literal for the specified value and language attribute.
9898
*/
99-
Literal createLiteral(String label, String language, String baseDirection);
99+
Literal createLiteral(String label, String language, Literal.BaseDirection baseDirection);
100100

101101
/**
102102
* Creates a new literal with the supplied label and datatype.

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

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -201,32 +201,6 @@ private boolean equals(Optional<String> x, Optional<String> y) {
201201
return px && py && x.get().equalsIgnoreCase(y.get()) || !px && !py;
202202
}
203203

204-
public enum BaseDirection {
205-
NONE(""),
206-
LTR(Literal.LTR_SUFFIX),
207-
RTL(Literal.RTL_SUFFIX);
208-
209-
private final String suffix;
210-
211-
BaseDirection(final String suffix) {
212-
this.suffix = suffix;
213-
}
214-
215-
public String getSuffix() {
216-
return suffix;
217-
}
218-
219-
public static BaseDirection fromString(String dir) {
220-
if (dir == null || dir.isEmpty())
221-
return NONE;
222-
if (dir.equalsIgnoreCase(Literal.LTR_SUFFIX))
223-
return LTR;
224-
if (dir.equalsIgnoreCase(Literal.RTL_SUFFIX))
225-
return RTL;
226-
return NONE;
227-
}
228-
}
229-
230204
static class TypedLiteral extends AbstractLiteral {
231205

232206
private static final long serialVersionUID = -19640527584237291L;
@@ -301,10 +275,10 @@ static class TaggedLiteral extends AbstractLiteral {
301275
this(label, language, null);
302276
}
303277

304-
TaggedLiteral(String label, String language, String baseDirection) {
278+
TaggedLiteral(String label, String language, BaseDirection baseDirection) {
305279
this.label = label;
306280
this.language = language;
307-
this.baseDirection = BaseDirection.fromString(baseDirection);
281+
this.baseDirection = baseDirection;
308282
}
309283

310284
@Override
@@ -318,8 +292,8 @@ public Optional<String> getLanguage() {
318292
}
319293

320294
@Override
321-
public String getBaseDirection() {
322-
return baseDirection.suffix;
295+
public BaseDirection getBaseDirection() {
296+
return baseDirection;
323297
}
324298

325299
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,11 @@ public Literal createLiteral(String label, IRI datatype, CoreDatatype coreDataty
146146

147147
@Override
148148
public Literal createLiteral(String label, String language) {
149-
return createLiteral(label, language, null);
149+
return createLiteral(label, language, Literal.BaseDirection.NONE);
150150
}
151151

152152
@Override
153-
public Literal createLiteral(String label, String language, String baseDirection) {
153+
public Literal createLiteral(String label, String language, Literal.BaseDirection baseDirection) {
154154

155155
Objects.requireNonNull(label, "null label");
156156
Objects.requireNonNull(language, "null language");

core/model-api/src/test/java/org/eclipse/rdf4j/model/LiteralTest.java

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public abstract class LiteralTest {
112112
* @param dir the language direction of the literal
113113
* @return a new instance of the concrete literal class under test
114114
*/
115-
protected abstract Literal literal(String label, String language, String dir);
115+
protected abstract Literal literal(String label, String language, Literal.BaseDirection dir);
116116

117117
/**
118118
* Creates a test literal instance.
@@ -183,20 +183,20 @@ public final void testTaggedConstructor() {
183183

184184
assertThat(languageLiteral.getLabel()).isEqualTo(label);
185185
assertThat(languageLiteral.getLanguage()).contains(language);
186-
assertThat(languageLiteral.getBaseDirection()).isEmpty();
186+
assertEquals(Literal.BaseDirection.NONE, languageLiteral.getBaseDirection());
187187
assertThat(languageLiteral.getDatatype().stringValue()).isEqualTo(RDF_LANG_STRING);
188188

189-
final Literal directedLanguageLiteral = literal(label, language, Literal.LTR_SUFFIX);
189+
final Literal directedLanguageLiteral = literal(label, language, Literal.BaseDirection.LTR);
190190

191191
assertThat(directedLanguageLiteral.getLabel()).isEqualTo(label);
192192
assertThat(directedLanguageLiteral.getLanguage()).contains(language);
193-
assertThat(directedLanguageLiteral.getBaseDirection()).isEqualTo(Literal.LTR_SUFFIX);
193+
assertThat(directedLanguageLiteral.getBaseDirection().toString()).isEqualTo(Literal.LTR_SUFFIX);
194194
assertThat(directedLanguageLiteral.getDatatype().stringValue()).isEqualTo(RDF_DIR_LANG_STRING);
195195

196196
assertThatNullPointerException().isThrownBy(() -> literal(null, (String) null));
197197
assertThatNullPointerException().isThrownBy(() -> literal("", (String) null));
198-
assertThatNullPointerException().isThrownBy(() -> literal("", (String) null, ""));
199-
assertThatNullPointerException().isThrownBy(() -> literal("", (String) null, Literal.LTR_SUFFIX));
198+
assertThatNullPointerException().isThrownBy(() -> literal("", (String) null, Literal.BaseDirection.NONE));
199+
assertThatNullPointerException().isThrownBy(() -> literal("", (String) null, Literal.BaseDirection.LTR));
200200
assertThatNullPointerException().isThrownBy(() -> literal(null, ""));
201201
assertThatNullPointerException().isThrownBy(() -> literal(null, (IRI) null));
202202

@@ -893,20 +893,21 @@ public final void testCoreDatatypeTaggedConstructor() {
893893

894894
String label = "label";
895895
String language = "en";
896-
String direction = "--ltr";
897896

898897
Literal languageLiteral = literal(label, language);
899-
Literal directedLanguageLiteral = literal(label, language, direction);
898+
Literal directedLanguageLiteral = literal(label, language, Literal.BaseDirection.LTR);
900899

901900
assertThat(languageLiteral.getLabel()).isEqualTo(label);
902901
assertThat(languageLiteral.getLanguage()).contains(language);
903-
assertThat(languageLiteral.getBaseDirection()).isEmpty();
902+
assertEquals(Literal.BaseDirection.NONE, languageLiteral.getBaseDirection());
904903
assertThat(languageLiteral.getCoreDatatype()).isEqualTo(CoreDatatype.RDF.LANGSTRING);
904+
assertEquals("\"label\"@en", languageLiteral.toString());
905905

906906
assertThat(directedLanguageLiteral.getLabel()).isEqualTo(label);
907907
assertThat(directedLanguageLiteral.getLanguage()).contains(language);
908-
assertThat(directedLanguageLiteral.getBaseDirection()).isEqualTo(direction);
908+
assertEquals(Literal.BaseDirection.LTR, directedLanguageLiteral.getBaseDirection());
909909
assertThat(directedLanguageLiteral.getCoreDatatype()).isEqualTo(CoreDatatype.RDF.DIRLANGSTRING);
910+
assertEquals("\"label\"@en--ltr", directedLanguageLiteral.toString());
910911

911912
assertThatNullPointerException().isThrownBy(() -> literal(null, (String) null));
912913
assertThatNullPointerException().isThrownBy(() -> literal("", (String) null));
@@ -951,12 +952,11 @@ public void testCoreDatatypeStringValue() {
951952

952953
String label = "literal";
953954
String language = "en";
954-
String direction = "--ltr";
955955
CoreDatatype datatype = CoreDatatype.XSD.DECIMAL;
956956

957957
assertThat(literal(label).stringValue()).isEqualTo(label);
958958
assertThat(literal(label, language).stringValue()).isEqualTo(label);
959-
assertThat(literal(label, language + direction).stringValue()).isEqualTo(label);
959+
assertThat(literal(label, language, Literal.BaseDirection.LTR).stringValue()).isEqualTo(label);
960960
assertThat(literal(label, datatype).stringValue()).isEqualTo(label);
961961
}
962962

@@ -1533,19 +1533,19 @@ public final void testSerializationWithCoreDatatypeRdfLangString() {
15331533

15341534
@Test
15351535
public final void testSerializationWithCoreDatatypeRdfDirLangString() {
1536-
Literal literal = literal("hello", "en", "--ltr");
1536+
Literal literal = literal("hello", "en", Literal.BaseDirection.LTR);
15371537
assertEquals(CoreDatatype.RDF.DIRLANGSTRING, literal.getCoreDatatype());
15381538
assertThat(literal.getLanguage()).isPresent();
15391539
assertEquals("en", literal.getLanguage().get());
1540-
assertEquals("--ltr", literal.getBaseDirection());
1540+
assertEquals(Literal.BaseDirection.LTR, literal.getBaseDirection());
15411541

15421542
byte[] bytes = objectToBytes(literal);
15431543
Literal roundTrip = (Literal) bytesToObject(bytes);
15441544

15451545
assertEquals(CoreDatatype.RDF.DIRLANGSTRING, roundTrip.getCoreDatatype());
15461546
assertThat(roundTrip.getLanguage()).isPresent();
15471547
assertEquals("en", roundTrip.getLanguage().get());
1548-
assertEquals("--ltr", roundTrip.getBaseDirection());
1548+
assertEquals(Literal.BaseDirection.LTR, roundTrip.getBaseDirection());
15491549
}
15501550

15511551
@Test
@@ -1569,6 +1569,22 @@ public final void testSerializationWithCoreDatatype4() {
15691569
assertEquals(CoreDatatype.XSD.NONE, roundTrip.getCoreDatatype());
15701570
}
15711571

1572+
@Test
1573+
void testBaseDirectionEnumFromString() {
1574+
assertThat(Literal.BaseDirection.fromString("")).isEqualTo(Literal.BaseDirection.NONE);
1575+
assertThat(Literal.BaseDirection.fromString(null)).isEqualTo(Literal.BaseDirection.NONE);
1576+
assertThat(Literal.BaseDirection.fromString(Literal.LTR_SUFFIX)).isEqualTo(Literal.BaseDirection.LTR);
1577+
assertThat(Literal.BaseDirection.fromString(Literal.RTL_SUFFIX)).isEqualTo(Literal.BaseDirection.RTL);
1578+
assertThrows(IllegalArgumentException.class, () -> Literal.BaseDirection.fromString("--invalid"));
1579+
}
1580+
1581+
@Test
1582+
void testBaseDirectionEnumSuffix() {
1583+
assertThat(Literal.BaseDirection.LTR.toString()).isEqualTo(Literal.LTR_SUFFIX);
1584+
assertThat(Literal.BaseDirection.RTL.toString()).isEqualTo(Literal.RTL_SUFFIX);
1585+
assertThat(Literal.BaseDirection.NONE.toString()).isEmpty();
1586+
}
1587+
15721588
private byte[] objectToBytes(Serializable object) {
15731589
try (var byteArrayOutputStream = new ByteArrayOutputStream()) {
15741590
try (var objectOutputStream = new ObjectOutputStream(byteArrayOutputStream)) {

core/model-api/src/test/java/org/eclipse/rdf4j/model/ValueFactoryTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,12 +540,13 @@ public void testCreateLiteralDate() throws DatatypeConfigurationException {
540540

541541
@Test
542542
public void testCreateDirLangLiteral() {
543-
final Literal literal = factory().createLiteral("label", "he", "--rtl");
543+
final Literal literal = factory().createLiteral("label", "he", Literal.BaseDirection.RTL);
544544

545545
assertThat(literal).isNotNull();
546546
assertThat(literal.getLabel()).isEqualTo("label");
547547
assertThat(literal.getLanguage()).contains("he");
548-
assertThat(literal.getBaseDirection()).isEqualTo("--rtl");
548+
assertThat(literal.getBaseDirection()).isEqualTo(Literal.BaseDirection.RTL);
549+
assertThat(literal.getBaseDirection().toString()).isEqualTo("--rtl");
549550
assertThat(literal.getDatatype()).isEqualTo(CoreDatatype.RDF.DIRLANGSTRING.getIri());
550551
}
551552

core/model-api/src/test/java/org/eclipse/rdf4j/model/base/AbstractLiteralTest.java

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected Literal literal(String label, String language) {
4141
}
4242

4343
@Override
44-
protected Literal literal(String label, String language, String dir) {
44+
protected Literal literal(String label, String language, Literal.BaseDirection dir) {
4545
return factory.createLiteral(label, language, dir);
4646
}
4747

@@ -59,22 +59,4 @@ protected Literal literal(String label, CoreDatatype datatype) {
5959
protected IRI datatype(String iri) {
6060
return factory.createIRI(iri);
6161
}
62-
63-
@Test
64-
void testBaseDirectionEnumFromString() {
65-
assertThat(AbstractLiteral.BaseDirection.fromString("")).isEqualTo(AbstractLiteral.BaseDirection.NONE);
66-
assertThat(AbstractLiteral.BaseDirection.fromString(Literal.LTR_SUFFIX)).isEqualTo(
67-
AbstractLiteral.BaseDirection.LTR);
68-
assertThat(AbstractLiteral.BaseDirection.fromString(Literal.RTL_SUFFIX)).isEqualTo(
69-
AbstractLiteral.BaseDirection.RTL);
70-
assertThat(AbstractLiteral.BaseDirection.fromString("invalid")).isEqualTo(AbstractLiteral.BaseDirection.NONE);
71-
}
72-
73-
@Test
74-
void testBaseDirectionEnumSuffix() {
75-
assertThat(AbstractLiteral.BaseDirection.LTR.getSuffix()).isEqualTo(Literal.LTR_SUFFIX);
76-
assertThat(AbstractLiteral.BaseDirection.RTL.getSuffix()).isEqualTo(Literal.RTL_SUFFIX);
77-
assertThat(AbstractLiteral.BaseDirection.NONE.getSuffix()).isEmpty();
78-
}
79-
8062
}

core/model/src/main/java/org/eclipse/rdf4j/model/impl/SimpleLiteral.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,10 @@ protected SimpleLiteral(String label) {
9393
* @param language The language tag for the literal, must not be <var>null</var> and not be empty.
9494
*/
9595
protected SimpleLiteral(String label, String language) {
96-
this(label, language, "");
96+
this(label, language, BaseDirection.NONE);
9797
}
9898

99-
protected SimpleLiteral(String label, String language, String baseDirection) {
99+
protected SimpleLiteral(String label, String language, BaseDirection baseDirection) {
100100
setLabel(label);
101101
setLanguage(language);
102102
setBaseDirection(baseDirection);
@@ -176,9 +176,9 @@ protected void setLanguage(String language) {
176176
optionalLanguageCache = Optional.of(language);
177177
}
178178

179-
protected void setBaseDirection(String baseDirection) {
180-
this.baseDirection = BaseDirection.fromString(baseDirection);
181-
if (this.baseDirection == BaseDirection.LTR || this.baseDirection == BaseDirection.RTL) {
179+
protected void setBaseDirection(BaseDirection baseDirection) {
180+
this.baseDirection = baseDirection;
181+
if (this.baseDirection != BaseDirection.NONE) {
182182
setDatatype(CoreDatatype.RDF.DIRLANGSTRING);
183183
} else {
184184
setDatatype(CoreDatatype.RDF.LANGSTRING);
@@ -193,8 +193,8 @@ public Optional<String> getLanguage() {
193193
return optionalLanguageCache;
194194
}
195195

196-
public String getBaseDirection() {
197-
return baseDirection.getSuffix();
196+
public BaseDirection getBaseDirection() {
197+
return baseDirection;
198198
}
199199

200200
protected void setDatatype(IRI datatype) {

core/model/src/main/java/org/eclipse/rdf4j/model/impl/SimpleValueFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public Literal createLiteral(String value, String language) {
104104
}
105105

106106
@Override
107-
public Literal createLiteral(String value, String language, String baseDirection) {
107+
public Literal createLiteral(String value, String language, Literal.BaseDirection baseDirection) {
108108
return new SimpleLiteral(value, language, baseDirection);
109109
}
110110

core/model/src/main/java/org/eclipse/rdf4j/model/impl/ValidatingValueFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,11 @@ public Literal createLiteral(String label, IRI datatype, CoreDatatype coreDataty
134134

135135
@Override
136136
public Literal createLiteral(String label, String language) {
137-
return createLiteral(label, language, "");
137+
return createLiteral(label, language, Literal.BaseDirection.NONE);
138138
}
139139

140140
@Override
141-
public Literal createLiteral(String label, String language, String baseDirection) {
141+
public Literal createLiteral(String label, String language, Literal.BaseDirection baseDirection) {
142142
if (!Literals.isValidLanguageTag(language)) {
143143
throw new IllegalArgumentException("Not a valid language tag: " + language);
144144
}

0 commit comments

Comments
 (0)