co.edu.icesi.academ.client.perfiles.propietario.FactoresDeImpacto.java Source code

Java tutorial

Introduction

Here is the source code for co.edu.icesi.academ.client.perfiles.propietario.FactoresDeImpacto.java

Source

/**
* Copyright  2013 Universidad Icesi
* 
* This file is part of ACADEM.
* 
* ACADEM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* 
* ACADEM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with ACADEM.  If not, see <http://www.gnu.org/licenses/>.
**/

package co.edu.icesi.academ.client.perfiles.propietario;

import java.util.ArrayList;
import java.util.List;

import co.edu.icesi.academ.bo.EvaluacionBO;
import co.edu.icesi.academ.bo.FactorDeImpactoBO;
import co.edu.icesi.academ.bo.RolBO;
import co.edu.icesi.academ.bo.TemaBO;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.AbsoluteLayout;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Table;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Notification.Type;
import com.vaadin.ui.Table.Align;
import com.vaadin.ui.TextField;

public class FactoresDeImpacto extends CustomComponent {

    /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @AutoGenerated
    private AbsoluteLayout mainLayout;
    @AutoGenerated
    private Button button_guardar;
    @AutoGenerated
    private Button button_cargar;
    @AutoGenerated
    private Table table_1;

    // Contiene los roles desplegados en pantalla
    private List<RolBO> rolesActuales;
    // Contiene los temas desplegados en pantalla
    private List<TemaBO> temasActuales;
    // Contiene el id de la evaluacion actual
    private int idEvaluacion;

    /**
     * The constructor should first build the main layout, set the composition
     * root and then do any custom initialization.
     * 
     * The constructor will not be automatically regenerated by the visual
     * editor.
     */
    public FactoresDeImpacto() {
        buildMainLayout();
        setCompositionRoot(mainLayout);

        // TODO add user code here
    }

    public void cargarRoles(final List<RolBO> roles, List<TemaBO> temas, List<FactorDeImpactoBO> factoresDeImpacto,
            EvaluacionBO evaluacionBO) {
        initTable();

        // Guarda los roles obtenidos en la consulta
        rolesActuales = roles;
        // Guarda los temas obtenidos en la consulta
        temasActuales = temas;
        // Guarda el identificador de la evaluacion actual
        idEvaluacion = evaluacionBO.getId();

        int columns = 0;
        // Adiciona una columna por cada rol
        for (RolBO rolBO : roles) {
            table_1.addContainerProperty(rolBO.getNombre(), TextField.class, null);
            table_1.setColumnAlignment(rolBO.getNombre(), Align.CENTER);
            columns++;
        }

        // Agrega la columna TOTAL
        table_1.addContainerProperty("Total", Label.class, null);
        table_1.setColumnAlignment("Total", Align.CENTER);

        // Recorre todos los temas y por cada uno, adiciona los respectivos
        // valores a cada columna
        for (TemaBO temaBO : temas) {
            ArrayList<Object> item = new ArrayList<>();
            item.add(temaBO.getId());
            item.add(temaBO.getNombre());
            int total = 0;
            for (int i = 0; i < columns; i++) {
                final TextField tf = new TextField();

                // Carga el valor del factor de impacto
                FactorDeImpactoBO factor = new FactorDeImpactoBO();
                factor.setEvaluacion(evaluacionBO.getId());
                factor.setRol(roles.get(i).getNombre());
                factor.setTema(temaBO.getId());
                int index = getFactorDeImpactoIndex(factoresDeImpacto, factor);
                if (index != -1) {
                    tf.setValue("" + (int) factoresDeImpacto.get(index).getFactorDeImpacto());
                    total += factoresDeImpacto.get(index).getFactorDeImpacto();
                }

                tf.setColumns(3);
                tf.setData(temaBO);
                tf.setId(temaBO.getId() + "-" + i);
                // Adiciona listener para recalcular el total de la fila cada
                // vez que se cambie un factor de impacto
                tf.addTextChangeListener(new TextChangeListener() {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public void textChange(TextChangeEvent event) {
                        // TODO Auto-generated method stub
                        TemaBO tema = (TemaBO) tf.getData();
                        int tfId = Integer.parseInt(tf.getId().split("-")[1]);
                        int total = 0;
                        // Obtiene el valor de todos los factores de impacto de
                        // la fila y los suma
                        for (int j = 0; j < roles.size(); j++) {
                            try {
                                if (j != tfId)
                                    total += Integer.parseInt(table_1.getItem(tema)
                                            .getItemProperty(roles.get(j).getNombre()).getValue().toString());
                                else
                                    total += Integer.parseInt(event.getText());
                            } catch (Exception e) {
                                total += 0;
                            }
                        }
                        Label l = getLabelColor(total);
                        table_1.getItem(tema).getItemProperty("Total").setValue(l);
                    }
                });
                item.add(tf);
            }
            item.add(getLabelColor(total));
            table_1.addItem(item.toArray(), temaBO);
        }
    }

    public List<FactorDeImpactoBO> guardarFactoresDeImpacto() throws Exception {
        List<FactorDeImpactoBO> factoresDeImpacto = new ArrayList<>();

        int factorDeImpacto = 0;
        for (TemaBO temaBO : temasActuales) {
            for (int j = 0; j < rolesActuales.size(); j++) {
                try {
                    factorDeImpacto = Integer.parseInt(table_1.getItem(temaBO)
                            .getItemProperty(rolesActuales.get(j).getNombre()).getValue().toString());
                    FactorDeImpactoBO nuevoFactor = new FactorDeImpactoBO();
                    nuevoFactor.setEvaluacion(idEvaluacion);
                    nuevoFactor.setFactorDeImpacto(factorDeImpacto);
                    nuevoFactor.setRol(rolesActuales.get(j).getNombre());
                    nuevoFactor.setTema(temaBO.getId());

                    factoresDeImpacto.add(nuevoFactor);
                } catch (Exception e) {
                    FactorDeImpactoBO nuevoFactor = new FactorDeImpactoBO();
                    nuevoFactor.setEvaluacion(idEvaluacion);
                    nuevoFactor.setFactorDeImpacto(0);
                    nuevoFactor.setRol(rolesActuales.get(j).getNombre());
                    nuevoFactor.setTema(temaBO.getId());

                    factoresDeImpacto.add(nuevoFactor);
                }
            }
        }

        return factoresDeImpacto;
    }

    private Label getLabelColor(int total) {
        Label l;
        if (total != 100) {

            l = new Label("<font color=\"red\">" + total + "% </font>", ContentMode.HTML);
        } else
            l = new Label("<font color=\"green\">" + total + "% </font>", ContentMode.HTML);
        return l;
    }

    private int getFactorDeImpactoIndex(List<FactorDeImpactoBO> factoresDeImpacto, FactorDeImpactoBO factor) {
        int index = -1;
        boolean go = true;
        for (int i = 0; i < factoresDeImpacto.size() && go; i++) {
            if (factoresDeImpacto.get(i).equals(factor)) {
                index = i;
                go = false;
            }
        }
        return index;
    }

    @AutoGenerated
    private AbsoluteLayout buildMainLayout() {
        // common part: create layout
        mainLayout = new AbsoluteLayout();
        mainLayout.setImmediate(false);
        mainLayout.setWidth("100%");
        mainLayout.setHeight("100%");

        // top-level component properties
        setWidth("100.0%");
        setHeight("100.0%");

        // table_1
        initTable();

        // button_cargar
        button_cargar = new Button();
        button_cargar.setCaption("Cargar Factores");
        button_cargar.setImmediate(false);
        button_cargar.setWidth("-1px");
        button_cargar.setHeight("-1px");
        button_cargar.addClickListener(new ClickListener() {

            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            @Override
            public void buttonClick(ClickEvent event) {
                // TODO Auto-generated method stub
                ControladorPropietario.getInstance().cargarFactoresImpacto();
            }
        });
        mainLayout.addComponent(button_cargar, "top:20.0px;left:10.0px;");

        // button_guardar
        button_guardar = new Button();
        button_guardar.setCaption("Guardar Factores");
        button_guardar.setImmediate(false);
        button_guardar.setWidth("-1px");
        button_guardar.setHeight("-1px");
        button_guardar.addClickListener(new ClickListener() {

            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            @Override
            public void buttonClick(ClickEvent event) {
                try {
                    List<FactorDeImpactoBO> factoresDeImpacto = guardarFactoresDeImpacto();
                    ControladorPropietario.getInstance().guardarFactoresDeImpacto(factoresDeImpacto);
                } catch (Exception e) {
                    Notification.show("Error", "Debe cargar primero los factores de impacto",
                            Type.TRAY_NOTIFICATION);
                }
            }
        });
        mainLayout.addComponent(button_guardar, "top:20.0px;left:150.0px;");

        return mainLayout;
    }

    private void initTable() {
        table_1 = new Table();
        table_1.setImmediate(false);
        table_1.setWidth("100.0%");
        table_1.setHeight("100.0%");
        mainLayout.addComponent(table_1, "top:60.0px;right:10.0px;bottom:10.0px;left:10.0px;");

        table_1.addContainerProperty("Numeral", String.class, null);
        table_1.addContainerProperty("Tema", String.class, null);
        table_1.setSelectable(false);
        table_1.setImmediate(true);
    }

}