/**
* Copyright (c) Codice Foundation
* <p>
* This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
* General Public License as published by the Free Software Foundation, either version 3 of the
* License, or any later version.
* <p>
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. A copy of the GNU Lesser General Public License
* is distributed along with this program and can be found at
* <http://www.gnu.org/licenses/lgpl.html>.
*/
package org.codice.ddf.sdk.validation.metacard;
import java.util.Collections;
import java.util.Set;
import com.google.common.collect.Sets;
import ddf.catalog.data.Metacard;
import ddf.catalog.util.Describable;
import ddf.catalog.validation.MetacardValidator;
import ddf.catalog.validation.ValidationException;
import ddf.catalog.validation.impl.ValidationExceptionImpl;
public class SampleMetacardValidator implements MetacardValidator, Describable {
private Set<String> validWords = Sets.newHashSet("clean", "test", "default", "sample");
private Set<String> warningWords = Sets.newHashSet("warning");
private Set<String> errorWords = Sets.newHashSet("error");
private String id = "sample-validator";
@Override
public String getVersion() {
return "1.0";
}
@Override
public String getId() {
return id;
}
@Override
public String getTitle() {
return "Sample Metacard Validator";
}
public void setId(String newId) {
id = newId;
}
@Override
public String getDescription() {
return "A sample metacard validator used for development and testing.";
}
@Override
public String getOrganization() {
return "Codice";
}
@Override
public void validate(Metacard metacard) throws ValidationException {
if (checkMetacardForWarningWords(metacard.getTitle())) {
ValidationExceptionImpl validationException = new ValidationExceptionImpl(
"Metacard title contains one of the warning words: " + warningWords);
validationException.setWarnings(Collections.singletonList("sampleWarnings"));
throw validationException;
}
if (checkMetacardForErrorWords(metacard.getTitle())) {
ValidationExceptionImpl validationException = new ValidationExceptionImpl(
"Metacard title contains one of the error words: " + errorWords);
validationException.setErrors(Collections.singletonList("sampleError"));
throw validationException;
}
if (!checkMetacardForValidWords(metacard.getTitle())) {
ValidationExceptionImpl validationException = new ValidationExceptionImpl(
"Metacard title does not contain any of: " + validWords);
validationException.setErrors(Collections.singletonList("sampleError"));
validationException.setWarnings(Collections.singletonList("sampleWarnings"));
throw validationException;
}
}
private boolean checkMetacardForValidWords(String title) {
return validWords.stream()
.anyMatch(title::contains);
}
private boolean checkMetacardForWarningWords(String title) {
return warningWords.stream()
.anyMatch(title::contains);
}
private boolean checkMetacardForErrorWords(String title) {
return errorWords.stream()
.anyMatch(title::contains);
}
public void setValidWords(Set<String> validWords) {
if (validWords != null) {
this.validWords = validWords;
}
}
public void setWarningWords(Set<String> warningWords) {
if (warningWords != null) {
this.warningWords = warningWords;
}
}
public void setErrorWords(Set<String> errorWords) {
if (errorWords != null) {
this.errorWords = errorWords;
}
}
public Set<String> getValidWords() {
return validWords;
}
public Set<String> getWarningWords() {
return warningWords;
}
public Set<String> getErrorWords() {
return errorWords;
}
}