com.imos.sample.ui.action.AdminManagementAction.java Source code

Java tutorial

Introduction

Here is the source code for com.imos.sample.ui.action.AdminManagementAction.java

Source

/*
 * 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;
    }
}