/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.engine.handlers; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.stereotype.Component; import org.w3c.dom.Document; import org.w3c.dom.Element; import com.enonic.esl.containers.MultiValueMap; import com.enonic.esl.sql.model.Column; import com.enonic.vertical.engine.Types; import com.enonic.vertical.engine.VerticalCreateException; import com.enonic.vertical.engine.VerticalEngineLogger; import com.enonic.vertical.engine.VerticalRemoveException; import com.enonic.vertical.engine.XDG; import com.enonic.vertical.engine.dbmodel.LogEntryTable; import com.enonic.vertical.engine.processors.ElementProcessor; import com.enonic.vertical.engine.processors.MenuElementProcessor; import com.enonic.vertical.engine.processors.UserElementProcessor; import com.enonic.vertical.event.MenuHandlerEvent; import com.enonic.vertical.event.MenuHandlerListener; import com.enonic.cms.core.log.LogType; import com.enonic.cms.core.log.StoreNewLogEntryCommand; import com.enonic.cms.core.log.Table; @Component public final class LogHandler extends BaseHandler implements MenuHandlerListener { public Document getLogEntries( MultiValueMap adminParams, int fromIdx, int count, boolean complete ) { Column[] selectColumns; if ( complete ) { selectColumns = null; } else { selectColumns = new Column[8]; selectColumns[0] = LogEntryTable.INSTANCE.len_sKey; selectColumns[1] = LogEntryTable.INSTANCE.len_lTypeKey; selectColumns[2] = LogEntryTable.INSTANCE.len_lTableKey; selectColumns[3] = LogEntryTable.INSTANCE.len_lCount; selectColumns[4] = LogEntryTable.INSTANCE.len_men_lKey; selectColumns[5] = LogEntryTable.INSTANCE.len_usr_hKey; selectColumns[6] = LogEntryTable.INSTANCE.len_sTitle; selectColumns[7] = LogEntryTable.INSTANCE.len_dteTimestamp; } ElementProcessor[] elementProcessors = new ElementProcessor[2]; elementProcessors[0] = new UserElementProcessor( getCommonHandler() ); elementProcessors[1] = new MenuElementProcessor( getCommonHandler() ); CommonHandler commonHandler = getCommonHandler(); Document doc = commonHandler.getData( Types.LOGENTRY, selectColumns, adminParams, elementProcessors, fromIdx, count, "@timestamp", true ); if ( adminParams.containsKey( "@tablekeyvalue" ) ) { int tableKeyValue = ( (Integer) adminParams.getValueList( "@tablekeyvalue" ).get( 0 ) ); Table table = Table.parse( ( (Integer) adminParams.getValueList( "@tablekey" ).get( 0 ) ) ); Element rootElem = doc.getDocumentElement(); switch ( table ) { case CONTENT: ContentHandler contentHandler = getContentHandler(); int versionKey = contentHandler.getCurrentVersionKey( tableKeyValue ); rootElem.setAttribute( "title", contentHandler.getContentTitle( versionKey ) ); break; case MENUITEM: rootElem.setAttribute( "title", getMenuHandler().getMenuItemName( tableKeyValue ) ); break; } } return doc; } public Document getLogEntry( String key ) { ElementProcessor[] elementProcessors = new ElementProcessor[2]; elementProcessors[0] = new UserElementProcessor( baseEngine.getCommonHandler() ); elementProcessors[1] = new MenuElementProcessor( baseEngine.getCommonHandler() ); return getSingleData( key, elementProcessors ); } private Document getSingleData( String key, ElementProcessor[] elementProcessors ) { PreparedStatement preparedStmt = null; ResultSet resultSet = null; Document doc = null; try { Connection con = getConnection(); StringBuffer sql = XDG.generateSelectWherePrimaryKeySQL( LogEntryTable.INSTANCE ); preparedStmt = con.prepareStatement( sql.toString() ); preparedStmt.setString( 1, key ); resultSet = preparedStmt.executeQuery(); doc = XDG.resultSetToXML( LogEntryTable.INSTANCE, resultSet, null, elementProcessors, null, -1 ); } catch ( SQLException sqle ) { String message = "SQL error: %t"; VerticalEngineLogger.error( message, sqle ); } finally { close( resultSet ); close( preparedStmt ); } return doc; } public void createdMenuItem( MenuHandlerEvent e ) throws VerticalCreateException { StoreNewLogEntryCommand command = new StoreNewLogEntryCommand(); command.setTableKey( Table.MENUITEM ); command.setTableKeyValue( e.getMenuItemKey() ); command.setType( LogType.ENTITY_CREATED ); command.setUser( e.getUser().getKey() ); command.setTitle( e.getTitle() ); logService.storeNew( command ); } public void removedMenuItem( MenuHandlerEvent e ) throws VerticalRemoveException { StoreNewLogEntryCommand command = new StoreNewLogEntryCommand(); command.setTableKey( Table.MENUITEM ); command.setTableKeyValue( e.getMenuItemKey() ); command.setType( LogType.ENTITY_REMOVED ); command.setUser( e.getUser().getKey() ); command.setTitle( e.getTitle() ); logService.storeNew( command ); } public void updatedMenuItem( MenuHandlerEvent e ) { StoreNewLogEntryCommand command = new StoreNewLogEntryCommand(); command.setTableKey( Table.MENUITEM ); command.setTableKeyValue( e.getMenuItemKey() ); command.setType( LogType.ENTITY_UPDATED ); command.setUser( e.getUser().getKey() ); command.setTitle( e.getTitle() ); logService.storeNew( command ); } }