/** * ************************************************************************ Start Java Process * Class. instanciate the class implementing the interface ProcessCall. The class can be a * Server/Client class (when in Package org compiere.process or org.compiere.model) or a client * only class (e.g. in org.compiere.report) * * @return true if success */ private boolean startProcess() { log.fine(m_pi.toString()); boolean started = false; if (DB.isRemoteProcess()) { Server server = CConnection.get().getServer(); try { if (server != null) { // See ServerBean m_pi = server.process(m_wscctx, m_pi); log.finest("server => " + m_pi); started = true; } } catch (UndeclaredThrowableException ex) { Throwable cause = ex.getCause(); if (cause != null) { if (cause instanceof InvalidClassException) log.log( Level.SEVERE, "Version Server <> Client: " + cause.toString() + " - " + m_pi, ex); else log.log(Level.SEVERE, "AppsServer error(1b): " + cause.toString() + " - " + m_pi, ex); } else log.log(Level.SEVERE, " AppsServer error(1) - " + m_pi, ex); started = false; } catch (Exception ex) { Throwable cause = ex.getCause(); if (cause == null) cause = ex; log.log(Level.SEVERE, "AppsServer error - " + m_pi, cause); started = false; } } // Run locally if (!started && !m_IsServerProcess) { ProcessCall myObject = null; try { Class myClass = Class.forName(m_pi.getClassName()); myObject = (ProcessCall) myClass.newInstance(); if (myObject == null) m_pi.setSummary("No Instance for " + m_pi.getClassName(), true); else myObject.startProcess(m_wscctx, m_pi, m_trx); if (m_trx != null) { m_trx.commit(); m_trx.close(); } } catch (Exception e) { if (m_trx != null) { m_trx.rollback(); m_trx.close(); } m_pi.setSummary("Error starting Class " + m_pi.getClassName(), true); log.log(Level.SEVERE, m_pi.getClassName(), e); } } return !m_pi.isError(); } // startProcess
/** * ************************************************************************ Start Database Process * * @param ProcedureName PL/SQL procedure name * @return true if success */ private boolean startDBProcess(String ProcedureName) { // execute on this thread/connection log.fine(ProcedureName + "(" + m_pi.getAD_PInstance_ID() + ")"); String sql = "{call " + ProcedureName + "(?)}"; try { CallableStatement cstmt = DB.prepareCall(sql, ResultSet.CONCUR_UPDATABLE, null); // ro?? cstmt.setInt(1, m_pi.getAD_PInstance_ID()); cstmt.executeUpdate(); cstmt.close(); } catch (Exception e) { log.log(Level.SEVERE, sql, e); m_pi.setSummary(Msg.getMsg(m_wscctx, "ProcessRunError") + " " + e.getLocalizedMessage()); m_pi.setError(true); return false; } // log.fine(Log.l4_Data, "ProcessCtl.startProcess - done"); return true; } // startDBProcess
/** * Field Changed * * @param windowNo relative window * @param AD_Field_ID field * @param AD_Tab_ID tab * @param oldValue old field value * @param newValue new field value * @param context record context * @return Field Change VO */ public ChangeVO fieldChanged( int windowNo, int AD_Field_ID, int AD_Tab_ID, String oldValue, String newValue, Map<String, String> context) { // Same Values if (oldValue == null || oldValue.equals(Null.NULLString)) oldValue = ""; if (newValue == null || newValue.equals(Null.NULLString)) newValue = ""; if (oldValue.equals(newValue)) return null; // UITab tab = getTab(AD_Tab_ID); if (tab == null) { log.config("Not found AD_Tab_ID=" + AD_Tab_ID); return null; } UIField field = getField(AD_Field_ID, windowNo); if (field == null) { log.warning("Cannot find AD_Field_ID=" + AD_Field_ID); return null; } CContext ctx = new CContext(m_context.entrySet()); ctx.addWindow(windowNo, context); CContext origCtx = new CContext(m_context.entrySet()); origCtx.addWindow(windowNo, context); ChangeVO change = null; try { // reset the thread active flag, in case the thread is reused later on CThreadUtil.setCalloutActive(false); change = tab.fieldChanged( origCtx, ctx, new ArrayList<UIField>(5), windowNo, field, oldValue, newValue); CThreadUtil.setCalloutActive(false); ctx.setContext(windowNo, field.getColumnName(), change.newConfirmedFieldValue); } catch (Exception e) { log.severe("fieldChange error:" + field.getColumnName() + e.getMessage()); } finally { CThreadUtil.setCalloutActive(false); } return change; } // fieldChanged
/** * Get the response according to the request message * * @param model model * @param remoteHost remote host name * @param remoteAddr remote host ip address * @return response */ public byte[] getResult(MLdapProcessor model, String remoteHost, String remoteAddr) { if (m_errNo != LDAP_SUCCESS) { generateResult( "", (m_ldapMsg.getOperation() == LdapMessage.BIND_REQUEST ? LdapMessage.BIND_RESPONSE : LdapMessage.SEARCH_RES_RESULT), m_errNo, ldapErrorMessage[m_errNo] + ": " + m_errStr); m_encoder.getTrimmedBuf(); } try { String usrId = m_ldapMsg.getUserId(); String o = m_ldapMsg.getOrg(); String ou = m_ldapMsg.getOrgUnit(); int msgId = m_ldapMsg.getMsgId(); // Adding the Application 1 Sequence if (m_ldapMsg.getOperation() == LdapMessage.BIND_REQUEST) { String pwd = m_ldapMsg.getUserPasswd(); if (pwd == null || pwd.length() <= 0) { // 1st anonymous bind generateResult(m_ldapMsg.getDN(), LdapMessage.BIND_RESPONSE, LDAP_SUCCESS, null); log.config("#" + msgId + ": Success on anonymous bind"); return m_encoder.getTrimmedBuf(); } // Authenticate with Compiere data if (m_ldapUser.getUserId() == null) { // Try to authenticate on the 1st bind, must be java client m_ldapUser.reset(); model.authenticate(m_ldapUser, usrId, o, ou, remoteHost, remoteAddr); if (m_ldapUser.getErrorMsg() != null) { // Failed to authenticated with compiere m_errNo = LDAP_NO_SUCH_OBJECT; generateResult( m_ldapMsg.getBaseObj(), LdapMessage.SEARCH_RES_RESULT, LDAP_NO_SUCH_OBJECT, ldapErrorMessage[LDAP_NO_SUCH_OBJECT] + m_ldapUser.getErrorMsg()); log.config("#" + msgId + ": Failed with bind"); return m_encoder.getTrimmedBuf(); } } // Check to see if the input passwd is match to the one // in compiere database if (m_ldapUser.getUserId() != null && m_ldapUser.getPassword() != null && usrId.compareTo(m_ldapUser.getUserId()) == 0 && !SecureEngine.isEncrypted(pwd) && (pwd.compareTo(m_ldapUser.getPassword()) == 0 || pwd.compareTo(SecureEngine.decrypt(m_ldapUser.getPassword())) == 0)) { // Successfully authenticated generateResult("", LdapMessage.BIND_RESPONSE, LDAP_SUCCESS, null); // Close the connection to client since most of the client // application might cache the connection but we can't afford // to have too many such client connection m_disconnect = true; log.config("#" + msgId + ": Success authenticate with password"); } else { // Unsuccessfully authenticated m_errNo = LDAP_INAPPROPRIATE_AUTHENTICATION; generateResult( "", LdapMessage.BIND_RESPONSE, LDAP_INAPPROPRIATE_AUTHENTICATION, ldapErrorMessage[LDAP_INAPPROPRIATE_AUTHENTICATION]); log.info( "#" + msgId + ": Failed : " + ldapErrorMessage[LDAP_INAPPROPRIATE_AUTHENTICATION]); } } else if (m_ldapMsg.getOperation() == LdapMessage.SEARCH_REQUEST) { // Authenticate with compiere database m_ldapUser.reset(); model.authenticate(m_ldapUser, usrId, o, ou, remoteHost, remoteAddr); if (m_ldapUser.getErrorMsg() != null) { m_errNo = LDAP_NO_SUCH_OBJECT; generateResult( m_ldapMsg.getBaseObj(), LdapMessage.SEARCH_RES_RESULT, LDAP_NO_SUCH_OBJECT, ldapErrorMessage[LDAP_NO_SUCH_OBJECT] + m_ldapUser.getErrorMsg()); log.info("#" + msgId + ": Failed with SEARCH_REQUEST"); return m_encoder.getTrimmedBuf(); } m_encoder.beginSeq(48); // Hard coded here for Envelope header m_encoder.encodeInt(msgId); m_encoder.beginSeq(LdapMessage.SEARCH_REP_ENTRY); // Application 4 m_encoder.encodeString("cn=" + m_ldapMsg.getUserId(), true); // this should be object name // not going to put in any attributes for this m_encoder.beginSeq(48); m_encoder.endSeq(); m_encoder.endSeq(); m_encoder.endSeq(); // SearchResultDone Application 5 for bind // Result 0 = success // No error message generateResult(m_ldapMsg.getBaseObj(), LdapMessage.SEARCH_RES_RESULT, LDAP_SUCCESS, null); log.config("#" + msgId + ": Success with SEARCH_REQUEST"); } return m_encoder.getTrimmedBuf(); } catch (Exception e) { log.log(Level.SEVERE, "", e); // Get the response operation int responseOp = LdapMessage.BIND_RESPONSE; if (m_ldapMsg.getOperation() == LdapMessage.SEARCH_REQUEST) responseOp = LdapMessage.SEARCH_RES_RESULT; // Send the response to the client and disconnect m_errNo = LDAP_OTHER; generateResult( m_ldapMsg.getBaseObj(), responseOp, LDAP_OTHER, ldapErrorMessage[LDAP_OTHER] + e.getMessage()); m_disconnect = true; } return m_encoder.getTrimmedBuf(); } // getResult