Example usage for java.util Vector addElement

List of usage examples for java.util Vector addElement

Introduction

In this page you can find the example usage for java.util Vector addElement.

Prototype

public synchronized void addElement(E obj) 

Source Link

Document

Adds the specified component to the end of this vector, increasing its size by one.

Usage

From source file:com.duroty.application.admin.manager.AdminManager.java

/**
 * DOCUMENT ME!//from   ww  w.  j av a 2 s. com
 *
 * @param hsession DOCUMENT ME!
 * @param repositoryName DOCUMENT ME!
 * @param token DOCUMENT ME!
 *
 * @return DOCUMENT ME!
 *
 * @throws Exception DOCUMENT ME!
 */
public SearchUsersObj suggestUsers(Session hsession, String token, int page, int byPage) throws Exception {
    SearchUsersObj searchUsersObj = new SearchUsersObj();
    Vector users = new Vector();

    try {
        Criteria crit = hsession.createCriteria(Users.class);
        crit.add(Restrictions.or(Restrictions.ilike("useName", token, MatchMode.ANYWHERE),
                Restrictions.ilike("useEmail", token, MatchMode.ANYWHERE)));
        searchUsersObj.setHits(crit.list().size());

        crit = hsession.createCriteria(Users.class);
        crit.add(Restrictions.or(Restrictions.ilike("useName", token, MatchMode.ANYWHERE),
                Restrictions.ilike("useEmail", token, MatchMode.ANYWHERE)));
        crit.setFirstResult(page * byPage);
        crit.setMaxResults(byPage);
        crit.addOrder(Order.asc("useName"));

        ScrollableResults scroll = crit.scroll();

        while (scroll.next()) {
            Users user = (Users) scroll.get(0);

            UserObj obj = new UserObj();

            obj.setActive(user.isUseActive());
            obj.setEmail(user.getUseEmail());

            Iterator it = user.getMailPreferenceses().iterator();
            MailPreferences mailPreferences = (MailPreferences) it.next();

            obj.setHtmlMessages(mailPreferences.isMaprHtmlMessage());
            obj.setIdint(user.getUseIdint());
            obj.setLanguage(user.getUseLanguage());
            obj.setMessagesByPage(mailPreferences.getMaprMessagesByPage());
            obj.setName(user.getUseName());
            obj.setPassword(user.getUsePassword());
            obj.setQuotaSize(mailPreferences.getMaprQuotaSize());
            obj.setRegisterDate(user.getUseRegisterDate());

            Integer[] roles = new Integer[user.getUserRoles().size()];

            if (roles.length > 0) {
                it = user.getUserRoles().iterator();

                int i = 0;

                while (it.hasNext()) {
                    UserRole userRole = (UserRole) it.next();
                    roles[i] = new Integer(userRole.getId().getRoles().getRolIdint());
                    i++;
                }
            }

            obj.setRoles(roles);

            obj.setSignature(mailPreferences.getMaprSignature());

            if (mailPreferences.getMaprSpamTolerance() == 100) {
                obj.setSpamTolerance(true);
            } else {
                obj.setSpamTolerance(false);
            }

            obj.setUsername(user.getUseUsername());
            obj.setVacationBody(mailPreferences.getMaprVacationBody());
            obj.setVacationSubject(mailPreferences.getMaprVacationSubject());
            obj.setVactionActive(mailPreferences.isMaprVacationActive());

            int usedQuotaSize = getUsedQuotaSize(hsession, user);
            usedQuotaSize /= 1024;

            if (usedQuotaSize > 1024) {
                usedQuotaSize /= 1024;
                obj.setUsedQuota(usedQuotaSize + " MB");
            } else {
                obj.setUsedQuota(((usedQuotaSize > 0) ? (usedQuotaSize + "") : "<1") + " kB");
            }

            users.addElement(obj);
        }

        searchUsersObj.setUsers(users);

        return searchUsersObj;
    } finally {
        GeneralOperations.closeHibernateSession(hsession);
    }
}

From source file:hu.sztaki.lpds.pgportal.portlets.workflow.RealWorkflowPortlet.java

/**
 * Rescue a given workflow instance//  www  .j  a  v  a  2s . co  m
 */
public void doRescue(ActionRequest request, ActionResponse response) throws PortletException {
    if (WorkflowInfo(request, response)) {
        doDetails(request, response);
        //
        Vector errorJobPidList = new Vector();
        String portalID = PropertyLoader.getInstance().getProperty("service.url");
        String userID = request.getRemoteUser();
        String workflowID = request.getParameter("workflow");
        String runtimeID = request.getParameter("rtid");
        //
        String wfStatus = "" + PortalCacheService.getInstance().getUser(userID).getWorkflow(workflowID)
                .getRuntime(runtimeID).getStatus();
        if (("7".equals(wfStatus)) || ("28".equals(wfStatus)) || ("23".equals(wfStatus))) {
            //
            // 23 = running/error
            if ("23".equals(wfStatus)) {
                // entering of running workflow status
                PortalCacheService.getInstance().getUser(userID).getWorkflow(workflowID).getRuntime(runtimeID)
                        .setStatus("5", 0);
            } else {
                // entering of resuming workflow status
                PortalCacheService.getInstance().getUser(userID).getWorkflow(workflowID).getRuntime(runtimeID)
                        .setStatus("29", 0);
            }
            //
            ConcurrentHashMap tmp = PortalCacheService.getInstance().getUser(userID).getWorkflow(workflowID)
                    .getRuntime(runtimeID).getJobsStatus();
            Enumeration enm0 = tmp.keys();
            String ts;
            while (enm0.hasMoreElements()) {
                Object key0 = enm0.nextElement();
                Enumeration enm1 = ((ConcurrentHashMap) tmp.get(key0)).keys();
                while (enm1.hasMoreElements()) {
                    Object key1 = enm1.nextElement();
                    ts = "" + ((JobStatusData) ((ConcurrentHashMap) tmp.get(key0)).get(key1)).getStatus();
                    if (ts.equals("25") || ts.equals("22") || ts.equals("21") || ts.equals("7")
                            || ts.equals("15") || ts.equals("13") || ts.equals("12")) {
                        // entering init status
                        // PortalCacheService.getInstance().getUser(userID).getWorkflow(workflowID).getRuntime(runtimeID).addJobbStatus((String)key0,(String)key1,"1","",-1);
                        // clearing job from registry
                        PortalCacheService.getInstance().getUser(userID).getWorkflow(workflowID)
                                .getRuntime(runtimeID).removeJobStatus((String) key0, (String) key1);
                        // collecting jobID/jobPID for storage cleanup 
                        ComDataBean comDataBean = new ComDataBean();
                        comDataBean.setJobID((String) key0);
                        comDataBean.setJobPID((String) key1);
                        errorJobPidList.addElement(comDataBean);
                    }
                }
            }
            if (UserQuotaUtils.getInstance().userQuotaIsFull(request.getRemoteUser())) {
                request.setAttribute("msg", "portal.RealWorkflowPortlet.quotaisoverfull");
            } else {
                new WorkflowRescueThread(portalID, userID, workflowID, runtimeID, wfStatus, errorJobPidList);
            }
        }
        // request.setAttribute("jsp",mainjsp;
        request.setAttribute("jsp", "/jsp/workflow/wrkinst.jsp");
    }
}

From source file:com.duroty.application.mail.manager.PreferencesManager.java

/**
 * DOCUMENT ME!// w  w w  .j a v  a  2  s .c  o  m
 *
 * @param hsession DOCUMENT ME!
 * @param token DOCUMENT ME!
 *
 * @return DOCUMENT ME!
 *
 * @throws ManagerException DOCUMENT ME!
 */
public SearchGroupsObj searchGroups(Session hsession, String repositoryName, String token, int page, int byPage,
        int order, String extra) throws Exception {
    SearchGroupsObj sobj = new SearchGroupsObj();
    Vector groups = new Vector();

    try {
        Criteria crit = hsession.createCriteria(ContactList.class);
        crit.add(Restrictions.or(Restrictions.ilike("coliName", token, MatchMode.ANYWHERE),
                Restrictions.ilike("coliName", token, MatchMode.ANYWHERE)));
        crit.add(Restrictions.eq("users", getUser(hsession, repositoryName)));

        int hits = crit.list().size();

        sobj.setHits(hits);

        crit = hsession.createCriteria(ContactList.class);
        crit.add(Restrictions.or(Restrictions.ilike("coliName", token, MatchMode.ANYWHERE),
                Restrictions.ilike("coliName", token, MatchMode.ANYWHERE)));
        crit.add(Restrictions.eq("users", getUser(hsession, repositoryName)));
        crit.addOrder(Order.asc("coliName"));

        if (byPage > 0) {
            crit.setFirstResult(page * byPage);
            crit.setMaxResults(byPage);
        }

        ScrollableResults scroll = crit.scroll();

        while (scroll.next()) {
            ContactList contactList = (ContactList) scroll.get(0);

            ContactListObj obj = new ContactListObj();
            obj.setIdint(contactList.getColiIdint());
            obj.setName(contactList.getColiName());

            Set set = contactList.getConColis();

            StringBuffer emails = new StringBuffer();

            if (set != null) {
                Iterator it = set.iterator();

                while (it.hasNext()) {
                    ConColi conColi = (ConColi) it.next();
                    Contact contact = conColi.getId().getContact();

                    if (emails.length() > 0) {
                        emails.append(", ");
                    }

                    String name = "";

                    if (!StringUtils.isBlank(contact.getConName())) {
                        name = contact.getConName() + " ";
                    }

                    emails.append(name + "<" + contact.getConEmail() + ">");
                }

                if (emails.length() > 0) {
                    obj.setEmails(emails.toString() + ", ");
                }
            }

            groups.addElement(obj);
        }

        sobj.setGroups(groups);

        return sobj;
    } finally {
        GeneralOperations.closeHibernateSession(hsession);
    }
}

From source file:com.duroty.application.mail.manager.PreferencesManager.java

/**
 * DOCUMENT ME!//www . j a v  a 2 s . c o m
 *
 * @param hsession DOCUMENT ME!
 * @param token DOCUMENT ME!
 *
 * @return DOCUMENT ME!
 *
 * @throws ManagerException DOCUMENT ME!
 */
public SearchContactsObj searchContacts(Session hsession, String repositoryName, String token, int page,
        int byPage, int order, String extra) throws Exception {
    SearchContactsObj sobj = new SearchContactsObj();
    Vector contacts = new Vector();

    try {
        Criteria crit = hsession.createCriteria(Contact.class);
        crit.add(Restrictions.or(Restrictions.ilike("conName", token, MatchMode.ANYWHERE),
                Restrictions.ilike("conEmail", token, MatchMode.ANYWHERE)));
        crit.add(Restrictions.eq("users", getUser(hsession, repositoryName)));
        crit.add(Restrictions.isNotNull("conSentDate"));
        crit.add(Restrictions.isNotNull("conReceivedDate"));

        int hits = crit.list().size();

        sobj.setHits(hits);

        crit = hsession.createCriteria(Contact.class);
        crit.add(Restrictions.or(Restrictions.ilike("conName", token, MatchMode.ANYWHERE),
                Restrictions.ilike("conEmail", token, MatchMode.ANYWHERE)));
        crit.add(Restrictions.eq("users", getUser(hsession, repositoryName)));
        crit.add(Restrictions.isNotNull("conSentDate"));
        crit.add(Restrictions.isNotNull("conReceivedDate"));

        switch (order) {
        case ORDER_BY_EMAIL:
            crit.addOrder(Order.asc("conEmail"));

            break;

        case ORDER_BY_FREQUENCY_SENT:
            crit.addOrder(Order.asc("conSentDate"));

            break;

        case ORDER_BY_FREQUENCY_RECEIVED:
            crit.addOrder(Order.asc("conReceivedDate"));

            break;

        default:
            crit.addOrder(Order.asc("conSentDate"));

            break;
        }

        if (byPage > 0) {
            crit.setFirstResult(page * byPage);
            crit.setMaxResults(byPage);
        }

        ScrollableResults scroll = crit.scroll();

        while (scroll.next()) {
            Contact contact = (Contact) scroll.get(0);

            ContactObj obj = new ContactObj();
            obj.setIdint(contact.getConIdint());
            obj.setName(contact.getConName());
            obj.setEmail(contact.getConEmail());

            if (!StringUtils.isBlank(contact.getConDescription())) {
                obj.setDescription(contact.getConDescription().replaceAll("\n", "\\\\n")
                        .replaceAll("\r", "\\\\r").replaceAll("'", "''"));
            }

            contacts.addElement(obj);
        }

        sobj.setContacts(contacts);

        return sobj;
    } finally {
        GeneralOperations.closeHibernateSession(hsession);
    }
}

From source file:com.netscape.cms.logging.LogFile.java

/**
 * Read all entries whose logLevel>=lowLevel && log source = source
 * to at most maxLine entries(from end)//from   w  w w. j av  a  2 s.  com
 * If the parameter is -1, it's ignored and return all entries
 *
 * @param maxLine The maximum lines to be returned
 * @param lowLevel The lowest log level to be returned
 * @param source The particular log source to be returned
 * @param fName The log file name to be read. If it's null, read the current
 *            log file
 */
public Vector<LogEntry> readEntry(int maxLine, int lowLevel, LogSource source, String fName) {
    Vector<LogEntry> mEntries = new Vector<LogEntry>();
    String fileName = mFileName;
    BufferedReader fBuffer;
    int lineNo = 0; // lineNo of the current entry in the log file
    int line = 0; // line of readed valid entries
    String firstLine = null; // line buffer
    String nextLine = null;
    String entry = null;
    LogEntry logEntry = null;

    /*
     this variable is added to accormodate misplaced multiline entries
     write out buffered log entry when next entry is parsed successfully
     this implementation is assuming parsing is more time consuming than
     condition check
     */
    LogEntry preLogEntry = null;

    if (fName != null) {
        fileName = fName;
    }
    try {
        //XXX think about this
        fBuffer = new BufferedReader(new FileReader(fileName));
        do {
            try {
                nextLine = fBuffer.readLine();
                if (nextLine != null) {
                    if ((nextLine.length() == 0) || (nextLine.charAt(0) == ' ')) {
                        // It's a continuous line
                        entry = null;
                        if (nextLine.length() > 1)
                            firstLine = firstLine + "\n" + nextLine.substring(1);
                        else
                            firstLine = firstLine + "\n";

                    } else {
                        // It's a new entry
                        entry = firstLine;
                        firstLine = nextLine;
                    }
                    // parse the previous entry, the current one is buffered
                    if (entry != null) {
                        try {
                            logEntry = new LogEntry(entry);
                            // if parse succeed, write out previous entry
                            if (preLogEntry != null) {
                                if ((Integer.parseInt(preLogEntry.getLevel()) >= lowLevel)
                                        && ((Integer.parseInt(preLogEntry.getSource()) == source.value())
                                                || (source == ILogger.S_ALL))) {
                                    mEntries.addElement(preLogEntry);
                                    if (maxLine == -1) {
                                        line++;
                                    } else if (line < maxLine) {
                                        line++;
                                    } else {
                                        mEntries.removeElementAt(0);
                                    }
                                }
                            }
                            preLogEntry = logEntry;
                        } catch (ParseException e) {
                            if (preLogEntry != null) {
                                preLogEntry.appendDetail(entry);
                            } else {
                                firstLine = firstLine + "\n" + nextLine;
                            }
                            entry = null;
                            logEntry = null;
                        }
                    }
                }
                lineNo++;

            } catch (IOException e) {
                CMS.getLogger().log(ILogger.EV_SYSTEM, ILogger.S_OTHER, ILogger.LL_FAILURE,
                        CMS.getLogMessage("LOGGING_READ_ERROR", fileName, Integer.toString(lineNo)));
            }

        } while (nextLine != null);

        // need to process the last 2 entries of the file
        if (firstLine != null) {
            if (logEntry != null) {
                preLogEntry = logEntry;
            }
            entry = firstLine;
            try {
                logEntry = new LogEntry(entry);

                /*  System.out.println(
                 Integer.toString(Integer.parseInt(logEntry.getLevel()))
                 +","+Integer.toString(lowLevel)+","+
                 Integer.toString(Integer.parseInt(logEntry.getSource()))
                 +","+Integer.toString(source) );
                 */
                if (preLogEntry != null) {
                    if ((Integer.parseInt(preLogEntry.getLevel()) >= lowLevel)
                            && ((Integer.parseInt(preLogEntry.getSource()) == source.value())
                                    || (source == ILogger.S_ALL))) {
                        mEntries.addElement(preLogEntry);
                        if (maxLine == -1) {
                            line++;
                        } else if (line < maxLine) {
                            line++;
                        } else {
                            mEntries.removeElementAt(0);
                        }
                    }
                }
                preLogEntry = logEntry;
            } catch (ParseException e) {
                preLogEntry.appendDetail(entry);
            }

            if (preLogEntry != null) {
                if ((Integer.parseInt(preLogEntry.getLevel()) >= lowLevel)
                        && ((Integer.parseInt(preLogEntry.getSource()) == source.value())
                                || (source == ILogger.S_ALL))) {
                    // parse the entry, pass to UI
                    mEntries.addElement(preLogEntry);
                    if (maxLine == -1) {
                        line++;
                    } else if (line < maxLine) {
                        line++;
                    } else {
                        mEntries.removeElementAt(0);
                    }
                }
            }

        } // end: last entry

        try {
            fBuffer.close();
        } catch (IOException e) {
            CMS.getLogger().log(ILogger.EV_SYSTEM, ILogger.S_OTHER, ILogger.LL_FAILURE,
                    "logging:" + fileName + " failed to close for reading");
        }

    } catch (FileNotFoundException e) {
        CMS.getLogger().log(ILogger.EV_SYSTEM, ILogger.S_OTHER, ILogger.LL_FAILURE,
                CMS.getLogMessage("LOGGING_FILE_NOT_FOUND", fileName));
    }
    return mEntries;
}

From source file:forseti.nomina.JNomMovDirDlg.java

@SuppressWarnings({ "rawtypes", "unchecked" })
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    super.doPost(request, response);

    String nom_nomina_dlg = "";
    request.setAttribute("nom_nomina_dlg", nom_nomina_dlg);

    String mensaje = "";
    short idmensaje = -1;
    String usuario = getSesion(request).getID_Usuario();

    if (request.getContentType() != null
            && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1) {
        if (!getSesion(request).getRegistrado()) {
            irApag("/forsetiweb/errorAtributos.jsp", request, response);
            return;
        } else {//from  ww  w  . java  2  s .c om
            try {
                HttpSession ses = request.getSession(true);
                JFacturasXML nomrecxml = (JFacturasXML) ses.getAttribute("nom_rec_xml");
                Vector archivos = new Vector();
                DiskFileUpload fu = new DiskFileUpload();
                List items = fu.parseRequest(request);
                Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    if (item.isFormField())
                        nomrecxml.getParametros().put(item.getFieldName(), item.getString());
                    else
                        archivos.addElement(item);
                }

                // revisa por las entidades
                JNominaEntidadesSetIds setids = new JNominaEntidadesSetIds(request, usuario,
                        getSesion(request).getSesion("NOM_NOMINA").getEspecial());
                setids.Open();

                if (setids.getNumRows() < 1) {
                    idmensaje = 3;
                    mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                            "NOM_NOMINA", "NNOM||||", mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }

                SubirArchivosCFD(request, response, nomrecxml, archivos);
                return;
            } catch (FileUploadException e) {
                e.printStackTrace();
                return;
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
        }
    }

    if (request.getParameter("proceso") != null && !request.getParameter("proceso").equals("")) {
        // revisa por las entidades
        JNominaEntidadesSetIds setids = new JNominaEntidadesSetIds(request, usuario,
                getSesion(request).getSesion("NOM_NOMINA").getEspecial());
        setids.Open();

        if (setids.getNumRows() < 1) {
            idmensaje = 3;
            mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(), "NOM_NOMINA",
                    "NNOM||||", mensaje);
            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
            return;
        }

        request.setAttribute("idmod", "NOM_NOMINA");
        request.setAttribute("fact_xml", "NOMINA");

        // Revisa por intento de intrusion (Salto de permiso de entidad)
        if (!request.getParameter("proceso").equals("AGREGAR_NOMINA") && request.getParameter("id") != null) {
            JNominasModuloSet set = new JNominasModuloSet(request);
            set.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            set.Open();
            if (set.getNumRows() < 1) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "AL", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM|" + request.getParameter("id") + "|"
                                + setids.getAbsRow(0).getID_Sucursal() + "||",
                        mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        }

        if (request.getParameter("proceso").equals("ENLAZAR_RECIBO")) {
            //System.out.println("Enlazar Recibos");
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setids.getAbsRow(0).getCFD()
                    || (setnom.getAbsRow(0).getTipo() != 1 && setnom.getAbsRow(0).getTipo() != 2
                            && setnom.getAbsRow(0).getTipo() != 5 && setnom.getAbsRow(0).getTipo() != 6
                            && setnom.getAbsRow(0).getTipo() != 7 && setnom.getAbsRow(0).getTipo() != 8)) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede enlazar ningun CFDI porque esta entidad de nmina genera sus propios CFDIs, o  porque esta nmina es del tipo especial, la cual no es compatible para sellar.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("subproceso") == null) // Como el subproceso no es ENVIAR ni ENLAZAR,
            {
                //System.out.println("Subproceso Nulo");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/fact_dlg_xmls.jsp", request, response);
                return;
            } else {
                //System.out.println("Subproceso NO Nulo");
                if (request.getParameter("subproceso").equals("ENLAZAR")) {
                    // Se supone que el recibo aun no estar ligado a un recibo existente...
                    JCFDCompSet comprobante = new JCFDCompSet(request, "NOMINA");
                    comprobante.m_Where = "UUID = '" + p(request.getParameter("uuid")) + "'";
                    comprobante.Open();

                    if (comprobante.getNumRows() < 1 || !comprobante.getAbsRow(0).getFSI_Tipo().equals("ENT")
                            || comprobante.getAbsRow(0).getFSI_ID() != Integer
                                    .parseInt(getSesion(request).getSesion("NOM_NOMINA").getEspecial())) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se ha cargado el CFDI del recibo, ste ya esta ligado a otro recibo,  el CFDI se carg en otra entidad<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    HttpSession ses = request.getSession(true);
                    JFacturasXML nomrecxml = (JFacturasXML) ses.getAttribute("nom_rec_xml");

                    if (nomrecxml == null) {
                        nomrecxml = new JFacturasXML();
                        ses.setAttribute("nom_rec_xml", nomrecxml);
                    } else {
                        nomrecxml = null;
                        nomrecxml = new JFacturasXML();
                        ses.setAttribute("nom_rec_xml", nomrecxml);
                    }

                    StringBuffer sb_mensaje = new StringBuffer();
                    if (!JForsetiCFD.CargarDocumentoCFDI(request, nomrecxml, sb_mensaje,
                            request.getParameter("uuid"), "N")) {
                        idmensaje = 3;
                        mensaje += sb_mensaje.toString();
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (nomrecxml.getComprobante().getProperty("tipoDeComprobante").equals("ingreso")
                            || nomrecxml.getComprobante().getProperty("tipoDeComprobante").equals("traslado")) {
                        idmensaje = 3;
                        mensaje += "ERROR: El tipo de comprobante fiscal digital CFDI, No corresponde con el tipo de documento a enlazar.<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    //Verifica que el RFC del Emisor sea igual al RFC registrado, o que sea rfc generico
                    JBDSSet set = new JBDSSet(request);
                    set.ConCat(true);
                    set.m_Where = "Nombre = 'FSIBD_" + p(getSesion(request).getBDCompania()) + "'";
                    set.Open();
                    if (!nomrecxml.getRFC_Emisor().equalsIgnoreCase(set.getAbsRow(0).getRFC())) {
                        idmensaje = 3;
                        mensaje = "ERROR: El RFC del emisor en el XML no pertenece a la compaia";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (request.getParameter("idempleado") == null) // Significa que debe agregar un nuevo recibo 
                    {
                        if (setnom.getAbsRow(0).getCerrado()) {
                            idmensaje = 3;
                            mensaje += "ERROR: No se puede enlazar el CFDI a un recibo nuevo porque la nmina ya esta protegida <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                        //float descuento = Float.parseFloat(nomrecxml.getComprobante().getProperty("descuento"));
                        //float totalImpuestosRetenidos = Float.parseFloat(nomrecxml.getImpuestos().getProperty("totalImpuestosRetenidos"));
                        JMasempSet setemp = new JMasempSet(request);
                        setemp.m_Where = "ID_Compania = '0' and ID_Sucursal = '"
                                + getSesion(request).getSesion("NOM_NOMINA").getEspecial()
                                + "' and ( RFC_Letras || RFC_Fecha || RFC_Homoclave ) ~~* '"
                                + p(nomrecxml.getRFC_Receptor()) + "'";
                        setemp.Open();
                        //System.out.println(setemp.getSQL());
                        if (setemp.getNumRows() == 0) {
                            idmensaje = 1;
                            mensaje = "PRECAUCION: No existe el empleado dado de alta en el sistema, est dado de alta en otra entidad o el RFC del empleado no coincide con el del recibo";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        JNomMovDirSes rec = (JNomMovDirSes) ses.getAttribute("nom_nomina_dlg");
                        if (rec == null) {
                            rec = new JNomMovDirSes();
                            ses.setAttribute("nom_nomina_dlg", rec);
                        } else
                            rec.resetear();

                        JProcessSet setRec = new JProcessSet(request);
                        setRec.setSQL("select Recibo from VIEW_NOM_CALCULO_NOMINA_ESP where ID_Nomina = '"
                                + p(request.getParameter("id")) + "' order by Recibo desc limit 1");
                        setRec.Open();

                        if (setRec.getNumRows() > 0)
                            rec.setRecibo(Integer.valueOf(setRec.getAbsRow(0).getSTS("Col1")) + 1);
                        else
                            rec.setRecibo(1);

                        //Llena el recibo
                        rec.setUUID(nomrecxml.getTFD().getProperty("UUID"));
                        rec.setID_Empleado(setemp.getAbsRow(0).getID_Empleado());
                        rec.setNombre(setemp.getAbsRow(0).getNombre() + " "
                                + setemp.getAbsRow(0).getApellido_Paterno() + " "
                                + setemp.getAbsRow(0).getApellido_Materno());

                        JCalculoNominaDetSet dset = new JCalculoNominaDetSet(request);
                        dset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                                + p(request.getParameter("idempleado")) + "'";
                        dset.Open();

                        for (int i = 0; i < nomrecxml.getPercepciones().size(); i++) {
                            Properties percepcion = (Properties) nomrecxml.getPercepciones().elementAt(i);
                            int clave;
                            String descripcion;
                            boolean esDeduccion;
                            int idmovimiento;
                            try {
                                idmovimiento = Integer.parseInt(percepcion.getProperty("Clave"));
                            } catch (NumberFormatException e) {
                                idmovimiento = 0;
                            }
                            JMovimientosNomSet cat = new JMovimientosNomSet(request);
                            cat.m_Where = "ID_Movimiento = '" + idmovimiento + "'";
                            //System.out.println(cat.getSQL());
                            cat.Open();
                            if (cat.getNumRows() > 0) {
                                clave = cat.getAbsRow(0).getID_Movimiento();
                                descripcion = cat.getAbsRow(0).getDescripcion();
                                esDeduccion = cat.getAbsRow(0).getDeduccion();
                            } else // Si no existe la clave en el catalogo, enlaza desde catlogo intermediario 
                            {
                                clave = 0;
                                descripcion = percepcion.getProperty("Concepto");
                                esDeduccion = false;
                            }
                            float gravado = Float.parseFloat(percepcion.getProperty("ImporteGravado"));
                            float exento = Float.parseFloat(percepcion.getProperty("ImporteExento"));

                            rec.agregaPartida(clave, descripcion, gravado, exento, 0.00F, esDeduccion);
                        }

                        for (int i = 0; i < nomrecxml.getDeducciones().size(); i++) {
                            Properties deduccion = (Properties) nomrecxml.getDeducciones().elementAt(i);
                            int clave;
                            String descripcion;
                            boolean esDeduccion;

                            JMovimientosNomSet cat = new JMovimientosNomSet(request);
                            cat.m_Where = "ID_Movimiento = '" + p(deduccion.getProperty("Clave")) + "'";
                            //System.out.println(cat.getSQL());
                            cat.Open();
                            if (cat.getNumRows() > 0) {
                                clave = cat.getAbsRow(0).getID_Movimiento();
                                descripcion = cat.getAbsRow(0).getDescripcion();
                                esDeduccion = cat.getAbsRow(0).getDeduccion();
                            } else // Si no existe la clave en el catalogo, enlaza desde catlogo intermediario 
                            {
                                clave = 0;
                                descripcion = deduccion.getProperty("Concepto");
                                esDeduccion = true;
                            }
                            float gravado = Float.parseFloat(deduccion.getProperty("ImporteGravado"));
                            float exento = Float.parseFloat(deduccion.getProperty("ImporteExento"));

                            rec.agregaPartida(clave, descripcion, 0.00F, 0.00F, -(gravado + exento),
                                    esDeduccion);
                        }

                        for (int i = 0; i < nomrecxml.getIncapacidades().size(); i++) {
                            Properties incapacidad = (Properties) nomrecxml.getIncapacidades().elementAt(i);

                            float dias = Float.parseFloat(incapacidad.getProperty("DiasIncapacidad"));
                            int tipo = Integer.parseInt(incapacidad.getProperty("TipoIncapacidad"));
                            if (tipo == 1)
                                rec.setIXA(dias);
                            else if (tipo == 2)
                                rec.setIXE(dias);
                            else
                                rec.setIXM(dias);

                        }

                        for (int i = 0; i < nomrecxml.getHorasExtras().size(); i++) {
                            Properties horasextra = (Properties) nomrecxml.getHorasExtras().elementAt(i);

                            byte dias = Byte.parseByte(horasextra.getProperty("Dias"));
                            String tipo = horasextra.getProperty("TipoHoras");
                            float horas = Float.parseFloat(horasextra.getProperty("HorasExtra"));

                            rec.setDiasHorasExtras(dias);
                            if (tipo.equals("Dobles") || tipo.equals("dobles"))
                                rec.setHE(horas);
                            else // Triples o triples
                                rec.setHT(horas);

                        }

                        rec.establecerResultados();

                        if ((JUtil.redondear(rec.getSumGravado() + rec.getSumExento() + rec.getSumDeduccion(),
                                2)
                                - JUtil.redondear(
                                        Float.parseFloat(nomrecxml.getComprobante().getProperty("total")),
                                        2)) > 0.1
                                || (JUtil.redondear(
                                        rec.getSumGravado() + rec.getSumExento() + rec.getSumDeduccion(), 2)
                                        - JUtil.redondear(
                                                Float.parseFloat(
                                                        nomrecxml.getComprobante().getProperty("total")),
                                                2)) < -0.1) {
                            idmensaje = 3;
                            mensaje = "ERROR: El total en el CFDI no corresponde al Total calculado en el registro a partir de este CFDI. No se puede agregar. DOC: "
                                    + JUtil.redondear(
                                            rec.getSumGravado() + rec.getSumExento() + rec.getSumDeduccion(), 2)
                                    + " XML: "
                                    + JUtil.redondear(
                                            Float.parseFloat(nomrecxml.getComprobante().getProperty("total")),
                                            2);
                            getSesion(request).setID_Mensaje(idmensaje, mensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;

                    } else // Significa que debe Enlazar a un recibo existente
                    {
                        if (setnom.getAbsRow(0).getFormaPago().equals("N")) //Si no est ya pagada la nomina lo rechaza porque no hay poliza para enlazar el cfdi a la contabilidad electronica
                        {
                            idmensaje = 3;
                            mensaje += "ERROR: No se puede enlazar el CFDI a un recibo existente porque la nmina no esta pagada an, lo que significa que no existe una pliza asociada para el enlace a la contabilidad elecrnica <br>";
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                        String[] valoresParam = request.getParameterValues("idempleado");
                        if (valoresParam.length == 1) {
                            JCalculoNominaEspSet cset = new JCalculoNominaEspSet(request);
                            cset.m_Where = "ID_Nomina = '" + p(request.getParameter("id"))
                                    + "' and ID_Empleado = '" + p(request.getParameter("idempleado")) + "'";
                            cset.Open();
                            //System.out.println(setemp.getSQL());

                            if (cset.getAbsRow(0).getID_CFD() != 0) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Este recibo ya tiene un CFDI asociado. No puedes asociar otro CFDI al mismo recibo<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            JMasempSetCons setemp = new JMasempSetCons(request);
                            setemp.m_Where = "ID_Empleado = '" + p(request.getParameter("idempleado")) + "'";
                            setemp.Open();

                            if (JUtil.redondear(
                                    cset.getAbsRow(0).getGravado() + cset.getAbsRow(0).getExento()
                                            + cset.getAbsRow(0).getDeduccion(),
                                    2) != JUtil.redondear(
                                            Float.parseFloat(nomrecxml.getComprobante().getProperty("total")),
                                            2)
                                    || !(setemp.getAbsRow(0).getRFC_Letras()
                                            + setemp.getAbsRow(0).getRFC_Fecha()
                                            + setemp.getAbsRow(0).getRFC_Homoclave())
                                                    .equals(nomrecxml.getRFC_Receptor())) {
                                idmensaje = 1;
                                mensaje += "PRECAUCION: Los totales o los RFCs del recibo y el CFDI no coinciden. No se puede asociar este CFDI al registro<br>";
                                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                                return;
                            }

                            // Aqui asocia.
                            Enlazar(request, response);
                            return;
                        } else {
                            idmensaje = 1;
                            mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }
                    }

                } else if (request.getParameter("subproceso").equals("ENVIAR")) {
                    if (AgregarRecursos(request, response) == -1) {
                        AgregarCambiarEmp(request, response);
                        return;
                    }

                    irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                    return;
                }
            }
        } else if (request.getParameter("proceso").equals("AGREGAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_AGREGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JAdmCompaniasSet setcom = new JAdmCompaniasSet(request);
            setcom.m_Where = "ID_Compania = '0' and ID_Sucursal = '"
                    + getSesion(request).getSesion("NOM_NOMINA").getEspecial() + "'";
            setcom.Open();

            Byte numero_nomina = new Byte(setcom.getAbsRow(0).getNumero());
            Date desde = new Date(setcom.getAbsRow(0).getFecha().getTime());
            Calendar hast = new GregorianCalendar();
            hast.setTime(setcom.getAbsRow(0).getFecha());
            Integer ano = new Integer(JUtil.obtAno(hast));
            Integer tipo_de_nomina = new Integer(-1);

            if (setcom.getAbsRow(0).getPeriodo().equals("sem"))
                hast.add(Calendar.DATE, 6);
            else if (setcom.getAbsRow(0).getPeriodo().equals("qui"))
                hast.add(Calendar.DATE, 14);
            else {
                hast.add(Calendar.MONTH, 1);
                hast.add(Calendar.DATE, -1);
            }
            Date hasta = hast.getTime();

            request.setAttribute("numero_nomina", numero_nomina);
            request.setAttribute("ano", ano);
            request.setAttribute("desde", desde);
            request.setAttribute("hasta", hasta);
            request.setAttribute("tipo_de_nomina", tipo_de_nomina);

            // Solicitud de envio a procesar
            if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("ENVIAR")) {
                // Verificacion
                if (VerificarParametros(request, response)) {
                    AgregarCambiarCabecero(request, response);
                    return;
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg.jsp", request, response);
                return;
            } else // Como el subproceso no es ENVIAR, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/nomina/nom_nomina_dlg.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CAMBIAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (setnom.getAbsRow(0).getCerrado()) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede cambiar la n&oacute;mina porque ya esta protegida<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (setnom.getAbsRow(0).getTipo() != 1 && setnom.getAbsRow(0).getTipo() != 2) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede cambiar la nmina porque no es una nmina normal<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                    Byte numero_nomina = new Byte((byte) setnom.getAbsRow(0).getNumero_Nomina());
                    Integer ano = new Integer(setnom.getAbsRow(0).getAno());
                    Date desde = new Date(setnom.getAbsRow(0).getFecha_Desde().getTime());
                    Date hasta = new Date(setnom.getAbsRow(0).getFecha_Hasta().getTime());
                    Integer tipo_de_nomina = new Integer(setnom.getAbsRow(0).getTipo());

                    request.setAttribute("numero_nomina", numero_nomina);
                    request.setAttribute("ano", ano);
                    request.setAttribute("desde", desde);
                    request.setAttribute("hasta", hasta);
                    request.setAttribute("tipo_de_nomina", tipo_de_nomina);

                    // Solicitud de envio a procesar
                    if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("ENVIAR")) {
                        // Verificacion
                        if (VerificarParametros(request, response)) {
                            AgregarCambiarCabecero(request, response);
                            return;
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg.jsp", request, response);
                        return;
                    } else // Como el subproceso no es ENVIAR, abre la ventana del proceso de AGREGADO para agregar `por primera vez
                    {
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/nomina/nom_nomina_dlg.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("ELIMINAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_ELIMINAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_ELIMINAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_ELIMINAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (setnom.getAbsRow(0).getCerrado()) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede eliminar la n&oacute;mina porque ya esta protegida <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JCalculoNominaEspSet cset = new JCalculoNominaEspSet(request);
                    cset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and TFD >= 2";
                    cset.Open();
                    if (cset.getNumRows() > 0) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede eliminar la nmina porque por lo menos un recibo ya tiene su CFDI enlazado. Primero debes desenlazar el CFDI desde el mdulo de CFDI y CE del centro de control<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    Eliminar(request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CALCULAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_AGREGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (setnom.getAbsRow(0).getCerrado()) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede calcular la n&oacute;mina porque ya est protegida <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (setnom.getAbsRow(0).getTipo() == 1 || setnom.getAbsRow(0).getTipo() == 2) {
                        if (request.getParameter("subproceso") != null
                                && request.getParameter("subproceso").equals("ENVIAR")) {
                            //Normales
                            Calcular(request, response, 12);
                            return;
                        } else // Como el subproceso no es ENVIAR, abre la ventana del proceso de AGREGADO para agregar `por primera vez
                        {
                            getSesion(request).setID_Mensaje(idmensaje, mensaje);
                            irApag("/forsetiweb/nomina/nom_nomina_dlg_calcular.jsp", request, response);
                            return;
                        }
                    } else if (setnom.getAbsRow(0).getTipo() == 5 || setnom.getAbsRow(0).getTipo() == 6) {
                        //Aguinaldo
                        Calcular(request, response, 56);
                        return;
                    } else {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede calcular la nmina porque el tipo de nmina no es calculable <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 1;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("GENERAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_AGREGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (!setnom.getAbsRow(0).getCerrado() || setnom.getAbsRow(0).getStatus().equals("P")
                            || setnom.getAbsRow(0).getStatus().equals("C")) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede generar pago de n&oacute;mina porque no esta protegida, ya esta pagada o esta cancelada <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    Generar(request, response);
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CARGAR_RECIBO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("ADM_CFDI_CARGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "ADM_CFDI_CARGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "ADM_CFDI_CARGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setids.getAbsRow(0).getCFD()
                    || (setnom.getAbsRow(0).getTipo() != 1 && setnom.getAbsRow(0).getTipo() != 2
                            && setnom.getAbsRow(0).getTipo() != 5 && setnom.getAbsRow(0).getTipo() != 6)) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede cargar ningun CFDI porque esta entidad de nmina genera sus propios CFDIs, o  porque el tipo, no es compatible para sellar.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            Integer subir_archivos = new Integer(2);
            request.setAttribute("subir_archivos", subir_archivos);

            HttpSession ses = request.getSession(true);
            JFacturasXML rec = (JFacturasXML) ses.getAttribute("nom_rec_xml");

            if (rec == null) {
                rec = new JFacturasXML();
                ses.setAttribute("nom_rec_xml", rec);
            } else {
                rec = null;
                rec = new JFacturasXML();
                ses.setAttribute("nom_rec_xml", rec);
            }

            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/subir_archivos.jsp?verif=/servlet/CEFNomMovDirDlg&archivo_1=xml&archivo_2=pdf&proceso=CARGAR_RECIBO&subproceso=ENVIAR",
                    request, response);
            return;

        } else if (request.getParameter("proceso").equals("SELLAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_AGREGAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_AGREGAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_AGREGAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    if (setids.getAbsRow(0).getCFD() == false) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Esta entidad de nmina no est&aacute; establecida como CFDI. No se pueden sellar los registros<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();

                    if (!setnom.getAbsRow(0).getCerrado() || !setnom.getAbsRow(0).getStatus().equals("P")
                            || setnom.getAbsRow(0).getStatus().equals("C")) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede sellar esta nmina porque no esta protegida, no esta pagada o est cancelada <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    if (setnom.getAbsRow(0).getTipo() == 1 || setnom.getAbsRow(0).getTipo() == 2
                            || setnom.getAbsRow(0).getTipo() == 5 || setnom.getAbsRow(0).getTipo() == 6
                            || setnom.getAbsRow(0).getTipo() == 7 || setnom.getAbsRow(0).getTipo() == 8) {
                        JCalculoNominaEspSet SetMod = new JCalculoNominaEspSet(request);
                        SetMod.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                        SetMod.m_OrderBy = "Recibo ASC";
                        SetMod.Open();

                        for (int i = 0; i < SetMod.getNumRows(); i++) {
                            if (SetMod.getAbsRow(i).getTFD() == 3)
                                continue;

                            StringBuffer sb_mensaje = new StringBuffer(254);
                            idmensaje = generarCFDI(request, response, "NOMINA",
                                    Integer.parseInt(request.getParameter("id")),
                                    SetMod.getAbsRow(i).getID_Empleado(), setids, SetMod.getAbsRow(i).getTFD(),
                                    sb_mensaje);
                            mensaje += SetMod.getAbsRow(i).getID_Empleado() + " " + sb_mensaje.toString()
                                    + "<br>";
                            if (idmensaje == 3)
                                break;
                        }

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    } else {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede sellar la n&oacute;mina porque se trata de una n&oacute;mina especial. <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("PROTEGER_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    JNominasModuloSet setnom = new JNominasModuloSet(request);
                    setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
                    setnom.Open();
                    if (!setnom.getAbsRow(0).getFormaPago().equals("N")
                            || setnom.getAbsRow(0).getStatus().equals("C")) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede desproteger la nmina porque ya esta pagada o esta cancelada.<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    Proteger(request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CONSULTAR_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/nomina/nom_nomina_dlg_cons.jsp", request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("MOVER_NOMINA")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("id") != null) {
                String[] valoresParam = request.getParameterValues("id");
                if (valoresParam.length == 1) {
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/nomina/nom_nomina_dlg_cons.jsp", request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("AGR_EMP")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }
            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setnom.getAbsRow(0).getCerrado() || setnom.getAbsRow(0).getStatus().equals("C")) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede agregar el empleado porque la nmina ya est protegida o est cancelada.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            // Solicitud de envio a procesar
            if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("ENVIAR")) {
                if (AgregarCabeceroRecibo(request, response) == -1) {
                    AgregarCambiarEmp(request, response);
                    return;
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            } else if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("AGR_PART")) {
                if (AgregarCabeceroRecibo(request, response) == -1) {
                    if (VerificarParametrosPartida(request, response))
                        AgregarPartida(request, response);
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            } else if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("EDIT_PART")) {
                if (AgregarCabeceroRecibo(request, response) == -1) {
                    if (VerificarParametrosPartida(request, response))
                        EditarPartida(request, response);
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            } else if (request.getParameter("subproceso") != null
                    && request.getParameter("subproceso").equals("BORR_PART")) {
                if (AgregarCabeceroRecibo(request, response) == -1) {
                    BorrarPartida(request, response);
                }
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            } else // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
            {
                HttpSession ses = request.getSession(true);
                JNomMovDirSes rec = (JNomMovDirSes) ses.getAttribute("nom_nomina_dlg");
                if (rec == null) {
                    rec = new JNomMovDirSes();
                    ses.setAttribute("nom_nomina_dlg", rec);
                } else
                    rec.resetear();

                JProcessSet setRec = new JProcessSet(request);
                setRec.setSQL("select Recibo from VIEW_NOM_CALCULO_NOMINA_ESP where ID_Nomina = '"
                        + p(request.getParameter("id")) + "' order by Recibo desc limit 1");
                setRec.Open();

                if (setRec.getNumRows() > 0)
                    rec.setRecibo(Integer.valueOf(setRec.getAbsRow(0).getSTS("Col1")) + 1);
                else
                    rec.setRecibo(1);

                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                return;
            }
        } else if (request.getParameter("proceso").equals("CAM_EMP")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setnom.getAbsRow(0).getCerrado() || setnom.getAbsRow(0).getStatus().equals("C")) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede cambiar el recibo porque la nmina ya est protegida o est cancelada.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    JCalculoNominaEspSet cset = new JCalculoNominaEspSet(request);
                    cset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    cset.Open();
                    if (cset.getAbsRow(0).getTFD() >= 2) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede cambiar el recibo porque ya tiene un CFDI enlazado.<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }
                    //Solicitud de envio a procesar
                    if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("ENVIAR")) {
                        // Verificacion
                        if (AgregarCabeceroRecibo(request, response) == -1) {
                            AgregarCambiarEmp(request, response);
                            return;
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    } else if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("AGR_PART")) {
                        if (AgregarCabeceroRecibo(request, response) == -1) {
                            if (VerificarParametrosPartida(request, response))
                                AgregarPartida(request, response);
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    } else if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("EDIT_PART")) {
                        if (AgregarCabeceroRecibo(request, response) == -1) {
                            if (VerificarParametrosPartida(request, response))
                                EditarPartida(request, response);
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    } else if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("BORR_PART")) {
                        if (AgregarCabeceroRecibo(request, response) == -1) {
                            BorrarPartida(request, response);
                        }
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    } else // Como el subproceso no es ENVIAR ni AGR_PART ni EDIT_PART ni BORR_PART, abre la ventana del proceso de AGREGADO para agregar `por primera vez
                    {
                        HttpSession ses = request.getSession(true);
                        JNomMovDirSes rec = (JNomMovDirSes) ses.getAttribute("nom_nomina_dlg");
                        if (rec == null) {
                            rec = new JNomMovDirSes();
                            ses.setAttribute("nom_nomina_dlg", rec);
                        } else
                            rec.resetear();

                        //Llena el empleado
                        JCalculoNominaEspSet set = new JCalculoNominaEspSet(request);
                        set.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                                + p(request.getParameter("idempleado")) + "'";
                        set.Open();

                        rec.setID_Empleado(set.getAbsRow(0).getID_Empleado());
                        rec.setNombre(set.getAbsRow(0).getNombre());
                        rec.setFaltas(set.getAbsRow(0).getFaltas());
                        rec.setHE(set.getAbsRow(0).getHE());
                        rec.setHD(set.getAbsRow(0).getHD());
                        rec.setHT(set.getAbsRow(0).getHT());
                        rec.setIXA(set.getAbsRow(0).getIXA());
                        rec.setIXE(set.getAbsRow(0).getIXE());
                        rec.setIXM(set.getAbsRow(0).getIXM());
                        rec.setRecibo(set.getAbsRow(0).getRecibo());
                        rec.setDiasHorasExtras(set.getAbsRow(0).getDiasHorasExtras());

                        JCalculoNominaDetSet dset = new JCalculoNominaDetSet(request);
                        dset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                                + p(request.getParameter("idempleado")) + "'";
                        dset.Open();

                        for (int i = 0; i < dset.getNumRows(); i++) {
                            rec.agregaPartida(dset.getAbsRow(i).getID_Movimiento(),
                                    dset.getAbsRow(i).getDescripcion(), dset.getAbsRow(i).getGravado(),
                                    dset.getAbsRow(i).getExento(), dset.getAbsRow(i).getDeduccion(),
                                    dset.getAbsRow(i).getEsDeduccion());
                        }
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/nomina/nom_nomina_dlg_emp.jsp", request, response);
                        return;
                    }

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("BORR_EMP")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA_CAMBIAR")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA_CAMBIAR");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA_CAMBIAR", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            JNominasModuloSet setnom = new JNominasModuloSet(request);
            setnom.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "'";
            setnom.Open();

            if (setnom.getAbsRow(0).getCerrado() || setnom.getAbsRow(0).getStatus().equals("C")) {
                idmensaje = 3;
                mensaje += "ERROR: No se puede borrar el recibo porque la nmina ya est protegida o est cancelada.<br>";
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    JCalculoNominaEspSet cset = new JCalculoNominaEspSet(request);
                    cset.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    cset.Open();
                    if (cset.getAbsRow(0).getTFD() >= 2) {
                        idmensaje = 3;
                        mensaje += "ERROR: No se puede eliminar el recibo porque ya tiene un CFDI enlazado.<br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    EliminarEmp(request, response);
                    return;
                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("IMPRIMIR")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    //Solicitud de envio a procesar
                    if (request.getParameter("subproceso") != null
                            && request.getParameter("subproceso").equals("IMPRESION")) {
                        // Impresion
                        StringBuffer bsmensaje = new StringBuffer(254);
                        String SQLCab = "select * from view_nomina_recibos_impcab where ID_Nomina = "
                                + request.getParameter("id") + " and ID_Empleado = '"
                                + request.getParameter("idempleado") + "'";
                        String SQLDet = "select * from view_nomina_recibos_impdet where ID_Nomina = "
                                + request.getParameter("id") + " and ID_Empleado = '"
                                + request.getParameter("idempleado")
                                + "' order by esdeduccion asc, id_movimiento asc";

                        idmensaje = Imprimir(SQLCab, SQLDet, request.getParameter("idformato"), bsmensaje,
                                request, response);

                        if (idmensaje != -1) {
                            getSesion(request).setID_Mensaje(idmensaje, bsmensaje.toString());
                            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                            return;
                        }

                    } else {
                        request.setAttribute("impresion", "CEFNomMovDirDlg");
                        request.setAttribute("tipo_imp", "NOM_NOMINA");
                        request.setAttribute("formato_default", setids.getAbsRow(0).getFmt_Recibo());

                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/impresion_dlg.jsp", request, response);
                        return;
                    }

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("ENVIAR_RECIBO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    //Solicitud de envio a procesar
                    JCalculoNominaEspSet SetMod = new JCalculoNominaEspSet(request);
                    SetMod.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    SetMod.Open();

                    if (SetMod.getAbsRow(0).getTFD() != 3) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Este recibo no est&aacute; sellado completamente, no se puede enviar <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JMasempSet set = new JMasempSet(request);
                    set.m_Where = "ID_Empleado = '" + p(request.getParameter("idempleado")) + "'";
                    set.Open();
                    if (set.getAbsRow(0).getSMTP() == 0) // Maneja smtp manual o automtico
                    {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Este empleado no esta confgurado para recibir sus recibos por correo <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;

                    }

                    JFsiSMTPClient smtp = new JFsiSMTPClient();
                    smtp.enviarCFDIMPE(request, "NOM", request.getParameter("id"),
                            request.getParameter("idempleado"), set.getAbsRow(0).getNombre(),
                            set.getAbsRow(0).getEMail());
                    if (smtp.getStatusSMTP() == JFsiSMTPClient.ERROR) {
                        idmensaje = 3;
                        mensaje += "ERROR: " + smtp.getError();
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    getSesion(request).setID_Mensaje((short) 0, "El correo se ha mandado satisfactoriamente");
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("XML_RECIBO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    //Solicitud de envio a procesar
                    JCalculoNominaEspSet SetMod = new JCalculoNominaEspSet(request);
                    SetMod.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    SetMod.Open();

                    if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Este recibo no est&aacute; sellado completamente, no hay nada que bajar <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JCFDCompSet cfd = new JCFDCompSet(request, "NOMINA");
                    cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                    cfd.Open();

                    String nombre, destino;

                    if (cfd.getNumRows() > 0)
                        nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania() + "/nom/TFDs/"
                                + cfd.getAbsRow(0).getUUID() + ".xml";
                    else // Es CFDI generado internamente
                    {
                        nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania()
                                + "/TFDs/SIGN_NOM-" + request.getParameter("id") + "-"
                                + request.getParameter("idempleado") + ".xml";
                    }

                    destino = "NOM-" + SetMod.getAbsRow(0).getID_Nomina() + "-"
                            + SetMod.getAbsRow(0).getRecibo() + ".xml";

                    JBajarArchivo fd = new JBajarArchivo();

                    fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                    idmensaje = 0;
                    mensaje = "El recibo se bajo satisfactoriamente";
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else if (request.getParameter("proceso").equals("PDF_RECIBO")) {
            // Revisa si tiene permisos
            if (!getSesion(request).getPermiso("NOM_NOMINA")) {
                idmensaje = 3;
                mensaje += MsjPermisoDenegado(request, "CEF", "NOM_NOMINA");
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                RDP("CEF", getSesion(request).getConBD(), "NA", getSesion(request).getID_Usuario(),
                        "NOM_NOMINA", "NNOM||||", mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

            if (request.getParameter("idempleado") != null) {
                String[] valoresParam = request.getParameterValues("idempleado");
                if (valoresParam.length == 1) {
                    //Solicitud de envio a procesar
                    JCalculoNominaEspSet SetMod = new JCalculoNominaEspSet(request);
                    SetMod.m_Where = "ID_Nomina = '" + p(request.getParameter("id")) + "' and ID_Empleado = '"
                            + p(request.getParameter("idempleado")) + "'";
                    SetMod.Open();

                    if (SetMod.getAbsRow(0).getTFD() != 3 || SetMod.getAbsRow(0).getID_CFD() == 0) {
                        idmensaje = 1;
                        mensaje += "PRECAUCION: Este recibo no est&aacute; sellado completamente, no hay nada que bajar <br>";
                        getSesion(request).setID_Mensaje(idmensaje, mensaje);
                        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                        return;
                    }

                    JCFDCompSet cfd = new JCFDCompSet(request, "NOMINA");
                    cfd.m_Where = "ID_CFD = '" + SetMod.getAbsRow(0).getID_CFD() + "'";
                    cfd.Open();

                    String nombre, destino;

                    if (cfd.getNumRows() > 0)
                        nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania() + "/nom/PDFs/"
                                + cfd.getAbsRow(0).getUUID() + ".pdf";
                    else
                        nombre = "/usr/local/forseti/emp/" + getSesion(request).getBDCompania() + "/PDFs/NOM-"
                                + request.getParameter("id") + "-" + request.getParameter("idempleado")
                                + ".pdf";

                    destino = "NOM-" + SetMod.getAbsRow(0).getID_Nomina() + "-"
                            + SetMod.getAbsRow(0).getRecibo() + ".pdf";

                    JBajarArchivo fd = new JBajarArchivo();

                    fd.doDownload(response, getServletConfig().getServletContext(), nombre, destino);

                    idmensaje = 0;
                    mensaje = "El recibo se bajo satisfactoriamente";
                    return;

                } else {
                    idmensaje = 1;
                    mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 2);
                    getSesion(request).setID_Mensaje(idmensaje, mensaje);
                    irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                    return;
                }
            } else {
                idmensaje = 3;
                mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 1);
                getSesion(request).setID_Mensaje(idmensaje, mensaje);
                irApag("/forsetiweb/caja_mensajes.jsp", request, response);
                return;
            }

        } else {
            idmensaje = 3;
            mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 3);
            getSesion(request).setID_Mensaje(idmensaje, mensaje);
            irApag("/forsetiweb/caja_mensajes.jsp", request, response);
            return;
        }

    } else // si no se mandan parametros, manda a error
    {
        idmensaje = 3;
        mensaje += JUtil.Msj("GLB", "VISTA", "GLB", "SELEC-PROC", 3);
        getSesion(request).setID_Mensaje(idmensaje, mensaje);
        irApag("/forsetiweb/caja_mensajes.jsp", request, response);
        return;
    }

}

From source file:com.netscape.ca.CertificateAuthority.java

/**
 * Process OCSPRequest./*from   w  w w  .j  ava  2 s.  co m*/
 */
public OCSPResponse validate(OCSPRequest request) throws EBaseException {

    if (!mEnableOCSP) {
        logger.debug("CertificateAuthority: OCSP service disabled");
        throw new EBaseException("OCSP service disabled");
    }

    TBSRequest tbsReq = request.getTBSRequest();
    if (tbsReq.getRequestCount() == 0) {
        logger.error("CertificateAuthority: No request found");
        log(ILogger.LL_FAILURE, CMS.getLogMessage("OCSP_REQUEST_FAILURE", "No Request Found"));
        throw new EBaseException("OCSP request is empty");
    }

    /* An OCSP request can contain CertIDs for certificates
     * issued by different CAs, but each SingleResponse is valid
     * only if the combined response was signed by its issuer or
     * an authorised OCSP signing delegate.
     *
     * Even though it is silly to send an OCSP request
     * asking about certs issued by different CAs, we must
     * employ some heuristic to deal with this case. Our
     * heuristic is:
     *
     * 0. If caMap contains no CAs, then lightweight CAs are not
     *    enabled.  There is only one CA, and 'this' is it.  Go
     *    straight to validation.
     *
     * 1. Find the issuer of the cert identified by the first
     *    CertID in the request.
     *
     * 2. If this CA is *not* the issuer, look up the issuer
     *    by its DN in the caMap.  If not found, fail.  If
     *    found, dispatch to its 'validate' method.  Otherwise
     *    continue.
     *
     * 3. If this CA is NOT the issuing CA, we locate the
     *    issuing CA and dispatch to its 'validate' method.
     *    Otherwise, we move forward to generate and sign the
     *    aggregate OCSP response.
     */
    ICertificateAuthority ocspCA = this;
    if (caMap.size() > 0 && tbsReq.getRequestCount() > 0) {
        Request req = tbsReq.getRequestAt(0);
        BigInteger serialNo = req.getCertID().getSerialNumber();
        X509CertImpl cert = mCertRepot.getX509Certificate(serialNo);
        X500Name certIssuerDN = (X500Name) cert.getIssuerDN();
        ocspCA = getCA(certIssuerDN);
    }

    if (ocspCA == null) {
        logger.error("CertificateAuthority: Could not locate issuing CA");
        throw new CANotFoundException("Could not locate issuing CA");
    }

    if (ocspCA != this)
        return ((IOCSPService) ocspCA).validate(request);

    logger.debug("CertificateAuthority: validating OCSP request");

    mNumOCSPRequest++;
    IStatsSubsystem statsSub = (IStatsSubsystem) CMS.getSubsystem("stats");
    long startTime = CMS.getCurrentDate().getTime();

    try {
        //log(ILogger.LL_INFO, "start OCSP request");

        // (3) look into database to check the
        //     certificate's status
        Vector<SingleResponse> singleResponses = new Vector<SingleResponse>();

        if (statsSub != null) {
            statsSub.startTiming("lookup");
        }

        long lookupStartTime = CMS.getCurrentDate().getTime();

        for (int i = 0; i < tbsReq.getRequestCount(); i++) {
            Request req = tbsReq.getRequestAt(i);
            SingleResponse sr = processRequest(req);
            singleResponses.addElement(sr);
        }

        long lookupEndTime = CMS.getCurrentDate().getTime();
        mLookupTime += lookupEndTime - lookupStartTime;

        if (statsSub != null) {
            statsSub.endTiming("lookup");
        }

        if (statsSub != null) {
            statsSub.startTiming("build_response");
        }

        SingleResponse res[] = new SingleResponse[singleResponses.size()];
        singleResponses.copyInto(res);

        ResponderID rid = null;

        if (mByName) {
            if (mResponderIDByName == null) {
                mResponderIDByName = getResponderIDByName();
            }
            rid = mResponderIDByName;
        } else {
            if (mResponderIDByHash == null) {
                mResponderIDByHash = getResponderIDByHash();
            }
            rid = mResponderIDByHash;
        }

        Extension nonce[] = null;

        for (int j = 0; j < tbsReq.getExtensionsCount(); j++) {
            Extension thisExt = tbsReq.getRequestExtensionAt(j);

            if (thisExt.getExtnId().equals(OCSP_NONCE)) {
                nonce = new Extension[1];
                nonce[0] = thisExt;
            }
        }

        ResponseData rd = new ResponseData(rid, new GeneralizedTime(CMS.getCurrentDate()), res, nonce);

        if (statsSub != null) {
            statsSub.endTiming("build_response");
        }

        if (statsSub != null) {
            statsSub.startTiming("signing");
        }

        long signStartTime = CMS.getCurrentDate().getTime();

        BasicOCSPResponse basicRes = sign(rd);

        long signEndTime = CMS.getCurrentDate().getTime();
        mSignTime += signEndTime - signStartTime;

        if (statsSub != null) {
            statsSub.endTiming("signing");
        }

        OCSPResponse response = new OCSPResponse(OCSPResponseStatus.SUCCESSFUL,
                new ResponseBytes(ResponseBytes.OCSP_BASIC, new OCTET_STRING(ASN1Util.encode(basicRes))));

        //log(ILogger.LL_INFO, "done OCSP request");
        long endTime = CMS.getCurrentDate().getTime();
        mTotalTime += endTime - startTime;

        return response;

    } catch (EBaseException e) {
        log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_CA_CA_OCSP_REQUEST", e.toString()));
        throw e;
    }
}

From source file:com.concursive.connect.web.webdav.servlets.WebdavServlet.java

/**
 * LOCK Method.//from w w  w.  jav  a  2  s.  co  m
 *
 * @param req  Description of the Parameter
 * @param resp Description of the Parameter
 * @throws javax.servlet.ServletException Description of the Exception
 * @throws java.io.IOException            Description of the Exception
 */
protected void doLock(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    if (readOnly) {
        resp.sendError(WebdavStatus.SC_FORBIDDEN);
        return;
    }

    if (isLocked(req)) {
        resp.sendError(WebdavStatus.SC_LOCKED);
        return;
    }

    WebdavServlet.LockInfo lock = new WebdavServlet.LockInfo();

    // Parsing lock request

    // Parsing depth header

    String depthStr = req.getHeader("Depth");

    if (depthStr == null) {
        lock.depth = INFINITY;
    } else {
        if (depthStr.equals("0")) {
            lock.depth = 0;
        } else {
            lock.depth = INFINITY;
        }
    }

    // Parsing timeout header

    int lockDuration = DEFAULT_TIMEOUT;
    String lockDurationStr = req.getHeader("Timeout");
    if (lockDurationStr == null) {
        lockDuration = DEFAULT_TIMEOUT;
    } else {
        int commaPos = lockDurationStr.indexOf(",");
        // If multiple timeouts, just use the first
        if (commaPos != -1) {
            lockDurationStr = lockDurationStr.substring(0, commaPos);
        }
        if (lockDurationStr.startsWith("Second-")) {
            lockDuration = (new Integer(lockDurationStr.substring(7))).intValue();
        } else {
            if (lockDurationStr.equalsIgnoreCase("infinity")) {
                lockDuration = MAX_TIMEOUT;
            } else {
                try {
                    lockDuration = (new Integer(lockDurationStr)).intValue();
                } catch (NumberFormatException e) {
                    lockDuration = MAX_TIMEOUT;
                }
            }
        }
        if (lockDuration == 0) {
            lockDuration = DEFAULT_TIMEOUT;
        }
        if (lockDuration > MAX_TIMEOUT) {
            lockDuration = MAX_TIMEOUT;
        }
    }
    lock.expiresAt = System.currentTimeMillis() + (lockDuration * 1000);

    int lockRequestType = LOCK_CREATION;

    Node lockInfoNode = null;

    DocumentBuilder documentBuilder = getDocumentBuilder();

    try {
        Document document = documentBuilder.parse(new InputSource(req.getInputStream()));

        // Get the root element of the document
        Element rootElement = document.getDocumentElement();
        lockInfoNode = rootElement;
    } catch (Exception e) {
        lockRequestType = LOCK_REFRESH;
    }

    if (lockInfoNode != null) {

        // Reading lock information

        NodeList childList = lockInfoNode.getChildNodes();
        StringWriter strWriter = null;
        DOMWriter domWriter = null;

        Node lockScopeNode = null;
        Node lockTypeNode = null;
        Node lockOwnerNode = null;

        for (int i = 0; i < childList.getLength(); i++) {
            Node currentNode = childList.item(i);
            switch (currentNode.getNodeType()) {
            case Node.TEXT_NODE:
                break;
            case Node.ELEMENT_NODE:
                String nodeName = currentNode.getNodeName();
                if (nodeName.endsWith("lockscope")) {
                    lockScopeNode = currentNode;
                }
                if (nodeName.endsWith("locktype")) {
                    lockTypeNode = currentNode;
                }
                if (nodeName.endsWith("owner")) {
                    lockOwnerNode = currentNode;
                }
                break;
            }
        }

        if (lockScopeNode != null) {

            childList = lockScopeNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    break;
                case Node.ELEMENT_NODE:
                    String tempScope = currentNode.getNodeName();
                    if (tempScope.indexOf(':') != -1) {
                        lock.scope = tempScope.substring(tempScope.indexOf(':') + 1);
                    } else {
                        lock.scope = tempScope;
                    }
                    break;
                }
            }

            if (lock.scope == null) {
                // Bad request
                resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
            }
        } else {
            // Bad request
            resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
        }

        if (lockTypeNode != null) {

            childList = lockTypeNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    break;
                case Node.ELEMENT_NODE:
                    String tempType = currentNode.getNodeName();
                    if (tempType.indexOf(':') != -1) {
                        lock.type = tempType.substring(tempType.indexOf(':') + 1);
                    } else {
                        lock.type = tempType;
                    }
                    break;
                }
            }

            if (lock.type == null) {
                // Bad request
                resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
            }
        } else {
            // Bad request
            resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
        }

        if (lockOwnerNode != null) {

            childList = lockOwnerNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    lock.owner += currentNode.getNodeValue();
                    break;
                case Node.ELEMENT_NODE:
                    strWriter = new StringWriter();
                    domWriter = new DOMWriter(strWriter, true);
                    domWriter.setQualifiedNames(false);
                    domWriter.print(currentNode);
                    lock.owner += strWriter.toString();
                    break;
                }
            }

            if (lock.owner == null) {
                // Bad request
                resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
            }
        } else {
            lock.owner = new String();
        }

    }

    String path = getRelativePath(req);

    lock.path = path;

    // Retrieve the resources
    DirContext resources = getResources();

    if (resources == null) {
        resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return;
    }

    boolean exists = true;
    Object object = null;
    try {
        object = resources.lookup(path);
    } catch (NamingException e) {
        exists = false;
    }

    Enumeration locksList = null;

    if (lockRequestType == LOCK_CREATION) {

        // Generating lock id
        String lockTokenStr = req.getServletPath() + "-" + lock.type + "-" + lock.scope + "-"
                + req.getUserPrincipal() + "-" + lock.depth + "-" + lock.owner + "-" + lock.tokens + "-"
                + lock.expiresAt + "-" + System.currentTimeMillis() + "-" + secret;
        String lockToken = md5Encoder.encode(md5Helper.digest(lockTokenStr.getBytes()));

        if ((exists) && (object instanceof DirContext) && (lock.depth == INFINITY)) {

            // Locking a collection (and all its member resources)

            // Checking if a child resource of this collection is
            // already locked
            Vector lockPaths = new Vector();
            locksList = collectionLocks.elements();
            while (locksList.hasMoreElements()) {
                WebdavServlet.LockInfo currentLock = (WebdavServlet.LockInfo) locksList.nextElement();
                if (currentLock.hasExpired()) {
                    resourceLocks.remove(currentLock.path);
                    continue;
                }
                if ((currentLock.path.startsWith(lock.path))
                        && ((currentLock.isExclusive()) || (lock.isExclusive()))) {
                    // A child collection of this collection is locked
                    lockPaths.addElement(currentLock.path);
                }
            }
            locksList = resourceLocks.elements();
            while (locksList.hasMoreElements()) {
                WebdavServlet.LockInfo currentLock = (WebdavServlet.LockInfo) locksList.nextElement();
                if (currentLock.hasExpired()) {
                    resourceLocks.remove(currentLock.path);
                    continue;
                }
                if ((currentLock.path.startsWith(lock.path))
                        && ((currentLock.isExclusive()) || (lock.isExclusive()))) {
                    // A child resource of this collection is locked
                    lockPaths.addElement(currentLock.path);
                }
            }

            if (!lockPaths.isEmpty()) {

                // One of the child paths was locked
                // We generate a multistatus error report

                Enumeration lockPathsList = lockPaths.elements();

                resp.setStatus(WebdavStatus.SC_CONFLICT);

                XMLWriter generatedXML = new XMLWriter();
                generatedXML.writeXMLHeader();

                generatedXML.writeElement(null, "multistatus" + generateNamespaceDeclarations(),
                        XMLWriter.OPENING);

                while (lockPathsList.hasMoreElements()) {
                    generatedXML.writeElement(null, "response", XMLWriter.OPENING);
                    generatedXML.writeElement(null, "href", XMLWriter.OPENING);
                    generatedXML.writeText((String) lockPathsList.nextElement());
                    generatedXML.writeElement(null, "href", XMLWriter.CLOSING);
                    generatedXML.writeElement(null, "status", XMLWriter.OPENING);
                    generatedXML.writeText("HTTP/1.1 " + WebdavStatus.SC_LOCKED + " "
                            + WebdavStatus.getStatusText(WebdavStatus.SC_LOCKED));
                    generatedXML.writeElement(null, "status", XMLWriter.CLOSING);

                    generatedXML.writeElement(null, "response", XMLWriter.CLOSING);
                }

                generatedXML.writeElement(null, "multistatus", XMLWriter.CLOSING);

                Writer writer = resp.getWriter();
                writer.write(generatedXML.toString());
                writer.close();

                return;
            }

            boolean addLock = true;

            // Checking if there is already a shared lock on this path
            locksList = collectionLocks.elements();
            while (locksList.hasMoreElements()) {

                WebdavServlet.LockInfo currentLock = (WebdavServlet.LockInfo) locksList.nextElement();
                if (currentLock.path.equals(lock.path)) {

                    if (currentLock.isExclusive()) {
                        resp.sendError(WebdavStatus.SC_LOCKED);
                        return;
                    } else {
                        if (lock.isExclusive()) {
                            resp.sendError(WebdavStatus.SC_LOCKED);
                            return;
                        }
                    }

                    currentLock.tokens.addElement(lockToken);
                    lock = currentLock;
                    addLock = false;

                }
            }

            if (addLock) {
                lock.tokens.addElement(lockToken);
                collectionLocks.addElement(lock);
            }
        } else {

            // Locking a single resource

            // Retrieving an already existing lock on that resource
            WebdavServlet.LockInfo presentLock = (WebdavServlet.LockInfo) resourceLocks.get(lock.path);
            if (presentLock != null) {

                if ((presentLock.isExclusive()) || (lock.isExclusive())) {
                    // If either lock is exclusive, the lock can't be
                    // granted
                    resp.sendError(WebdavStatus.SC_PRECONDITION_FAILED);
                    return;
                } else {
                    presentLock.tokens.addElement(lockToken);
                    lock = presentLock;
                }

            } else {

                lock.tokens.addElement(lockToken);
                resourceLocks.put(lock.path, lock);

                // Checking if a resource exists at this path
                exists = true;
                try {
                    object = resources.lookup(path);
                } catch (NamingException e) {
                    exists = false;
                }
                if (!exists) {

                    // "Creating" a lock-null resource
                    int slash = lock.path.lastIndexOf('/');
                    String parentPath = lock.path.substring(0, slash);

                    Vector lockNulls = (Vector) lockNullResources.get(parentPath);
                    if (lockNulls == null) {
                        lockNulls = new Vector();
                        lockNullResources.put(parentPath, lockNulls);
                    }

                    lockNulls.addElement(lock.path);

                }
                // Add the Lock-Token header as by RFC 2518 8.10.1
                // - only do this for newly created locks
                resp.addHeader("Lock-Token", "<opaquelocktoken:" + lockToken + ">");
            }

        }

    }

    if (lockRequestType == LOCK_REFRESH) {

        String ifHeader = req.getHeader("If");
        if (ifHeader == null) {
            ifHeader = "";
        }

        // Checking resource locks

        WebdavServlet.LockInfo toRenew = (WebdavServlet.LockInfo) resourceLocks.get(path);
        Enumeration tokenList = null;
        if (lock != null) {

            // At least one of the tokens of the locks must have been given

            tokenList = toRenew.tokens.elements();
            while (tokenList.hasMoreElements()) {
                String token = (String) tokenList.nextElement();
                if (ifHeader.indexOf(token) != -1) {
                    toRenew.expiresAt = lock.expiresAt;
                    lock = toRenew;
                }
            }

        }

        // Checking inheritable collection locks

        Enumeration collectionLocksList = collectionLocks.elements();
        while (collectionLocksList.hasMoreElements()) {
            toRenew = (WebdavServlet.LockInfo) collectionLocksList.nextElement();
            if (path.equals(toRenew.path)) {

                tokenList = toRenew.tokens.elements();
                while (tokenList.hasMoreElements()) {
                    String token = (String) tokenList.nextElement();
                    if (ifHeader.indexOf(token) != -1) {
                        toRenew.expiresAt = lock.expiresAt;
                        lock = toRenew;
                    }
                }

            }
        }

    }

    // Set the status, then generate the XML response containing
    // the lock information
    XMLWriter generatedXML = new XMLWriter();
    generatedXML.writeXMLHeader();
    generatedXML.writeElement(null, "prop" + generateNamespaceDeclarations(), XMLWriter.OPENING);

    generatedXML.writeElement(null, "lockdiscovery", XMLWriter.OPENING);

    lock.toXML(generatedXML);

    generatedXML.writeElement(null, "lockdiscovery", XMLWriter.CLOSING);

    generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);

    resp.setStatus(WebdavStatus.SC_OK);
    resp.setContentType("text/xml; charset=UTF-8");
    Writer writer = resp.getWriter();
    writer.write(generatedXML.toString());
    writer.close();

}

From source file:com.concursive.connect.web.webdav.servlets.WebdavServlet.java

/**
 * Propfind helper method./*www .  jav  a 2s .  c  o  m*/
 *
 * @param resources        Resources object associated with this context
 * @param generatedXML     XML response to the Propfind request
 * @param path             Path of the current resource
 * @param type             Propfind type
 * @param propertiesVector If the propfind type is find properties by name,
 *                         then this Vector contains those properties
 * @param context          Description of the Parameter
 * @throws java.io.IOException Description of the Exception
 */
private void parseProperties(ActionContext context, ModuleContext resources, XMLWriter generatedXML,
        String path, int type, Vector propertiesVector) throws IOException {

    // Exclude any resource in the /WEB-INF and /META-INF subdirectories
    // (the "toUpperCase()" avoids problems on Windows systems)
    if (path.toUpperCase().startsWith("/WEB-INF") || path.toUpperCase().startsWith("/META-INF")) {
        return;
    }

    Connection db = null;
    ResourceInfo resourceInfo = null;
    boolean actionStatus = true;
    try {
        db = this.getConnection(context);
        resourceInfo = new ResourceInfo(db, path, resources);
    } catch (SQLException e) {
        e.printStackTrace(System.out);
        context.getResponse().sendError(SQLERROR, e.getMessage());
        actionStatus = false;
    } catch (FileNotFoundException e) {
        e.printStackTrace(System.out);
        actionStatus = false;
    } finally {
        this.freeConnection(db, context);
    }

    if (!actionStatus) {
        return;
    }

    generatedXML.writeElement(null, "response", XMLWriter.OPENING);
    String status = new String(
            "HTTP/1.1 " + WebdavStatus.SC_OK + " " + WebdavStatus.getStatusText(WebdavStatus.SC_OK));

    // Generating href element
    generatedXML.writeElement(null, "href", XMLWriter.OPENING);

    String href = context.getRequest().getContextPath();
    if ((href.endsWith("/")) && (path.startsWith("/"))) {
        href += path.substring(1);
    } else {
        href += path;
    }
    if ((resourceInfo.collection) && (!href.endsWith("/"))) {
        href += "/";
    }

    generatedXML.writeText(rewriteUrl(href));
    generatedXML.writeElement(null, "href", XMLWriter.CLOSING);

    String resourceName = path;
    int lastSlash = path.lastIndexOf('/');
    if (lastSlash != -1) {
        resourceName = resourceName.substring(lastSlash + 1);
    }

    switch (type) {

    case FIND_ALL_PROP:

        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        generatedXML.writeProperty(null, "creationdate", getISOCreationDate(resourceInfo.creationDate));
        generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
        generatedXML.writeData(resourceName);
        generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
        if (!resourceInfo.collection) {
            generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
            generatedXML.writeProperty(null, "getcontentlength", String.valueOf(resourceInfo.length));
            String contentType = getServletContext().getMimeType(resourceInfo.path);
            if (contentType != null) {
                generatedXML.writeProperty(null, "getcontenttype", contentType);
            }
            generatedXML.writeProperty(null, "getetag", getETag(resourceInfo));
            generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        } else {
            generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
            generatedXML.writeElement(null, "collection", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
        }

        generatedXML.writeProperty(null, "source", "");

        String supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
        generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
        generatedXML.writeText(supportedLocks);
        generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);

        generateLockDiscovery(path, generatedXML);

        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);

        break;
    case FIND_PROPERTY_NAMES:
        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        generatedXML.writeElement(null, "creationdate", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "displayname", XMLWriter.NO_CONTENT);
        if (!resourceInfo.collection) {
            generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getcontentlength", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getcontenttype", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getetag", XMLWriter.NO_CONTENT);
            generatedXML.writeElement(null, "getlastmodified", XMLWriter.NO_CONTENT);
        }
        generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "source", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "lockdiscovery", XMLWriter.NO_CONTENT);
        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        break;
    case FIND_BY_PROPERTY:
        Vector propertiesNotFound = new Vector();
        // Parse the list of properties
        generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
        generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
        Enumeration properties = propertiesVector.elements();
        while (properties.hasMoreElements()) {
            String property = (String) properties.nextElement();
            if (property.equals("creationdate")) {
                generatedXML.writeProperty(null, "creationdate", getISOCreationDate(resourceInfo.creationDate));
            } else if (property.equals("displayname")) {
                generatedXML.writeElement(null, "displayname", XMLWriter.OPENING);
                generatedXML.writeData(resourceName);
                generatedXML.writeElement(null, "displayname", XMLWriter.CLOSING);
            } else if (property.equals("getcontentlanguage")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeElement(null, "getcontentlanguage", XMLWriter.NO_CONTENT);
                }
            } else if (property.equals("getcontentlength")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getcontentlength", (String.valueOf(resourceInfo.length)));
                }
            } else if (property.equals("getcontenttype")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getcontenttype",
                            getServletContext().getMimeType(resourceInfo.path));
                }
            } else if (property.equals("getetag")) {
                if (resourceInfo.collection) {
                    propertiesNotFound.addElement(property);
                } else {
                    generatedXML.writeProperty(null, "getetag", getETag(resourceInfo));
                }
            } else if (property.equals("getlastmodified")) {
                if (resourceInfo.collection) {
                    //propertiesNotFound.addElement(property);
                    // change
                    generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
                } else {
                    generatedXML.writeProperty(null, "getlastmodified", resourceInfo.httpDate);
                }
            } else if (property.equals("resourcetype")) {
                if (resourceInfo.collection) {
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.OPENING);
                    generatedXML.writeElement(null, "collection", XMLWriter.NO_CONTENT);
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.CLOSING);
                } else {
                    generatedXML.writeElement(null, "resourcetype", XMLWriter.NO_CONTENT);
                }
            } else if (property.equals("source")) {
                generatedXML.writeProperty(null, "source", "");
            } else if (property.equals("supportedlock")) {
                supportedLocks = "<lockentry>" + "<lockscope><exclusive/></lockscope>"
                        + "<locktype><write/></locktype>" + "</lockentry>" + "<lockentry>"
                        + "<lockscope><shared/></lockscope>" + "<locktype><write/></locktype>" + "</lockentry>";
                generatedXML.writeElement(null, "supportedlock", XMLWriter.OPENING);
                generatedXML.writeText(supportedLocks);
                generatedXML.writeElement(null, "supportedlock", XMLWriter.CLOSING);
            } else if (property.equals("lockdiscovery")) {
                if (!generateLockDiscovery(path, generatedXML)) {
                    propertiesNotFound.addElement(property);
                }
            } else {
                propertiesNotFound.addElement(property);
            }
        }
        generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "status", XMLWriter.OPENING);
        generatedXML.writeText(status);
        generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
        generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        Enumeration propertiesNotFoundList = propertiesNotFound.elements();
        if (propertiesNotFoundList.hasMoreElements()) {
            status = new String("HTTP/1.1 " + WebdavStatus.SC_NOT_FOUND + " "
                    + WebdavStatus.getStatusText(WebdavStatus.SC_NOT_FOUND));
            generatedXML.writeElement(null, "propstat", XMLWriter.OPENING);
            generatedXML.writeElement(null, "prop", XMLWriter.OPENING);
            while (propertiesNotFoundList.hasMoreElements()) {
                generatedXML.writeElement(null, (String) propertiesNotFoundList.nextElement(),
                        XMLWriter.NO_CONTENT);
            }
            generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "status", XMLWriter.OPENING);
            generatedXML.writeText(status);
            generatedXML.writeElement(null, "status", XMLWriter.CLOSING);
            generatedXML.writeElement(null, "propstat", XMLWriter.CLOSING);
        }
        break;
    }
    generatedXML.writeElement(null, "response", XMLWriter.CLOSING);
}

From source file:com.zeroio.webdav.WebdavServlet.java

/**
 * LOCK Method.// ww w .j ava 2  s .c  o  m
 *
 * @param context Description of the Parameter
 * @throws ServletException Description of the Exception
 * @throws IOException      Description of the Exception
 */
protected void doLock(ActionContext context) throws ServletException, IOException {

    if (readOnly) {
        context.getResponse().sendError(WebdavStatus.SC_FORBIDDEN);
        return;
    }

    if (isLocked(context.getRequest())) {
        context.getResponse().sendError(WebdavStatus.SC_LOCKED);
        return;
    }

    LockInfo lock = new LockInfo();

    // Parsing lock request

    // Parsing depth header

    String depthStr = context.getRequest().getHeader("Depth");

    if (depthStr == null) {
        lock.depth = INFINITY;
    } else {
        if (depthStr.equals("0")) {
            lock.depth = 0;
        } else {
            lock.depth = INFINITY;
        }
    }
    // Parsing timeout header

    int lockDuration = DEFAULT_TIMEOUT;
    String lockDurationStr = context.getRequest().getHeader("Timeout");
    if (lockDurationStr == null) {
        lockDuration = DEFAULT_TIMEOUT;
    } else {
        int commaPos = lockDurationStr.indexOf(",");
        // If multiple timeouts, just use the first
        if (commaPos != -1) {
            lockDurationStr = lockDurationStr.substring(0, commaPos);
        }
        if (lockDurationStr.startsWith("Second-")) {
            lockDuration = (new Integer(lockDurationStr.substring(7))).intValue();
        } else {
            if (lockDurationStr.equalsIgnoreCase("infinity")) {
                lockDuration = MAX_TIMEOUT;
            } else {
                try {
                    lockDuration = (new Integer(lockDurationStr)).intValue();
                } catch (NumberFormatException e) {
                    lockDuration = MAX_TIMEOUT;
                }
            }
        }
        if (lockDuration == 0) {
            lockDuration = DEFAULT_TIMEOUT;
        }
        if (lockDuration > MAX_TIMEOUT) {
            lockDuration = MAX_TIMEOUT;
        }
    }
    lock.expiresAt = System.currentTimeMillis() + (lockDuration * 1000);

    int lockRequestType = LOCK_CREATION;

    Node lockInfoNode = null;

    DocumentBuilder documentBuilder = getDocumentBuilder();

    try {
        Document document = documentBuilder.parse(new InputSource(context.getRequest().getInputStream()));

        // Get the root element of the document
        Element rootElement = document.getDocumentElement();
        lockInfoNode = rootElement;
    } catch (Exception e) {
        lockRequestType = LOCK_REFRESH;
    }

    if (lockInfoNode != null) {

        // Reading lock information

        NodeList childList = lockInfoNode.getChildNodes();
        StringWriter strWriter = null;
        DOMWriter domWriter = null;

        Node lockScopeNode = null;
        Node lockTypeNode = null;
        Node lockOwnerNode = null;

        for (int i = 0; i < childList.getLength(); i++) {
            Node currentNode = childList.item(i);
            switch (currentNode.getNodeType()) {
            case Node.TEXT_NODE:
                break;
            case Node.ELEMENT_NODE:
                String nodeName = currentNode.getNodeName();
                if (nodeName.endsWith("lockscope")) {
                    lockScopeNode = currentNode;
                }
                if (nodeName.endsWith("locktype")) {
                    lockTypeNode = currentNode;
                }
                if (nodeName.endsWith("owner")) {
                    lockOwnerNode = currentNode;
                }
                break;
            }
        }

        if (lockScopeNode != null) {

            childList = lockScopeNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    break;
                case Node.ELEMENT_NODE:
                    String tempScope = currentNode.getNodeName();
                    if (tempScope.indexOf(':') != -1) {
                        lock.scope = tempScope.substring(tempScope.indexOf(':') + 1);
                    } else {
                        lock.scope = tempScope;
                    }
                    break;
                }
            }

            if (lock.scope == null) {
                // Bad request
                context.getResponse().setStatus(WebdavStatus.SC_BAD_REQUEST);
            }
        } else {
            // Bad request
            context.getResponse().setStatus(WebdavStatus.SC_BAD_REQUEST);
        }

        if (lockTypeNode != null) {

            childList = lockTypeNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    break;
                case Node.ELEMENT_NODE:
                    String tempType = currentNode.getNodeName();
                    if (tempType.indexOf(':') != -1) {
                        lock.type = tempType.substring(tempType.indexOf(':') + 1);
                    } else {
                        lock.type = tempType;
                    }
                    break;
                }
            }

            if (lock.type == null) {
                // Bad request
                context.getResponse().setStatus(WebdavStatus.SC_BAD_REQUEST);
            }
        } else {
            // Bad request
            context.getResponse().setStatus(WebdavStatus.SC_BAD_REQUEST);
        }

        if (lockOwnerNode != null) {

            childList = lockOwnerNode.getChildNodes();
            for (int i = 0; i < childList.getLength(); i++) {
                Node currentNode = childList.item(i);
                switch (currentNode.getNodeType()) {
                case Node.TEXT_NODE:
                    lock.owner += currentNode.getNodeValue();
                    break;
                case Node.ELEMENT_NODE:
                    strWriter = new StringWriter();
                    domWriter = new DOMWriter(strWriter, true);
                    domWriter.setQualifiedNames(false);
                    domWriter.print(currentNode);
                    lock.owner += strWriter.toString();
                    break;
                }
            }

            if (lock.owner == null) {
                // Bad request
                context.getResponse().setStatus(WebdavStatus.SC_BAD_REQUEST);
            }
        } else {
            lock.owner = new String();
        }

    }

    String path = getRelativePath(context.getRequest());

    //Fix for MACOSX finder. Do not allow requests for files starting with a period
    if (path.indexOf("/.") > -1 || path.indexOf(".DS_Store") > -1) {
        return;
    }

    lock.path = path;

    // Retrieve the resources
    DirContext resources = getResources();

    if (resources == null) {
        context.getResponse().sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return;
    }

    boolean exists = true;
    Object object = null;
    try {
        object = resources.lookup(path);
    } catch (NamingException e) {
        exists = false;
    }

    Enumeration locksList = null;

    if (lockRequestType == LOCK_CREATION) {

        // Generating lock id
        String lockTokenStr = context.getRequest().getServletPath() + "-" + lock.type + "-" + lock.scope + "-"
                + context.getRequest().getUserPrincipal() + "-" + lock.depth + "-" + lock.owner + "-"
                + lock.tokens + "-" + lock.expiresAt + "-" + System.currentTimeMillis() + "-" + secret;
        String lockToken = md5Encoder.encode(md5Helper.digest(lockTokenStr.getBytes()));

        if ((exists) && (object instanceof DirContext) && (lock.depth == INFINITY)) {

            // Locking a collection (and all its member resources)

            // Checking if a child resource of this collection is
            // already locked
            Vector lockPaths = new Vector();
            locksList = collectionLocks.elements();
            while (locksList.hasMoreElements()) {
                LockInfo currentLock = (LockInfo) locksList.nextElement();
                if (currentLock.hasExpired()) {
                    resourceLocks.remove(currentLock.path);
                    continue;
                }
                if ((currentLock.path.startsWith(lock.path))
                        && ((currentLock.isExclusive()) || (lock.isExclusive()))) {
                    // A child collection of this collection is locked
                    lockPaths.addElement(currentLock.path);
                }
            }
            locksList = resourceLocks.elements();
            while (locksList.hasMoreElements()) {
                LockInfo currentLock = (LockInfo) locksList.nextElement();
                if (currentLock.hasExpired()) {
                    resourceLocks.remove(currentLock.path);
                    continue;
                }
                if ((currentLock.path.startsWith(lock.path))
                        && ((currentLock.isExclusive()) || (lock.isExclusive()))) {
                    // A child resource of this collection is locked
                    lockPaths.addElement(currentLock.path);
                }
            }

            if (!lockPaths.isEmpty()) {

                // One of the child paths was locked
                // We generate a multistatus error report

                Enumeration lockPathsList = lockPaths.elements();

                context.getResponse().setStatus(WebdavStatus.SC_CONFLICT);

                XMLWriter generatedXML = new XMLWriter();
                generatedXML.writeXMLHeader();

                generatedXML.writeElement(null, "multistatus" + generateNamespaceDeclarations(),
                        XMLWriter.OPENING);

                while (lockPathsList.hasMoreElements()) {
                    generatedXML.writeElement(null, "response", XMLWriter.OPENING);
                    generatedXML.writeElement(null, "href", XMLWriter.OPENING);
                    generatedXML.writeText((String) lockPathsList.nextElement());
                    generatedXML.writeElement(null, "href", XMLWriter.CLOSING);
                    generatedXML.writeElement(null, "status", XMLWriter.OPENING);
                    generatedXML.writeText("HTTP/1.1 " + WebdavStatus.SC_LOCKED + " "
                            + WebdavStatus.getStatusText(WebdavStatus.SC_LOCKED));
                    generatedXML.writeElement(null, "status", XMLWriter.CLOSING);

                    generatedXML.writeElement(null, "response", XMLWriter.CLOSING);
                }

                generatedXML.writeElement(null, "multistatus", XMLWriter.CLOSING);

                Writer writer = context.getResponse().getWriter();
                writer.write(generatedXML.toString());
                writer.close();

                return;
            }

            boolean addLock = true;

            // Checking if there is already a shared lock on this path
            locksList = collectionLocks.elements();
            while (locksList.hasMoreElements()) {

                LockInfo currentLock = (LockInfo) locksList.nextElement();
                if (currentLock.path.equals(lock.path)) {

                    if (currentLock.isExclusive()) {
                        context.getResponse().sendError(WebdavStatus.SC_LOCKED);
                        return;
                    } else {
                        if (lock.isExclusive()) {
                            context.getResponse().sendError(WebdavStatus.SC_LOCKED);
                            return;
                        }
                    }

                    currentLock.tokens.addElement(lockToken);
                    lock = currentLock;
                    addLock = false;

                }
            }

            if (addLock) {
                lock.tokens.addElement(lockToken);
                collectionLocks.addElement(lock);
            }
        } else {

            // Locking a single resource

            // Retrieving an already existing lock on that resource
            LockInfo presentLock = (LockInfo) resourceLocks.get(lock.path);
            if (presentLock != null) {

                if ((presentLock.isExclusive()) || (lock.isExclusive())) {
                    // If either lock is exclusive, the lock can't be
                    // granted
                    context.getResponse().sendError(WebdavStatus.SC_PRECONDITION_FAILED);
                    return;
                } else {
                    presentLock.tokens.addElement(lockToken);
                    lock = presentLock;
                }

            } else {

                lock.tokens.addElement(lockToken);
                resourceLocks.put(lock.path, lock);

                // Checking if a resource exists at this path
                exists = true;
                try {
                    object = resources.lookup(path);
                } catch (NamingException e) {
                    exists = false;
                }
                if (!exists) {

                    // "Creating" a lock-null resource
                    int slash = lock.path.lastIndexOf('/');
                    String parentPath = lock.path.substring(0, slash);

                    Vector lockNulls = (Vector) lockNullResources.get(parentPath);
                    if (lockNulls == null) {
                        lockNulls = new Vector();
                        lockNullResources.put(parentPath, lockNulls);
                    }

                    //System.out.println("ADDED LOCK AT PATH: " + lock.path);
                    lockNulls.addElement(lock.path);

                }
                // Add the Lock-Token header as by RFC 2518 8.10.1
                // - only do this for newly created locks
                context.getResponse().addHeader("Lock-Token", "<opaquelocktoken:" + lockToken + ">");
            }

        }

    }

    if (lockRequestType == LOCK_REFRESH) {

        String ifHeader = context.getRequest().getHeader("If");
        if (ifHeader == null) {
            ifHeader = "";
        }

        // Checking resource locks

        LockInfo toRenew = (LockInfo) resourceLocks.get(path);
        Enumeration tokenList = null;
        if (lock != null) {

            // At least one of the tokens of the locks must have been given

            tokenList = toRenew.tokens.elements();
            while (tokenList.hasMoreElements()) {
                String token = (String) tokenList.nextElement();
                if (ifHeader.indexOf(token) != -1) {
                    toRenew.expiresAt = lock.expiresAt;
                    lock = toRenew;
                }
            }

        }

        // Checking inheritable collection locks

        Enumeration collectionLocksList = collectionLocks.elements();
        while (collectionLocksList.hasMoreElements()) {
            toRenew = (LockInfo) collectionLocksList.nextElement();
            if (path.equals(toRenew.path)) {

                tokenList = toRenew.tokens.elements();
                while (tokenList.hasMoreElements()) {
                    String token = (String) tokenList.nextElement();
                    if (ifHeader.indexOf(token) != -1) {
                        toRenew.expiresAt = lock.expiresAt;
                        lock = toRenew;
                    }
                }

            }
        }

    }

    // Set the status, then generate the XML response containing
    // the lock information
    XMLWriter generatedXML = new XMLWriter();
    generatedXML.writeXMLHeader();
    generatedXML.writeElement(null, "prop" + generateNamespaceDeclarations(), XMLWriter.OPENING);

    generatedXML.writeElement(null, "lockdiscovery", XMLWriter.OPENING);

    lock.toXML(generatedXML);

    generatedXML.writeElement(null, "lockdiscovery", XMLWriter.CLOSING);

    generatedXML.writeElement(null, "prop", XMLWriter.CLOSING);

    context.getResponse().setStatus(WebdavStatus.SC_OK);
    context.getResponse().setContentType("text/xml; charset=UTF-8");
    Writer writer = context.getResponse().getWriter();
    writer.write(generatedXML.toString());
    writer.close();

}