* @param inheritedSelectionOrder never null
* @return never null
*/
public EntitySelector buildEntitySelector(EnvironmentMode environmentMode, SolutionDescriptor solutionDescriptor,
SelectionCacheType minimumCacheType, SelectionOrder inheritedSelectionOrder) {
PlanningEntityDescriptor entityDescriptor = fetchEntityDescriptor(solutionDescriptor);
SelectionCacheType resolvedCacheType = SelectionCacheType.resolve(cacheType, minimumCacheType);
minimumCacheType = SelectionCacheType.max(minimumCacheType, resolvedCacheType);
SelectionOrder resolvedSelectionOrder = SelectionOrder.resolve(selectionOrder, inheritedSelectionOrder);
// baseEntitySelector and lower should be SelectionOrder.ORIGINAL if they are going to get cached completely
EntitySelector entitySelector = buildBaseEntitySelector(environmentMode, entityDescriptor,
minimumCacheType, resolvedCacheType.isCached() ? SelectionOrder.ORIGINAL : resolvedSelectionOrder);
boolean alreadyCached = false;
if (!CollectionUtils.isEmpty(entityFilterClassList)
|| entityDescriptor.hasMovableEntitySelectionFilter()) {
List<SelectionFilter> entityFilterList = new ArrayList<SelectionFilter>(
entityFilterClassList == null ? 1 : entityFilterClassList.size());
if (entityFilterClassList != null) {
for (Class<? extends SelectionFilter> entityFilterClass : entityFilterClassList) {
entityFilterList.add(ConfigUtils.newInstance(this, "entityFilterClass", entityFilterClass));
}
}
if (entityDescriptor.hasMovableEntitySelectionFilter()) {
entityFilterList.add(entityDescriptor.getMovableEntitySelectionFilter());
}
entitySelector = new FilteringEntitySelector(entitySelector, entityFilterList);
alreadyCached = false;
}
// TODO entitySorterClass