Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.imos.sample.ui.action; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import com.imos.sample.model.SMDomain; import com.imos.sample.model.SMEmployee; import com.imos.sample.model.SMSkill; import com.imos.sample.repo.DomainRepository; import com.imos.sample.repo.EmployeeRepository; import com.imos.sample.repo.EmployeeSkillRepository; import com.imos.sample.repo.SkillRepository; import com.imos.sample.util.RepositoryException; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; import lombok.Getter; import lombok.Setter; import lombok.ToString; import lombok.extern.log4j.Log4j2; import org.primefaces.event.SelectEvent; import org.primefaces.model.chart.Axis; import org.primefaces.model.chart.AxisType; import org.primefaces.model.chart.LineChartModel; import org.primefaces.model.chart.LineChartSeries; import org.primefaces.model.tagcloud.DefaultTagCloudItem; import org.primefaces.model.tagcloud.DefaultTagCloudModel; import org.primefaces.model.tagcloud.TagCloudItem; import org.primefaces.model.tagcloud.TagCloudModel; /** * * @author Pintu */ @Log4j2 @ManagedBean(name = "adminMgmtView") @SessionScoped public class AdminManagementAction extends BasicAction { private static final long serialVersionUID = -2450055236578094487L; @Getter @Setter @ManagedProperty(value = "#{loginPage}") private LoginAction loginAction; @Getter @Setter private LineChartModel lineModel; @Getter @Setter private String domain; @Getter @Setter private String skillAndVersion; @Getter private List<SMEmployee> employees; @Getter private List<SMDomain> domains; @Getter private List<SMSkill> skills; @Getter private List<String> employeeList; @Getter private List<String> domainList; @Getter private List<String> skillList; @Getter @Setter private List<String> selectedSkillList; @Getter private TagCloudModel domainModel; @Getter private TagCloudModel skillModel; private final EmployeeRepository empRepo; private final EmployeeSkillRepository skillDetailRepo; private final SkillRepository skillRepo; private final DomainRepository domainRepo; private transient final ListMultimap<String, String> domainSkillMap; private boolean removeDefaultModel = true; /** * Constructor for class AdminManagementAction. */ public AdminManagementAction() { empRepo = new EmployeeRepository(); skillDetailRepo = new EmployeeSkillRepository(); skillRepo = new SkillRepository(); domainRepo = new DomainRepository(); domainSkillMap = ArrayListMultimap.create(); selectedSkillList = new ArrayList<>(); } /** * Populate Employee. * */ @PostConstruct public void loadTable() { try { employees = empRepo.getAllEmployee(); } catch (RepositoryException ex) { log.error(ex); } try { skills = skillRepo.getAllSkill(); } catch (RepositoryException ex) { log.error(ex); } try { domains = domainRepo.getAllDomain(); domainList = new ArrayList<>(); domains.forEach(d -> { domainList.add(d.getName()); try { skills = skillRepo.getSkillByDomain(d.getName()); if (!domainSkillMap.containsKey(d.getName())) { skillList = new ArrayList<>(); skills.forEach(s -> { skillList.add(s.getName()); }); domainSkillMap.putAll(d.getName(), skillList); } else { skillList = domainSkillMap.get(d.getName()); } } catch (RepositoryException ex) { log.error(ex); } }); } catch (RepositoryException ex) { log.error(ex); } lineModel = new LineChartModel(); lineModel.setTitle("Domain Skill Chart"); lineModel.setLegendPosition("e"); LineChartSeries series1 = new LineChartSeries(); series1.setLabel("Default"); series1.set(0, 0); lineModel.addSeries(series1); Axis yAxis = lineModel.getAxis(AxisType.Y); yAxis.setTickInterval("1"); yAxis.setMin(0); try { int count = empRepo.getAllEmployee().size() + 5; yAxis.setMax(count); yAxis.setTickCount(count); } catch (RepositoryException ex) { log.error(ex); } yAxis.setTickFormat("%s"); Axis xAxis = lineModel.getAxis(AxisType.X); xAxis.setMin(0); xAxis.setMax(11); xAxis.setTickCount(11); xAxis.setTickInterval("1"); showTagCloud(); } /** * Populate Skill after selectin a Domain. * */ public void loadSkillList() { try { skills = skillRepo.getSkillByDomain(domain); if (!domainSkillMap.containsKey(domain)) { skillList = new ArrayList<>(); skills.forEach(s -> { skillList.add(s.getName()); }); domainSkillMap.putAll(domain, skillList); } else { skillList = domainSkillMap.get(domain); } } catch (RepositoryException ex) { log.error(ex); } } /** * Show Tag Cloud for Domain and Skill. * */ public void showTagCloud() { domainModel = new DefaultTagCloudModel(); try { domainRepo.getAllDomainWithEmployee().forEach(d -> { domainModel.addTag(new DefaultTagCloudItem(d.getName(), 1)); }); log.info("Domain List is uploaded"); } catch (RepositoryException ex) { log.error(ex); } skillModel = new DefaultTagCloudModel(); try { skillRepo.getAllSkillByEmployee().forEach(s -> { skillModel.addTag(new DefaultTagCloudItem((String) s, 1)); }); log.info("Skill List is uploaded"); } catch (RepositoryException ex) { log.error(ex); } } /** * On selecting a tag in cloud show the Domain and Skill. * * @param event */ public void onSelect(SelectEvent event) { TagCloudItem item = (TagCloudItem) event.getObject(); for (Map.Entry<String, String> entry : domainSkillMap.entries()) { if (entry.getValue().equals(item.getLabel())) { System.out.println("Domain Skill" + entry.getKey() + " : " + entry.getValue()); FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Domain Skill", entry.getKey() + " : " + entry.getValue()); FacesContext.getCurrentInstance().addMessage(null, msg); break; } } } /** * Clear the Line Chart. * */ public void clearChart() { lineModel.clear(); LineChartSeries defaultSeries = new LineChartSeries(); defaultSeries.setLabel("Default"); defaultSeries.set(0, 0); lineModel.addSeries(defaultSeries); removeDefaultModel = true; selectedSkillList.clear(); } /** * Create a Line Chart. * */ public void showChart() { try { selectedSkillList.add(skillAndVersion); List<Pair> pairList = new ArrayList<>(); String[] str = skillAndVersion.split(","); List<Object> list = skillDetailRepo.getRateGrouping(domain, str[0], str[1]); list.forEach(o -> { Object[] array = (Object[]) o; Pair pair = new Pair(); for (Object val : array) { if (val instanceof Integer) { Integer value = (Integer) val; pair.setRating(value); } if (val instanceof Long) { Long value = (Long) val; pair.setCount(value); } } pairList.add(pair); }); lineModel = initLinearModel(pairList); log.info("Domain Skill Chart uploaded"); } catch (Exception ex) { log.error(ex); } } private LineChartModel initLinearModel(List<Pair> pairList) { if (removeDefaultModel) { lineModel.clear(); removeDefaultModel = false; } LineChartSeries series1 = new LineChartSeries(); series1.setLabel(domain + " : " + skillAndVersion); if (pairList.isEmpty()) { series1.set(0, 0); } else { pairList.forEach((pair) -> { series1.set(pair.getRating(), pair.getCount()); }); } lineModel.addSeries(series1); return lineModel; } /** * Pair of point for Line Chart */ @Getter @Setter @ToString private class Pair { private int rating; private long count; } }