package org.beanfuse.webapp.security.action;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.beanfuse.query.Condition;
import org.beanfuse.query.EntityQuery;
import org.beanfuse.security.Group;
import org.beanfuse.security.Resource;
import org.beanfuse.security.User;
import org.beanfuse.security.UserCategory;
import org.beanfuse.security.menu.Menu;
import org.beanfuse.security.menu.MenuProfile;
import org.beanfuse.security.online.CategoryProfile;
import org.beanfuse.security.restriction.Param;
import org.beanfuse.security.restriction.Pattern;
import org.beanfuse.webapp.security.helper.GeneralDatasetProducer;
import org.jfree.data.general.DefaultPieDataset;
public class DashboardAction extends SecurityAction {
public String index() {
EntityQuery categoryQuery = new EntityQuery(UserCategory.class, "category");
List categories = (List) entityService.search(categoryQuery);
Map categoryMap = new HashMap();
for (Iterator iterator = categories.iterator(); iterator.hasNext();) {
UserCategory category = (UserCategory) iterator.next();
categoryMap.put(category.getId().toString(), category);
}
put("categories", categoryMap);
EntityQuery categoryProfileQuery = new EntityQuery(CategoryProfile.class, "categoryProfile");
List categoryProfiles = (List) entityService.search(categoryProfileQuery);
DefaultPieDataset dataset = new DefaultPieDataset();
for (Iterator iterator = categoryProfiles.iterator(); iterator.hasNext();) {
CategoryProfile categoryProfile = (CategoryProfile) iterator.next();
dataset.setValue(categoryProfile.getCategory().getName(), categoryProfile.getCapacity());
}
put("categoryProfilesData", new GeneralDatasetProducer("categoryProfilesData", dataset));
populateUserStat(categoryMap);
EntityQuery groupQuery = new EntityQuery(Group.class, "group");
groupQuery.setSelect("group.category.id,group.enabled,count(*)");
groupQuery.groupBy("group.category.id,group.enabled");
List groupStat = (List) entityService.search(groupQuery);
put("groupStat", groupStat);
List menuProfiles = (List) entityService.loadAll(MenuProfile.class);
Map menuStats = new HashMap();
for (Iterator iterator = menuProfiles.iterator(); iterator.hasNext();) {
MenuProfile profile = (MenuProfile) iterator.next();
EntityQuery menuQuery = new EntityQuery(Menu.class, "menu");
menuQuery.add(new Condition("menu.profile=:profile", profile));
menuQuery.setSelect("menu.enabled,count(*)");
menuQuery.groupBy("enabled");
menuStats.put(profile.getId().toString(), entityService.search(menuQuery));
}
put("menuProfiles", menuProfiles);
put("menuStats", menuStats);
EntityQuery resourceQuery = new EntityQuery(Resource.class, "resource");
resourceQuery.setSelect("resource.enabled,count(*)");
resourceQuery.groupBy("enabled");
put("resourceStat", entityService.search(resourceQuery));
EntityQuery patternQuery = new EntityQuery(Pattern.class, "pattern");
patternQuery.setSelect("count(*)");
put("patternStat", entityService.search(patternQuery));
EntityQuery paramsQuery = new EntityQuery(Param.class, "param");
paramsQuery.setSelect("count(*)");
put("paramStat", entityService.search(paramsQuery));
return forward();
}
private void populateUserStat(Map categoryMap) {
EntityQuery userQuery = new EntityQuery(User.class, "user");
userQuery.setSelect("user.defaultCategory.id,user.status,count(*)");
userQuery.groupBy("user.defaultCategory.id,user.status");
List userStat = (List) entityService.search(userQuery);
DefaultPieDataset dataset2 = new DefaultPieDataset();
for (Iterator iterator = userStat.iterator(); iterator.hasNext();) {
Object[] data = (Object[]) iterator.next();
dataset2.setValue(((UserCategory) categoryMap.get(data[0].toString())).getName()
+ (data[1].toString().equals("1") ? "(激活)" : "(冻结)"), ((Number) data[2])
.intValue());
}
put("userStatData", new GeneralDatasetProducer("userStatData", dataset2));
}
}