package org.activityinfo.ui.client.component.report.editor.chart; import com.google.common.base.Function; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.activityinfo.legacy.client.Dispatcher; import org.activityinfo.legacy.shared.command.*; import org.activityinfo.legacy.shared.command.result.ActivityFormResults; import org.activityinfo.legacy.shared.model.ActivityFormDTO; import org.activityinfo.legacy.shared.model.AdminLevelDTO; import org.activityinfo.legacy.shared.model.AttributeGroupDTO; import org.activityinfo.legacy.shared.reports.model.PivotReportElement; import org.activityinfo.promise.Promise; import org.activityinfo.server.database.hibernate.entity.AttributeGroup; import org.activityinfo.ui.client.component.report.editor.pivotTable.DimensionModel; import java.util.List; import java.util.Map; import java.util.Set; public class Dimensions { private final Map<Integer, AttributeGroupDTO> groupMap = Maps.newHashMap(); private final List<AttributeGroupDTO> groups = Lists.newArrayList(); private final Map<Integer, AdminLevelDTO> levelMap = Maps.newHashMap(); private final List<AdminLevelDTO> levels = Lists.newArrayList(); private List<DimensionModel> levelDimensions; private List<DimensionModel> attributeDimensions; private Dimensions(List<ActivityFormDTO> forms) { for(ActivityFormDTO form : forms) { for(AdminLevelDTO level : form.getAdminLevels()) { if(levelMap.put(level.getId(), level) == null) { levels.add(level); } } for(AttributeGroupDTO group : form.getAttributeGroups()) { if(groupMap.put(group.getId(), group) == null) { groups.add(group); } } } } public Dimensions() { } public static Promise<Dimensions> loadDimensions(Dispatcher dispatcher, PivotReportElement model) { if(model.getIndicators().isEmpty()) { return Promise.resolved(new Dimensions()); } return dispatcher.execute(new GetActivityForms(model.getIndicators())).then(new Function<ActivityFormResults, Dimensions>() { @Override public Dimensions apply(ActivityFormResults input) { return new Dimensions(input.getData()); } }); } private static GetAttributeGroupsDimension queryAttributeGroups(Set<Integer> indicators) { Filter filter = new Filter(); filter.addRestriction(DimensionType.Indicator, indicators); GetAttributeGroupsDimension query = new GetAttributeGroupsDimension(); query.setFilter(filter); return query; } private static GetAdminLevels queryAdminLevels(Set<Integer> indicators) { GetAdminLevels query = new GetAdminLevels(); query.setIndicatorIds(indicators); return query; } public List<DimensionModel> getAdminLevelDimensions() { return DimensionModel.adminLevelModels(levels); } public List<DimensionModel> getAttributeDimensions() { return DimensionModel.attributeGroupModels(groups); } public String getAttributeGroupNameSafe(int attributeGroupId) { AttributeGroupDTO group = groupMap.get(attributeGroupId); if(group == null) { return ""; } return group.getName(); } public AdminLevelDTO getAdminLevelById(int levelId) { return levelMap.get(levelId); } public AttributeGroupDTO getAttributeGroupById(int attributeGroupId) { return groupMap.get(attributeGroupId); } }