Skip to content

Commit 60a1ac7

Browse files
committed
MLE-14737 Extracted error message for missing Optic query
Just a refactoring. Need to be able to override this in Flux.
1 parent 9ee92d3 commit 60a1ac7

File tree

5 files changed

+19
-12
lines changed

5 files changed

+19
-12
lines changed

src/main/java/com/marklogic/spark/ContextSupport.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323

2424
import java.io.Serializable;
2525
import java.util.HashMap;
26-
import java.util.Locale;
2726
import java.util.Map;
28-
import java.util.ResourceBundle;
2927
import java.util.concurrent.TimeUnit;
3028

3129
public class ContextSupport implements Serializable {
@@ -107,11 +105,7 @@ public final boolean optionExists(String option) {
107105
}
108106

109107
public final String getOptionNameForMessage(String option) {
110-
// Allows ETL tool to override what's shown in a validation error.
111-
// Feels like this should be in another class which can cache the ResourceBundle reference.
112-
ResourceBundle bundle = ResourceBundle.getBundle("marklogic-spark-messages", Locale.getDefault());
113-
String optionName = bundle.getString(option);
114-
return optionName != null && optionName.trim().length() > 0 ? optionName.trim() : option;
108+
return Util.getOptionNameForErrorMessage(option);
115109
}
116110

117111
private void parseConnectionString(String value, Map<String, String> connectionProps) {

src/main/java/com/marklogic/spark/DefaultSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ private boolean isReadTriplesOperation(Map<String, String> properties) {
138138
private StructType inferSchemaFromOpticQuery(Map<String, String> caseSensitiveOptions) {
139139
final String query = caseSensitiveOptions.get(Options.READ_OPTIC_QUERY);
140140
if (query == null || query.trim().length() < 1) {
141-
throw new ConnectorException(String.format("No Optic query found; must define %s", Options.READ_OPTIC_QUERY));
141+
throw new ConnectorException(Util.getOptionNameForErrorMessage("spark.marklogic.read.noOpticQuery"));
142142
}
143143
RowManager rowManager = new ContextSupport(caseSensitiveOptions).connectToMarkLogic().newRowManager();
144144
RawQueryDSLPlan dslPlan = rowManager.newRawQueryDSLPlan(new StringHandle(query));

src/main/java/com/marklogic/spark/Util.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020
import org.slf4j.LoggerFactory;
2121
import scala.collection.immutable.HashMap;
2222

23-
import java.util.ArrayList;
24-
import java.util.List;
25-
import java.util.Map;
23+
import java.util.*;
2624
import java.util.stream.Stream;
2725

2826
public interface Util {
@@ -80,4 +78,18 @@ static boolean isReadWithCustomCodeOperation(Map<String, String> properties) {
8078
Options.READ_JAVASCRIPT_FILE, Options.READ_XQUERY_FILE
8179
);
8280
}
81+
82+
/**
83+
* Allows Flux to override what's shown in a validation error. The connector is fine showing option names
84+
* such as "spark.marklogic.read.opticQuery", but that is meaningless to a Flux user. This can also be used to
85+
* access any key in the messages properties file.
86+
*
87+
* @param option
88+
* @return
89+
*/
90+
static String getOptionNameForErrorMessage(String option) {
91+
ResourceBundle bundle = ResourceBundle.getBundle("marklogic-spark-messages", Locale.getDefault());
92+
String optionName = bundle.getString(option);
93+
return optionName != null && optionName.trim().length() > 0 ? optionName.trim() : option;
94+
}
8395
}

src/main/java/com/marklogic/spark/reader/optic/OpticReadContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public OpticReadContext(Map<String, String> properties, StructType schema, int d
7575

7676
final String dslQuery = properties.get(Options.READ_OPTIC_QUERY);
7777
if (dslQuery == null || dslQuery.trim().length() < 1) {
78-
throw new IllegalArgumentException(String.format("No Optic query found; must define %s", Options.READ_OPTIC_QUERY));
78+
throw new ConnectorException(Util.getOptionNameForErrorMessage("spark.marklogic.read.noOpticQuery"));
7979
}
8080

8181
DatabaseClient client = connectToMarkLogic();

src/main/resources/marklogic-spark-messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ spark.marklogic.client.uri=
44
spark.marklogic.read.batchSize=
55
spark.marklogic.read.documents.partitionsPerForest=
66
spark.marklogic.read.numPartitions=
7+
spark.marklogic.read.noOpticQuery=No Optic query found; must define spark.marklogic.read.opticQuery
78
spark.marklogic.write.batchSize=
89
spark.marklogic.write.documentType=
910
spark.marklogic.write.fileRows.documentType=

0 commit comments

Comments
 (0)