/**
 * @(#)file    FileListWorkerDelBiz.java
 * @(#)author  chj
 * @(#)version 1.0
 * @(#)date    2014-06-24
 * @(#)since   JDK1.6
 *
 * Copyright (c) www.udapsoft.co.kr, Inc.
 */
package kr.co.udapsoft.ebid.buyer.common.file.biz;

import java.sql.Connection;

import kr.co.hsnc.common.sql.RowSet;
import kr.co.hsnc.common.sql.persistent.Persistent;
import kr.co.hsnc.common.sql.persistent.PersistentImpl;
import kr.co.udapsoft.ebid.buyer.common.file.FileManager;

import com.udapsoft.modular.web.ibsheet7.IBSheet7Factory;
import com.udapsoft.waf.system.Biz;
import com.udapsoft.waf.system.HandlerStorage;

/**
 * 첨부파일 삭제 처리 
 * 
 */
public class FileListWorkerDelBiz extends Biz {

	public FileListWorkerDelBiz(HandlerStorage storage) {

		super(storage);
	}

	/* 
	 */
	public void doBiz() throws Exception {

		boolean success = false;
		
		//String[] status = super.gets("sheet1.STATUS");
		
		String[] status           = super.gets("sheet1.status");
		String[] file_id          = super.gets("sheet1.file_id");
		String[] temp_file_map_id = super.gets("sheet1.file_map_id");
		int toDeleteFileMapIdCnt = 0;
		for( int i = 0 ; i < status.length ; i++ ) {
			if( "D".equalsIgnoreCase(status[i]) )
				toDeleteFileMapIdCnt++;
		}
		
		if( toDeleteFileMapIdCnt > 0 ) {
			String[] file_map_id = new String[toDeleteFileMapIdCnt];
			int index = 0;
			for( int i = 0 ; i < status.length ; i++ ) {
				if( "D".equalsIgnoreCase(status[i]) ) {
					file_map_id[index++] = temp_file_map_id[i];
				}
			}
	        success = delFiles(file_map_id);
		}
		else {
			success = false;
			storage.setMessage("삭제할 파일을 선택하시지 않았습니다.<br><br>삭제할 파일을 선택하여 주시기 바랍니다.");
		}
		
		
        storage.setSuccess(success);
		storage.addObject("ibsheet7Data", IBSheet7Factory.createIBSheet7(params, storage.request));	}

    /**
     * 파일정보 및 파일 맵 삭제 처리
	 * @param fileMapID
	 * @return
	 */
	public boolean delFiles(String[] fileMapID) {

        try {
            conn.begin();
            
            // 삭제할 파일맵에 연결된 FILE_ID를 가진 RowSet을 리턴한다.
            RowSet fileIDrowSet = getFileIDRowSet(conn.getConnection(), fileMapID);

            // 파일맵 삭제
            delFileMap(conn.getConnection(), fileMapID);

            
            // 파일맵과 연결이 끈어진 파일 정보를 삭제한다.
            FileManager fileManager = new FileManager();
            fileManager.delDisConnectFileProc(conn.getConnection(), fileIDrowSet);

            return true;
        }
        catch(Exception e) {
        	super.doException(e);
            conn.setRollback();
            storage.setDetailMessage(e);
            return false;
        }
        finally {
            conn.end();
        }
    }

    /**
     * 삭제할 파일맵에 연결된 FILE_ID를 리턴한다.
	 * @param connection
	 * @param fileMapIDS
	 * @return
	 * @throws Exception
	 */
	public RowSet getFileIDRowSet(Connection connection, String[] fileMapID) throws Exception {

        Persistent persistent = new PersistentImpl(connection);
        String sqlstr = "";
        try {

            String fileMapIDS = "";
            for( int i = 0 ; i < fileMapID.length ; i++ ) {

                fileMapIDS += fileMapID[i];
                
                if( i < fileMapID.length - 1 ) {

                    fileMapIDS += " , ";
                }
            }

            sqlstr = " SELECT DISTINCT FILE_ID                      \n"
                   + " FROM   PUB0510T                              \n"
                   + " WHERE  FILE_MAP_ID IN ( " + fileMapIDS + " ) \n" ;

            persistent.setStatement(sqlstr);
            return persistent.query();
        }
        catch(Exception e) {
        	super.doException(e);
            throw e;
        }
    }

    /**
     * 파일맵 삭제
	 * @param connection
	 * @param fileMapIDS
	 * @throws Exception
	 */
	public void delFileMap(Connection connection, String[] fileMapID) throws Exception {

        Persistent persistent = new PersistentImpl(connection);
        String sqlstr = "";
        try {

            String fileMapIDS = "";
            for( int i = 0 ; i < fileMapID.length ; i++ ) {

                fileMapIDS += fileMapID[i];
                
                if( i < fileMapID.length - 1 ) {

                    fileMapIDS += " , ";
                }
            }

            sqlstr = " DELETE                                       \n"
                   + " FROM   PUB0510T                              \n"
                   + " WHERE  FILE_MAP_ID IN ( " + fileMapIDS + " ) \n" ;

            persistent.setStatement(sqlstr);
            persistent.execute();
        }
        catch(Exception e) {
        	super.doException(e);
            throw e;
        }
    }
}
