package io.ebeaninternal.server.deploy;
import io.ebeaninternal.server.el.ElPropertyDeploy;
import java.util.HashSet;
import java.util.Set;
Converts logical property names to database columns with table alias.
In doing so it builds an 'includes' set which becomes the joins required to
support the properties parsed.
/**
* Converts logical property names to database columns with table alias.
* <p>
* In doing so it builds an 'includes' set which becomes the joins required to
* support the properties parsed.
* </p>
*/
public final class DeployPropertyParser extends DeployParser {
private static final String JOIN = "join";
private static final String FROM = "from";
private final BeanDescriptor<?> beanDescriptor;
private final Set<String> includes = new HashSet<>();
private boolean catchFirst;
private ElPropertyDeploy firstProp;
DeployPropertyParser(BeanDescriptor<?> beanDescriptor) {
this.beanDescriptor = beanDescriptor;
}
Set to true to catch the first property.
/**
* Set to true to catch the first property.
*/
public DeployPropertyParser setCatchFirst(boolean catchFirst) {
this.catchFirst = catchFirst;
return this;
}
Return the first property found by the parser.
/**
* Return the first property found by the parser.
*/
public ElPropertyDeploy getFirstProp() {
return firstProp;
}
@Override
public Set<String> getIncludes() {
return includes;
}
Skip if in raw sql expression with from tableName or join tableName.
/**
* Skip if in raw sql expression with from tableName or join tableName.
*/
@Override
protected boolean skipWordConvert() {
return FROM.equalsIgnoreCase(priorWord) || JOIN.equalsIgnoreCase(priorWord);
}
@Override
public String getDeployWord(String expression) {
ElPropertyDeploy elProp = beanDescriptor.getElPropertyDeploy(expression);
if (elProp == null) {
return null;
} else {
if (catchFirst && firstProp == null) {
firstProp = elProp;
}
addIncludes(elProp.getElPrefix());
return elProp.getElPlaceholder(encrypted);
}
}
@Override
public String convertWord() {
String r = getDeployWord(word);
return r == null ? word : r;
}
private void addIncludes(String prefix) {
if (prefix != null) {
includes.add(prefix);
}
}
}