com.dianping.lion.service.impl.OperationLogServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.dianping.lion.service.impl.OperationLogServiceImpl.java

Source

/**
 * Project: com.dianping.lion.lion-console-0.0.1
 * 
 * File Created at 2012-7-9
 * $Id$
 * 
 * Copyright 2010 dianping.com.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * Dianping Company. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with dianping.com.
 */
package com.dianping.lion.service.impl;

import java.util.List;

import org.apache.commons.lang.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.dianping.lion.dao.OperationLogDao;
import com.dianping.lion.entity.Config;
import com.dianping.lion.entity.OperationLog;
import com.dianping.lion.entity.OperationTypeEnum;
import com.dianping.lion.entity.User;
import com.dianping.lion.service.ConfigService;
import com.dianping.lion.service.OperationLogService;
import com.dianping.lion.service.ProjectPrivilegeDecider;
import com.dianping.lion.util.SecurityUtils;
import com.dianping.lion.util.StringUtils;
import com.dianping.lion.vo.OperationLogCriteria;
import com.dianping.lion.vo.Paginater;

public class OperationLogServiceImpl implements OperationLogService {

    private static final Logger logger = LoggerFactory.getLogger(OperationLogServiceImpl.class);

    @Autowired
    private OperationLogDao operationLogDao;

    @Autowired
    private ConfigService configService;

    @Autowired
    private ProjectPrivilegeDecider privilegeDecider;

    @Override
    public Paginater<OperationLog> getLogList(OperationLogCriteria logCriteria, Paginater<OperationLog> paginater) {
        long logCount = operationLogDao.getLogCount(logCriteria, paginater);
        List<OperationLog> logList = operationLogDao.getLogList(logCriteria, paginater);
        paginater.setTotalCount(logCount);
        paginater.setResults(refactorConfig(logList));
        return paginater;
    }

    private List<OperationLog> refactorConfig(List<OperationLog> logList) {
        User currentUser = SecurityUtils.getCurrentUser();
        for (OperationLog log : logList) {
            OperationTypeEnum opType = log.getOpTypeEnum();
            if (opType == OperationTypeEnum.Config_Edit || opType == OperationTypeEnum.API_SetConfig) {
                Config config = configService.findConfigByKey(log.getKey1());
                boolean hasReadPrivilege = false;
                if (config != null) {
                    hasReadPrivilege = privilegeDecider.hasReadConfigPrivilege(log.getProjectId(), log.getEnvId(),
                            config.getId(), currentUser != null ? currentUser.getId() : null);
                } else {
                    hasReadPrivilege = currentUser != null && (currentUser.isAdmin() || currentUser.isSA());
                }
                //TODO , ?
                String oldValue = (String) ObjectUtils.defaultIfNull(getLogKey(log.getId(), "key3"), "");
                if (opType == OperationTypeEnum.Config_Edit) {
                    String newValue = (String) ObjectUtils.defaultIfNull(getLogKey(log.getId(), "key4"), "");
                    String oldCutValue = StringUtils.cutString(oldValue, 80);
                    String newCutValue = StringUtils.cutString(newValue, 80);
                    log.setContent("?: " + log.getKey1() + ", before["
                            + (hasReadPrivilege ? oldCutValue : "***") + "], after["
                            + (hasReadPrivilege ? newCutValue : "***") + "]");
                    if (hasReadPrivilege && (oldCutValue.length() != oldValue.length()
                            || newCutValue.length() != newValue.length())) {
                        log.setKey5("true");
                    }
                } else if (opType == OperationTypeEnum.API_SetConfig) {
                    if (!hasReadPrivilege) {
                        log.setContent("?: " + log.getKey1() + ", value: ***");
                        log.setKey1("false");
                    } else {
                        log.appendContent(", before: " + StringUtils.cutString(oldValue, 80));
                        log.setKey1("true");
                    }
                }
            } else if (opType == OperationTypeEnum.Job_DSFetcher) {
                boolean hasReadPrivilege = privilegeDecider
                        .hasReadDSFetchLogPrivilege(currentUser != null ? currentUser.getId() : null);
                log.setKey1(hasReadPrivilege ? "true" : "false");
            }
        }
        return logList;
    }

    @Override
    public void createOpLog(OperationLog oplog) {
        try {
            if (oplog.getOpUserId() == null) {
                oplog.setOpUserId(SecurityUtils.getCurrentUserId());
            }
            operationLogDao.insertOpLog(oplog);
        } catch (Exception e) {
            logger.warn("create operation log failed.", e);
        }
    }

    @Override
    public String getLogKey(int logid, String key) {
        return operationLogDao.getLogKey(logid, key);
    }

    public void setConfigService(ConfigService configService) {
        this.configService = configService;
    }

    public void setPrivilegeDecider(ProjectPrivilegeDecider configPrivilegeDecider) {
        this.privilegeDecider = configPrivilegeDecider;
    }

}