//package com.eactive.eai.inbound.remote;
//
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.InputStreamReader;
//
//import com.eactive.eai.batch.common.BatchDirUtil;
//import com.eactive.eai.batch.common.CalendarUtil;
//import com.eactive.eai.batch.common.ItmsSmsUtil;
//import com.eactive.eai.batch.common.StringUtil;
//import com.eactive.eai.common.property.PropManager;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//public abstract class CommonTransfer
//{
//
//	//리모트 전송 프라퍼티 정보
//	public static final String PROP_GROUP_REMOTE_TRANSFER      = "RemoteTransferInfo";
//	public static final String PROP_EAI_DUMMY_FILE_PATH        = "EAI_DUMMY_FILE_PATH";  //EAI 더미파일 경로 (WLI 수신파일 Event Generator 에 설정된 Archive 경로와 같아야함)
//
//    public static final String TRANSFER_TYPE_FTP  = "FTP";    //DB에 입력되는 값
//    public static final String TRANSFER_TYPE_NDM  = "NDM";    //DB에 입력되는 값
//
//    public static final String DIRECTION_SEND     = "송신";   //DB에 입력되는 값
//    public static final String DIRECTION_RECEIVE  = "수신";   //DB에 입력되는 값
//
//    public static final String STARTING_TYPE_EVENT      = "Event";        //DB에 입력되는 값
//    public static final String STARTING_TYPE_UI_NAVI    = "UI(탐색)";     //DB에 입력되는 값
//    public static final String STARTING_TYPE_UI_MANUAL  = "UI(수동)";     //DB에 입력되는 값
//
//    public static final String RESULT_CODE_SUCCESS          = "0";   //정상
//    public static final String RESULT_CODE_PROCESSING       = "P";   //진행중
//    public static final String RESULT_CODE_UNEXPECTED_ERROR = "999"; //오류
//    
//    public static final String SMSINFO             = "SMSInfo";
//    public static final String TRANS_MSG           = "trans.msg";
//    public static final String TRANS_LEVEL         = "trans.level";
//    
//    protected static Logger logger = LoggerFactory.getLogger(ElinkLogger.LOGGER_DEFAULT);
//
//	protected RemoteTransferLogVO logInfo;
//	protected boolean isLogging = true;
//	protected String scriptErrorMsg  = "";
//	protected String scriptOutputMsg = "";
//	private String applCd = "";
//	
//	private static String getPropEaiDummyPath() throws Exception {
//		String eaiDummyPath = PropManager.getInstance().getProperty(PROP_GROUP_REMOTE_TRANSFER, PROP_EAI_DUMMY_FILE_PATH);
//		if (eaiDummyPath == null) throw new Exception("'EAI 리모트 송신 더미파일 경로' 프라퍼티 정보가 없습니다. (PropGroupName:"+ PROP_GROUP_REMOTE_TRANSFER +", PropName:"+ PROP_EAI_DUMMY_FILE_PATH +")");
//		//디렉토리 맨끝에 "/" 가 있으면 빼로 리턴
//		return eaiDummyPath.endsWith("/")? eaiDummyPath.substring(0, eaiDummyPath.length()-1) : eaiDummyPath;
//	}
//
//	public RemoteTransferLogVO getTransferLogVO() {
//		return this.logInfo;
//	}
//
//	public static void sendFileByEvent(String eaiDir, String eaiFile) throws Exception {
//		transferFileByEvent(DIRECTION_SEND, eaiDir, eaiFile, "", "");
//	}
//
//	public static void receiveFileByEvent(String remoteDir, String remoteFile) throws Exception {
//		transferFileByEvent(DIRECTION_RECEIVE, "", "", remoteDir, remoteFile);
//	}
//
//	public static void transferFileByEvent(String sendRecvType, String eaiDir, String eaiFile, String remoteDir, String remoteFile) throws Exception {
//
//		//logger.info("[리모트송수신] ■ 리모트 Event 송수신 시작......");
//		//파라미터 체크
//		if (!sendRecvType.equals(DIRECTION_SEND) && !sendRecvType.equals(DIRECTION_RECEIVE)) throw new Exception("{송수신구분} 파라미터 오류");
//		if (sendRecvType.equals(DIRECTION_SEND) && eaiDir.equals("")) throw new Exception("{EAI 디렉토리} 파라미터 오류");
//		if (sendRecvType.equals(DIRECTION_SEND) && eaiFile.equals("")) throw new Exception("{EAI 파일명} 파라미터 오류");
//		if (sendRecvType.equals(DIRECTION_RECEIVE) && remoteDir.equals("")) throw new Exception("{리모트 디렉토리} 파라미터 오류");
//		if (sendRecvType.equals(DIRECTION_RECEIVE) && remoteFile.equals("")) throw new Exception("{리모트 파일명} 파라미터 오류");
//
//		String startingType = STARTING_TYPE_EVENT;
//		String userId       = "admin";
//
//		//---------------------------------------------------------------------
//		//1. Path 에 의한 remote Server 정보 조회
//		RemoteServerVO remoteServerVO;
//		try {
//			//logger.info("[리모트송수신] ▶ 업무구분에 의한 리모트 서버정보 조회...");
//			remoteServerVO = RemoteServerManager.getInstance().getRemoteServerByPath(sendRecvType.equals(DIRECTION_SEND)? eaiDir : remoteDir);
//			if (remoteServerVO==null) throw new Exception("해당 Remote 경로에 대한 Remote 서버를 찾을수 없음");
//		} catch (Exception ex) {
//			logger.error("[리모트송수신] ★★★★★ 업무구분에 의한 리모트 서버정보 조회시 오류발생 ★★★★★", ex);
//			logger.error("[리모트송수신] ▶ 리모트 송수신 오류 로그 기록...");
//			//파일전송 거래 오류로그 DB Insert
//			RemoteTransferLogVO logInfo = new RemoteTransferLogVO();
//			logInfo.setTransferLogId    ("RTL"+ CalendarUtil.getCurrentTimeNoDash() + StringUtil.getRandomDigit(3));   //전송로그ID 생성
//			logInfo.setSendRecvType     (sendRecvType);
//			logInfo.setEaiFilePath      (eaiDir);
//			logInfo.setEaiFileName      (eaiFile);
//			logInfo.setRemoteFilePath   (remoteDir);
//			logInfo.setRemoteFileName   (remoteFile);
//			logInfo.setStartingType     (startingType);
//			logInfo.setCreateId         (userId);
//			logInfo.setResultCode       (RESULT_CODE_UNEXPECTED_ERROR);  //오류
//			logInfo.setResultMsg        (ex.toString());
//			// DEFAULT 세팅 추가 2009.12.17 dhjeong
//			logInfo.setTransferType     (TRANSFER_TYPE_NDM);
//			logInfo.setFransferStartTime(CalendarUtil.getCurrentTimeNoDash());
//			logInfo.setFransferEndTime  (CalendarUtil.getCurrentTimeNoDash());
//
//			try {
//				RemoteTransferLogManager.getInstance().insertRemoteTransferLog(logInfo);
//			} catch (Exception e) {
//				logger.error( e.getMessage(), e);
//			}
//			throw ex;
//		}
//
//		//---------------------------------------------------------------------
//		//2. 해당 리모트서버에 설정된 전송타입 (FTP/NDM) 에 따른 객체 생성라 파일 송수신 수행
//		CommonTransfer tran = null;
//		if (remoteServerVO.getAutoTransferType().equals(TRANSFER_TYPE_FTP)) {
//			logger.info("[리모트송수신] ▶ FTP 리모트 송수신 객체 생성...");
//			tran = new FTPTransferByScript();
//
//		} else if (remoteServerVO.getAutoTransferType().equals(TRANSFER_TYPE_NDM)) {
//			logger.info("[리모트송수신] ▶ NDM 리모트 송수신 객체 생성...");
//			tran = new NDMTransferByScript();
//
//		} else {
//			throw new Exception("리모트 서버 정보의 {자동전송유형} 필드 값이 'FTP' 또는 'NDM' 이 아닙니다. (Value:"+ remoteServerVO.getAutoTransferType() +")");
//		}
//
//		//---------------------------------------------------------------------
//		//3. 리모트파일 송수신 수행
//		tran.transferFile(remoteServerVO, sendRecvType, eaiDir, eaiFile, remoteDir, remoteFile, startingType, userId);
//	}
//
//	public RemoteTransferLogVO transferFile(RemoteServerVO remoteServerVO,
//	                                        String sendRecvType,
//											String eaiDir,
//											String eaiFile,
//											String remoteDir,
//											String remoteFile,
//											String startingType,
//											String userId) throws Exception {
//
//		logger.info("[리모트송수신] ■ 리모트 송수신 수행 시작......");
//		logger.info("[리모트송수신] ⓟ 송수신구분      : ["+ sendRecvType +"] (송신: EAI→Remote, 수신: Remote→EAI)");
//		logger.info("[리모트송수신] ⓟ EAI 디렉토리    : ["+ eaiDir +"]");
//		logger.info("[리모트송수신] ⓟ EAI 파일명      : ["+ eaiFile +"]");
//		logger.info("[리모트송수신] ⓟ 리모트 디렉토리 : ["+ remoteDir +"]");
//		logger.info("[리모트송수신] ⓟ 리모트 파일명   : ["+ remoteFile +"]");
//		logger.info("[리모트송수신] ⓟ 기동유형        : ["+ startingType +"]");
//		logger.info("[리모트송수신] ⓟ 사용자ID        : ["+ userId +"]");
//
//		//파라미터 체크
//		if (remoteServerVO == null) throw new Exception("{리모트서버 VO} 파라미터 오류");
//		if (!sendRecvType.equals(DIRECTION_SEND) && !sendRecvType.equals(DIRECTION_RECEIVE)) throw new Exception("{송수신구분} 파라미터 오류");
//		if (sendRecvType.equals(DIRECTION_SEND) && eaiDir.equals("")) throw new Exception("{EAI 디렉토리} 파라미터 오류");
//		if (sendRecvType.equals(DIRECTION_SEND) && eaiFile.equals("")) throw new Exception("{EAI 파일명} 파라미터 오류");
//		if (sendRecvType.equals(DIRECTION_RECEIVE) && remoteDir.equals("")) throw new Exception("{리모트 디렉토리} 파라미터 오류");
//		if (sendRecvType.equals(DIRECTION_RECEIVE) && remoteFile.equals("")) throw new Exception("{리모트 파일명} 파라미터 오류");
//		if (!startingType.equals(STARTING_TYPE_EVENT) && !startingType.equals(STARTING_TYPE_UI_NAVI) && !startingType.equals(STARTING_TYPE_UI_MANUAL)) throw new Exception("{기동유형} 파라미터 오류");
//		if (userId.equals("")) throw new Exception("{사용자ID} 파라미터 오류");
//		//---------------------------------------------------------------------
//		//1. 리모트파일 전송 시작로그 DB Insert
//		//파일전송 로그정보 설정
//		if (logInfo==null) logInfo = new RemoteTransferLogVO();
//		logInfo.setTransferLogId    ("RTL"+ CalendarUtil.getCurrentTimeNoDash() + StringUtil.getRandomDigit(3));   //전송로그ID 생성
//		logInfo.setRemoteServerVO   (remoteServerVO);
//		logInfo.setRemoteServerId   (remoteServerVO.getRemoteServerId());
//		logInfo.setSendRecvType     (sendRecvType);
//		logInfo.setEaiFilePath      (eaiDir);
//		logInfo.setEaiFileName      (eaiFile);
//		logInfo.setRemoteFilePath   (remoteDir);
//		logInfo.setRemoteFileName   (remoteFile);
//		logInfo.setStartingType     (startingType);
//		logInfo.setFransferStartTime(CalendarUtil.getCurrentTimeNoDash());
//		logInfo.setCreateId         (userId);
//		logInfo.setResultCode       (RESULT_CODE_PROCESSING);  //진행중
//		if (this instanceof FTPTransferByApi || this instanceof FTPTransferByScript) {
//			logInfo.setTransferType     (TRANSFER_TYPE_FTP);
////		} else if (this instanceof NDMTransferByApi || this instanceof NDMTransferByScript) {
////			logInfo.setTransferType     (TRANSFER_TYPE_NDM);
////			String sendRecvGb = null;
////			String fileName = null;
////			String ndmPname = null;
////			
////			// DIRECTION_SEND 의 의미는 EAI-->내부서버이며 여기서 sendRecvGb는 대외기관과의 송수신 구분을 의미하므로 반대로 세팅함.
////			if ( sendRecvType.equals(DIRECTION_SEND) ){
////				sendRecvGb = "RECV";
////			}else{
////				sendRecvGb = "SEND";
////			}
////			int index = eaiFile.indexOf('_');
////			if ( index > 0 ) {
////				fileName = eaiFile.substring(0,index);
////			}else{
////				fileName = eaiFile;
////			}
////			if ( fileName.length() > 7 ){
//////				ndmPname = sendRecvGb.subSequence(0,1) + fileName.substring(0,7);
////				// 파일명이 8자리 이상인 경우 파일명 8자리를 그대로 보내 준다.
////				// 향후 중복이 발생하게 되면 별도의 송신 스크립트를 만들어서 강제로 세팅하도록 한다.
////				// 2009.03.27
////				ndmPname = fileName.substring(0,8);
////			}else if ( fileName.length() > 3 ){
////				ndmPname = sendRecvGb.subSequence(0, 8 - fileName.length()) + fileName;
////			}else {
////				ndmPname = sendRecvGb + fileName + "0000";
////				ndmPname = ndmPname.substring(0,8);
////			}
////			logInfo.setNdmPname(ndmPname);
//		}
//
//		boolean  isTreatDummyFile = false;  //더미파일 생성여부 (Event 또는 UI_탐색화면으로 부터 기동한 경우 더미파일 생성)
//		String   eaiDelimiter     = "";
//		String   remoteDelimiter  = "";
//		String   dirTree          = "";
//		String   eaiDummyPath     = "";
//		String   remoteDummyPath  = "";
//		String[] batchCode        = null;
//
//		try {
//    
//            //---------------------------------------------------------------------
//            //2. Event 또는 UI_탐색화면으로 부터 기동한 경우 상대 경로 설정
//            if (sendRecvType.equals(DIRECTION_SEND) && (remoteDir.equals("") || remoteFile.equals(""))) {
//                //EAI경로로 부터 리모트경로 설정
//                isTreatDummyFile = true;
//                eaiDelimiter    = StringUtil.getDirDelimiter(eaiDir);
//                remoteDelimiter = StringUtil.getDirDelimiter(remoteServerVO.getRemoteRootDir());
//                dirTree         = eaiDir.substring(BatchDirUtil.getResponseArchDir().length());      //예) /퇴직연금_WSR00/교보생명_IL05/계약및가입자_0100
////              2008.1.16 by kscheon - start
////                remoteDir       = remoteServerVO.getRemoteRootDir() + remoteDelimiter + "수신_Real"+ dirTree.replaceAll(eaiDelimiter, remoteDelimiter);
//                remoteDir       = remoteServerVO.getRemoteRootDir() + remoteDelimiter + StringUtil.replaceStr("수신_Real"+ dirTree, eaiDelimiter, remoteDelimiter);
////              2008.1.16 by kscheon - end    
//                remoteFile      = eaiFile;  //EAI 파일명 그대로
//                remoteDummyPath = remoteDir.replaceFirst("Real", "Root");
//                batchCode       = dirTree.substring(1).split(eaiDelimiter.replaceAll("\\\\", "\\\\\\\\"));
////                String instCode = batchCode.length<2? "" : batchCode[1].substring(   batchCode[1].indexOf("_") + 1);
////            	String fileName = checkFileName(remoteServerVO, instCode, eaiFile); 
////            	if ( !StringUtil.nvlTrim(fileName).equals("")) {
////            		remoteFile = fileName;
////            		isTreatDummyFile = false;
////            	}
//    
//            } else if (sendRecvType.equals(DIRECTION_RECEIVE) && (eaiDir.equals("") || eaiFile.equals(""))) {
//                //리모트경로로 부터 EAI경로 설정
//            	
//            	// 해당기능 없음 2012.11.28
////                isTreatDummyFile = true;
////                eaiDelimiter    = StringUtil.getDirDelimiter(BatchDirUtil.getRequestRealDir());
////                remoteDelimiter = StringUtil.getDirDelimiter(remoteDir);
////                String dirSuffix = remoteDir.substring(remoteServerVO.getRemoteRootDir().length());  //예) /송신_Real/퇴직연금_WSR00/교보생명_IL05/계약및가입자_0100
////                dirTree         = dirSuffix.substring(dirSuffix.indexOf(remoteDelimiter, 1));        //예) /퇴직연금_WSR00/교보생명_IL05/계약및가입자_0100
////                eaiDir          = BatchDirUtil.getRequestRealDir() + dirTree;
////                eaiFile         = remoteFile;  //리모트 파일명 그대로
////                eaiDummyPath    = BatchDirUtil.getRequestRootDir() + dirTree;
////                batchCode       = dirTree.substring(1).split(remoteDelimiter.replaceAll("\\\\", "\\\\\\\\"));
//    
//            } else if (startingType.equals(STARTING_TYPE_UI_MANUAL)) {
//                eaiDelimiter    = StringUtil.getDirDelimiter(eaiDir);
//                remoteDelimiter = StringUtil.getDirDelimiter(remoteDir);
//                //수동 입력된 EAI 디렉토리가 EAI 배치 구조에 맞는지 체크 (송수신 Real/Root/Arch 디렉토리 길이가 모두 같음을 전제함)
//                if (eaiDir.length() > BatchDirUtil.getResponseArchDir().length()) {  //
//                    dirTree         = eaiDir.substring(BatchDirUtil.getResponseArchDir().length());      //예) /퇴직연금_WSR00/교보생명_IL05/계약및가입자_0100
//                    batchCode       = dirTree.substring(1).split(eaiDelimiter.replaceAll("\\\\", "\\\\\\\\"));
//                }
//            }
//    
//            //파일전송 로그정보 설정 (업무구분/대외기관/거래구분그룹)
//            if (batchCode != null) {
//                logInfo.setProcessCode      (batchCode.length<1? "" : batchCode[0].substring(   batchCode[0].indexOf("_") + 1));
//                logInfo.setProcessName      (batchCode.length<1? "" : batchCode[0].substring(0, batchCode[0].indexOf("_")));
//                logInfo.setOrganCode        (batchCode.length<2? "" : batchCode[1].substring(   batchCode[1].indexOf("_") + 1));
//                logInfo.setOrganName        (batchCode.length<2? "" : batchCode[1].substring(0, batchCode[1].indexOf("_")));
//                logInfo.setBizGroupCode     (batchCode.length<3? "" : batchCode[2].substring(   batchCode[2].indexOf("_") + 1));
//                logInfo.setBizGroupName     (batchCode.length<3? "" : batchCode[2].substring(0, batchCode[2].indexOf("_")));
//                
//            }
//    
//            if (sendRecvType.equals(DIRECTION_SEND)) {
//                logger.info("[리모트송수신]    ☞ FROM : EAI    Dir [ "+ eaiDir    + eaiDelimiter    + eaiFile +" ]");
//                logger.info("[리모트송수신]    ☞ TO   : Remote Dir [ "+ remoteDir + remoteDelimiter + remoteFile +" ]");
//            } else {
//                logger.info("[리모트송수신]    ☞ FROM : Remote Dir [ "+ remoteDir + remoteDelimiter + remoteFile +" ]");
//                logger.info("[리모트송수신]    ☞ TO   : EAI    Dir [ "+ eaiDir    + eaiDelimiter    + eaiFile +" ]");
//            }
//		} catch (Exception ex) {
//			logger.error("★★★★★ 전송경로 설정 시 오류 발생 !! ★★★★★", ex);
//			//에러 메시지 설정
//			logInfo.setResultCode       (RESULT_CODE_UNEXPECTED_ERROR);
//			logInfo.setResultMsg        ("리모트파일 전송 경로 설정시 오류가 발생하였습니다.\n> caused by..."+ ex.toString());
//			try {
//				logger.info("[리모트송수신]    ▶ 리모트파일 전송 결과로그 DB Update...");
//				logInfo.setFransferEndTime(CalendarUtil.getCurrentTimeNoDash());
//				RemoteTransferLogManager.getInstance().insertRemoteTransferLog(logInfo);
//			} catch (Exception e) {
//				logger.error("전송경로 설정 오류 시 전송결과로그 Update 시 오류 발생!", e);
//			}
//            throw ex;
//		}
//		
//		try {
//			//리모트파일 전송 시작로그 DB Insert
//			logger.info("[리모트송수신]    ▶ 리모트파일 전송 시작로그 DB Insert...");
//			RemoteTransferLogManager.getInstance().insertRemoteTransferLog(logInfo);
//
//		} catch (Exception ex) {
//			logInfo.setResultCode       (RESULT_CODE_UNEXPECTED_ERROR);
//			logInfo.setResultMsg        (ex.toString());
//			throw new Exception("리모트파일 전송 전 전송시작로그 Insert 시 오류 발생!\n caused by..."+ ex.toString());
//		}
//
//		//---------------------------------------------------------------------
//        //3. 리모트파일 송수신 수행
//		try {
//			//=================================================================
//			// 3-1. 송신 (EAI -> Remote)
//			//=================================================================
//			if (sendRecvType.equals(DIRECTION_SEND)) {
//				//리모트서버로 실제파일 송신.
//				logger.info("[리모트송수신]    ▶ 리모트 서버에 실제파일 송신...");
//				try {
//					sendFile(remoteServerVO, eaiDir, eaiFile, remoteDir, remoteFile);
//				} catch (Exception ex) {
//					throw new Exception("Real 파일 송신 실패!\n> caused by..."+ ex.toString());
//				}
//
//				if (isTreatDummyFile) {
//					//리모트서버로 더미파일 송신.
//					logger.info("[리모트송수신]    ▶ 리모트 서버에 더미파일 송신...");
//					try {
//						this.isLogging = false;  //더미파일 송신은 로그정보 설정 안함
//						sendFile(remoteServerVO, getPropEaiDummyPath(), eaiFile, remoteDummyPath, remoteFile);
//						this.isLogging = true;
//
//					} catch (Exception ex) {
//						throw new Exception("Dummy 파일 송신 실패!\n> caused by..."+ ex.toString());
//					}
//				}
//
//			//=================================================================
//			// 3-2. 수신 (Remote -> EAI)
//			//=================================================================
//			} else if (sendRecvType.equals(DIRECTION_RECEIVE)) {
//				//리모트서버로 부터 실제파일 수신.
//				logger.info("[리모트송수신]    ▶ 리모트 서버로부터 실제파일 수신...");
//				try {
//					/*20081106 by kscheon
//					 * 로컬이여도 파일 copy가 아닌 ftp script 실행
//                    if (remoteIsLocal == true) {
//                        FileUtil.copyTransferFile(new File(remoteDir+remoteDelimiter+remoteFile), new File(eaiDir+eaiDelimiter+eaiFile));
//                    } else {
//                    */
//                        receiveFile(remoteServerVO, remoteDir, remoteFile, eaiDir, eaiFile);
//                    //}
//				} catch (Exception ex) {
//					throw new Exception("Real 파일 수신 실패!\n> caused by..."+ ex.toString());
//				}
//
//				if (isTreatDummyFile) {
//					//더미파일 생성
//					logger.info("[리모트송수신]    ▶ EAI 서버에 더미파일 생성...");
//					File dummyFile = new File(eaiDummyPath, eaiFile);
//					boolean dummyResult = dummyFile.createNewFile();
//					if (dummyResult==false) throw new Exception("Dummy 파일 생성 실패");
//				}
//			}
//
//
//		} catch (Exception ex) {
//			logger.error("★★★★★ 리모트파일 전송 시 오류 발생 !! ★★★★★", ex);
//			//에러 메시지 설정
//			if (logInfo.getResultCode().equals("") || 
//                logInfo.getResultCode().equals(RESULT_CODE_PROCESSING)) logInfo.setResultCode(RESULT_CODE_UNEXPECTED_ERROR);
//			logInfo.setResultMsg        (ex.getMessage());
//            throw ex;
//
//		//---------------------------------------------------------------------
//		//4. 리모트파일 전송 결과로그 DB Update
//		} finally {
//			try {
//				logger.info("[리모트송수신]    ▶ 리모트파일 전송 결과로그 DB Update...");
//				RemoteTransferLogManager.getInstance().updateRemoteTransferLog(logInfo);
//				// 송신인 경우 SMS발송한다.
//				if ( sendRecvType.equals(DIRECTION_SEND) && !logInfo.getResultCode().endsWith(RESULT_CODE_SUCCESS) ){
//					sendITSMSms();
//				}
//
//			} catch (Exception ex) {
//				logger.error("리모트파일 전송 후 전송결과로그 Update 시 오류 발생!", ex);
//			}
//		}
//
//		logger.info("[리모트송수신] ■ 리모트 송수신 수행 완료.");
//		return logInfo;
//	}
//
//
//
//	protected void runSystemScript(String[] command) throws Exception {
//
//		String cmdLine = command[0];
//		for ( int inx=1; inx < command.length; inx++)
//			cmdLine += " " + command[inx];
//
//		logger.info("[리모트송수신] [Runtime.Exec]    ▶ System Command Runtime 수행 시작...");
//		logger.info("[리모트송수신] [Runtime.Exec]    ⓟ Command : ["+ cmdLine +"]");
//
//		//1. System FTP Shell 명령어를 Runtime 으로 실행
//		Process process = Runtime.getRuntime().exec(command);
//
//		//2. Runtime 실행 결과 저장
//		BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
//		String errorLine = null;
//		StringBuffer errorBuffer = new StringBuffer();
//		while ((errorLine = errorReader.readLine()) != null) {
//			if (errorBuffer.length() > 0) errorBuffer.append("\n");
//			errorBuffer.append(errorLine);
//			logger.debug("[리모트송수신] [Runtime.Exec]       stderr> "+ errorLine);
//		}
//
//		BufferedReader outputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//		String outputLine = null;
//		StringBuffer outputBuffer = new StringBuffer();
//		while ((outputLine = outputReader.readLine()) != null) {
//			if (outputBuffer.length() > 0) outputBuffer.append("\n");
//			outputBuffer.append(outputLine);
//			logger.debug("[리모트송수신] [Runtime.Exec]       stdout> "+ outputLine);
//		}
//
//		int exitVal = process.waitFor();
//
//		scriptErrorMsg  = errorBuffer.toString();
//		scriptOutputMsg = outputBuffer.toString();
//
//		logger.info("[리모트송수신] [Runtime.Exec]    ☞ Exit Value : "+ exitVal);
//		logger.info("[리모트송수신] [Runtime.Exec]    ▶ System Command Runtime 수행 완료.");
//
//		if (isLogging) logInfo.setResultCode(exitVal+"");
//
//		if (exitVal != 0) throw new Exception("Runtime.Exec 으로 실행한 Command exit value (="+ exitVal +") 가 정상이 아닙니다. (Command : "+ cmdLine +")\n> caused by..."+ scriptErrorMsg);
//	}
//
//	public abstract void sendFile   ( RemoteServerVO remoteServerVO,
//	                                  String eaiDir,
//									  String eaiFile,
//									  String remoteDir,
//									  String remoteFile ) throws Exception;
//
//	public abstract void receiveFile( RemoteServerVO remoteServerVO,
//	                                  String remoteDir,
//									  String remoteFile,
//									  String eaiDir,
//									  String eaiFile ) throws Exception;
//
////	private String checkFileName (RemoteServerVO remoteServerVO,
////			                       String institutionCode,
////			                       String eaiFile) throws Exception {
////		String processCode = remoteServerVO.getProcessCode();
////		String bizCode = getBizcode( processCode, institutionCode, eaiFile);
////		logInfo.setBizCode( bizCode );
////		BatchJobInfoVO info = DirInfoManager.getInstance().getFileInfoByDstcd(processCode, bizCode);
////		if ( info == null ) return null;
////		logInfo.setJobCode(info.getMsgDstCode());
////		applCd = info.getUapplCd();
////		if ( info.getRemoteNodeName() != null && !info.getRemoteNodeName().trim().equals( "")){
////			remoteServerVO.setRemoteNodeName(info.getRemoteNodeName());
////		}
////		return info.getFilename();
////	}
//	
////	private String getBizcode(String processCode,
////	                          String institutionCode,
////	                          String fileName) throws Exception { 
////		
////
////		//거래구분 코드 설정
////		int bizCodeStartIndex = 0;
////		int bizCodeEndIndex   = 0;
////		int orgIndex          = 0;
////		ArrayList<OutsideVO> organList = OutsideManager.getInstance().getOutsideInfo(processCode);
////		for (int i=0; organList!=null && i<organList.size(); i++) {
////			OutsideVO organInfo = organList.get(i);
////			if ( institutionCode.equals(organInfo.getOsdCode()) ) {
////				bizCodeStartIndex = organInfo.getBizCdStartIdx();
////				bizCodeEndIndex   = organInfo.getBizCdEndIdx();
////				orgIndex          = organInfo.getBizCdEndIdx();
////				break;
////			}
////		}
////		if (bizCodeStartIndex <= 0 || bizCodeStartIndex >= fileName.length()) bizCodeStartIndex = 0;
////		if (bizCodeEndIndex   <= 0 || bizCodeEndIndex   >  fileName.length()) bizCodeEndIndex = fileName.length();
////		
////        String bizCode = fileName.substring(bizCodeStartIndex, bizCodeEndIndex);
////        // 거래 구분 코드 길이가 가변인 경우( END INDEX가 0인 경우)
////        if ( orgIndex == 0 ){
////	        String delStr = null;
////	        try {
////	        	Properties orgInfo = PropManager.getInstance().getProperties( 
////	        			"TelegramInfo{" + processCode + "_" + institutionCode + "}");
////	            delStr = orgInfo.getProperty( "del.string" );
////				
////			} catch (Exception e) {}
////
////	        if ( delStr != null && !delStr.trim().equals("")){
////	        
////	        	int delIndex = bizCode.indexOf(delStr);
////
////	        	if ( delIndex > -1 ) {
////	        		bizCode = bizCode.substring(0, delIndex );
////	        	}
////	        }
////        }
////		return bizCode;
////	}
//
//	private void sendITSMSms(){
//		
//		try {
//
//			String message = "[수신 실패]" +  "업무명:" + logInfo.getProcessName()
//            + " 기관명:" + logInfo.getOrganName()
//            + " 파일명:" + logInfo.getEaiFileName();
//			ItmsSmsUtil.sendSMS( PropManager.getInstance().getProperty(ItmsSmsUtil.SMSINFO, ItmsSmsUtil.REQ_BY_GROUP), applCd, message );
//			if ( applCd != null && !applCd.trim().equals("")){
//				if (!PropManager.getInstance().getProperty(ItmsSmsUtil.SMSINFO, ItmsSmsUtil.EAI_SEND_YN).trim().equals("")){
//					ItmsSmsUtil.sendSMS( PropManager.getInstance().getProperty(ItmsSmsUtil.SMSINFO, ItmsSmsUtil.REQ_BY_GROUP), "", message);
//				}
//			}
//
//		} catch (Exception e) {}		
//	}
//	
//}
