/* jBilling - The Enterprise Open Source Billing System Copyright (C) 2003-2011 Enterprise jBilling Software Ltd. and Emiliano Conde This file is part of jbilling. jbilling is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. jbilling is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with jbilling. If not, see <http://www.gnu.org/licenses/>. */ package com.sapienter.jbilling.server.util.audit; import java.util.Date; import com.sapienter.jbilling.server.user.db.CompanyDAS; import com.sapienter.jbilling.server.user.db.UserDAS; import com.sapienter.jbilling.server.util.Context; import com.sapienter.jbilling.server.util.audit.db.EventLogDAS; import com.sapienter.jbilling.server.util.audit.db.EventLogDTO; import com.sapienter.jbilling.server.util.audit.db.EventLogMessageDAS; import com.sapienter.jbilling.server.util.audit.db.EventLogModuleDAS; import com.sapienter.jbilling.server.util.db.JbillingTableDAS; public class EventLogger { // these are the messages constants, in synch with the db (event_log_message) // billing process public static final Integer BILLING_PROCESS_UNBILLED_PERIOD = new Integer(1); public static final Integer BILLING_PROCESS_NOT_ACTIVE_YET = new Integer(2); public static final Integer BILLING_PROCESS_ONE_PERIOD_NEEDED = new Integer(3); public static final Integer BILLING_PROCESS_RECENTLY_BILLED = new Integer(4); public static final Integer BILLING_PROCESS_WRONG_FLAG_ON = new Integer(5); public static final Integer BILLING_PROCESS_EXPIRED = new Integer(6); public static final Integer BILLING_REVIEW_NOT_APPROVED = new Integer(10); public static final Integer BILLING_REVIEW_NOT_GENERATED = new Integer(11); // user maintenance public static final Integer PASSWORD_CHANGE = new Integer(8); public static final Integer STATUS_CHANGE = new Integer(12); public static final Integer NO_FURTHER_STEP = new Integer(14); public static final Integer CANT_PAY_PARTNER = new Integer(15); public static final Integer SUBSCRIPTION_STATUS_CHANGE = new Integer(20); public static final Integer SUBSCRIPTION_STATUS_NO_CHANGE = new Integer(32); public static final Integer ACCOUNT_LOCKED = new Integer(21); public static final Integer DYNAMIC_BALANCE_CHANGE = new Integer(33); public static final Integer INVOICE_IF_CHILD_CHANGE = new Integer(34); // order maintenance public static final Integer ORDER_STATUS_CHANGE = new Integer(13); public static final Integer ORDER_LINE_UPDATED = new Integer(17); public static final Integer ORDER_NEXT_BILL_DATE_UPDATED = new Integer(18); public static final Integer ORDER_MAIN_SUBSCRIPTION_UPDATED = new Integer(22); public static final Integer ORDER_CANCEL_AND_CREDIT = new Integer(26); // payment public static final Integer PAYMENT_INSTRUMENT_NOT_FOUND = new Integer(24); // invoice related message public static final Integer INVOICE_ORDER_APPLIED = new Integer(16); // mediation public static final Integer CURRENT_ORDER_FINISHED = new Integer(23); // blacklist public static final Integer BLACKLIST_USER_ID_ADDED = new Integer(27); public static final Integer BLACKLIST_USER_ID_REMOVED = new Integer(28); //provisioning public static final Integer PROVISIONING_UUID = new Integer(29); public static final Integer PROVISIONING_COMMAND=new Integer(30); public static final Integer PROVISIONING_STATUS_CHANGE=new Integer(31); // others public static final Integer ROW_CREATED = new Integer(25); public static final Integer ROW_DELETED = new Integer(7); public static final Integer ROW_UPDATED= new Integer(9); // field not specified public static final Integer USER_TRANSITIONS_LIST = new Integer(19); // event log modules in synch with db (event_log_module) public static final Integer MODULE_BILLING_PROCESS = new Integer(1); public static final Integer MODULE_USER_MAINTENANCE = new Integer(2); public static final Integer MODULE_ITEM_MAINTENANCE = new Integer(3); public static final Integer MODULE_ITEM_TYPE_MAINTENANCE = new Integer(4); public static final Integer MODULE_ITEM_USER_PRICE_MAINTENANCE = new Integer(5); public static final Integer MODULE_PROMOTION_MAINTENANCE = new Integer(6); public static final Integer MODULE_ORDER_MAINTENANCE = new Integer(7); public static final Integer MODULE_CREDIT_CARD_MAINTENANCE = new Integer(8); public static final Integer MODULE_INVOICE_MAINTENANCE = new Integer(9); public static final Integer MODULE_PAYMENT_MAINTENANCE = new Integer(10); public static final Integer MODULE_TASK_MAINTENANCE = new Integer(11); public static final Integer MODULE_WEBSERVICES = new Integer(12); public static final Integer MODULE_MEDIATION = new Integer(13); public static final Integer MODULE_BLACKLIST = new Integer(14); public static final Integer MODULE_PROVISIONING=new Integer(15); // levels of logging public static final Integer LEVEL_DEBUG = new Integer(1); public static final Integer LEVEL_INFO = new Integer(2); public static final Integer LEVEL_WARNING = new Integer(3); public static final Integer LEVEL_ERROR = new Integer(4); public static final Integer LEVEL_FATAL = new Integer(5); private EventLogDAS eventLogDAS = null; private EventLogMessageDAS eventLogMessageDAS = null; private EventLogModuleDAS eventLogModuleDAS = null; private JbillingTableDAS jbDAS = null; //private static final Logger LOG = Logger.getLogger(EventLogger.class); public EventLogger() { eventLogDAS = new EventLogDAS(); eventLogMessageDAS = new EventLogMessageDAS(); eventLogModuleDAS = new EventLogModuleDAS(); jbDAS = (JbillingTableDAS) Context.getBean(Context.Name.JBILLING_TABLE_DAS); } public static EventLogger getInstance() { return new EventLogger(); } public void log(Integer level, Integer entity, Integer userAffectedId, Integer rowId, Integer module, Integer message, String table) { CompanyDAS company = new CompanyDAS(); UserDAS user= new UserDAS(); EventLogDTO dto = new EventLogDTO(null, jbDAS.findByName(table), null, user.find(userAffectedId), eventLogMessageDAS.find(message), eventLogModuleDAS.find(module), company.find(entity), rowId, level, null, null, null); eventLogDAS.save(dto); } public void debug(Integer entity, Integer userAffectedId, Integer rowId, Integer module, Integer message, String table) { log(LEVEL_DEBUG, entity, userAffectedId, rowId, module, message, table); } public void info(Integer entity, Integer userAffectedId, Integer rowId, Integer module, Integer message, String table) { log(LEVEL_INFO, entity, userAffectedId, rowId, module, message, table); } public void warning(Integer entity, Integer userAffectedId, Integer rowId, Integer module, Integer message, String table) { log(LEVEL_WARNING, entity, userAffectedId, rowId, module, message, table); } public void error(Integer entity, Integer userAffectedId, Integer rowId, Integer module, Integer message, String table) { log(LEVEL_ERROR, entity, userAffectedId, rowId, module, message, table); } public void fatal(Integer entity, Integer userAffectedId, Integer rowId, Integer module, Integer message, String table) { log(LEVEL_FATAL, entity, userAffectedId, rowId, module, message, table); } /* * This is intended for loggin a change in the database, where we want to * keep track of what changed */ public void audit(Integer userExecutingId, Integer userAffectedId, String table, Integer rowId, Integer module, Integer message, Integer oldInt, String oldStr, Date oldDate) { UserDAS user= new UserDAS(); EventLogDTO dto = new EventLogDTO(null, jbDAS.findByName(table), user.find(userExecutingId), (userAffectedId == null) ? null : user.find(userAffectedId), eventLogMessageDAS.find(message), eventLogModuleDAS.find(module), user.find(userExecutingId).getCompany(), rowId, LEVEL_INFO, oldInt, oldStr, oldDate); eventLogDAS.save(dto); } /* * Same as previous but the change its not being done by any given user * (no executor) but by a batch process. */ public void auditBySystem(Integer entityId, Integer userAffectedId, String table, Integer rowId, Integer module, Integer message, Integer oldInt, String oldStr, Date oldDate) { CompanyDAS company = new CompanyDAS(); UserDAS user= new UserDAS(); EventLogDTO dto = new EventLogDTO(null, jbDAS.findByName(table), null, user.find(userAffectedId), eventLogMessageDAS.find(message), eventLogModuleDAS.find(module), company.find(entityId), rowId, LEVEL_INFO, oldInt, oldStr, oldDate); eventLogDAS.save(dto); } /** * Queries the event_log table to determine the position where the last query * of the user transitions ended. This is called if the user passes * <code>null</code> as the <code>from</code> parameter to the getUserTransitions * webservice call. * @return the id of the last queried transitions list. */ public Integer getLastTransitionEvent(Integer entityId) { return eventLogDAS.getLastTransitionEvent(entityId); } }