pe.gob.mef.gescon.web.ui.ContenidoMB.java Source code

Java tutorial

Introduction

Here is the source code for pe.gob.mef.gescon.web.ui.ContenidoMB.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 pe.gob.mef.gescon.web.ui;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.PhaseId;
import javax.faces.model.SelectItem;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.jsoup.Jsoup;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.event.TransferEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.DualListModel;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.TreeNode;
import org.primefaces.model.UploadedFile;
import pe.gob.mef.gescon.common.Constante;
import pe.gob.mef.gescon.common.Parameters;
import pe.gob.mef.gescon.hibernate.domain.ThistorialId;
import pe.gob.mef.gescon.hibernate.domain.TvinculoHistId;
import pe.gob.mef.gescon.service.ArchivoConocimientoService;
import pe.gob.mef.gescon.service.AsignacionService;
import pe.gob.mef.gescon.service.CalificacionService;
import pe.gob.mef.gescon.service.CategoriaService;
import pe.gob.mef.gescon.service.ConocimientoService;
import pe.gob.mef.gescon.service.ConsultaService;
import pe.gob.mef.gescon.service.ContenidoService;
import pe.gob.mef.gescon.service.DiscusionHistService;
import pe.gob.mef.gescon.service.DiscusionSeccionHistService;
import pe.gob.mef.gescon.service.DiscusionSeccionService;
import pe.gob.mef.gescon.service.DiscusionService;
import pe.gob.mef.gescon.service.HistorialService;
import pe.gob.mef.gescon.service.SeccionHistService;
import pe.gob.mef.gescon.service.UserService;
import pe.gob.mef.gescon.service.VinculoHistService;
import pe.gob.mef.gescon.service.VinculoService;
import pe.gob.mef.gescon.util.GcmFileUtils;
import pe.gob.mef.gescon.util.JSFUtils;
import pe.gob.mef.gescon.util.ServiceFinder;
import pe.gob.mef.gescon.web.bean.ArchivoConocimiento;
import pe.gob.mef.gescon.web.bean.Asignacion;
import pe.gob.mef.gescon.web.bean.Calificacion;
import pe.gob.mef.gescon.web.bean.Categoria;
import pe.gob.mef.gescon.web.bean.Conocimiento;
import pe.gob.mef.gescon.web.bean.Consulta;
import pe.gob.mef.gescon.web.bean.Discusion;
import pe.gob.mef.gescon.web.bean.DiscusionHist;
import pe.gob.mef.gescon.web.bean.DiscusionSeccion;
import pe.gob.mef.gescon.web.bean.DiscusionSeccionHist;
import pe.gob.mef.gescon.web.bean.Historial;
import pe.gob.mef.gescon.web.bean.SeccionHist;
import pe.gob.mef.gescon.web.bean.User;
import pe.gob.mef.gescon.web.bean.Vinculo;
import pe.gob.mef.gescon.web.bean.VinculoHist;

/**
 *
 * @author JJacobo
 */
@ManagedBean
@SessionScoped
public class ContenidoMB implements Serializable {

    private static final long serialVersionUID = 1L;
    private static final Log log = LogFactory.getLog(ContenidoMB.class);
    private final String path = "ct/";
    private List<Conocimiento> listaContenido;
    private List<Asignacion> listaAsignacion;
    private Conocimiento selectedContenido;
    private Asignacion selectedAsignacion;
    private String titulo;
    private String detalle;
    private String descripcion;
    private String contenidoHtml;
    private String contenidoPlain;
    private TreeNode tree;
    private Categoria selectedCategoria;
    private Boolean chkDestacado;
    private UploadedFile uploadFile;
    private StreamedContent content;
    private File file;
    private BigDecimal idTipoConocimiento;
    private List<Consulta> listaSourceVinculos;
    private List<Consulta> listaTargetVinculos;
    private DualListModel<Consulta> pickList;
    private List<Consulta> listaSourceVinculosBL;
    private List<Consulta> listaTargetVinculosBL;
    private List<Consulta> listaSourceVinculosPR;
    private List<Consulta> listaTargetVinculosPR;
    private List<Consulta> listaSourceVinculosWK;
    private List<Consulta> listaTargetVinculosWK;
    private List<Consulta> listaSourceVinculosOM;
    private List<Consulta> listaTargetVinculosOM;
    private List<Consulta> listaSourceVinculosBP;
    private List<Consulta> listaTargetVinculosBP;
    private List<Consulta> listaSourceVinculosCT;
    private List<Consulta> listaTargetVinculosCT;
    private List<ArchivoConocimiento> listaArchivos;
    private ArchivoConocimiento selectedArchivo;
    private Discusion selectedDiscusion;
    private List<DiscusionSeccion> listaDiscusionSeccion;
    private DiscusionSeccion selectedDiscusionSeccion;
    private String tituloDiscusion;
    private BigDecimal tipoDiscusion;
    private String discusionHtml;
    private String discusionPlain;
    private List<Historial> listaHistorial;
    private List<Historial> filteredListaHistorial;
    private List<Historial> selectedHistoriales;
    private Historial selectedHistorialLeft;
    private Historial selectedHistorialRight;
    private List<Calificacion> listaCalificacion;
    private Calificacion selectedCalificacion;
    private BigDecimal calificacion;
    private String comentario;
    private String selectedSwitch;
    private List<Consulta> listaDestacados;
    private Consulta selectedDestacado;
    private String tipoContenido;
    private String tipoDocumentos;
    private String tipoVideos;
    private String tipoAudios;
    private String tipoImagenes;
    private String tipoArchivos;
    private String tipoLinks;
    private String tipoOtros;

    /**
     * Creates a new instance of ContenidoMB
     */
    public ContenidoMB() {
    }

    /**
     * @return the listaContenido
     */
    public List<Conocimiento> getListaContenido() {
        return listaContenido;
    }

    /**
     * @param listaContenido the listaContenido to set
     */
    public void setListaContenido(List<Conocimiento> listaContenido) {
        this.listaContenido = listaContenido;
    }

    /**
     * @return the listaAsignacion
     */
    public List<Asignacion> getListaAsignacion() {
        return listaAsignacion;
    }

    /**
     * @param listaAsignacion the listaAsignacion to set
     */
    public void setListaAsignacion(List<Asignacion> listaAsignacion) {
        this.listaAsignacion = listaAsignacion;
    }

    /**
     * @return the selectedContenido
     */
    public Conocimiento getSelectedContenido() {
        return selectedContenido;
    }

    /**
     * @param selectedContenido the selectedContenido to set
     */
    public void setSelectedContenido(Conocimiento selectedContenido) {
        this.selectedContenido = selectedContenido;
    }

    /**
     * @return the selectedAsignacion
     */
    public Asignacion getSelectedAsignacion() {
        return selectedAsignacion;
    }

    /**
     * @param selectedAsignacion the selectedAsignacion to set
     */
    public void setSelectedAsignacion(Asignacion selectedAsignacion) {
        this.selectedAsignacion = selectedAsignacion;
    }

    /**
     * @return the titulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * @param titulo the titulo to set
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    /**
     * @return the detalle
     */
    public String getDetalle() {
        return detalle;
    }

    /**
     * @param detalle the detalle to set
     */
    public void setDetalle(String detalle) {
        this.detalle = detalle;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the contenidoHtml
     */
    public String getContenidoHtml() {
        return contenidoHtml;
    }

    /**
     * @param contenidoHtml the contenidoHtml to set
     */
    public void setContenidoHtml(String contenidoHtml) {
        this.contenidoHtml = contenidoHtml;
    }

    /**
     * @return the contenidoPlain
     */
    public String getContenidoPlain() {
        return contenidoPlain;
    }

    /**
     * @param contenidoPlain the contenidoPlain to set
     */
    public void setContenidoPlain(String contenidoPlain) {
        this.contenidoPlain = contenidoPlain;
    }

    /**
     * @return the tree
     */
    public TreeNode getTree() {
        return tree;
    }

    /**
     * @param tree the tree to set
     */
    public void setTree(TreeNode tree) {
        this.tree = tree;
    }

    /**
     * @return the selectedCategoria
     */
    public Categoria getSelectedCategoria() {
        return selectedCategoria;
    }

    /**
     * @param selectedCategoria the selectedCategoria to set
     */
    public void setSelectedCategoria(Categoria selectedCategoria) {
        this.selectedCategoria = selectedCategoria;
    }

    public Boolean getChkDestacado() {
        return chkDestacado;
    }

    public void setChkDestacado(Boolean chkDestacado) {
        this.chkDestacado = chkDestacado;
    }

    /**
     * @return the uploadFile
     */
    public UploadedFile getUploadFile() {
        return uploadFile;
    }

    /**
     * @param uploadFile the uploadFile to set
     */
    public void setUploadFile(UploadedFile uploadFile) {
        this.uploadFile = uploadFile;
    }

    /**
     * @return the content
     */
    public StreamedContent getContent() {
        return content;
    }

    /**
     * @param content the content to set
     */
    public void setContent(StreamedContent content) {
        this.content = content;
    }

    /**
     * @return the file
     */
    public File getFile() {
        return file;
    }

    /**
     * @param file the file to set
     */
    public void setFile(File file) {
        this.file = file;
    }

    /**
     * @return the idTipoConocimiento
     */
    public BigDecimal getIdTipoConocimiento() {
        return idTipoConocimiento;
    }

    /**
     * @param idTipoConocimiento the idTipoConocimiento to set
     */
    public void setIdTipoConocimiento(BigDecimal idTipoConocimiento) {
        this.idTipoConocimiento = idTipoConocimiento;
    }

    /**
     * @return the listaSourceVinculos
     */
    public List<Consulta> getListaSourceVinculos() {
        return listaSourceVinculos;
    }

    /**
     * @param listaSourceVinculos the listaSourceVinculos to set
     */
    public void setListaSourceVinculos(List<Consulta> listaSourceVinculos) {
        this.listaSourceVinculos = listaSourceVinculos;
    }

    /**
     * @return the listaTargetVinculos
     */
    public List<Consulta> getListaTargetVinculos() {
        return listaTargetVinculos;
    }

    /**
     * @param listaTargetVinculos the listaTargetVinculos to set
     */
    public void setListaTargetVinculos(List<Consulta> listaTargetVinculos) {
        this.listaTargetVinculos = listaTargetVinculos;
    }

    /**
     * @return the pickList
     */
    public DualListModel<Consulta> getPickList() {
        return pickList;
    }

    /**
     * @param pickList the pickList to set
     */
    public void setPickList(DualListModel<Consulta> pickList) {
        this.pickList = pickList;
    }

    /**
     * @return the listaSourceVinculosBL
     */
    public List<Consulta> getListaSourceVinculosBL() {
        return listaSourceVinculosBL;
    }

    /**
     * @param listaSourceVinculosBL the listaSourceVinculosBL to set
     */
    public void setListaSourceVinculosBL(List<Consulta> listaSourceVinculosBL) {
        this.listaSourceVinculosBL = listaSourceVinculosBL;
    }

    /**
     * @return the listaTargetVinculosBL
     */
    public List<Consulta> getListaTargetVinculosBL() {
        return listaTargetVinculosBL;
    }

    /**
     * @param listaTargetVinculosBL the listaTargetVinculosBL to set
     */
    public void setListaTargetVinculosBL(List<Consulta> listaTargetVinculosBL) {
        this.listaTargetVinculosBL = listaTargetVinculosBL;
    }

    /**
     * @return the listaSourceVinculosPR
     */
    public List<Consulta> getListaSourceVinculosPR() {
        return listaSourceVinculosPR;
    }

    /**
     * @param listaSourceVinculosPR the listaSourceVinculosPR to set
     */
    public void setListaSourceVinculosPR(List<Consulta> listaSourceVinculosPR) {
        this.listaSourceVinculosPR = listaSourceVinculosPR;
    }

    /**
     * @return the listaTargetVinculosPR
     */
    public List<Consulta> getListaTargetVinculosPR() {
        return listaTargetVinculosPR;
    }

    /**
     * @param listaTargetVinculosPR the listaTargetVinculosPR to set
     */
    public void setListaTargetVinculosPR(List<Consulta> listaTargetVinculosPR) {
        this.listaTargetVinculosPR = listaTargetVinculosPR;
    }

    /**
     * @return the listaSourceVinculosWK
     */
    public List<Consulta> getListaSourceVinculosWK() {
        return listaSourceVinculosWK;
    }

    /**
     * @param listaSourceVinculosWK the listaSourceVinculosWK to set
     */
    public void setListaSourceVinculosWK(List<Consulta> listaSourceVinculosWK) {
        this.listaSourceVinculosWK = listaSourceVinculosWK;
    }

    /**
     * @return the listaTargetVinculosWK
     */
    public List<Consulta> getListaTargetVinculosWK() {
        return listaTargetVinculosWK;
    }

    /**
     * @param listaTargetVinculosWK the listaTargetVinculosWK to set
     */
    public void setListaTargetVinculosWK(List<Consulta> listaTargetVinculosWK) {
        this.listaTargetVinculosWK = listaTargetVinculosWK;
    }

    /**
     * @return the listaSourceVinculosOM
     */
    public List<Consulta> getListaSourceVinculosOM() {
        return listaSourceVinculosOM;
    }

    /**
     * @param listaSourceVinculosOM the listaSourceVinculosOM to set
     */
    public void setListaSourceVinculosOM(List<Consulta> listaSourceVinculosOM) {
        this.listaSourceVinculosOM = listaSourceVinculosOM;
    }

    /**
     * @return the listaTargetVinculosOM
     */
    public List<Consulta> getListaTargetVinculosOM() {
        return listaTargetVinculosOM;
    }

    /**
     * @param listaTargetVinculosOM the listaTargetVinculosOM to set
     */
    public void setListaTargetVinculosOM(List<Consulta> listaTargetVinculosOM) {
        this.listaTargetVinculosOM = listaTargetVinculosOM;
    }

    /**
     * @return the listaSourceVinculosBP
     */
    public List<Consulta> getListaSourceVinculosBP() {
        return listaSourceVinculosBP;
    }

    /**
     * @param listaSourceVinculosBP the listaSourceVinculosBP to set
     */
    public void setListaSourceVinculosBP(List<Consulta> listaSourceVinculosBP) {
        this.listaSourceVinculosBP = listaSourceVinculosBP;
    }

    /**
     * @return the listaTargetVinculosBP
     */
    public List<Consulta> getListaTargetVinculosBP() {
        return listaTargetVinculosBP;
    }

    /**
     * @param listaTargetVinculosBP the listaTargetVinculosBP to set
     */
    public void setListaTargetVinculosBP(List<Consulta> listaTargetVinculosBP) {
        this.listaTargetVinculosBP = listaTargetVinculosBP;
    }

    /**
     * @return the listaSourceVinculosCT
     */
    public List<Consulta> getListaSourceVinculosCT() {
        return listaSourceVinculosCT;
    }

    /**
     * @param listaSourceVinculosCT the listaSourceVinculosCT to set
     */
    public void setListaSourceVinculosCT(List<Consulta> listaSourceVinculosCT) {
        this.listaSourceVinculosCT = listaSourceVinculosCT;
    }

    /**
     * @return the listaTargetVinculosCT
     */
    public List<Consulta> getListaTargetVinculosCT() {
        return listaTargetVinculosCT;
    }

    /**
     * @param listaTargetVinculosCT the listaTargetVinculosCT to set
     */
    public void setListaTargetVinculosCT(List<Consulta> listaTargetVinculosCT) {
        this.listaTargetVinculosCT = listaTargetVinculosCT;
    }

    /**
     * @return the listaArchivos
     */
    public List<ArchivoConocimiento> getListaArchivos() {
        return listaArchivos;
    }

    /**
     * @param listaArchivos the listaArchivos to set
     */
    public void setListaArchivos(List<ArchivoConocimiento> listaArchivos) {
        this.listaArchivos = listaArchivos;
    }

    public ArchivoConocimiento getSelectedArchivo() {
        return selectedArchivo;
    }

    public void setSelectedArchivo(ArchivoConocimiento selectedArchivo) {
        this.selectedArchivo = selectedArchivo;
    }

    public Discusion getSelectedDiscusion() {
        return selectedDiscusion;
    }

    public void setSelectedDiscusion(Discusion selectedDiscusion) {
        this.selectedDiscusion = selectedDiscusion;
    }

    public List<DiscusionSeccion> getListaDiscusionSeccion() {
        return listaDiscusionSeccion;
    }

    public void setListaDiscusionSeccion(List<DiscusionSeccion> listaDiscusionSeccion) {
        this.listaDiscusionSeccion = listaDiscusionSeccion;
    }

    public DiscusionSeccion getSelectedDiscusionSeccion() {
        return selectedDiscusionSeccion;
    }

    public void setSelectedDiscusionSeccion(DiscusionSeccion selectedDiscusionSeccion) {
        this.selectedDiscusionSeccion = selectedDiscusionSeccion;
    }

    public String getTituloDiscusion() {
        return tituloDiscusion;
    }

    public void setTituloDiscusion(String tituloDiscusion) {
        this.tituloDiscusion = tituloDiscusion;
    }

    public BigDecimal getTipoDiscusion() {
        return tipoDiscusion;
    }

    public void setTipoDiscusion(BigDecimal tipoDiscusion) {
        this.tipoDiscusion = tipoDiscusion;
    }

    public String getDiscusionHtml() {
        return discusionHtml;
    }

    public void setDiscusionHtml(String discusionHtml) {
        this.discusionHtml = discusionHtml;
    }

    public String getDiscusionPlain() {
        return discusionPlain;
    }

    public void setDiscusionPlain(String discusionPlain) {
        this.discusionPlain = discusionPlain;
    }

    public List<Historial> getListaHistorial() {
        return listaHistorial;
    }

    public void setListaHistorial(List<Historial> listaHistorial) {
        this.listaHistorial = listaHistorial;
    }

    public List<Historial> getFilteredListaHistorial() {
        return filteredListaHistorial;
    }

    public void setFilteredListaHistorial(List<Historial> filteredListaHistorial) {
        this.filteredListaHistorial = filteredListaHistorial;
    }

    public List<Historial> getSelectedHistoriales() {
        return selectedHistoriales;
    }

    public void setSelectedHistoriales(List<Historial> selectedHistoriales) {
        this.selectedHistoriales = selectedHistoriales;
    }

    public Historial getSelectedHistorialLeft() {
        return selectedHistorialLeft;
    }

    public void setSelectedHistorialLeft(Historial selectedHistorialLeft) {
        this.selectedHistorialLeft = selectedHistorialLeft;
    }

    public Historial getSelectedHistorialRight() {
        return selectedHistorialRight;
    }

    public void setSelectedHistorialRight(Historial selectedHistorialRight) {
        this.selectedHistorialRight = selectedHistorialRight;
    }

    public List<Calificacion> getListaCalificacion() {
        return listaCalificacion;
    }

    public void setListaCalificacion(List<Calificacion> listaCalificacion) {
        this.listaCalificacion = listaCalificacion;
    }

    public Calificacion getSelectedCalificacion() {
        return selectedCalificacion;
    }

    public void setSelectedCalificacion(Calificacion selectedCalificacion) {
        this.selectedCalificacion = selectedCalificacion;
    }

    public BigDecimal getCalificacion() {
        return calificacion;
    }

    public void setCalificacion(BigDecimal calificacion) {
        this.calificacion = calificacion;
    }

    public String getComentario() {
        return comentario;
    }

    public void setComentario(String comentario) {
        this.comentario = comentario;
    }

    /**
     * @return the selectedSwitch
     */
    public String getSelectedSwitch() {
        return selectedSwitch;
    }

    /**
     * @param selectedSwitch the selectedSwitch to set
     */
    public void setSelectedSwitch(String selectedSwitch) {
        this.selectedSwitch = selectedSwitch;
    }

    public List<Consulta> getListaDestacados() {
        return listaDestacados;
    }

    public void setListaDestacados(List<Consulta> listaDestacados) {
        this.listaDestacados = listaDestacados;
    }

    public Consulta getSelectedDestacado() {
        return selectedDestacado;
    }

    public void setSelectedDestacado(Consulta selectedDestacado) {
        this.selectedDestacado = selectedDestacado;
    }

    public String getTipoContenido() {
        return tipoContenido;
    }

    public void setTipoContenido(String tipoContenido) {
        this.tipoContenido = tipoContenido;
    }

    public String getTipoDocumentos() {
        return tipoDocumentos;
    }

    public void setTipoDocumentos(String tipoDocumentos) {
        this.tipoDocumentos = tipoDocumentos;
    }

    public String getTipoVideos() {
        return tipoVideos;
    }

    public void setTipoVideos(String tipoVideos) {
        this.tipoVideos = tipoVideos;
    }

    public String getTipoAudios() {
        return tipoAudios;
    }

    public void setTipoAudios(String tipoAudios) {
        this.tipoAudios = tipoAudios;
    }

    public String getTipoImagenes() {
        return tipoImagenes;
    }

    public void setTipoImagenes(String tipoImagenes) {
        this.tipoImagenes = tipoImagenes;
    }

    public String getTipoArchivos() {
        return tipoArchivos;
    }

    public void setTipoArchivos(String tipoArchivos) {
        this.tipoArchivos = tipoArchivos;
    }

    public String getTipoLinks() {
        return tipoLinks;
    }

    public void setTipoLinks(String tipoLinks) {
        this.tipoLinks = tipoLinks;
    }

    public String getTipoOtros() {
        return tipoOtros;
    }

    public void setTipoOtros(String tipoOtros) {
        this.tipoOtros = tipoOtros;
    }

    @PostConstruct
    public void init() {
        try {
            ContenidoService service = (ContenidoService) ServiceFinder.findBean("ContenidoService");
            this.setListaContenido(service.getContenidos());
            this.setTipoDocumentos(StringUtils.EMPTY);
            this.setTipoVideos(StringUtils.EMPTY);
            this.setTipoAudios(StringUtils.EMPTY);
            this.setTipoImagenes(StringUtils.EMPTY);
            this.setTipoArchivos(StringUtils.EMPTY);
            this.setTipoLinks(StringUtils.EMPTY);
            this.setTipoOtros(StringUtils.EMPTY);
            this.setListaArchivos(new ArrayList<ArchivoConocimiento>());
            this.setListaSourceVinculos(new ArrayList<Consulta>());
            this.setListaTargetVinculos(new ArrayList<Consulta>());
            this.setPickList(
                    new DualListModel<Consulta>(this.getListaSourceVinculos(), this.getListaTargetVinculos()));
            ListaSessionMB listaSessionMB = (ListaSessionMB) JSFUtils.getSessionAttribute("listaSessionMB");
            listaSessionMB = listaSessionMB != null ? listaSessionMB : new ListaSessionMB();
            for (SelectItem s : listaSessionMB.getListaTipoDocumentosActivos()) {
                this.setTipoDocumentos(this.getTipoDocumentos()
                        .concat(StringUtils.capitalize(StringUtils.lowerCase(s.getLabel())).concat(", ")));
            }
            for (SelectItem s : listaSessionMB.getListaTipoVideosActivos()) {
                this.setTipoVideos(this.getTipoVideos()
                        .concat(StringUtils.capitalize(StringUtils.lowerCase(s.getLabel())).concat(", ")));
            }
            for (SelectItem s : listaSessionMB.getListaTipoAudiosActivos()) {
                this.setTipoAudios(this.getTipoAudios()
                        .concat(StringUtils.capitalize(StringUtils.lowerCase(s.getLabel())).concat(", ")));
            }
            for (SelectItem s : listaSessionMB.getListaTipoImagenesActivas()) {
                this.setTipoImagenes(this.getTipoImagenes()
                        .concat(StringUtils.capitalize(StringUtils.lowerCase(s.getLabel())).concat(", ")));
            }
            for (SelectItem s : listaSessionMB.getListaTipoArchivosTextoActivos()) {
                this.setTipoArchivos(this.getTipoArchivos()
                        .concat(StringUtils.capitalize(StringUtils.lowerCase(s.getLabel())).concat(", ")));
            }
            for (SelectItem s : listaSessionMB.getListaTipoLinksActivos()) {
                this.setTipoLinks(this.getTipoLinks()
                        .concat(StringUtils.capitalize(StringUtils.lowerCase(s.getLabel())).concat(", ")));
            }
            for (SelectItem s : listaSessionMB.getListaTipoOtrosArchivosActivos()) {
                this.setTipoOtros(this.getTipoOtros()
                        .concat(StringUtils.capitalize(StringUtils.lowerCase(s.getLabel())).concat(", ")));
            }
            this.setTipoDocumentos(
                    this.getTipoDocumentos().substring(0, this.getTipoDocumentos().lastIndexOf(",")));
            this.setTipoVideos(this.getTipoVideos().substring(0, this.getTipoVideos().lastIndexOf(",")));
            this.setTipoAudios(this.getTipoAudios().substring(0, this.getTipoAudios().lastIndexOf(",")));
            this.setTipoImagenes(this.getTipoImagenes().substring(0, this.getTipoImagenes().lastIndexOf(",")));
            this.setTipoArchivos(this.getTipoArchivos().substring(0, this.getTipoArchivos().lastIndexOf(",")));
            this.setTipoLinks(this.getTipoLinks().substring(0, this.getTipoLinks().lastIndexOf(",")));
            this.setTipoOtros(this.getTipoOtros().substring(0, this.getTipoOtros().lastIndexOf(",")));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void clearAll() {
        try {
            this.setSelectedCategoria(null);
            this.setSelectedContenido(null);
            this.setTitulo(StringUtils.EMPTY);
            this.setDescripcion(StringUtils.EMPTY);
            this.setContenidoHtml(StringUtils.EMPTY);
            this.setDiscusionPlain(StringUtils.EMPTY);
            this.setListaSourceVinculos(new ArrayList());
            this.setListaTargetVinculos(new ArrayList());
            this.setListaTargetVinculosBL(new ArrayList());
            this.setListaTargetVinculosBP(new ArrayList());
            this.setListaTargetVinculosCT(new ArrayList());
            this.setListaTargetVinculosOM(new ArrayList());
            this.setListaTargetVinculosPR(new ArrayList());
            this.setListaTargetVinculosWK(new ArrayList());
            this.setChkDestacado(false);
            this.setListaArchivos(new ArrayList());
            this.setListaDestacados(new ArrayList<Consulta>());
            this.setSelectedDestacado(null);
            this.setPickList(
                    new DualListModel<Consulta>(this.getListaSourceVinculos(), this.getListaTargetVinculos()));
            Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages();
            if (iter.hasNext() == true) {
                iter.remove();
                FacesContext.getCurrentInstance().renderResponse();
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void clearDiscusion() {
        try {
            //            this.setSelectedDiscusionSeccion(new DiscusionSeccion());
            this.setTituloDiscusion(StringUtils.EMPTY);
            this.setTipoDiscusion(null);
            this.setDiscusionHtml(StringUtils.EMPTY);
            this.setDiscusionPlain(StringUtils.EMPTY);
            Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages();
            if (iter.hasNext() == true) {
                iter.remove();
                FacesContext.getCurrentInstance().renderResponse();
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void clearCalificacion() {
        try {
            this.setSelectedCalificacion(null);
            this.setComentario(StringUtils.EMPTY);
            this.setCalificacion(null);
            Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages();
            if (iter.hasNext() == true) {
                iter.remove();
                FacesContext.getCurrentInstance().renderResponse();
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void loadTree(ActionEvent event) {
        try {
            if (this.getTree() == null) {
                CategoriaService service = (CategoriaService) ServiceFinder.findBean("CategoriaService");
                createTree(service.getCategoriasActived());
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void createTree(List<Categoria> lista) {
        try {
            for (Categoria ele : lista) {
                String id = ele.getNcategoriasup() != null ? ele.getNcategoriasup().toString() : null;
                if (id != null) {
                    TreeNode parent = this.getNodeByIdCategoria(this.getTree(), id);
                    TreeNode node = new DefaultTreeNode(ele, parent);
                    node.setParent(parent);
                } else {
                    this.setTree(new DefaultTreeNode(ele, this.getTree()));
                }
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public TreeNode getNodeByIdCategoria(TreeNode treeNode, String idCategoria) {
        try {
            if (treeNode != null) {
                Categoria categoria = (Categoria) treeNode.getData();
                if (categoria.getNcategoriaid().toString().equals(idCategoria)) {
                    return treeNode;
                }
                List<TreeNode> lista = treeNode.getChildren();
                if (lista != null && !lista.isEmpty()) {
                    for (TreeNode node : lista) {
                        if (node != null) {
                            TreeNode tn = this.getNodeByIdCategoria(node, idCategoria);
                            if (tn != null) {
                                return tn;
                            }
                        }

                    }
                }
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
        return null;
    }

    public void onNodeSelect(NodeSelectEvent event) {
        try {
            if (event != null) {
                this.setSelectedCategoria((Categoria) event.getTreeNode().getData());
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public StreamedContent getPdf() throws IOException, Exception {
        FacesContext context = FacesContext.getCurrentInstance();

        if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
            // So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL.
            return new DefaultStreamedContent();
        } else {
            // So, browser is requesting the image. Return a real StreamedContent with the image bytes.
            ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getParameters());
            String fileName = JSFUtils.getRequestParameter("fileName");
            FileInputStream fis = new FileInputStream(new File(fileName));
            return new DefaultStreamedContent(fis, "application/pdf");
        }
    }

    public void toUploadFile(ActionEvent event) {
        try {
            if (event != null) {
                this.setUploadFile(null);
                this.setTipoContenido(StringUtils.EMPTY);
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public void handleUploadFile(FileUploadEvent event) {
        try {
            if (event != null) {
                UploadedFile f = event.getFile();
                if (f != null) {
                    this.setUploadFile(f);
                    ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getParameters());
                    File direc = new File(bundle.getString("temppath"));
                    direc.mkdirs();
                    this.setFile(new File(bundle.getString("temppath"), f.getFileName()));
                    FileOutputStream fileOutStream = new FileOutputStream(this.getFile());
                    fileOutStream.write(f.getContents());
                    fileOutStream.flush();
                    fileOutStream.close();
                }
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public void adjuntar(ActionEvent event) {
        try {
            if (event != null) {
                if (StringUtils.isBlank(this.getTipoContenido())) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                            "Seleccione el tipo de contenido a adjuntar.");
                    FacesContext.getCurrentInstance().addMessage(null, message);
                    return;
                }

                if (this.getUploadFile() == null) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                            "Debe Cargar el archivo antes de adjuntar.");
                    FacesContext.getCurrentInstance().addMessage(null, message);
                    return;
                }

                ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getMessages());
                String tipoDocumento = bundle.getString("tipoDocumento");
                String tipoVideo = bundle.getString("tipoVideo");
                String tipoAudio = bundle.getString("tipoAudio");
                String tipoImagen = bundle.getString("tipoImagen");
                String tipoArchivo = bundle.getString("tipoArchivo");
                String tipoLink = bundle.getString("tipoLink");
                String tipoOtro = bundle.getString("tipoOtro");

                String temppath = bundle.getString("temppath");
                String filename = this.getUploadFile().getFileName();
                String contentType = this.getUploadFile().getContentType();

                String contentTypePdf = bundle.getString("contentTypePdf");
                String contentTypeWord = bundle.getString("contentTypeWord");
                String contentTypeExcel = bundle.getString("contentTypeExcel");
                String contentTypePowerPoint = bundle.getString("contentTypePowerPoint");
                String contentTypeWordx = bundle.getString("contentTypeWordx");
                String contentTypeExcelx = bundle.getString("contentTypeExcelx");
                String contentTypePowerPointx = bundle.getString("contentTypePowerPointx");
                String contentTypeMpg = bundle.getString("contentTypeMpg");
                String contentTypeAvi = bundle.getString("contentTypeAvi");
                String contentTypeMp4 = bundle.getString("contentTypeMp4");
                String contentTypeQuickTime = bundle.getString("contentTypeQuickTime");
                String contentTypeMp3 = bundle.getString("contentTypeMp3");
                String contentTypeMp3_ = bundle.getString("contentTypeMp3_");
                String contentTypeWav = bundle.getString("contentTypeWav");
                String contentTypeGif = bundle.getString("contentTypeGif");
                String contentTypeJpg = bundle.getString("contentTypeJpg");
                String contentTypePng = bundle.getString("contentTypePng");
                String contentTypeTiff = bundle.getString("contentTypeTiff");
                String contentTypePlain = bundle.getString("contentTypePlain");
                String contentTypeRichtext = bundle.getString("contentTypeRichtext");
                String contentTypeXml = bundle.getString("contentTypeXml");
                String contentTypeHtml = bundle.getString("contentTypeHtml");
                String contentTypeLink = bundle.getString("contentTypeLink");

                if (this.getTipoContenido().equals(tipoDocumento)) {
                    if (!contentType.equals(contentTypePdf) && !contentType.equals(contentTypeWord)
                            && !contentType.equals(contentTypeExcel) && !contentType.equals(contentTypePowerPoint)
                            && !contentType.equals(contentTypeWordx) && !contentType.equals(contentTypeExcelx)
                            && !contentType.equals(contentTypePowerPointx)) {
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                                "Formato de archivo incorrecto!.");
                        FacesContext.getCurrentInstance().addMessage(null, message);
                        return;
                    }
                }
                if (this.getTipoContenido().equals(tipoVideo)) {
                    if (!contentType.equals(contentTypeMpg) && !contentType.equals(contentTypeAvi)
                            && !contentType.equals(contentTypeMp4) && !contentType.equals(contentTypeQuickTime)) {
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                                "Formato de archivo incorrecto!.");
                        FacesContext.getCurrentInstance().addMessage(null, message);
                        return;
                    }
                }
                if (this.getTipoContenido().equals(tipoAudio)) {
                    if (!contentType.equals(contentTypeMp3) && !contentType.equals(contentTypeMp3_)
                            && !contentType.equals(contentTypeWav)) {
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                                "Formato de archivo incorrecto!.");
                        FacesContext.getCurrentInstance().addMessage(null, message);
                        return;
                    }
                }
                if (this.getTipoContenido().equals(tipoImagen)) {
                    if (!contentType.equals(contentTypeGif) && !contentType.equals(contentTypeJpg)
                            && !contentType.equals(contentTypePng) && !contentType.equals(contentTypeTiff)) {
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                                "Formato de archivo incorrecto!.");
                        FacesContext.getCurrentInstance().addMessage(null, message);
                        return;
                    }
                }
                if (this.getTipoContenido().equals(tipoArchivo)) {
                    if (!contentType.equals(contentTypePlain) && !contentType.equals(contentTypeRichtext)
                            && !contentType.equals(contentTypeXml) && !contentType.equals(contentTypeHtml)) {
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                                "Formato de archivo incorrecto!.");
                        FacesContext.getCurrentInstance().addMessage(null, message);
                        return;
                    }
                }
                if (this.getTipoContenido().equals(tipoLink)) {
                    if (!contentType.equals(contentTypeLink)) {
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                                "Formato de archivo incorrecto!.");
                        FacesContext.getCurrentInstance().addMessage(null, message);
                        return;
                    }
                }

                ArchivoConocimiento archivoconocimiento = new ArchivoConocimiento();
                archivoconocimiento.setUploadedFile(this.getUploadFile());
                archivoconocimiento.setVnombre(filename);
                archivoconocimiento.setNtipoarchivo(BigDecimal.valueOf(Long.parseLong(this.getTipoContenido())));
                archivoconocimiento.setVcontenttype(contentType);
                archivoconocimiento.setVruta(temppath + filename);
                archivoconocimiento.setFile(new File(archivoconocimiento.getVruta()));
                archivoconocimiento.setContent(new DefaultStreamedContent(
                        new FileInputStream(archivoconocimiento.getFile()), contentType, filename));
                this.getListaArchivos().add(archivoconocimiento);
            }
        } catch (NumberFormatException e) {
            log.error(e.getMessage());
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public void toDeleteOutstanding(ActionEvent event) {
        try {
            if (event != null) {
                int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));
                this.setSelectedDestacado(this.getListaDestacados().get(index));
            }
        } catch (Exception e) {
            e.getMessage();
        }
    }

    public void deleteOutstanding(ActionEvent event) {
        try {
            if (event != null) {
                ConocimientoService service = (ConocimientoService) ServiceFinder.findBean("ConocimientoService");
                Conocimiento conocimiento = service
                        .getConocimientoById(this.getSelectedDestacado().getIdconocimiento());
                if (conocimiento != null) {
                    LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
                    User user = loginMB.getUser();
                    conocimiento.setNdestacado(BigDecimal.ZERO);
                    conocimiento.setVusuariomodificacion(user.getVlogin());
                    conocimiento.setDfechamodificacion(new Date());
                    service.saveOrUpdate(conocimiento);
                    ConsultaService consultaService = (ConsultaService) ServiceFinder.findBean("ConsultaService");
                    HashMap filter = new HashMap();
                    filter.put("ntipoconocimientoid", Constante.CONTENIDO);
                    this.setListaDestacados(consultaService.getDestacadosByTipoConocimiento(filter));
                }
            }
        } catch (Exception e) {
            e.getMessage();
        }
    }

    public String toSave() {
        try {
            this.clearAll();
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
        return "/pages/contenido/registro?faces-redirect=true";
    }

    public void save(ActionEvent event) {
        try {
            this.setContenidoHtml(JSFUtils.getRequestParameter("descHtml"));
            if (this.getSelectedCategoria() == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Seleccione la categora del contenido a registrar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getTitulo())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el ttulo del contenido a registrar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getDescripcion())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese la descripcin del contenido a registrar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getContenidoHtml())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el contenido del contenido a registrar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            /* Validando si exiten vnculos de bases legales derogadas */
            int contador = 0;
            if (CollectionUtils.isNotEmpty(this.getListaTargetVinculosBL())) {
                for (Consulta c : this.getListaTargetVinculosBL()) {
                    if (c.getIdEstado().toString().equals(Constante.ESTADO_BASELEGAL_DEROGADA)) {
                        contador++;
                    }
                }
            }

            if (CollectionUtils.isEmpty(this.getListaContenido())) {
                this.setListaContenido(Collections.EMPTY_LIST);
            }

            LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
            User user = loginMB.getUser();

            this.setContenidoPlain(Jsoup.parse(this.getContenidoHtml()).text());
            ContenidoService service = (ContenidoService) ServiceFinder.findBean("ContenidoService");
            Conocimiento conocimiento = new Conocimiento();
            conocimiento.setNconocimientoid(service.getNextPK());
            conocimiento.setNcategoriaid(this.getSelectedCategoria().getNcategoriaid());
            conocimiento.setNtipoconocimientoid(Constante.CONTENIDO);
            conocimiento.setVtitulo(this.getTitulo().trim());
            conocimiento.setNdestacado(BigDecimal.ZERO);
            conocimiento.setVdescripcion(this.getDescripcion().trim());
            if (this.getContenidoPlain().length() < 400) {
                conocimiento.setVcontenido(StringUtils.capitalize(this.getContenidoPlain()));
            } else {
                conocimiento.setVcontenido(StringUtils.capitalize(this.getContenidoPlain().substring(0, 400)));
            }
            if (this.getSelectedCategoria().getNflagbp().equals(BigDecimal.ONE)) {
                conocimiento.setNsituacionid(BigDecimal.valueOf(Long.parseLong(Constante.SITUACION_POR_VERIFICAR)));
            } else {
                conocimiento.setNsituacionid(BigDecimal.valueOf(Long.parseLong(Constante.SITUACION_PUBLICADO)));
                conocimiento.setDfechapublicacion(new Date());
            }
            if (contador > 0) {
                conocimiento.setNflgvinculo(BigDecimal.ONE);
            } else {
                conocimiento.setNflgvinculo(BigDecimal.ZERO);
            }
            String np0 = this.path.concat(conocimiento.getNconocimientoid().toString()).concat("/0/");
            conocimiento.setVruta(np0);
            conocimiento.setDfechacreacion(new Date());
            conocimiento.setVusuariocreacion(user.getVlogin());
            conocimiento.setNactivo(BigDecimal.ONE);
            service.saveOrUpdate(conocimiento);

            GcmFileUtils.writeStringToFileServer(np0, "html.txt", this.getContenidoHtml());
            GcmFileUtils.writeStringToFileServer(np0, "plain.txt", this.getContenidoPlain());

            String np1 = this.path.concat(conocimiento.getNconocimientoid().toString()).concat("/1/");
            HistorialService historialService = (HistorialService) ServiceFinder.findBean("HistorialService");
            ThistorialId thistorialId = new ThistorialId();
            thistorialId.setNconocimientoid(conocimiento.getNconocimientoid());
            thistorialId.setNhistorialid(historialService.getNextPK());
            Historial historial = new Historial();
            historial.setId(thistorialId);
            historial.setNtipoconocimientoid(Constante.CONTENIDO);
            historial.setNcategoriaid(this.getSelectedCategoria().getNcategoriaid());
            historial.setVtitulo(this.getTitulo());
            historial.setVdescripcion(this.getDescripcion().trim());
            if (this.getContenidoPlain().length() < 400) {
                historial.setVcontenido(StringUtils.capitalize(this.getContenidoPlain()));
            } else {
                historial.setVcontenido(StringUtils.capitalize(this.getContenidoPlain().substring(0, 400)));
            }
            historial.setNversionactual(BigDecimal.ONE);
            historial.setNactivo(BigDecimal.ONE);
            historial.setNsituacionid(conocimiento.getNsituacionid());
            historial.setVruta(np1);
            historial.setNnumversion(BigDecimal.ONE);
            historial.setDfechacreacion(new Date());
            historial.setVusuariocreacion(user.getVlogin());
            historialService.saveOrUpdate(historial);

            GcmFileUtils.writeStringToFileServer(np1, "html.txt", this.getContenidoHtml());
            GcmFileUtils.writeStringToFileServer(np1, "plain.txt", this.getContenidoPlain());

            this.setListaTargetVinculos(new ArrayList());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosBL());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosBP());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosCT());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosOM());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosPR());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosWK());

            if (org.apache.commons.collections.CollectionUtils.isNotEmpty(this.getListaTargetVinculos())) {
                VinculoService vinculoService = (VinculoService) ServiceFinder.findBean("VinculoService");
                VinculoHistService vinculoHistService = (VinculoHistService) ServiceFinder
                        .findBean("VinculoHistService");
                service.delete(conocimiento.getNconocimientoid());
                for (Consulta consulta : this.getListaTargetVinculos()) {
                    Vinculo vinculo = new Vinculo();
                    vinculo.setNvinculoid(vinculoService.getNextPK());
                    vinculo.setNconocimientoid(conocimiento.getNconocimientoid());
                    vinculo.setNconocimientovinc(consulta.getIdconocimiento());
                    vinculo.setNtipoconocimientovinc(consulta.getIdTipoConocimiento());
                    vinculo.setDfechacreacion(new Date());
                    vinculo.setVusuariocreacion(user.getVlogin());
                    vinculoService.saveOrUpdate(vinculo);

                    TvinculoHistId vinculoHistId = new TvinculoHistId();
                    vinculoHistId.setNvinculohid(vinculoHistService.getNextPK());
                    vinculoHistId.setNconocimientoid(thistorialId.getNconocimientoid());
                    vinculoHistId.setNhistorialid(thistorialId.getNhistorialid());
                    VinculoHist vinculoHist = new VinculoHist();
                    vinculoHist.setId(vinculoHistId);
                    vinculoHist.setNconocimientovinc(vinculo.getNconocimientovinc());
                    vinculoHist.setNtipoconocimientovinc(vinculo.getNtipoconocimientovinc());
                    vinculoHist.setDfechacreacion(new Date());
                    vinculoHist.setVusuariocreacion(user.getVlogin());
                    vinculoHistService.saveOrUpdate(vinculoHist);
                }
            }

            ArchivoConocimientoService aservice = (ArchivoConocimientoService) ServiceFinder
                    .findBean("ArchivoConocimientoService");
            for (ArchivoConocimiento v : this.getListaArchivos()) {
                ArchivoConocimiento archivoconocimiento = new ArchivoConocimiento();
                archivoconocimiento.setNarchivoid(aservice.getNextPK());
                archivoconocimiento.setNtipoconocimientoid(Constante.CONTENIDO);
                archivoconocimiento.setNconocimientoid(conocimiento.getNconocimientoid());
                archivoconocimiento.setVnombre(v.getVnombre());
                archivoconocimiento.setNversion(BigDecimal.ONE);
                archivoconocimiento.setNtipoarchivo(v.getNtipoarchivo());
                archivoconocimiento.setVcontenttype(v.getVcontenttype());
                archivoconocimiento.setVruta(path + conocimiento.getNconocimientoid().toString() + "/"
                        + archivoconocimiento.getNversion().toString() + "/" + archivoconocimiento.getVnombre());
                archivoconocimiento.setVusuariocreacion(user.getVlogin());
                archivoconocimiento.setDfechacreacion(new Date());
                aservice.saveOrUpdate(archivoconocimiento);
                saveFile(archivoconocimiento);
            }

            if (this.getSelectedCategoria().getNflagct().toString().equals("1")) {
                Asignacion asignacion = new Asignacion();
                AsignacionService serviceasig = (AsignacionService) ServiceFinder.findBean("AsignacionService");
                asignacion.setNasignacionid(serviceasig.getNextPK());
                asignacion.setNtipoconocimientoid(Constante.CONTENIDO);
                asignacion.setNconocimientoid(conocimiento.getNconocimientoid());
                asignacion.setNestadoid(BigDecimal.valueOf(Long.parseLong("1")));
                CategoriaService categoriaService = (CategoriaService) ServiceFinder.findBean("CategoriaService");
                asignacion.setNusuarioid(
                        categoriaService.getCategoriaById(conocimiento.getNcategoriaid()).getNmoderador());
                asignacion.setDfechaasignacion(new Date());
                asignacion.setDfechacreacion(new Date());
                serviceasig.saveOrUpdate(asignacion);
            }

            this.setListaContenido(service.getContenidos());
            FacesContext.getCurrentInstance().getExternalContext().redirect("/gescon/pages/contenido/lista.xhtml");
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public void toUpdate(ActionEvent event) {

    }

    public void toCancelSecc(ActionEvent event) {
        RequestContext.getCurrentInstance().execute("PF('newseccDialog').hide();");
    }

    public void toAddLink(ActionEvent event) {
        try {
            this.setIdTipoConocimiento(null);
            this.setListaSourceVinculos(new ArrayList());
            if (CollectionUtils.isEmpty(this.getListaSourceVinculosBL())) {
                this.setListaSourceVinculosBL(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaSourceVinculosBP())) {
                this.setListaSourceVinculosBP(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaSourceVinculosCT())) {
                this.setListaSourceVinculosCT(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaSourceVinculosOM())) {
                this.setListaSourceVinculosOM(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaSourceVinculosPR())) {
                this.setListaSourceVinculosPR(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaSourceVinculosWK())) {
                this.setListaSourceVinculosWK(new ArrayList());
            }
            this.setListaTargetVinculos(new ArrayList());
            if (CollectionUtils.isEmpty(this.getListaTargetVinculosBL())) {
                this.setListaTargetVinculosBL(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaTargetVinculosBP())) {
                this.setListaTargetVinculosBP(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaTargetVinculosCT())) {
                this.setListaTargetVinculosCT(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaTargetVinculosOM())) {
                this.setListaTargetVinculosOM(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaTargetVinculosPR())) {
                this.setListaTargetVinculosPR(new ArrayList());
            }
            if (CollectionUtils.isEmpty(this.getListaTargetVinculosWK())) {
                this.setListaTargetVinculosWK(new ArrayList());
            }
            this.setPickList(
                    new DualListModel<Consulta>(this.getListaSourceVinculos(), this.getListaTargetVinculos()));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void onListTipoConocimientoChange(AjaxBehaviorEvent event) {
        try {
            if (event != null) {
                final BigDecimal id = (BigDecimal) ((SelectOneMenu) event.getSource()).getValue();
                this.setIdTipoConocimiento(id);
                if (id != null) {
                    HashMap filters = new HashMap();
                    filters.put("ntipoconocimientoid", id);
                    ConocimientoService service = (ConocimientoService) ServiceFinder
                            .findBean("ConocimientoService");
                    if (this.getSelectedContenido() != null) {
                        filters.put("nconocimientoid", this.getSelectedContenido().getNconocimientoid().toString());
                        this.setListaTargetVinculos(new ArrayList());
                        List<Consulta> lista = service.getConcimientosVinculados(filters);
                        Collections.sort(lista, Consulta.Comparators.ID);
                        if (id.equals(Constante.BASELEGAL)) {
                            for (Consulta ele : lista) {
                                int pos = Collections.binarySearch(this.getListaTargetVinculosBL(), ele,
                                        Consulta.Comparators.ID);
                                if (pos < 0) {
                                    this.getListaTargetVinculosBL().add(ele);
                                }
                            }
                            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosBL());
                        } else if (id.equals(Constante.PREGUNTAS)) {
                            for (Consulta ele : lista) {
                                int pos = Collections.binarySearch(this.getListaTargetVinculosPR(), ele,
                                        Consulta.Comparators.ID);
                                if (pos < 0) {
                                    this.getListaTargetVinculosPR().add(ele);
                                }
                            }
                            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosPR());
                        } else if (id.equals(Constante.WIKI)) {
                            for (Consulta ele : lista) {
                                int pos = Collections.binarySearch(this.getListaTargetVinculosWK(), ele,
                                        Consulta.Comparators.ID);
                                if (pos < 0) {
                                    this.getListaTargetVinculosWK().add(ele);
                                }
                            }
                            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosWK());
                        } else if (id.equals(Constante.CONTENIDO)) {
                            for (Consulta ele : lista) {
                                int pos = Collections.binarySearch(this.getListaTargetVinculosCT(), ele,
                                        Consulta.Comparators.ID);
                                if (pos < 0) {
                                    this.getListaTargetVinculosCT().add(ele);
                                }
                            }
                            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosCT());
                        } else if (id.equals(Constante.BUENAPRACTICA)) {
                            for (Consulta ele : lista) {
                                int pos = Collections.binarySearch(this.getListaTargetVinculosBP(), ele,
                                        Consulta.Comparators.ID);
                                if (pos < 0) {
                                    this.getListaTargetVinculosBP().add(ele);
                                }
                            }
                            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosBP());
                        } else if (id.equals(Constante.OPORTUNIDADMEJORA)) {
                            for (Consulta ele : lista) {
                                int pos = Collections.binarySearch(this.getListaTargetVinculosOM(), ele,
                                        Consulta.Comparators.ID);
                                if (pos < 0) {
                                    this.getListaTargetVinculosOM().add(ele);
                                }
                            }
                            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosOM());
                        }
                    } else {
                        if (id.equals(Constante.BASELEGAL)) {
                            this.setListaTargetVinculos(this.getListaTargetVinculosBL());
                        } else if (id.equals(Constante.PREGUNTAS)) {
                            this.setListaTargetVinculos(this.getListaTargetVinculosPR());
                        } else if (id.equals(Constante.WIKI)) {
                            this.setListaTargetVinculos(this.getListaTargetVinculosWK());
                        } else if (id.equals(Constante.CONTENIDO)) {
                            this.setListaTargetVinculos(this.getListaTargetVinculosCT());
                        } else if (id.equals(Constante.BUENAPRACTICA)) {
                            this.setListaTargetVinculos(this.getListaTargetVinculosBP());
                        } else if (id.equals(Constante.OPORTUNIDADMEJORA)) {
                            this.setListaTargetVinculos(this.getListaTargetVinculosOM());
                        }
                    }
                    if (CollectionUtils.isNotEmpty(this.getListaTargetVinculos())) {
                        List<String> ids = new ArrayList<String>();
                        for (Consulta c : this.getListaTargetVinculos()) {
                            ids.add(c.getIdconocimiento().toString());
                        }
                        String filter = StringUtils.join(ids, ',');
                        if (id.equals(Constante.WIKI)) {
                            filter = filter.concat(",")
                                    .concat(this.getSelectedContenido().getNconocimientoid().toString());
                        }
                        filters.put("nconocimientovinc", filter);
                    }
                    if (id.equals(Constante.BASELEGAL)) {
                        this.setListaSourceVinculosBL(service.getConcimientosDisponibles(filters));
                        this.setListaSourceVinculos(this.getListaSourceVinculosBL());
                    } else if (id.equals(Constante.PREGUNTAS)) {
                        this.setListaSourceVinculosPR(service.getConcimientosDisponibles(filters));
                        this.setListaSourceVinculos(this.getListaSourceVinculosPR());
                    } else if (id.equals(Constante.WIKI)) {
                        this.setListaSourceVinculosWK(service.getConcimientosDisponibles(filters));
                        this.setListaSourceVinculos(this.getListaSourceVinculosWK());
                    } else if (id.equals(Constante.CONTENIDO)) {
                        this.setListaSourceVinculosCT(service.getConcimientosDisponibles(filters));
                        this.setListaSourceVinculos(this.getListaSourceVinculosCT());
                    } else if (id.equals(Constante.BUENAPRACTICA)) {
                        this.setListaSourceVinculosBP(service.getConcimientosDisponibles(filters));
                        this.setListaSourceVinculos(this.getListaSourceVinculosBP());
                    } else if (id.equals(Constante.OPORTUNIDADMEJORA)) {
                        this.setListaSourceVinculosOM(service.getConcimientosDisponibles(filters));
                        this.setListaSourceVinculos(this.getListaSourceVinculosOM());
                    }
                    this.setPickList(new DualListModel<Consulta>(this.getListaSourceVinculos(),
                            this.getListaTargetVinculos()));
                }
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void saveFile(ArchivoConocimiento archivoconocimiento) {
        try {

            ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getParameters());
            String id = archivoconocimiento.getNconocimientoid().toString();
            String version = archivoconocimiento.getNversion().toString();
            Integer version_ant_s = Integer.parseInt(archivoconocimiento.getNversion().toString()) - 1;
            String version_ant_i = version_ant_s.toString();
            File direc = new File(bundle.getString("path") + "ct" + '/' + id + '/' + version);
            File direct = new File(bundle.getString("path") + "ct" + '/' + id + '/' + version_ant_i + '/'
                    + archivoconocimiento.getVnombre());
            direc.mkdirs();

            this.setFile(new File(bundle.getString("path") + "ct" + '/' + id + '/' + version,
                    archivoconocimiento.getVnombre()));

            FileOutputStream fileOutStream = new FileOutputStream(this.getFile());
            if (direct.exists()) {
                fileOutStream.write(FileUtils.readFileToByteArray(
                        new File(bundle.getString("path") + "ct" + '/' + id + '/' + version_ant_i,
                                archivoconocimiento.getVnombre())));
            } else {
                fileOutStream.write(FileUtils.readFileToByteArray(
                        new File(bundle.getString("temppath"), archivoconocimiento.getVnombre())));
            }
            fileOutStream.flush();
            fileOutStream.close();
            File temp = new File(bundle.getString("temppath"), archivoconocimiento.getVnombre());
            temp.delete();
        } catch (NumberFormatException e) {
            log.error(e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public void deleteFile() {
        try {
            ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getParameters());
            File temp = new File(bundle.getString("temppath"), this.getSelectedArchivo().getVnombre());
            if (temp.exists())
                temp.delete();
            if (this.getSelectedArchivo().getNconocimientoid() != null) {
                String id = this.getSelectedArchivo().getNconocimientoid().toString();
                File dir = new File(bundle.getString("path") + "ct" + '/' + id + "/0/"
                        + this.getSelectedArchivo().getVnombre());
                if (dir.exists())
                    dir.delete();
            }
            if (this.getSelectedArchivo().getNarchivoid() != null) {
                ArchivoConocimientoService aservice = (ArchivoConocimientoService) ServiceFinder
                        .findBean("ArchivoConocimientoService");
                aservice.delete(this.getSelectedArchivo().getNarchivoid());
            }
            this.getListaArchivos().remove(this.getSelectedArchivo());
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void onTransfer(TransferEvent event) {
        int index;
        try {
            if (event != null) {
                BigDecimal id = this.getIdTipoConocimiento();
                if (event.isAdd()) {
                    Collections.sort(this.getListaSourceVinculos(), Consulta.Comparators.ID);
                    for (Consulta ele : (List<Consulta>) event.getItems()) {
                        index = Collections.binarySearch(this.getListaSourceVinculos(), ele,
                                Consulta.Comparators.ID);
                        if (this.getListaTargetVinculos() == null) {
                            this.setListaTargetVinculos(new ArrayList<Consulta>());
                        }
                        this.getListaTargetVinculos().add(this.getListaSourceVinculos().get(index));
                        this.getListaSourceVinculos().remove(index);
                    }
                }
                if (event.isRemove()) {
                    Collections.sort(this.getListaTargetVinculos(), Consulta.Comparators.ID);
                    for (Consulta ele : (List<Consulta>) event.getItems()) {
                        index = Collections.binarySearch(this.getListaTargetVinculos(), ele,
                                Consulta.Comparators.ID);
                        if (this.getListaSourceVinculos() == null) {
                            this.setListaSourceVinculos(new ArrayList<Consulta>());
                        }
                        this.getListaSourceVinculos().add(this.getListaTargetVinculos().get(index));
                        this.getListaTargetVinculos().remove(index);
                    }
                }
                if (id.equals(Constante.BASELEGAL)) {
                    this.setListaSourceVinculosBL(this.getListaSourceVinculos());
                    this.setListaTargetVinculosBL(this.getListaTargetVinculos());
                } else if (id.equals(Constante.PREGUNTAS)) {
                    this.setListaSourceVinculosPR(this.getListaSourceVinculos());
                    this.setListaTargetVinculosPR(this.getListaTargetVinculos());
                } else if (id.equals(Constante.WIKI)) {
                    this.setListaSourceVinculosWK(this.getListaSourceVinculos());
                    this.setListaTargetVinculosWK(this.getListaTargetVinculos());
                } else if (id.equals(Constante.CONTENIDO)) {
                    this.setListaSourceVinculosCT(this.getListaSourceVinculos());
                    this.setListaTargetVinculosCT(this.getListaTargetVinculos());
                } else if (id.equals(Constante.BUENAPRACTICA)) {
                    this.setListaSourceVinculosBP(this.getListaSourceVinculos());
                    this.setListaTargetVinculosBP(this.getListaTargetVinculos());
                } else if (id.equals(Constante.OPORTUNIDADMEJORA)) {
                    this.setListaSourceVinculosOM(this.getListaSourceVinculos());
                    this.setListaTargetVinculosOM(this.getListaTargetVinculos());
                }
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public String toView() {
        try {
            ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getParameters());
            String path = bundle.getString("path");
            int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));
            this.setSelectedContenido(this.getListaContenido().get(index));
            CategoriaService categoriaService = (CategoriaService) ServiceFinder.findBean("CategoriaService");
            this.setSelectedCategoria(
                    categoriaService.getCategoriaById(this.getSelectedContenido().getNcategoriaid()));
            this.setContenidoHtml(
                    GcmFileUtils.readStringFromFileServer(this.getSelectedContenido().getVruta(), "html.txt"));
            ArchivoConocimientoService archivoservice = (ArchivoConocimientoService) ServiceFinder
                    .findBean("ArchivoConocimientoService");
            this.setListaArchivos(
                    archivoservice.getArchivosByConocimiento(this.getSelectedContenido().getNconocimientoid()));
            if (CollectionUtils.isNotEmpty(this.getListaArchivos())) {
                for (ArchivoConocimiento ac : this.getListaArchivos()) {
                    ac.setContent(new DefaultStreamedContent(new FileInputStream(new File(path + ac.getVruta())),
                            ac.getVcontenttype(), ac.getVnombre()));
                }
            }
            this.setChkDestacado(this.getSelectedContenido().getNdestacado().equals(BigDecimal.ONE));
            ContenidoService contenidoService = (ContenidoService) ServiceFinder.findBean("ContenidoService");
            HashMap map = new HashMap();
            map.put("nconocimientoid", this.getSelectedContenido().getNconocimientoid().toString());
            map.put("flag", true);
            map.put("ntipoconocimientoid", Constante.BASELEGAL.toString());
            this.setListaTargetVinculosBL(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.PREGUNTAS.toString());
            this.setListaTargetVinculosPR(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.BUENAPRACTICA.toString());
            this.setListaTargetVinculosBP(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.CONTENIDO.toString());
            this.setListaTargetVinculosCT(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.OPORTUNIDADMEJORA.toString());
            this.setListaTargetVinculosOM(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.WIKI.toString());
            this.setListaTargetVinculosWK(contenidoService.getConcimientosVinculados(map));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
        return "/pages/contenido/ver?faces-redirect=true";
    }

    public String toEdit() {
        try {
            ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getParameters());
            String path = bundle.getString("path");
            int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));
            this.setSelectedContenido(this.getListaContenido().get(index));
            CategoriaService categoriaService = (CategoriaService) ServiceFinder.findBean("CategoriaService");
            this.setSelectedCategoria(
                    categoriaService.getCategoriaById(this.getSelectedContenido().getNcategoriaid()));
            this.setContenidoHtml(
                    GcmFileUtils.readStringFromFileServer(this.getSelectedContenido().getVruta(), "html.txt"));
            ArchivoConocimientoService archivoservice = (ArchivoConocimientoService) ServiceFinder
                    .findBean("ArchivoConocimientoService");
            this.setListaArchivos(
                    archivoservice.getArchivosByConocimiento(this.getSelectedContenido().getNconocimientoid()));
            if (CollectionUtils.isNotEmpty(this.getListaArchivos())) {
                for (ArchivoConocimiento ac : this.getListaArchivos()) {
                    ac.setContent(new DefaultStreamedContent(new FileInputStream(new File(path + ac.getVruta())),
                            ac.getVcontenttype(), ac.getVnombre()));
                }
            }
            this.setChkDestacado(this.getSelectedContenido().getNdestacado().equals(BigDecimal.ONE));
            ContenidoService contenidoService = (ContenidoService) ServiceFinder.findBean("ContenidoService");
            HashMap map = new HashMap();
            map.put("nconocimientoid", this.getSelectedContenido().getNconocimientoid().toString());
            map.put("flag", true);
            map.put("ntipoconocimientoid", Constante.BASELEGAL.toString());
            this.setListaTargetVinculosBL(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.PREGUNTAS.toString());
            this.setListaTargetVinculosPR(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.BUENAPRACTICA.toString());
            this.setListaTargetVinculosBP(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.CONTENIDO.toString());
            this.setListaTargetVinculosCT(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.OPORTUNIDADMEJORA.toString());
            this.setListaTargetVinculosOM(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.WIKI.toString());
            this.setListaTargetVinculosWK(contenidoService.getConcimientosVinculados(map));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
        return "/pages/contenido/editar?faces-redirect=true";
    }

    public void edit(ActionEvent event) {
        try {
            this.setContenidoHtml(JSFUtils.getRequestParameter("descHtml"));
            if (this.getSelectedCategoria() == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Seleccione la categora del contenido a editar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getSelectedContenido().getVtitulo())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el ttulo del contenido a editar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getSelectedContenido().getVdescripcion())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese la descripcin del contenido a editar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getContenidoHtml())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el contenido del contenido a editar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (this.getSelectedContenido().getNdestacado().equals(BigDecimal.ZERO) && this.getChkDestacado()) {
                ConsultaService consultaService = (ConsultaService) ServiceFinder.findBean("ConsultaService");
                HashMap filter = new HashMap();
                filter.put("ntipoconocimientoid", Constante.CONTENIDO);
                BigDecimal cant = consultaService.countDestacadosByTipoConocimiento(filter);
                if (cant.intValue() >= 10) {
                    this.setListaDestacados(consultaService.getDestacadosByTipoConocimiento(filter));
                    RequestContext.getCurrentInstance().execute("PF('destDialog').show();");
                    return;
                }
            }
            /* Validando si exiten vnculos de bases legales derogadas */
            int contador = 0;
            if (CollectionUtils.isNotEmpty(this.getListaTargetVinculosBL())) {
                for (Consulta c : this.getListaTargetVinculosBL()) {
                    if (c.getIdEstado().toString().equals(Constante.ESTADO_BASELEGAL_DEROGADA)) {
                        contador++;
                    }
                }
            }

            if (CollectionUtils.isEmpty(this.getListaContenido())) {
                this.setListaContenido(Collections.EMPTY_LIST);
            }

            LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
            User user = loginMB.getUser();

            this.setContenidoPlain(Jsoup.parse(this.getContenidoHtml()).text());
            ContenidoService service = (ContenidoService) ServiceFinder.findBean("ContenidoService");
            this.getSelectedContenido().setVtitulo(this.getSelectedContenido().getVtitulo().trim());
            this.getSelectedContenido().setVdescripcion(this.getSelectedContenido().getVdescripcion().trim());
            if (this.getContenidoPlain().length() < 400) {
                this.getSelectedContenido().setVcontenido(StringUtils.capitalize(this.getContenidoPlain()));
            } else {
                this.getSelectedContenido()
                        .setVcontenido(StringUtils.capitalize(this.getContenidoPlain().substring(0, 400)));
            }
            if (contador > 0) {
                this.getSelectedContenido().setNflgvinculo(BigDecimal.ONE);
            } else {
                this.getSelectedContenido().setNflgvinculo(BigDecimal.ZERO);
            }
            this.getSelectedContenido().setNcategoriaid(this.getSelectedCategoria().getNcategoriaid());
            this.getSelectedContenido().setNdestacado(this.getChkDestacado() ? BigDecimal.ONE : BigDecimal.ZERO);
            this.getSelectedContenido().setDfechamodificacion(new Date());
            this.getSelectedContenido().setVusuariomodificacion(user.getVlogin());
            service.saveOrUpdate(this.getSelectedContenido());

            GcmFileUtils.writeStringToFileServer(this.getSelectedContenido().getVruta(), "html.txt",
                    this.getContenidoHtml());
            GcmFileUtils.writeStringToFileServer(this.getSelectedContenido().getVruta(), "plain.txt",
                    this.getContenidoPlain());

            HistorialService historialService = (HistorialService) ServiceFinder.findBean("HistorialService");
            Historial lastHistorial = historialService
                    .getLastHistorialByConocimiento(this.getSelectedContenido().getNconocimientoid());
            int lastversion;
            if (lastHistorial != null) {
                lastversion = lastHistorial.getNnumversion().intValue();
            } else {
                lastversion = 0;
            }

            String url = this.path.concat(this.getSelectedContenido().getNconocimientoid().toString()).concat("/")
                    .concat(Integer.toString(lastversion + 1)).concat("/");

            ThistorialId thistorialId = new ThistorialId();
            thistorialId.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
            thistorialId.setNhistorialid(historialService.getNextPK());
            Historial historial = new Historial();
            historial.setId(thistorialId);
            historial.setNtipoconocimientoid(Constante.CONTENIDO);
            historial.setNcategoriaid(this.getSelectedCategoria().getNcategoriaid());
            historial.setVdescripcion(this.getSelectedContenido().getVdescripcion());
            historial.setVtitulo(this.getSelectedContenido().getVtitulo());
            if (this.getContenidoPlain().length() < 400) {
                historial.setVcontenido(StringUtils.capitalize(this.getContenidoPlain()));
            } else {
                historial.setVcontenido(StringUtils.capitalize(this.getContenidoPlain().substring(0, 400)));
            }
            historial.setNactivo(BigDecimal.ONE);
            historial.setNsituacionid(this.getSelectedContenido().getNsituacionid());
            historial.setVruta(url);
            historial.setNnumversion(BigDecimal.valueOf(lastversion + 1));
            historial.setDfechacreacion(new Date());
            historial.setVusuariocreacion(user.getVlogin());
            historialService.saveOrUpdate(historial);

            GcmFileUtils.writeStringToFileServer(url, "html.txt", this.getContenidoHtml());
            GcmFileUtils.writeStringToFileServer(url, "plain.txt", this.getContenidoPlain());

            this.setListaTargetVinculos(new ArrayList());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosBL());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosBP());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosCT());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosOM());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosPR());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosWK());

            if (org.apache.commons.collections.CollectionUtils.isNotEmpty(this.getListaTargetVinculos())) {
                VinculoService vinculoService = (VinculoService) ServiceFinder.findBean("VinculoService");
                VinculoHistService vinculoHistService = (VinculoHistService) ServiceFinder
                        .findBean("VinculoHistService");
                service.delete(this.getSelectedContenido().getNconocimientoid());
                for (Consulta consulta : this.getListaTargetVinculos()) {
                    Vinculo vinculo = new Vinculo();
                    vinculo.setNvinculoid(vinculoService.getNextPK());
                    vinculo.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
                    vinculo.setNconocimientovinc(consulta.getIdconocimiento());
                    vinculo.setNtipoconocimientovinc(consulta.getIdTipoConocimiento());
                    vinculo.setDfechacreacion(new Date());
                    vinculo.setVusuariocreacion(user.getVlogin());
                    vinculoService.saveOrUpdate(vinculo);

                    TvinculoHistId vinculoHistId = new TvinculoHistId();
                    vinculoHistId.setNvinculohid(vinculoHistService.getNextPK());
                    vinculoHistId.setNconocimientoid(thistorialId.getNconocimientoid());
                    vinculoHistId.setNhistorialid(thistorialId.getNhistorialid());
                    VinculoHist vinculoHist = new VinculoHist();
                    vinculoHist.setId(vinculoHistId);
                    vinculoHist.setNconocimientovinc(vinculo.getNconocimientovinc());
                    vinculoHist.setNtipoconocimientovinc(vinculo.getNtipoconocimientovinc());
                    vinculoHist.setDfechacreacion(new Date());
                    vinculoHist.setVusuariocreacion(user.getVlogin());
                    vinculoHistService.saveOrUpdate(vinculoHist);

                }
            }

            ArchivoConocimientoService aservice = (ArchivoConocimientoService) ServiceFinder
                    .findBean("ArchivoConocimientoService");
            service.deleteArchivos(this.getSelectedContenido().getNconocimientoid());
            for (ArchivoConocimiento v : this.getListaArchivos()) {
                ArchivoConocimiento archivoconocimiento = new ArchivoConocimiento();
                archivoconocimiento.setNarchivoid(aservice.getNextPK());
                archivoconocimiento.setNtipoconocimientoid(Constante.CONTENIDO);
                archivoconocimiento.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
                archivoconocimiento.setVnombre(v.getVnombre());
                archivoconocimiento.setNversion(historial.getNnumversion());
                archivoconocimiento.setNtipoarchivo(v.getNtipoarchivo());
                archivoconocimiento.setVcontenttype(v.getVcontenttype());
                archivoconocimiento.setVruta(path + this.getSelectedContenido().getNconocimientoid().toString()
                        + "/" + archivoconocimiento.getNversion().toString() + "/"
                        + archivoconocimiento.getVnombre());
                archivoconocimiento.setVusuariocreacion(user.getVlogin());
                archivoconocimiento.setDfechacreacion(new Date());
                aservice.saveOrUpdate(archivoconocimiento);
                saveFile(archivoconocimiento);
            }
            this.setListaContenido(service.getContenidos());
            FacesContext.getCurrentInstance().getExternalContext().redirect("/gescon/pages/contenido/lista.xhtml");
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public String toPost() {
        try {
            ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getParameters());
            String path = bundle.getString("path");
            int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));
            this.setSelectedContenido(this.getListaContenido().get(index));
            CategoriaService categoriaService = (CategoriaService) ServiceFinder.findBean("CategoriaService");
            this.setSelectedCategoria(
                    categoriaService.getCategoriaById(this.getSelectedContenido().getNcategoriaid()));
            this.setContenidoHtml(
                    GcmFileUtils.readStringFromFileServer(this.getSelectedContenido().getVruta(), "html.txt"));
            ArchivoConocimientoService archivoservice = (ArchivoConocimientoService) ServiceFinder
                    .findBean("ArchivoConocimientoService");
            this.setListaArchivos(
                    archivoservice.getArchivosByConocimiento(this.getSelectedContenido().getNconocimientoid()));
            if (CollectionUtils.isNotEmpty(this.getListaArchivos())) {
                for (ArchivoConocimiento ac : this.getListaArchivos()) {
                    ac.setContent(new DefaultStreamedContent(new FileInputStream(new File(path + ac.getVruta())),
                            ac.getVcontenttype(), ac.getVnombre()));
                }
            }
            this.setChkDestacado(this.getSelectedContenido().getNdestacado().equals(BigDecimal.ONE));
            ContenidoService contenidoService = (ContenidoService) ServiceFinder.findBean("ContenidoService");
            HashMap map = new HashMap();
            map.put("nconocimientoid", this.getSelectedContenido().getNconocimientoid().toString());
            map.put("flag", true);
            map.put("ntipoconocimientoid", Constante.BASELEGAL.toString());
            this.setListaTargetVinculosBL(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.PREGUNTAS.toString());
            this.setListaTargetVinculosPR(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.BUENAPRACTICA.toString());
            this.setListaTargetVinculosBP(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.CONTENIDO.toString());
            this.setListaTargetVinculosCT(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.OPORTUNIDADMEJORA.toString());
            this.setListaTargetVinculosOM(contenidoService.getConcimientosVinculados(map));
            map.put("ntipoconocimientoid", Constante.WIKI.toString());
            this.setListaTargetVinculosWK(contenidoService.getConcimientosVinculados(map));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
        return "/pages/contenido/publicar?faces-redirect=true";
    }

    public void post(ActionEvent event) {
        try {
            this.setContenidoHtml(JSFUtils.getRequestParameter("descHtml"));
            if (this.getSelectedCategoria() == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Seleccione la categora del contenido a publicar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getSelectedContenido().getVtitulo())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el ttulo del contenido a publicar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getSelectedContenido().getVdescripcion())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese la descripcin del contenido a publicar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getContenidoHtml())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el contenido del contenido a publicar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (this.getSelectedContenido().getNdestacado().equals(BigDecimal.ZERO) && this.getChkDestacado()) {
                ConsultaService consultaService = (ConsultaService) ServiceFinder.findBean("ConsultaService");
                HashMap filter = new HashMap();
                filter.put("ntipoconocimientoid", Constante.CONTENIDO);
                BigDecimal cant = consultaService.countDestacadosByTipoConocimiento(filter);
                if (cant.intValue() >= 10) {
                    this.setListaDestacados(consultaService.getDestacadosByTipoConocimiento(filter));
                    RequestContext.getCurrentInstance().execute("PF('destDialog').show();");
                    return;
                }
            }
            /* Validando si exiten vnculos de bases legales derogadas */
            int contador = 0;
            if (CollectionUtils.isNotEmpty(this.getListaTargetVinculosBL())) {
                for (Consulta c : this.getListaTargetVinculosBL()) {
                    if (c.getIdEstado().toString().equals(Constante.ESTADO_BASELEGAL_DEROGADA)) {
                        contador++;
                    }
                }
            }
            if (CollectionUtils.isEmpty(this.getListaContenido())) {
                this.setListaContenido(Collections.EMPTY_LIST);
            }

            LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
            User user = loginMB.getUser();

            ContenidoService service = (ContenidoService) ServiceFinder.findBean("ContenidoService");
            this.setContenidoPlain(Jsoup.parse(this.getContenidoHtml()).text());
            this.getSelectedContenido().setNcategoriaid(this.getSelectedCategoria().getNcategoriaid());
            this.getSelectedContenido().setVtitulo(this.getSelectedContenido().getVtitulo().trim());
            this.getSelectedContenido().setVdescripcion(this.getSelectedContenido().getVdescripcion().trim());
            if (this.getContenidoPlain().length() < 400) {
                this.getSelectedContenido().setVcontenido(StringUtils.capitalize(this.getContenidoPlain()));
            } else {
                this.getSelectedContenido()
                        .setVcontenido(StringUtils.capitalize(this.getContenidoPlain().substring(0, 400)));
            }
            if (contador > 0) {
                this.getSelectedContenido().setNflgvinculo(BigDecimal.ONE);
            } else {
                this.getSelectedContenido().setNflgvinculo(BigDecimal.ZERO);
            }
            this.getSelectedContenido().setNdestacado(this.getChkDestacado() ? BigDecimal.ONE : BigDecimal.ZERO);
            this.getSelectedContenido().setDfechamodificacion(new Date());
            this.getSelectedContenido().setDfechapublicacion(new Date());
            this.getSelectedContenido()
                    .setNsituacionid(BigDecimal.valueOf(Long.parseLong(Constante.SITUACION_PUBLICADO)));
            this.getSelectedContenido().setVusuariomodificacion(user.getVlogin());
            service.saveOrUpdate(this.getSelectedContenido());

            GcmFileUtils.writeStringToFileServer(this.getSelectedContenido().getVruta(), "html.txt",
                    this.getContenidoHtml());
            GcmFileUtils.writeStringToFileServer(this.getSelectedContenido().getVruta(), "plain.txt",
                    this.getContenidoPlain());

            HistorialService historialService = (HistorialService) ServiceFinder.findBean("HistorialService");
            Historial lastHistorial = historialService
                    .getLastHistorialByConocimiento(this.getSelectedContenido().getNconocimientoid());
            int lastversion;
            if (lastHistorial != null) {
                lastversion = lastHistorial.getNnumversion().intValue();
            } else {
                lastversion = 0;
            }

            String url = this.path.concat(this.getSelectedContenido().getNconocimientoid().toString()).concat("/")
                    .concat(Integer.toString(lastversion + 1)).concat("/");

            ThistorialId thistorialId = new ThistorialId();
            thistorialId.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
            thistorialId.setNhistorialid(historialService.getNextPK());
            Historial historial = new Historial();
            historial.setId(thistorialId);
            historial.setNtipoconocimientoid(Constante.CONTENIDO);
            historial.setNcategoriaid(this.getSelectedCategoria().getNcategoriaid());
            historial.setVdescripcion(this.getSelectedContenido().getVdescripcion());
            historial.setVtitulo(this.getSelectedContenido().getVtitulo());
            if (this.getContenidoPlain().length() < 400) {
                historial.setVcontenido(StringUtils.capitalize(this.getContenidoPlain()));
            } else {
                historial.setVcontenido(StringUtils.capitalize(this.getContenidoPlain().substring(0, 400)));
            }
            historial.setNactivo(BigDecimal.ONE);
            historial.setNsituacionid(this.getSelectedContenido().getNsituacionid());
            historial.setVruta(url);
            historial.setNnumversion(BigDecimal.valueOf(lastversion + 1));
            historial.setDfechacreacion(new Date());
            historial.setVusuariocreacion(user.getVlogin());
            historialService.saveOrUpdate(historial);

            GcmFileUtils.writeStringToFileServer(url, "html.txt", this.getContenidoHtml());
            GcmFileUtils.writeStringToFileServer(url, "plain.txt", this.getContenidoPlain());

            this.setListaTargetVinculos(new ArrayList());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosBL());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosBP());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosCT());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosOM());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosPR());
            this.getListaTargetVinculos().addAll(this.getListaTargetVinculosWK());

            if (org.apache.commons.collections.CollectionUtils.isNotEmpty(this.getListaTargetVinculos())) {
                VinculoService vinculoService = (VinculoService) ServiceFinder.findBean("VinculoService");
                VinculoHistService vinculoHistService = (VinculoHistService) ServiceFinder
                        .findBean("VinculoHistService");
                service.delete(this.getSelectedContenido().getNconocimientoid());
                for (Consulta consulta : this.getListaTargetVinculos()) {
                    Vinculo vinculo = new Vinculo();
                    vinculo.setNvinculoid(vinculoService.getNextPK());
                    vinculo.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
                    vinculo.setNconocimientovinc(consulta.getIdconocimiento());
                    vinculo.setNtipoconocimientovinc(consulta.getIdTipoConocimiento());
                    vinculo.setDfechacreacion(new Date());
                    vinculo.setVusuariocreacion(user.getVlogin());
                    vinculoService.saveOrUpdate(vinculo);

                    TvinculoHistId vinculoHistId = new TvinculoHistId();
                    vinculoHistId.setNvinculohid(vinculoHistService.getNextPK());
                    vinculoHistId.setNconocimientoid(thistorialId.getNconocimientoid());
                    vinculoHistId.setNhistorialid(thistorialId.getNhistorialid());
                    VinculoHist vinculoHist = new VinculoHist();
                    vinculoHist.setId(vinculoHistId);
                    vinculoHist.setNconocimientovinc(vinculo.getNconocimientovinc());
                    vinculoHist.setNtipoconocimientovinc(vinculo.getNtipoconocimientovinc());
                    vinculoHist.setDfechacreacion(new Date());
                    vinculoHist.setVusuariocreacion(user.getVlogin());
                    vinculoHistService.saveOrUpdate(vinculoHist);

                }
            }

            ArchivoConocimientoService aservice = (ArchivoConocimientoService) ServiceFinder
                    .findBean("ArchivoConocimientoService");
            service.deleteArchivos(this.getSelectedContenido().getNconocimientoid());
            for (ArchivoConocimiento v : this.getListaArchivos()) {

                ArchivoConocimiento archivoconocimiento = new ArchivoConocimiento();
                archivoconocimiento.setNarchivoid(aservice.getNextPK());
                archivoconocimiento.setNtipoconocimientoid(Constante.CONTENIDO);
                archivoconocimiento.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
                archivoconocimiento.setVnombre(v.getVnombre());
                archivoconocimiento.setNversion(historial.getNnumversion());
                archivoconocimiento.setNtipoarchivo(v.getNtipoarchivo());
                archivoconocimiento.setVcontenttype(v.getVcontenttype());
                archivoconocimiento.setVruta(path + this.getSelectedContenido().getNconocimientoid().toString()
                        + "/" + archivoconocimiento.getNversion().toString() + "/"
                        + archivoconocimiento.getVnombre());
                archivoconocimiento.setVusuariocreacion(user.getVlogin());
                archivoconocimiento.setDfechacreacion(new Date());
                aservice.saveOrUpdate(archivoconocimiento);
                saveFile(archivoconocimiento);

            }
            this.setListaContenido(service.getContenidos());
            FacesContext.getCurrentInstance().getExternalContext().redirect("/gescon/pages/contenido/lista.xhtml");
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public void activar(ActionEvent event) {
        try {
            if (event != null) {
                if (this.getSelectedContenido() != null) {
                    LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
                    User user = loginMB.getUser();
                    ConocimientoService service = (ConocimientoService) ServiceFinder
                            .findBean("ConocimientoService");
                    this.getSelectedContenido().setNactivo(BigDecimal.ONE);
                    this.getSelectedContenido().setDfechamodificacion(new Date());
                    this.getSelectedContenido().setVusuariomodificacion(user.getVlogin());
                    service.saveOrUpdate(this.getSelectedContenido());
                    this.setListaContenido(service.getConocimientosByType(Constante.CONTENIDO));
                } else {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, Constante.SEVERETY_ALERTA,
                            "Debe seleccionar el contenido a activar.");
                    FacesContext.getCurrentInstance().addMessage(null, message);
                }
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void desactivar(ActionEvent event) {
        try {
            if (event != null) {
                if (this.getSelectedContenido() != null) {
                    LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
                    User user = loginMB.getUser();
                    ConocimientoService service = (ConocimientoService) ServiceFinder
                            .findBean("ConocimientoService");
                    this.getSelectedContenido().setNactivo(BigDecimal.ZERO);
                    this.getSelectedContenido().setNdestacado(BigDecimal.ZERO);
                    this.getSelectedContenido().setDfechamodificacion(new Date());
                    this.getSelectedContenido().setVusuariomodificacion(user.getVlogin());
                    service.saveOrUpdate(this.getSelectedContenido());
                    this.setListaContenido(service.getConocimientosByType(Constante.CONTENIDO));
                } else {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, Constante.SEVERETY_ALERTA,
                            "Debe seleccionar el contenido a desactivar.");
                    FacesContext.getCurrentInstance().addMessage(null, message);
                }
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void setSelectedRow(ActionEvent event) {
        try {
            if (event != null) {
                int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));

                this.setSelectedContenido(this.getListaContenido().get(index));

            }
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public void setSelectedFile(ActionEvent event) {
        try {
            if (event != null) {
                int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));
                this.setSelectedArchivo(this.getListaArchivos().get(index));
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }

    public void toAddDiscusion(ActionEvent event) {
        try {
            this.clearDiscusion();
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void addDiscusion(ActionEvent event) {
        try {
            this.setDiscusionHtml(JSFUtils.getRequestParameter("txtHtml"));
            if (this.getTipoDiscusion() == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Seleccione el tipo de discusin a agregar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getTituloDiscusion())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el ttulo de la discusin a agregar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getDiscusionHtml())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el detalle de la discusin a agregar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            DiscusionSeccion discusionSeccion = new DiscusionSeccion();
            discusionSeccion.setNtipodiscusion(this.getTipoDiscusion());
            discusionSeccion.setVtitulo(StringUtils.upperCase(this.getTituloDiscusion().trim()));
            discusionSeccion.setDiscusionHtml(this.getDiscusionHtml());
            discusionSeccion.setDiscusionPlain(Jsoup.parse(discusionSeccion.getDiscusionHtml()).text());
            discusionSeccion.setDfechacreacion(new Date());
            if (this.getListaDiscusionSeccion() == null) {
                this.setListaDiscusionSeccion(new ArrayList());
            }
            this.getListaDiscusionSeccion().add(discusionSeccion);
            RequestContext.getCurrentInstance().execute("PF('dlgSec').hide();");
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void toEditDiscusion(ActionEvent event) {
        try {
            this.clearDiscusion();
            int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));
            this.setSelectedDiscusionSeccion(this.getListaDiscusionSeccion().get(index));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void editDiscusion(ActionEvent event) {
        try {
            this.getSelectedDiscusionSeccion().setDiscusionHtml(JSFUtils.getRequestParameter("etxtHtml"));
            if (this.getSelectedDiscusionSeccion().getNtipodiscusion() == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Seleccione el tipo de discusin a editar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getSelectedDiscusionSeccion().getVtitulo())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el ttulo de la discusin a editar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getSelectedDiscusionSeccion().getDiscusionHtml())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese el detalle de la discusin a editar.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            this.getSelectedDiscusionSeccion()
                    .setVtitulo(StringUtils.upperCase(this.getSelectedDiscusionSeccion().getVtitulo().trim()));
            this.getSelectedDiscusionSeccion()
                    .setDiscusionPlain(Jsoup.parse(this.getSelectedDiscusionSeccion().getDiscusionHtml()).text());
            RequestContext.getCurrentInstance().execute("PF('dlgEsec').hide();");
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void saveOrUpdateDiscusion(ActionEvent event) {
        Discusion discusion = null;
        DiscusionHist discusionHist;
        try {
            LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
            User user = loginMB.getUser();
            DiscusionService discusionService = (DiscusionService) ServiceFinder.findBean("DiscusionService");
            DiscusionHistService discusionHistService = (DiscusionHistService) ServiceFinder
                    .findBean("DiscusionHistService");
            if (this.getSelectedDiscusion() == null) {
                discusion = new Discusion();
                discusion.setNdiscusionid(discusionService.getNextPK());
                discusion.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
                discusion.setDfechacreacion(new Date());
                discusion.setVusuariocreacion(user.getVlogin());
                discusionService.saveOrUpdate(discusion);

                discusionHist = new DiscusionHist();
                discusionHist.setNnumversion(BigDecimal.ONE);
            } else {
                discusion = this.getSelectedDiscusion();
                discusionHist = discusionHistService
                        .getDiscusionHistByConocimiento(this.getSelectedContenido().getNconocimientoid());
                int version = discusionHist.getNnumversion().intValue() + 1;
                discusionHist.setNnumversion(BigDecimal.valueOf(version));
            }
            discusionHist.setNdiscusionhid(discusionHistService.getNextPK());
            discusionHist.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
            discusionHist.setDfechacreacion(new Date());
            discusionHist.setVusuariocreacion(user.getVlogin());
            discusionHistService.saveOrUpdate(discusionHist);

            if (CollectionUtils.isNotEmpty(this.getListaDiscusionSeccion())) {
                String url0 = this.path.concat(this.getSelectedContenido().getNconocimientoid().toString())
                        .concat("/0/d/").concat(BigDecimal.ZERO.toString()).concat("/s");
                String url1 = this.path.concat(this.getSelectedContenido().getNconocimientoid().toString())
                        .concat("/0/d/").concat(discusionHist.getNnumversion().toString()).concat("/s");
                DiscusionSeccionService discusionSeccionService = (DiscusionSeccionService) ServiceFinder
                        .findBean("DiscusionSeccionService");
                DiscusionSeccionHistService discusionSeccionHistService = (DiscusionSeccionHistService) ServiceFinder
                        .findBean("DiscusionSeccionHistService");
                for (DiscusionSeccion seccion : this.getListaDiscusionSeccion()) {
                    if (seccion.getNdiscusionseccionid() == null) {
                        seccion.setNdiscusionseccionid(discusionSeccionService.getNextPK());
                        seccion.setNdiscusionid(discusion.getNdiscusionid());
                        seccion.setDfechacreacion(new Date());
                        seccion.setVusuariocreacion(user.getVlogin());
                    } else {
                        seccion.setDfechamodificacion(new Date());
                        seccion.setVusuariomodificacion(user.getVlogin());
                    }
                    String ruta0 = url0.concat(seccion.getNdiscusionseccionid().toString()).concat("/");
                    seccion.setNtipodiscusion(seccion.getNtipodiscusion());
                    seccion.setVtitulo(StringUtils.upperCase(seccion.getVtitulo()));
                    seccion.setVruta(ruta0);
                    seccion.setDiscusionPlain(Jsoup.parse(seccion.getDiscusionHtml()).text());
                    discusionSeccionService.saveOrUpdate(seccion);

                    GcmFileUtils.writeStringToFileServer(ruta0, "html.txt", seccion.getDiscusionHtml());
                    GcmFileUtils.writeStringToFileServer(ruta0, "plain.txt", seccion.getDiscusionPlain());

                    String ruta1 = url1.concat(seccion.getNdiscusionseccionid().toString()).concat("/");
                    DiscusionSeccionHist seccionHist = new DiscusionSeccionHist();
                    seccionHist.setNdiscusionseccionhid(discusionSeccionHistService.getNextPK());
                    seccionHist.setNdiscusionhid(discusionHist.getNdiscusionhid());
                    seccionHist.setNtipodiscusion(seccion.getNtipodiscusion());
                    seccionHist.setVtitulo(StringUtils.upperCase(seccion.getVtitulo()));
                    seccionHist.setVruta(ruta1);
                    seccionHist.setDfechacreacion(new Date());
                    seccionHist.setVusuariocreacion(user.getVlogin());
                    discusionSeccionHistService.saveOrUpdate(seccionHist);

                    GcmFileUtils.writeStringToFileServer(ruta1, "html.txt", seccion.getDiscusionHtml());
                    GcmFileUtils.writeStringToFileServer(ruta1, "plain.txt", seccion.getDiscusionPlain());
                }
            }
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Informacin", "Discusin registrada con xito."));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void toCompare(ActionEvent event) {
        try {
            if (event != null) {
                if (CollectionUtils.isEmpty(this.getSelectedHistoriales())) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                            "Debe seleccionar dos versiones para comparar.");
                    FacesContext.getCurrentInstance().addMessage(null, message);
                    return;
                }
                if (CollectionUtils.isNotEmpty(this.getSelectedHistoriales())
                        && this.getSelectedHistoriales().size() != 2) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                            "Slo se puede comparar dos versiones a la vez.");
                    FacesContext.getCurrentInstance().addMessage(null, message);
                    return;
                }
                SeccionHistService seccionHistService = (SeccionHistService) ServiceFinder
                        .findBean("SeccionHistService");
                VinculoHistService vinculoHistService = (VinculoHistService) ServiceFinder
                        .findBean("VinculoHistService");
                for (Historial historial : this.getSelectedHistoriales()) {
                    historial.setDescripcionHtml(
                            GcmFileUtils.readStringFromFileServer(historial.getVruta(), "html.txt"));
                    historial.setListaSeccionHist(
                            seccionHistService.getSeccionHistsByHistorial(historial.getId().getNhistorialid()));
                    if (CollectionUtils.isNotEmpty(historial.getListaSeccionHist())) {
                        for (SeccionHist seccionHist : historial.getListaSeccionHist()) {
                            seccionHist.setDetalleHtml(
                                    GcmFileUtils.readStringFromFileServer(seccionHist.getVruta(), "html.txt"));
                        }
                    }
                }
                this.setSelectedHistorialLeft(this.getSelectedHistoriales().get(0));
                this.setSelectedHistorialRight(this.getSelectedHistoriales().get(1));
                ResourceBundle bundle = ResourceBundle.getBundle(Parameters.getParameters());
                String path = bundle.getString("path");
                ArchivoConocimientoService archivoservice = (ArchivoConocimientoService) ServiceFinder
                        .findBean("ArchivoConocimientoService");
                this.getSelectedHistorialLeft().setListaArchivos(archivoservice
                        .getArchivosByConocimiento(this.getSelectedHistorialLeft().getId().getNconocimientoid()));
                if (CollectionUtils.isNotEmpty(this.getSelectedHistorialLeft().getListaArchivos())) {
                    for (ArchivoConocimiento ac : this.getSelectedHistorialLeft().getListaArchivos()) {
                        ac.setContent(
                                new DefaultStreamedContent(new FileInputStream(new File(path + ac.getVruta())),
                                        ac.getVcontenttype(), ac.getVnombre()));
                    }
                }
                this.getSelectedHistorialRight().setListaArchivos(archivoservice
                        .getArchivosByConocimiento(this.getSelectedHistorialRight().getId().getNconocimientoid()));
                if (CollectionUtils.isNotEmpty(this.getSelectedHistorialRight().getListaArchivos())) {
                    for (ArchivoConocimiento ac : this.getSelectedHistorialRight().getListaArchivos()) {
                        ac.setContent(
                                new DefaultStreamedContent(new FileInputStream(new File(path + ac.getVruta())),
                                        ac.getVcontenttype(), ac.getVnombre()));
                    }
                }
                FacesContext.getCurrentInstance().getExternalContext()
                        .redirect("/gescon/pages/contenido/historialCompare.xhtml");
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void toAddCalificacion(ActionEvent event) {
        try {
            this.clearCalificacion();
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void addCalificacion(ActionEvent event) {
        try {
            if (this.getCalificacion() == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese la calificacion al wiki.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getComentario())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese un comentario al wiki.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
            User user = loginMB.getUser();
            CalificacionService calificacionService = (CalificacionService) ServiceFinder
                    .findBean("CalificacionService");
            Calificacion cal = new Calificacion();
            cal.setNcalificacionid(calificacionService.getNextPK());
            cal.setNconocimientoid(this.getSelectedContenido().getNconocimientoid());
            cal.setNcalificacion(this.getCalificacion());
            cal.setVcomentario(StringUtils.capitalize(this.getComentario().trim()));
            cal.setDfechacreacion(new Date());
            cal.setVusuariocreacion(user.getVlogin());
            calificacionService.saveOrUpdate(cal);
            this.setListaCalificacion(calificacionService
                    .getCalificacionesByConocimiento(this.getSelectedContenido().getNconocimientoid()));
            if (CollectionUtils.isNotEmpty(this.getListaCalificacion())) {
                UserService userService = (UserService) ServiceFinder.findBean("UserService");
                for (Calificacion c : this.getListaCalificacion()) {
                    User u = userService.getUserByLogin(c.getVusuariocreacion());
                    c.setUsuarioNombre(u.getVnombres() + " " + u.getVapellidos());
                }
            }
            RequestContext.getCurrentInstance().execute("PF('calDialog').hide();");
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void toEditCalificacion(ActionEvent event) {
        try {
            this.clearCalificacion();
            int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));
            this.setSelectedCalificacion(this.getListaCalificacion().get(index));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void editCalificacion(ActionEvent event) {
        try {
            if (this.getSelectedCalificacion().getNcalificacion() == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese la calificacion al wiki.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            if (StringUtils.isBlank(this.getSelectedCalificacion().getVcomentario())) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR.",
                        "Ingrese un comentario al wiki.");
                FacesContext.getCurrentInstance().addMessage(null, message);
                return;
            }
            LoginMB loginMB = (LoginMB) JSFUtils.getSessionAttribute("loginMB");
            User user = loginMB.getUser();
            CalificacionService calificacionService = (CalificacionService) ServiceFinder
                    .findBean("CalificacionService");
            this.getSelectedCalificacion().setNcalificacion(this.getSelectedCalificacion().getNcalificacion());
            this.getSelectedCalificacion()
                    .setVcomentario(StringUtils.capitalize(this.getSelectedCalificacion().getVcomentario().trim()));
            this.getSelectedCalificacion().setDfechamodificacion(new Date());
            this.getSelectedCalificacion().setVusuariomodificacion(user.getVlogin());
            calificacionService.saveOrUpdate(this.getSelectedCalificacion());
            this.setListaCalificacion(calificacionService
                    .getCalificacionesByConocimiento(this.getSelectedContenido().getNconocimientoid()));
            if (CollectionUtils.isNotEmpty(this.getListaCalificacion())) {
                UserService userService = (UserService) ServiceFinder.findBean("UserService");
                for (Calificacion c : this.getListaCalificacion()) {
                    User u = userService.getUserByLogin(c.getVusuariocreacion());
                    c.setUsuarioNombre(u.getVnombres() + " " + u.getVapellidos());
                }
            }
            RequestContext.getCurrentInstance().execute("PF('ecalDialog').hide();");
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void toDeleteCalificacion(ActionEvent event) {
        try {
            this.clearCalificacion();
            int index = Integer.parseInt((String) JSFUtils.getRequestParameter("index"));
            this.setSelectedCalificacion(this.getListaCalificacion().get(index));
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void deleteCalificacion(ActionEvent event) {
        try {
            CalificacionService calificacionService = (CalificacionService) ServiceFinder
                    .findBean("CalificacionService");
            calificacionService.delete(this.getSelectedCalificacion().getNcalificacionid());
            this.setListaCalificacion(calificacionService
                    .getCalificacionesByConocimiento(this.getSelectedContenido().getNconocimientoid()));
            if (CollectionUtils.isNotEmpty(this.getListaCalificacion())) {
                UserService userService = (UserService) ServiceFinder.findBean("UserService");
                for (Calificacion c : this.getListaCalificacion()) {
                    User u = userService.getUserByLogin(c.getVusuariocreacion());
                    c.setUsuarioNombre(u.getVnombres() + " " + u.getVapellidos());
                }
            }
        } catch (Exception e) {
            e.getMessage();
            e.printStackTrace();
        }
    }

    public void postProcessXLS(Object document) {
        HSSFWorkbook wb = (HSSFWorkbook) document;
        HSSFSheet sheet = wb.getSheetAt(0);

        //Para los datos
        HSSFCellStyle centerStyle = wb.createCellStyle();
        centerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

        HSSFCellStyle centerGrayStyle = wb.createCellStyle();
        centerGrayStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        centerGrayStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
        centerGrayStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);

        HSSFCellStyle grayBG = wb.createCellStyle();
        grayBG.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
        grayBG.setFillPattern(CellStyle.SOLID_FOREGROUND);
        int i = 1;
        for (Conocimiento c : this.getListaContenido()) {
            HSSFRow row = sheet.getRow(i);
            for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
                HSSFCell cell = row.getCell(j);
                if (i % 2 == 0) {
                    if (j > 0) {
                        cell.setCellStyle(centerGrayStyle);
                    } else {
                        cell.setCellStyle(grayBG);
                        cell.setCellValue(c.getVtitulo());
                    }
                } else {
                    if (j > 0) {
                        cell.setCellStyle(centerStyle);
                    } else {
                        cell.setCellValue(c.getVtitulo());
                    }
                }
            }
            i++;
        }

        // Para la cabecera
        HSSFRow header = sheet.getRow(0);
        HSSFCellStyle headerStyle = wb.createCellStyle();
        HSSFFont font = wb.createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
        headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
        headerStyle.setFont(font);

        for (int j = 0; j < header.getPhysicalNumberOfCells(); j++) {
            HSSFCell cell = header.getCell(j);
            cell.setCellStyle(headerStyle);
            sheet.autoSizeColumn(j);
        }
    }
}