package org.exist.xquery.value;
import org.exist.util.io.Base64OutputStream;
import org.exist.xquery.XPathException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Adam Retter <adam@existsolutions.com>
*/
public class Base64BinaryValueType extends BinaryValueType<Base64OutputStream> {
//private final static Pattern base64Pattern = Pattern.compile("^(?:[A-Za-z0-9+/\\s]{4})*(?:[A-Za-z0-9+/\\s]{2}==|[A-Za-z0-9+/\\s]{3}=)?$");
//private final static Pattern base64Pattern = Pattern.compile("^((?:(?:\\s*[A-Za-z0-9+/]){4})*(?:(?:\\s*[A-Za-z0-9+/]){2}\\s*=\\s*=|(?:\\s*[A-Za-z0-9+/]){3}\\s*=)?)$");
//private final static Pattern base64Pattern = Pattern.compile("^((?:(?:\\s*[A-Za-z0-9+/]){4})*(?:(?:\\s*[A-Za-z0-9+/]){1}(?:\\s*[AQgw]){1}\\s*=\\s*=|(?:\\s*[A-Za-z0-9+/]){3}\\s*=)?)$");
private final static Pattern base64Pattern = Pattern.compile("^((?>(?>\\s*[A-Za-z0-9+/]){4})*(?>(?>\\s*[A-Za-z0-9+/]){1}(?>\\s*[AQgw]){1}\\s*=\\s*=|(?>\\s*[A-Za-z0-9+/]){3}\\s*=)?)$");
public Base64BinaryValueType() {
super(Type.BASE64_BINARY, Base64OutputStream.class);
}
private Matcher getMatcher(final String toMatch) {
return base64Pattern.matcher(toMatch);
}
@Override
public void verifyString(String str) throws XPathException {
if (!getMatcher(str).matches()) {
throw new XPathException("FORG0001: Invalid base64 data");
}
}
@Override
protected String formatString(String str) {
return str;
}
}