package jpasearch.repository.query.selector;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* @author speralta
*/
public class Selectors<FROM> implements GroupSelector<FROM, Selectors<FROM>> {
private static final long serialVersionUID = 201403271745L;
private boolean andMode;
private final List<Selector<FROM, ?>> selectors;
public Selectors() {
andMode = true;
selectors = new ArrayList<>();
}
private Selectors(Selectors<FROM> toCopy) {
andMode = toCopy.andMode;
selectors = new ArrayList<>();
for (Selector<FROM, ?> selector : toCopy.selectors) {
selectors.add(selector.copy());
}
}
@Override
public Selectors<FROM> copy() {
return new Selectors<FROM>(this);
}
public Selectors<FROM> or() {
andMode = false;
return this;
}
public Selectors<FROM> add(Selector<FROM, ?> selector) {
selectors.add(selector);
return this;
}
public boolean isAndMode() {
return andMode;
}
public List<Selector<FROM, ?>> getSelectors() {
return selectors;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}