📄 jahiadbauditlogmanagerservice.java
字号:
//// ____.// __/\ ______| |__/\. _______// __ .____| | \ | +----+ \// _______| /--| | | - \ _ | : - \_________// \\______: :---| : : | : | \________>// |__\---\_____________:______: :____|____:_____\// /_____|//// . . . i n j a h i a w e t r u s t . . .//// MJ 19.02.2001//////package org.jahia.services.audit;import java.sql.*;import java.lang.*;import java.util.*; // ArrayListimport java.text.DateFormat;import org.jahia.data.events.*; // EventObjectimport org.jahia.data.fields.*; // JahiaFieldimport org.jahia.data.containers.*; // JahiaContainer, JahiaContainerListimport org.jahia.services.pages.*; // JahiaPageimport org.jahia.services.sites.*; // JahiaSiteimport org.jahia.services.acl.*; // JahiaBaseACLimport org.jahia.services.usermanager.*; // JahiaUserimport org.jahia.settings.*; // JahiaPrivateSettingsimport org.jahia.utils.JahiaConsole;import org.jahia.utils.JahiaObjectTool; // JahiaObjectToolimport org.jahia.engines.EngineToolBox;import org.jahia.params.*; // ParamBeanimport org.jahia.exceptions.*;import org.jahia.registries.ServicesRegistry;import org.jahia.services.database.JahiaIncrementorsDBService;import org.jahia.services.database.JahiaDBPoolService;import org.jahia.data.JahiaDOMObject;import org.jahia.data.JahiaDBDOMObject;public class JahiaDBAuditLogManagerService extends JahiaAuditLogManagerService{ public static final String TABLE_NAME = "jahia_audit_log"; public static final int FIELD_TYPE = JahiaObjectTool.FIELD_TYPE; public static final int CONTAINER_TYPE = JahiaObjectTool.CONTAINER_TYPE; public static final int CONTAINERLIST_TYPE = JahiaObjectTool.CONTAINERLIST_TYPE; public static final int PAGE_TYPE = JahiaObjectTool.PAGE_TYPE; public static final int TEMPLATE_TYPE = JahiaObjectTool.TEMPLATE_TYPE; public static final int ACL_TYPE = JahiaObjectTool.ACL_TYPE; public static final String ENTRY_ID = "ENTRY_ID"; public static final String TIME = "TIME"; public static final String USER_ID = "USER_ID"; public static final String OBJECT_TYPE = "OBJECT_TYPE"; public static final String OBJECT_ID = "OBJECT_ID"; public static final String CONTENT = "CONTENT"; private static final String MSG_INTERNAL_ERROR = new String ("Audit Log Manager internal error"); private static final String JSP_FILE = "/jsp/jahia/engines/logs/viewlogs.jsp"; private static JahiaDBAuditLogManagerService theObject = null; private JahiaIncrementorsDBService mIncrementorService = null; private JahiaDBPoolService mDBPoolService = null; private int maxLogs; /** * constructor * initializes database connection pool and incrementor service. * */ private JahiaDBAuditLogManagerService() throws JahiaException { JahiaConsole.println( "Audit", "***** Starting AuditLogManager *****" ); // Try to get the DB Pool Service ServicesRegistry registry = ServicesRegistry.getInstance(); if (registry != null) { mDBPoolService = registry.getDBPoolService(); if (mDBPoolService == null) { throw new JahiaException (MSG_INTERNAL_ERROR, "Audit Log manager could not get the DB Connection Pool Service instance.", JahiaException.SERVICE_ERROR, JahiaException.CRITICAL); } mIncrementorService = registry.getJahiaIncrementorsDBService(); if (mIncrementorService == null) { throw new JahiaException (MSG_INTERNAL_ERROR, "Audit Log manager could not get the Incrementors DB Service instance.", JahiaException.SERVICE_ERROR, JahiaException.CRITICAL); } } else { throw new JahiaException (MSG_INTERNAL_ERROR, "Audit Log manager could not get the Service Registry instance.", JahiaException.REGISTRY_ERROR, JahiaException.CRITICAL); } } // end constructor /** * returns a single instance of the object */ public static synchronized JahiaDBAuditLogManagerService getInstance() throws JahiaException { if (theObject == null) { theObject = new JahiaDBAuditLogManagerService(); } return theObject; } // end getInstance /** * standard access method to log an Event * * @author Mikha雔 Janson * @param je a reference to the JahiaEvent object to log * @param objectType an <code>int</code> representing the type of the of the logged event * @param operationStr a <code>String</code> containing the message logged with the event */ public boolean logEvent ( JahiaEvent je, int objectType, String operationStr ) { long time; String timeStr = ""; String userNameStr = "jahia"; String objTypeStr = ""; String objIDStr = "0"; String parentObjIDStr = "0"; String parentObjTypeStr = ""; String siteKey = ""; String contentStr = ""; // Get the next available entry ID int entryID; try { entryID = mIncrementorService.autoIncrement ("jahia_audit_log"); // toConsole ("got new entry ID = ["+Integer.toString(entryID)+"]"); } catch (JahiaException ex) { JahiaConsole.println ("AuditLogManager", "Exception !!! Could not get a new entry ID from the incrementor DB"); return false; } try { time = je.getEventTime(); timeStr = new Long(je.getEventTime()).toString(); ParamBean jParams = je.getParams(); if( jParams != null) { // jParams is null in Event if generated by Jahia userNameStr = (String) jParams.getUser().getUsername(); siteKey = ((JahiaSite)jParams.getSession().getAttribute(ParamBean.SESSION_SITE)).getSiteKey(); } objTypeStr = new Integer(objectType).toString(); objIDStr = Integer.toString(getObjectID(je, objectType)); String[] parent = getParent(je, objectType); parentObjIDStr = parent[0]; parentObjTypeStr = parent[1]; contentStr = JahiaObjectTool.getInstance().getObjectName (objectType, getObjectID(je, objectType)); return insertAuditLogEntry ( entryID, timeStr, userNameStr, objTypeStr, objIDStr, parentObjIDStr, parentObjTypeStr, siteKey, operationStr, contentStr ); } catch (JahiaException jex) { return false; } } // end logEvent /** * utility method to retrieve log entries for a specific object type and ID * * @author Mikha雔 Janson * @param objectType an <code>int</code> representing the object type to retrieve * @param objectID an <code>int</code> representing the ID of the object to retrieve logs for * @return a <code>List</code> of HashMaps containing keys for time, username, operation, and their value for each logged event */ public ArrayList getLog (int objectType, int objectID ) { ArrayList logData = new ArrayList(); // Get a database connection Connection dbConn = getDBConnection (1002); if (dbConn == null) { return logData; } // Have the recursive method descend down the tree List childrenObjectList = getAllChildren( dbConn, objectType, objectID, null ); // fetch the corresponding entries from the db table Statement stmt = null; String query = ""; try { stmt = dbConn.createStatement(); query = "SELECT * FROM " + TABLE_NAME + " WHERE (objecttype_jahia_audit_log=" + Integer.toString(objectType) + " AND objectid_jahia_audit_log=" + Integer.toString(objectID) + ")"; if( !childrenObjectList.isEmpty() ) { for( int i = 0; i < childrenObjectList.size(); i++ ) { Integer[] thisChildObject = (Integer[]) childrenObjectList.get(i); query += " OR (objecttype_jahia_audit_log=" + thisChildObject[0].toString(); // type as 1st ary elt query += " AND objectid_jahia_audit_log=" + thisChildObject[1].toString() + ")"; // id as 2nd ary elt } } query += " ORDER BY time_jahia_audit_log DESC"; ResultSet rs = ServicesRegistry.getInstance().getDBPoolService().executeQuery (stmt, query); logData = buildLogEntriesList( rs, logData ); } catch (SQLException sqlEx) { toConsole ("SQL Exception occurred!" + sqlEx.getMessage() + " for query " + query); } finally { CloseDBConnection (dbConn); CloseStatement (stmt); } return logData; } // end getLog /** * utility method to retrieve all log entries * * @author Mikha雔 Janson * @return a <code>List</code> of HashMaps containing keys for time, username, * operation, and their value for each logged event */ public ArrayList getLog () { ArrayList logData = new ArrayList(); // Get a database connection Connection dbConn = getDBConnection (1002); if (dbConn == null) { return logData; } // fetch the corresponding entries from the db table Statement stmt = null; String query = ""; String maxLogs = JahiaPrivateSettings.readJahiaPropertiesFile().getProperty("jahiaMaxLogs"); try { stmt = dbConn.createStatement(); query = "SELECT * FROM " + TABLE_NAME + " ORDER BY time_jahia_audit_log DESC"; ResultSet rs = ServicesRegistry.getInstance().getDBPoolService().executeQuery (stmt, query); logData = buildLogEntriesList( rs, logData ); } catch (SQLException sqlEx) { toConsole ("SQL Exception occurred!" + sqlEx.getMessage() + " for query " + query); } finally { CloseDBConnection (dbConn); CloseStatement (stmt); } return logData; } // end getLog /** * utility method to convert a ResultSet into a List suitable for log display * * @author Mikha雔 Janson * @param rs a <code>ResultSet</code> * @param logData an pre-initialized ArrayList * @return an <code>ArrayList</code> suitable for log display */ private ArrayList buildLogEntriesList ( ResultSet rs, ArrayList logData ) { int i = 0; try { while(rs.next()) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -