/***********************************************************************************
 * @@ Program Name : ReportDataSet.java Description : 보고양식에 입력받은 엑셀서식또는 한글서식의 값을 셋팅해줌. Author : 배정환 Create Date :
 *    2007-10-24 History :
 * @@
 ***********************************************************************************/

package kr.co.kihyun.beans.totsys.report;

public class ReportDataSet {

    /********* insert form: doc, table, javascript **********/
    private String originalReportForm = "";
    private StringBuffer newReportForm = null;
    private int change = 1;

    /********* insert form: item values **********/
    /*
    public String setForm(String insertForm, String copyForm) {
            originalReportForm = insertForm;
    //System.out.println("내부 copyForm::::::"+copyForm);

            copyForm = copyForm.toLowerCase(); //입력된 폼의 문자들을 소문자로 무조건 바꾼다.
    //copyForm = copyForm.toUpperCase(); //입력된 폼의 문자들을 대문자로 무조건 바꾼다.
            int eif = 0;
            int ecf = 0;
            String ifsub = insertForm;
            String cfsub = copyForm;
            StringBuffer iftmp;
            StringBuffer cftmp;
            newReportForm = new StringBuffer();

            for (; eif != -1;) {        
                    eif = ifsub.indexOf("<td");
                    ecf = cfsub.indexOf("<td");
                    if (eif != -1 && ecf != -1) {
                            newReportForm.append(ifsub.substring(0, eif));
                            ifsub = ifsub.substring(eif);
                            cfsub = cfsub.substring(ecf);
                            eif = ifsub.indexOf("</td>");
                            ecf = cfsub.indexOf("</td>");
                            if (eif == -1 || ecf == -1) {
                                    change = 0;
                                    break;
                            }
                            iftmp = new StringBuffer(ifsub.substring(0, eif));
                            cftmp = new StringBuffer(cfsub.substring(0, ecf));
                            ifsub = ifsub.substring(eif);
                            cfsub = cfsub.substring(ecf);

                            if ((iftmp.indexOf("<input")) == -1 && (iftmp.indexOf("<select")) == -1) {
                                    newReportForm.append(iftmp.toString());
                            } else {
                                    StringBuffer value = new StringBuffer();
                                    for (int i = 0; i < cftmp.length(); i++) { // 입력할 폼의 해당셀에서 입력값을 추출한다.
                                            if (cftmp.charAt(i) == '<') {
                                                    for (; i < cftmp.length(); i++) {
                                                            if (cftmp.charAt(i) == '>')
                                                                    break;
                                                    }                           
                                            } else {
                                                    value.append(cftmp.charAt(i));                             
                                            }
                                    }

                                    String inValue = "";
                                    inValue = value.toString();
                                    if (inValue.equals("　") || inValue == null) {
                                            inValue = "";
                                    };

                                    inValue = inValue.replaceAll("\r\n&nbsp; ", "");

                                    if ( iftmp.indexOf("<select") == -1) {
                                        if ((iftmp.indexOf("checkNum")) != -1) {
                                                if (inValue.equals("")) {
                                                        inValue = "0";
                                                }
                                        }

                                        if ((iftmp.indexOf("value=")) == -1) {
                                                iftmp.insert((iftmp.indexOf("<input") + 6), " value='" + inValue + "' ");
                                        } else {
                                                iftmp.replace(iftmp.indexOf("value="), iftmp.indexOf(" ", iftmp.indexOf("value=")), "value='"+ inValue + "'");
                                        }
                                    }else{
                                        iftmp.insert((iftmp.indexOf("<select") + 7), " selected_val='" + inValue + "' ");
                                    }
                                    newReportForm.append(iftmp.toString());     
                            }
                    } else if (eif == -1 && ecf == -1) {
                            newReportForm.append(ifsub);
                            break;
                    } else {
                            change = 0;
                            break;
                    }
            }



            if (change == 1)
                    return (newReportForm.toString());
            else
                    return originalReportForm;

    }
    */
        
    /**
     * 표복사입력시 입력된 표를 String 으로  사용하는 메서드. Refactoring 2014.12.02 by YOUNGJUN,CHO
     *  - 수정 1. 사용자가 붙여넣기한 표의 String 을 무조건 소문자로 변경하여 처리하므로 인해서, 입력값의 대소문자 구분이 되지 않던 부분 수정처리.
     *  - 수정 2. select box 에 사용자가 입력한 값을 selected 로 지정하는 경우 한글(hwp)에서 붙여넣기시 값 자체에 불필요한 공백이 따라붙는 현상이 발견되어 trim 처리함.
     * 
     * @param insertForm
     * @param copyForm
     * @return 
     */
    public String setForm(String insertForm, String copyForm) {
        originalReportForm = insertForm;
        
//System.out.println("원본      insertForm::::::"+insertForm);
//System.out.println("표복사입력 copyForm::::::"+copyForm);
        
        int eif = 0;
        int ecf = 0;
        String ifsub = insertForm;
        String cfsub = copyForm;
        StringBuffer iftmp;
        StringBuffer cftmp;
        newReportForm = new StringBuffer();
        int    iPosItemType = 0;
        String itemType;

        for (; eif != -1;) {
            eif = ifsub.toLowerCase().indexOf("<td");
            ecf = cfsub.toLowerCase().indexOf("<td");

            if (eif != -1 && ecf != -1) {
                newReportForm.append(ifsub.substring(0, eif));

                ifsub = ifsub.substring(eif);
                cfsub = cfsub.substring(ecf);

                eif = ifsub.toLowerCase().indexOf("</td>");
                ecf = cfsub.toLowerCase().indexOf("</td>");

                if (eif == -1 || ecf == -1) {
                    change = 0;
                    break;
                }
                          
                iftmp = new StringBuffer(ifsub.substring(0, eif));
                cftmp = new StringBuffer(cfsub.substring(0, ecf));
                ifsub = ifsub.substring(eif);
                cfsub = cfsub.substring(ecf);
                
                // 집계자가 작성한 표의 String 을 소문자로 변경하여 비교한다. 2014.12.02 by YOUNGJUN,CHO
                String iftmpToLowerCase = iftmp.toString().toLowerCase();

                if ((iftmpToLowerCase.indexOf("<input")) == -1 && (iftmpToLowerCase.indexOf("<select")) == -1) {
                    newReportForm.append(iftmp.toString());
                } else {
                    StringBuilder value = new StringBuilder();
    
                    for (int i = 0; i < cftmp.length(); i++) { // 입력할 폼의 해당셀에서 입력값을 추출한다.
                        if (cftmp.charAt(i) == '<') {
                            for (; i < cftmp.length(); i++) {
                                if (cftmp.charAt(i) == '>')
                                    break;
                            }                           
                        } else {
                            value.append(cftmp.charAt(i));                             
                        }
                    }

                    String inValue = "";
                    inValue = value.toString();
                    if (inValue.equals("　") || inValue == null) {
                            inValue = "";
                    }

                    inValue = inValue.replaceAll("\r\n&nbsp; ", "");
                    
                    // 사용자가 입력한 값을 trim 처리를 한다. 2014.12.02 by YOUNGJUN,CHO
                    // 한글에서 표를 복사하여 입력할 경우 select box 에 넣을 값에 불필요한 공백이 생긴다.
                    inValue = inValue.trim();
                    
                    if ( iftmpToLowerCase.indexOf("<select") == -1) {
                        if ((iftmpToLowerCase.indexOf("checknum")) != -1) {
                            //2015.01.13 Update by KWON,HAN : 숫자타입(2)인 경우에는 0(zero)로 설정한다. 3(날짜), 1(문자)은 제외한다.
                            //if (inValue.equals("")) {
                            //    inValue = "0";
                            //}                            
                            iPosItemType = iftmpToLowerCase.indexOf("itemtype");
                            if (iPosItemType != -1) {
                                itemType = iftmpToLowerCase.substring(iPosItemType+10,iPosItemType+11);
                                if ("2".equals(itemType) && inValue.equals("")) {
                                    inValue = "0";
                                }
                            } 
                            //=================================
                        }

                        if ((iftmpToLowerCase.indexOf("value=")) == -1) {
                            iftmp.insert((iftmpToLowerCase.indexOf("<input") + 6), " value='" + inValue + "' ");
                        } else {
                            iftmp.replace(iftmpToLowerCase.indexOf("value="), iftmpToLowerCase.indexOf(" ", iftmpToLowerCase.indexOf("value=")), "value='"+ inValue + "'");
                        }
                    }else{
                        iftmp.insert((iftmpToLowerCase.indexOf("<select") + 7), " selected_val='" + inValue + "' ");
                    }
                    
                    newReportForm.append(iftmp.toString());     
                }
            } else if (eif == -1 && ecf == -1) {
                newReportForm.append(ifsub);
                break;
            } else {
                change = 0;
                break;
            }
        }

        if (change == 1)
            return (newReportForm.toString());
        else
            return originalReportForm;
    }
        
    public int getChange() {
        return change;
    }
}
