Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,11 @@
import ca.nrc.cadc.tap.schema.TapSchemaDAO;
import ca.nrc.cadc.tap.schema.TapSchemaLoader;
import ca.nrc.cadc.tap.schema.TapSchemaUtil;
import ca.nrc.cadc.tap.schema.validator.ValidatorConfig;
import ca.nrc.cadc.vosi.TableSetWriter;
import ca.nrc.cadc.vosi.TableWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import org.apache.log4j.Logger;

/**
Expand Down Expand Up @@ -154,14 +156,25 @@ public void doAction() throws Exception {
if (validate) {
String validationResult;
try {
validationResult = TapSchemaUtil.validateTableDesc(td, validatorConfig);
ValidatorConfig vc = validatorConfig; // set by service config
if (vc == null) {
vc = ValidatorConfig.lax();
}
validationResult = TapSchemaUtil.validateTableDesc(td, vc);
} catch (IllegalArgumentException ex) {
validationResult = ex.getMessage();
}
syncOutput.setCode(200);
syncOutput.setHeader("Content-Type", "text/plain");
syncOutput.getOutputStream().write(validationResult == null || validationResult.isEmpty()
? "OK".getBytes() : validationResult.getBytes());
PrintWriter w = new PrintWriter(new OutputStreamWriter(syncOutput.getOutputStream()));
w.print(tableName + ": ");
if (validationResult == null || validationResult.isEmpty()) {
w.println("OK");
} else {
w.println(validationResult);
}
w.flush();
w.close();
return;
}
// If the Accept header = application/x-votable+xml,
Expand Down
17 changes: 10 additions & 7 deletions cadc-tap/src/main/java/ca/nrc/cadc/tap/schema/TapSchemaUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -269,18 +269,21 @@ public static String validateTableDesc(TableDesc td, ValidatorConfig config) {
List<String> warnings = new ArrayList<>();
IdentifierValidator identifierValidator = new IdentifierValidator(config);

collectViolations("schema name", td.getSchemaName(),
String contextPrefix = td.getSchemaName() + ": ";
collectViolations(contextPrefix, "schema name", td.getSchemaName(),
identifierValidator.checkValidIdentifier(td.getSchemaName(), IdentifierValidator.IdentifierType.SCHEMA_NAME).getViolations(),
config, errors, warnings);

collectViolations("table name", td.getTableName(),
contextPrefix = td.getTableName() + ": ";
collectViolations(contextPrefix, "table name", td.getTableName(),
identifierValidator.checkValidTableName(td.getTableName()).getViolations(), config, errors, warnings);

UCDValidator ucdValidator = new UCDValidator(config);
VOUnitValidator voUnitValidator = new VOUnitValidator(config);

for (ColumnDesc cd : td.getColumnDescs()) {
collectViolations("column name", cd.getColumnName(),
contextPrefix = td.getTableName() + "." + cd.getColumnName() + ": ";
collectViolations(contextPrefix , "column name", cd.getColumnName(),
identifierValidator.checkValidIdentifier(cd.getColumnName(), IdentifierValidator.IdentifierType.COLUMN_NAME).getViolations(),
config, errors, warnings);

Expand All @@ -289,8 +292,8 @@ public static String validateTableDesc(TableDesc td, ValidatorConfig config) {
continue;
}

collectViolations("ucd", cd.ucd, ucdValidator.validate(cd.ucd).getViolations(), config, errors, warnings);
collectViolations("unit", cd.unit, voUnitValidator.validate(cd.unit).getViolations(), config, errors, warnings);
collectViolations(contextPrefix, "ucd", cd.ucd, ucdValidator.validate(cd.ucd).getViolations(), config, errors, warnings);
collectViolations(contextPrefix , "unit", cd.unit, voUnitValidator.validate(cd.unit).getViolations(), config, errors, warnings);
}

if (errors.isEmpty() && warnings.isEmpty()) {
Expand Down Expand Up @@ -321,10 +324,10 @@ public static String validateTableDesc(TableDesc td, ValidatorConfig config) {
/**
* Classifies each violation by severity and appends the formatted line to the appropriate list.
*/
private static void collectViolations(String fieldType, String fieldValue, List<Violation> violations,
private static void collectViolations(String pre, String fieldType, String fieldValue, List<Violation> violations,
ValidatorConfig config, List<String> errors, List<String> warnings) {
for (Violation v : violations) {
String line = fieldType + " \"" + fieldValue + "\": " + v.getMessage() + "\n";
String line = pre + fieldType + " \"" + fieldValue + "\": " + v.getMessage() + "\n";
if (config.severityFor(v.getViolationType()) == ValidatorConfig.Severity.ERROR) {
errors.add(line);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,12 @@
************************************************************************
*/

package ca.nrc.cadc.tap.schema;
package ca.nrc.cadc.tap.schema.validator;

import ca.nrc.cadc.tap.schema.validator.ValidatorConfig;
import ca.nrc.cadc.tap.schema.ColumnDesc;
import ca.nrc.cadc.tap.schema.TableDesc;
import ca.nrc.cadc.tap.schema.TapDataType;
import ca.nrc.cadc.tap.schema.TapSchemaUtil;
import org.junit.Assert;
import org.junit.Test;

Expand Down Expand Up @@ -106,9 +109,9 @@ public void testValidateLaxConfig() {
Assert.assertTrue(result.contains("warnings: 3"));

Assert.assertTrue(result.contains("schema.name"));
Assert.assertFalse(result.contains("tableName"));
Assert.assertTrue(result.contains("tableName"));

Assert.assertFalse(result.contains("col1"));
Assert.assertTrue(result.contains("col1"));
Assert.assertTrue(result.contains("\"select\""));

Assert.assertTrue(result.contains("Jy/beam/RMSF")); // STRUCTURAL
Expand Down Expand Up @@ -165,9 +168,9 @@ public void testValidateStrictConfig() {
Assert.assertTrue(result.contains("warnings: 0"));

Assert.assertTrue(result.contains("schema.name"));
Assert.assertFalse(result.contains("tableName"));
Assert.assertTrue(result.contains("tableName"));

Assert.assertFalse(result.contains("col1"));
Assert.assertTrue(result.contains("col1"));
Assert.assertTrue(result.contains("\"select\""));

Assert.assertTrue(result.contains("Jy/beam/RMSF")); // STRUCTURAL
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,10 @@ public void write(OutputStream out) throws IOException {
Assert.assertNull("throwable", check.getThrowable());
Assert.assertEquals("response code", 200, check.getResponseCode());
String validationContent = stream.toString(StandardCharsets.UTF_8);
Assert.assertEquals("OK", validationContent);
Assert.assertNotNull(validationContent);
validationContent = validationContent.trim();
String expected = testTable + ": OK";
Assert.assertEquals(expected, validationContent);
} catch (Exception unexpected) {
Assert.fail("unexpected exception: " + unexpected);
}
Expand Down
Loading