com.enonic.cms.core.log.LogServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.core.log.LogServiceImpl.java

Source

/*
 * Copyright 2000-2013 Enonic AS
 * http://www.enonic.com/license
 */
package com.enonic.cms.core.log;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;

import com.enonic.cms.core.security.user.UserEntity;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
import com.enonic.cms.core.time.TimeService;
import com.enonic.cms.store.dao.LogEntryDao;
import com.enonic.cms.store.dao.UserDao;

@Service("logService")
public class LogServiceImpl implements LogService {
    @Autowired
    private LogEntryDao logEntryDao;

    @Autowired
    private TimeService timeService;

    @Autowired
    private UserDao userDao;

    private static final int PATH_FIELD_MAX_LENGTH = 256;

    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    public LogEntryResultSet getLogEntries(LogEntrySpecification spec, String orderBy, final int count,
            final int index) {
        if (spec == null) {
            throw new IllegalArgumentException("Given LogEntrySpecification cannot be null");
        }

        List<LogEntryKey> keys = logEntryDao.findBySpecification(spec, orderBy);

        final int queryResultTotalSize = keys.size();

        if (index > queryResultTotalSize) {
            return (LogEntryResultSet) new LogEntryResultSetNonLazy(index).addError(
                    "Index greater than result count: " + index + " greater than " + queryResultTotalSize);
        }

        int toIndex = Math.min(queryResultTotalSize, count + index);

        LogEntryResultSet resultSet = new LogEntryResultSetLazyFetcher(new LogEntryEntityFetcherImpl(logEntryDao),
                keys.subList(index, toIndex), index, queryResultTotalSize);
        return resultSet;

    }

    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    public LogEntryKey storeNew(StoreNewLogEntryCommand command) {
        Assert.notNull(command.getType(), "type cannot be nul");
        Assert.notNull(command.getUser(), "user cannot be nul");
        Assert.notNull(command.getTitle(), "title cannot be nul");

        HttpServletRequest httpRequest = ServletRequestAccessor.getRequest();
        String clientInetAddress = null;
        if (httpRequest != null) {
            clientInetAddress = httpRequest.getRemoteAddr();
        }

        UserEntity user = userDao.findByKey(command.getUser());

        LogEntryEntity logEntry = new LogEntryEntity();
        logEntry.setType(command.getType().asInteger());
        logEntry.setTimestamp(timeService.getNowAsDateTime().toDate());
        logEntry.setInetAddress(clientInetAddress);
        logEntry.setUser(user);

        if (command.getTable() != null) {
            logEntry.setTableKey(command.getTable().asInteger());
            logEntry.setKeyValue(command.getTableKeyValue());
        }

        if (command.getSite() != null) {
            logEntry.setSite(command.getSite());
        }

        logEntry.setTitle(command.getTitle());

        if (command.getPath() != null) {
            logEntry.setPath(enshurePathWithinBoundary(command.getPath()));
        }

        if (command.getXmlData() != null) {
            logEntry.setXmlData(command.getXmlData());
        }

        else

        {
            logEntry.setXmlData(createEmptyXmlData());
        }

        logEntryDao.storeNew(logEntry);
        return logEntry.getKey();
    }

    private String enshurePathWithinBoundary(String suggestedPath) {
        String path = suggestedPath;

        if (StringUtils.isNotEmpty(path) && path.length() > PATH_FIELD_MAX_LENGTH) {
            String pathTooLongEnding = " ...";

            path = path.substring(0, PATH_FIELD_MAX_LENGTH - pathTooLongEnding.length());
            path = path + pathTooLongEnding;
        }
        return path;
    }

    private Document createEmptyXmlData() {

        Element root = new Element("data");
        return new Document(root);
    }

}