package com.eactive.eai.agent.code;

import com.eactive.eai.agent.command.Command;
import com.eactive.eai.agent.command.CommandException;
import com.eactive.eai.batch.code.CodeMessageManager;
import com.eactive.eai.common.util.Logger;

/**
* 1. 기능 : Running중인 EAI Server의 메모리에 로딩된 CodeMessageManager의 정보 변경
* 2. 처리 개요 : CodeMessageManager에 CodeMessageVO 데이터 변경
* 3. 주의사항
*
* @author
* @version  v 1.0.0
* @see  관련 기능을 참조
* @since
*/
public class UpdateCodeMessageCommand extends Command
{

    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

    public UpdateCodeMessageCommand(String name) {
        super(name);
    }

    /**
    * 1. 기능 :  CodeMessageManager에 CodeMessageVO 데이터 변경
    * 2. 처리 개요 : CodeMessageManager에 CodeMessageVO 데이터 변경
    * 3. 주의사항
    *
    * @exception CommandException	Argument Type이 다르거나 Command 수행중 Excpetion이 발생할 경우
    **/
    public Object execute() throws CommandException
    {
        Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
        logger.info(this.name + " Agent 가 호출되었습니다.");

        if( !(args instanceof java.lang.String) ) {
            String rspErrorCode = "RECEAIMCM001";
            String msg = makeException(rspErrorCode, null);
            if (logger.isError()) logger.error(msg);
            throw new CommandException(msg);
        }
        
        String key = (String) args;
        
        try{
            CodeMessageManager manager = CodeMessageManager.getInstance();
            manager.reload(key);
        }catch (Exception e){
            String rspErrorCode = "RECEAIMCM002";
            String msg = makeException(rspErrorCode, e);
            if (logger.isError()) logger.error(msg,e);
            throw new CommandException(msg);
        }
        logger.info(this.name + " Agent 가 성공적으로 완료되었습니다.");
        return "success";
    }

}
