package com.eactive.eai.agent.adapter;

import com.eactive.eai.adapter.AdapterGroupVO;
import com.eactive.eai.adapter.AdapterManager;
import com.eactive.eai.agent.command.Command;
import com.eactive.eai.agent.command.CommandException;
import com.eactive.eai.common.util.Logger;
/**
* 1. 기능 : Running중인 EAI Server의 메모리에 로딩된 AdapterManager의 정보 변경
* 2. 처리 개요 : AdapterGroupVO의 member variable 값 변경
* 3. 주의사항
*
* @author
* @version  v 1.0.0
* @see
* @since
*/
public class UpdateAdapterGroupCommand extends Command
{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
    * 1. 기능 : UpdateAdapterGroupCommand 생성자
    * 2. 처리 개요 :
    * 3. 주의사항
    **/
    public UpdateAdapterGroupCommand(String name) {
        super(name);
    }

    /**
    * 1. 기능 :  AdapterManager의 AdapterGroupVO를 수정
    * 2. 처리 개요 : AdapterGroupVO의 EAISvrInstNm이 DEFAULT_SERVER(ALL) 이거나  LocalServer인 경우
    *           AdapterManager에 등록된 해당 AdapterGroupVO의 데이터 수정
    * 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 == null || !(args instanceof String) ) {
            String msg = makeException("BECEAICAG001", null);
            logger.error(msg);
            throw new CommandException(msg);
        }


        try {

        	String adapterGroupName  = (String)args;
            AdapterGroupVO current = AdapterManager.getInstance().getAdapterGroupVO(adapterGroupName);

            if (current != null) {
                current.stop();
                AdapterManager.getInstance().removeAdapterGroupVO(adapterGroupName);
//            } else {
//                logger.info("Manager's AdapterGroupVO is null. -- "+vo.getName());
            }
            AdapterGroupVO vo = AdapterManager.getInstance().getAdapterGroupInDB(adapterGroupName);

            if (vo.isUsedFlag()) {
                vo.start();
                AdapterManager.getInstance().addAdapterGroupVO(vo);
            }

			logger.info(this.name + " Agent 가 성공적으로 완료되었습니다.");
            return "sucess";

        } catch (Exception e) {
            String msg = makeException("BECEAICAG002", e);
            logger.error(msg, e);
            throw new CommandException(msg);
        }
    }
}
