package org.bonitasoft.web.toolkit.client.ui.page.itemListingPage;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.bonitasoft.web.rest.model.bpm.process.ProcessItem;
import org.bonitasoft.web.toolkit.client.common.json.JSonItemReader;
import org.bonitasoft.web.toolkit.client.data.api.callback.APICallback;
import org.bonitasoft.web.toolkit.client.data.item.IItem;
import org.bonitasoft.web.toolkit.client.ui.component.filler.ComponentFiller;
/**
* Fill the resourceFilter section with the filters found in database.
*
* @author Séverin Moussel
*/
public final class ResourceFilterFiller<T extends IItem> extends ComponentFiller {
private final ItemListingPage<T> itemListingPage;
private final ItemListingResourceFilter filter;
public ResourceFilterFiller(ItemListingPage<T> itemListingPage, final ItemListingResourceFilter filter) {
this.itemListingPage = itemListingPage;
this.filter = filter;
}
@Override
protected void getData(final APICallback callback) {
this.filter.getSearchRequest().run(callback);
}
@Override
protected void setData(final String json, final Map<String, String> headers) {
final List<IItem> items = JSonItemReader.parseItems(json, this.filter.getSearchRequest().getItemDefinition());
final List<ItemListingFilter> filters = new LinkedList<ItemListingFilter>();
if (items.size() != 0) {
this.itemListingPage.addTitleToSection(itemListingPage.defineResourceFiltersTitle(), itemListingPage.resourceFilters);
}
for (final IItem item : items) {
// Fill additional filters using filters mapping
final Map<String, String> additionalFilters = new HashMap<String, String>();
additionalFilters.putAll(this.filter.getFilters());
for (final String tableResourceAttributeName : this.filter.getFiltersMapping().keySet()) {
final String filterResourceAttributeName = this.filter.getFiltersMapping().get(tableResourceAttributeName);
additionalFilters.put(tableResourceAttributeName, item.getAttributeValue(filterResourceAttributeName));
}
final ItemListingFilter resourceFilter = createResourceListingFilters(item);
resourceFilter.setIsResourceFilter(true);
resourceFilter.setFilters(additionalFilters);
filters.add(resourceFilter);
}
itemListingPage.displayFilters(filters);
itemListingPage.selectRightResourceFilter();
}
private ItemListingFilter createResourceListingFilters(final IItem item) {
String label = item.getAttributeValue(this.filter.getLabelAttributeName());
ItemListingFilter resourceFilter = new ItemListingFilter(item.getId().toString(), label, label, this.filter.getTablesToDisplay());
if (filter instanceof AppResourceFilter) {
resourceFilter.setAdditionnalInfo(item.getAttributeValue(ProcessItem.ATTRIBUTE_VERSION));
}
return resourceFilter;
}
}