1. Write your own recordbuilderImpl for example, highlighted method needs to be overridden, implement your custom logic to formulate the query. In this example im querying against storeId.
import atg.endeca.assembler.navigation.filter.RecordFilterBuilderImpl;
public class CustomRecordFilterBuilder extends RecordFilterBuilderImpl {
private String recordPropertyName;
private String storeId;
public String getRecordPropertyName() {
return recordPropertyName;
}
public void setRecordPropertyName(String recordPropertyName) {
this.recordPropertyName = recordPropertyName;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
@Override
public String buildRecordFilter() {
return this.recordPropertyName+":"+this.storeId;
}
}
2. Custom logic for implementing the OrRecordFilterBuilder
f(storeId.contains(",")){
OrRecordFilterBuilder orRecordFilterBuilder = new OrRecordFilterBuilder();
orRecordFilterBuilder.setSecurityFilter(Boolean.FALSE);
//StoreId is are tokenized by ',' eg. 292,110,101
StringTokenizer tokenizer = new StringTokenizer(storeId, ",");
List<CustomRecordFilterBuilder> recordFilterBuilderList = new ArrayList<CustomRecordFilterBuilder>();
while(tokenizer.hasMoreTokens()){
CustomRecordFilterBuilder recordFilterBuilder = new CustomRecordFilterBuilder();
recordFilterBuilder.setStoreId(tokenizer.nextToken());
recordFilterBuilder.setRecordPropertyName(recordPropertyName);
recordFilterBuilderList.add(recordFilterBuilder);
}
if(recordFilterBuilderList != null && recordFilterBuilderList.size() > 0){
RecordFilterBuilder[] recordFilterBuildersArray = recordFilterBuilderList.toArray( new RecordFilterBuilder[recordFilterBuilderList.size()]);
orRecordFilterBuilder.setRecordFilterBuilders(recordFilterBuildersArray);
filter = orRecordFilterBuilder.buildRecordFilter();
LogUtils.getLogger(this).vlogDebug(" filter ---------->>>>"+filter);
}
}
No comments:
Post a Comment