# Java

java programs

# 동적 Jar loading 프로그램

#### 동적 jar 로딩 및 동적 method 호출 

- ```
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_1">   1</a> package com.exec;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_2">   2</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_3">   3</a> import java.io.File;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_4">   4</a> import java.io.FileFilter;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_5">   5</a> import java.io.FilenameFilter;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_6">   6</a> import java.lang.reflect.InvocationTargetException;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_7">   7</a> import java.lang.reflect.Method;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_8">   8</a> import java.net.URL;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_9">   9</a> import java.net.URLClassLoader;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_10">  10</a> import java.util.Arrays;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_11">  11</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_12">  12</a> public class ExecTest {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_13">  13</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_14">  14</a>         public static void main(String[] args) throws NoSuchMethodException, SecurityException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_15">  15</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_16">  16</a>                 // 코리안리 EAI customer function 위치 (고정 값)
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_17">  17</a>                 String dir = "C:\\eclipse-workspace\\com.exec\\src\\main\\resources\\deployFilder";
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_18">  18</a>                 // 코리안리 EAI customer function prefix (고정 값) 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_19">  19</a>                 String jarName = "kr.co.koreanre.eai";
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_20">  20</a>                 // 코리안리 EAI customer function Class 명 분류 할 수도 있다. 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_21">  21</a>                 String className = "kr.co.koreanre.eai.execEaiFunctionClass";
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_22">  22</a>                 // 코리안리 EAI customer function method 명은 고정 예정 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_23">  23</a>                 String methodName = "execMathod";
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_24">  24</a>                 // 코리안리 EAI customer function method에 전달되는 문자열 전달 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_25">  25</a>                 String param = "Call method ,"; 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_26">  26</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_27">  27</a>                 ExecTest ex = new ExecTest();
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_28">  28</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_29">  29</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_30">  30</a>                 // kr.co.koreanre.eai-202110280920.jar의 include 여부를 확인, include되어도 최신 버전이 아닌 경우는 false로 return  
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_31">  31</a>                 if(!ex.checkLoadedJarList(dir,jarName))
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_32">  32</a>                 {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_33">  33</a>                         System.out.println(" > Do not include : " + jarName );
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_34">  34</a>                         // 최신 버전으로 include 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_35">  35</a>                         ex.loadJar(dir);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_36">  36</a>                 }               
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_37">  37</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_38">  38</a>                 String returnString = ex.execMethod(className, methodName, param);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_39">  39</a>                 System.out.println(" > Return Value : " + returnString);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_40">  40</a>                 ex.checkLoadedJarList(dir, jarName);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_41">  41</a>         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_42">  42</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_43">  43</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_44">  44</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_45">  45</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_46">  46</a>         /* =================================================================================== */
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_47">  47</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_48">  48</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_49">  49</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_50">  50</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_51">  51</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_52">  52</a>         /**
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_53">  53</a>          * kr.co.koreanre.eai-202110280920.jar의 로드 여부를 확인 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_54">  54</a>          * 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_55">  55</a>          * @param jarName
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_56">  56</a>          * @return boolean
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_57">  57</a>          */
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_58">  58</a>         private boolean checkLoadedJarList(String dir, String jarName) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_59">  59</a>                 System.out.println("\n>> Start Check loaded Jar list " ); 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_60">  60</a>                 boolean includJar = false;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_61">  61</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_62">  62</a>                 ClassLoader classLoader = ClassLoader.getSystemClassLoader();
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_63">  63</a>                 URL[] urls = ((URLClassLoader)classLoader).getURLs();
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_64">  64</a>                   
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_65">  65</a>         for(URL url: urls){
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_66">  66</a>             if( url.getFile().toLowerCase().contains(".jar") ) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_67">  67</a>                 System.out.println(" > Included Jar : " + url.getFile());
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_68">  68</a>                     if(url.getFile().toLowerCase().contains(jarName))
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_69">  69</a>                     {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_70">  70</a>                         if(isLoadNewVersionJar(dir, url.getFile()))
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_71">  71</a>                         {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_72">  72</a>                                 includJar = true;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_73">  73</a>                         }else {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_74">  74</a>                                 includJar = false;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_75">  75</a>                         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_76">  76</a>                     }else {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_77">  77</a>                         includJar = false;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_78">  78</a>                     }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_79">  79</a>             }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_80">  80</a>         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_81">  81</a>         return includJar;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_82">  82</a>         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_83">  83</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_84">  84</a>         /**
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_85">  85</a>          * 디렉토리 안에서 파라메터로 전달한 jar 파일이 최신인지 여부를 판단 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_86">  86</a>          * @param dir 검토 폴더 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_87">  87</a>          * @param jarName 비교 jar 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_88">  88</a>          * @return boolean
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_89">  89</a>          */
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_90">  90</a>         private boolean isLoadNewVersionJar(String dir, String jarName) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_91">  91</a>                 boolean isNweVersion = false;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_92">  92</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_93">  93</a>                 File file = new File(dir);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_94">  94</a>                 File[] fileNameList = file.listFiles(new FilenameFilter() {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_95">  95</a>                         public boolean accept(File dir, String name) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_96">  96</a>                                 return name.endsWith("jar");
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_97">  97</a>                         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_98">  98</a>                 });
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_99">  99</a>                  
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_100"> 100</a>                 if(fileNameList.length==0) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_101"> 101</a>                         throw new NoClassDefFoundError("Koreanre EAI jar not exist ! ");
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_102"> 102</a>                 }else {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_103"> 103</a>                         Arrays.sort(fileNameList);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_104"> 104</a>                         String oldVersion = jarName.replace("\\", "/").substring(jarName.replace("\\", "/").lastIndexOf('/') + 1);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_105"> 105</a>                         String newVersion = fileNameList[fileNameList.length-1].getPath().replace("\\", "/");
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_106"> 106</a>                         System.out.println(" > OLD : " + oldVersion );
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_107"> 107</a>                         System.out.println(" > NEW : " + newVersion.substring(newVersion.lastIndexOf('/') + 1));
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_108"> 108</a>                         if(oldVersion.equals(newVersion.substring(newVersion.lastIndexOf('/') + 1)))
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_109"> 109</a>                         {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_110"> 110</a>                                 System.out.println(" > is New Version");
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_111"> 111</a>                                 isNweVersion = true;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_112"> 112</a>                         }else {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_113"> 113</a>                                 System.out.println(" > is Not New Version");
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_114"> 114</a>                                 isNweVersion = false;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_115"> 115</a>                         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_116"> 116</a>                 }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_117"> 117</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_118"> 118</a>                 return isNweVersion;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_119"> 119</a>         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_120"> 120</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_121"> 121</a>         /**
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_122"> 122</a>          * Method를 실행 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_123"> 123</a>          * @param className
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_124"> 124</a>          * @param methodName
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_125"> 125</a>          * @param param
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_126"> 126</a>          * @return
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_127"> 127</a>          * @throws ClassNotFoundException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_128"> 128</a>          * @throws NoSuchMethodException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_129"> 129</a>          * @throws SecurityException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_130"> 130</a>          * @throws InstantiationException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_131"> 131</a>          * @throws IllegalAccessException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_132"> 132</a>          * @throws IllegalArgumentException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_133"> 133</a>          * @throws InvocationTargetException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_134"> 134</a>          */
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_135"> 135</a>         private String execMethod(String className, String methodName, String param) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_136"> 136</a>                 System.out.println("\n>> Start exec method ! " ); 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_137"> 137</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_138"> 138</a>                 ClassLoader cl = Thread.currentThread().getContextClassLoader();
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_139"> 139</a>                 Class<?> clazz = cl.loadClass(className);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_140"> 140</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_141"> 141</a>                 Method m = clazz.getMethod(methodName, param.getClass() );
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_142"> 142</a>             m.setAccessible(true);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_143"> 143</a>             
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_144"> 144</a>             System.out.println(" > Classd Name : " + className);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_145"> 145</a>             System.out.println(" > Method Name : " + methodName);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_146"> 146</a>             System.out.println(" > Params Value : " + param);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_147"> 147</a>             System.out.println(" > Return Type : " + m.getReturnType());
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_148"> 148</a>             
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_149"> 149</a>             if (m.getReturnType() != String.class) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_150"> 150</a>                 System.out.println(" > Return type Stirng only : " + m.getReturnType() );
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_151"> 151</a>                 throw new NoSuchMethodException(methodName);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_152"> 152</a>             }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_153"> 153</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_154"> 154</a>             if (m.getModifiers() == 9) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_155"> 155</a>                 System.out.println(" > Not allowed Static method : " + m.getModifiers() );
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_156"> 156</a>                 throw new NoSuchMethodException(methodName);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_157"> 157</a>             }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_158"> 158</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_159"> 159</a>             if (m.getModifiers() != 1) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_160"> 160</a>                 System.out.println(" > Public method only : " + m.getModifiers() );
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_161"> 161</a>                 throw new NoSuchMethodException(methodName);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_162"> 162</a>             }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_163"> 163</a>            
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_164"> 164</a>            Object bbb = clazz.newInstance();
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_165"> 165</a>             String returnMsg = "";
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_166"> 166</a>         returnMsg = (String)m.invoke(bbb , new Object[] { param });
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_167"> 167</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_168"> 168</a>             return returnMsg;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_169"> 169</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_170"> 170</a>         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_171"> 171</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_172"> 172</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_173"> 173</a>         /**
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_174"> 174</a>          *  해당 디렉토리의 최신 버전의 jar를 적용한다. 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_175"> 175</a>          * @param dir
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_176"> 176</a>          * @throws NoSuchMethodException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_177"> 177</a>          * @throws SecurityException
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_178"> 178</a>          */
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_179"> 179</a>         private void loadJar(final String dir) throws NoSuchMethodException, SecurityException {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_180"> 180</a>                 System.out.println("\n>> LoadJar ");
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_181"> 181</a>                 final URLClassLoader loader = (URLClassLoader)Thread.currentThread().getContextClassLoader();
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_182"> 182</a>                 final Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_183"> 183</a>                 method.setAccessible(true);
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_184"> 184</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_185"> 185</a>                 new File(dir).listFiles(new FileFilter() {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_186"> 186</a>             public boolean accept(File jar) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_187"> 187</a>                 if( jar.toString().toLowerCase().contains(".jar") ){
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_188"> 188</a>                     try{
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_189"> 189</a>                         if(isLoadNewVersionJar(dir, jar.toString())) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_190"> 190</a>                                 method.invoke(loader, new Object[]{jar.toURI().toURL()});
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_191"> 191</a>                                 System.out.println(" > " + jar.toURI() + " is loaded.");
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_192"> 192</a>                         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_193"> 193</a>                         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_194"> 194</a>                     }catch(Exception e){
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_195"> 195</a>                         System.out.println(jar.toURI() + " can't load.");
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_196"> 196</a>                     }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_197"> 197</a>                 }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_198"> 198</a>                                 return false;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_199"> 199</a>             }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_200"> 200</a>         });
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_201"> 201</a>         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_202"> 202</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-7c977efbe54adde80c1866152cb9d25794d132bc_203"> 203</a> }
    ```
    
    <span class="anchor" id="bkmrk-"></span>
- 호출을 받는 소스<span class="anchor" id="bkmrk--1"></span><span class="anchor" id="bkmrk--2"></span><span class="anchor" id="bkmrk--3"></span><span class="anchor" id="bkmrk--4"></span><span class="anchor" id="bkmrk--5"></span><span class="anchor" id="bkmrk--6"></span><span class="anchor" id="bkmrk--7"></span><span class="anchor" id="bkmrk--8"></span><span class="anchor" id="bkmrk--9"></span><span class="anchor" id="bkmrk--10"></span><span class="anchor" id="bkmrk--11"></span><span class="anchor" id="bkmrk--12"></span><span class="anchor" id="bkmrk--13"></span><span class="anchor" id="bkmrk--14"></span><span class="anchor" id="bkmrk--15"></span><span class="anchor" id="bkmrk--16"></span><span class="anchor" id="bkmrk--17"></span><span class="anchor" id="bkmrk--18"></span><span class="anchor" id="bkmrk--19"></span><span class="anchor" id="bkmrk--20"></span><span class="anchor" id="bkmrk--21"></span><span class="anchor" id="bkmrk--22"></span><span class="anchor" id="bkmrk--23"></span><div class="highlight java"><div class="highlight java"><div class="codearea" dir="ltr" lang="en">[줄 번호 보이기/숨기기](http://web.joang.com:9000/jcook/DynamicJarLoading)</div></div></div>```
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_1">   1</a> package kr.co.koreanre.eai;
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_2">   2</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_3">   3</a> public class execEaiFunctionClass {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_4">   4</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_5">   5</a>         public execEaiFunctionClass() {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_6">   6</a>                 System.out.println(" > Init #1" );
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_7">   7</a>         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_8">   8</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_9">   9</a>         public String execMathod( String obj ) {
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_10">  10</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_11">  11</a>                 String reString = new String();
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_12">  12</a>         
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_13">  13</a>                 return reString + "= called test1";
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_14">  14</a>                 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_15">  15</a>         }
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_16">  16</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5d0ae0dc3311c339b625a49d4c880efc2674b906_17">  17</a> }
    ```
    
    <span class="anchor" id="bkmrk--24"></span>
- 호출을 받는 곳 pom.xml<span class="anchor" id="bkmrk--25"></span><span class="anchor" id="bkmrk--26"></span><span class="anchor" id="bkmrk--27"></span><span class="anchor" id="bkmrk--28"></span><span class="anchor" id="bkmrk--29"></span><span class="anchor" id="bkmrk--30"></span><span class="anchor" id="bkmrk--31"></span><span class="anchor" id="bkmrk--32"></span><span class="anchor" id="bkmrk--33"></span><span class="anchor" id="bkmrk--34"></span><span class="anchor" id="bkmrk--35"></span><span class="anchor" id="bkmrk--36"></span><span class="anchor" id="bkmrk--37"></span><span class="anchor" id="bkmrk--38"></span><span class="anchor" id="bkmrk--39"></span><span class="anchor" id="bkmrk--40"></span><span class="anchor" id="bkmrk--41"></span><span class="anchor" id="bkmrk--42"></span><span class="anchor" id="bkmrk--43"></span><span class="anchor" id="bkmrk--44"></span><span class="anchor" id="bkmrk--45"></span><span class="anchor" id="bkmrk--46"></span><span class="anchor" id="bkmrk--47"></span><span class="anchor" id="bkmrk--48"></span><span class="anchor" id="bkmrk--49"></span><span class="anchor" id="bkmrk--50"></span><span class="anchor" id="bkmrk--51"></span><span class="anchor" id="bkmrk--52"></span><span class="anchor" id="bkmrk--53"></span><span class="anchor" id="bkmrk--54"></span><span class="anchor" id="bkmrk--55"></span><span class="anchor" id="bkmrk--56"></span><span class="anchor" id="bkmrk--57"></span><span class="anchor" id="bkmrk--58"></span><span class="anchor" id="bkmrk--59"></span><span class="anchor" id="bkmrk--60"></span><span class="anchor" id="bkmrk--61"></span><span class="anchor" id="bkmrk--62"></span><span class="anchor" id="bkmrk--63"></span><span class="anchor" id="bkmrk--64"></span><span class="anchor" id="bkmrk--65"></span><span class="anchor" id="bkmrk--66"></span><span class="anchor" id="bkmrk--67"></span><span class="anchor" id="bkmrk--68"></span><span class="anchor" id="bkmrk--69"></span><span class="anchor" id="bkmrk--70"></span><span class="anchor" id="bkmrk--71"></span><span class="anchor" id="bkmrk--72"></span><span class="anchor" id="bkmrk--73"></span><span class="anchor" id="bkmrk--74"></span><span class="anchor" id="bkmrk--75"></span><div class="highlight python"><div class="highlight python"><div class="codearea" dir="ltr" lang="en">  
    </div></div></div>```
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_1">   1</a> <project xmlns="http://maven.apache.org/POM/4.0.0"
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_2">   2</a>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_3">   3</a>         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_4">   4</a>         <modelVersion>4.0.0</modelVersion>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_5">   5</a>         <groupId>kr.co.koreanre.eai</groupId>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_6">   6</a>         <artifactId>kr.co.koreanre.eai</artifactId>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_7">   7</a>         <version>202110280920</version>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_8">   8</a>         <name>Test1</name>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_9">   9</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_10">  10</a>         <build>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_11">  11</a>                 <pluginManagement>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_12">  12</a>                         <plugins>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_13">  13</a>                                 <plugin>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_14">  14</a>                                         <groupId>org.apache.maven.plugins</groupId>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_15">  15</a>                                         <artifactId>maven-resources-plugin</artifactId>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_16">  16</a>                                         <version>2.3</version>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_17">  17</a>                                 </plugin>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_18">  18</a>                                 <plugin>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_19">  19</a>                                         <artifactId>maven-resources-plugin</artifactId>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_20">  20</a>                                         <version>3.0.2</version>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_21">  21</a>                                         <executions>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_22">  22</a>                                                 <execution>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_23">  23</a>                                                         <id>copy-resource-one</id>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_24">  24</a>                                                         <phase>install</phase>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_25">  25</a>                                                         <goals>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_26">  26</a>                                                                 <goal>copy-resources</goal>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_27">  27</a>                                                         </goals>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_28">  28</a>                                                         <configuration>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_29">  29</a>                                                                 <outputDirectory>${basedir}/../com.exec/src/main/resources/deployFilder</outputDirectory>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_30">  30</a>                                                                 <resources>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_31">  31</a>                                                                         <resource>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_32">  32</a>                                                                                 <directory>${basedir}/target</directory>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_33">  33</a>                                                                                 <includes>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_34">  34</a>                                                                                         <include>*.jar</include>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_35">  35</a>                                                                                 </includes>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_36">  36</a>                                                                         </resource>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_37">  37</a>                                                                 </resources>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_38">  38</a>                                                         </configuration>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_39">  39</a>                                                 </execution>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_40">  40</a>                                         </executions>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_41">  41</a>                                 </plugin>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_42">  42</a>                         </plugins>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_43">  43</a>                 </pluginManagement>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_44">  44</a>         </build>
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_45">  45</a> 
    <a href="http://web.joang.com:9000/jcook/DynamicJarLoading#CA-5c319cbe52754da8d447de65c11677fe699e7a01_46">  46</a> </project>
    ```

# 폴더의 파일 열어 작업하기

요건 :

특정 폴더의 파일을 모두 열러서 SQL에 있는 특정 문구로 시작하는 테이블명을 찾는다

쿼리당 하나 이상일 때는 하나로 카운트한다.

즉 쿼리하나에 하나의 API를 생성하여 타 도메인에서 현재 도메인의 테이블을 조회하는 것을 배제하여 DBMS를 분리할 수 있도록 한다.

####  Main 프로그램 

```java
package com.det;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SocParsingWorker {
	
	public static String[] annotation_line = {"--", "//"};
	public static String[][] annotation_range = {
											{	"/*", "*/", "/\\*", "\\*/"		}
											,{	"<!--", "-->", "<!--", "-->"	}
										};
	public static String[][] searchKeyCategoryArry = {
								{ "<select", "</select>" }
								, { "<insert", "</insert>" }
								, { "<update", "</update>" }
								, { "<delete", "</delete>" }
	};
	// 찾는 문자 
	public static String findkeyString = "TB_FILEMANAGER_META";

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		System.out.println(" START ");
		String fileName = "";
		List<String> docRemoveAnn = new ArrayList<String>();
		StringRemovAnno stringRemovAnno = new StringRemovAnno();
		SearchString ss = new SearchString();
		Map<String, Integer> resultMapg = new HashMap<String, Integer>();  // SocParsingWorker.searchKeyArry.length
		Map<String, Integer> totalResultMapg = new HashMap<String, Integer>();

		/* 파일 경로에 있는 파일 가져오기 */
		File rw = new File(args[0]);

		/* 파일 경로에 있는 파일 리스트 fileList[] 에 넣기 */
		File[] fileList = rw.listFiles();

		/* fileList에 있는거 for 문 돌려서 출력 */
		for (File file : fileList) {
			if (file.isFile()) {
				fileName = file.getName();
				System.out.println(":::::::::::: PROC FILE NAME : " + fileName + "::::::::::::");
				
				// Remove Annotation 
				// annotation_range
				// annotation_line
				docRemoveAnn = stringRemovAnno.getStringRemovAnno(fileName, file.getPath());
				
				// 주석 제거된 문서 docRemoveAnn를 활용 
				// searchKeyCategoryArry
				resultMapg = ss.getSearchCnt(docRemoveAnn);
				System.out.println(":::::::::::: File="+ fileName +" , Result=" + resultMapg + "::::::::::::\n");
				
				// Total add count by searchKeyCategoryArry
				for (int i = 0; i < SocParsingWorker.searchKeyCategoryArry.length; i++) {
					totalResultMapg.put(SocParsingWorker.searchKeyCategoryArry[i][0].toUpperCase(), 
							toNlltoZero(totalResultMapg.get(SocParsingWorker.searchKeyCategoryArry[i][0].toUpperCase()))
							+toNlltoZero(resultMapg.get(SocParsingWorker.searchKeyCategoryArry[i][0].toUpperCase()))
							);
				}
				
			}
		}
		System.out.println("\n\n\n>>>>>>>>>> All File Find [\""+ findkeyString +"\"] Result=" + totalResultMapg);
	}

	private static int toNlltoZero(Integer integer) {
		if(integer==null) {
			return 0;
		}
		return integer;
	}


}

```

#### 주석 제거 클래스 

범위 주석과 라인 주석을 제거

정규표현식으로 작성하다가 루프처리가 어려울 것 같고, /\*, \*/는 했는데 &lt;!-- --&gt;는 안되어서 포기하고

정규표현식으로는 이하 생략과 이상 생략으로 정규 표현식으로 개발하고 나머지는 조건문으로 처리

태그가 불완전하면 많이 지워질 듯 함

```java
package com.det;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class StringRemovAnno {

	public List<String> getStringRemovAnno(String filename, String filepath) throws IOException {
		System.out.println(" > fileName Path : " + filepath);
		List<String> fileLineArry = Files.readAllLines(Paths.get(filepath));
		List<String> removedAnnoRangeByte = fileLineArry;

		// 파일을 읽어서 범위의 주석을 삭제
		for (int i = 0; i < SocParsingWorker.annotation_range.length; i++) {
			removedAnnoRangeByte = removedAnnoRangeByte(filename, removedAnnoRangeByte, SocParsingWorker.annotation_range[i]);
		}
		// 라인을 읽어서 라인 주석을 삭제 
		for (int i = 0; i < SocParsingWorker.annotation_line.length; i++) {
			removedAnnoRangeByte = removedAnnoLineByte(filename, removedAnnoRangeByte, SocParsingWorker.annotation_line[i]);
		}
		
		return removedAnnoRangeByte;
	}
	

	/**
	 * 영역 주석 제거 
	 * @param filename
	 * @param fileByte
	 * @return
	 */
	private List<String> removedAnnoRangeByte(String filename, List<String> fileLineArry, String[] annRange) {
		System.out.println("  > Remove Anno Range : " + filename + " [" + annRange[0] + " , " + annRange[1] + "]");
		List<String> removedAnnoRangeByte = new ArrayList<String>();
		
//		System.out.println("   > ORG One Line : " + fileLineArry);
		
		//for ann
		boolean annFlag = false;
	
		for (String oneLine : fileLineArry) {
			int startAnnRag = oneLine.indexOf(annRange[0]);
			int endAnnRag = oneLine.indexOf(annRange[1]);
			
//			System.out.println("   > RED One Line : " + oneLine + " ---------->" + startAnnRag);
			
			// 한줄에 모두 있을 때 
			if(startAnnRag >= 0 && endAnnRag >= 0){
				if(!annFlag) {
					// 사이를 넣어라 
					String ffoneLine = oneLine.substring(0,startAnnRag);
					removedAnnoRangeByte.add(ffoneLine);
					oneLine = oneLine.substring(endAnnRag+annRange[1].length(),oneLine.length());
					removedAnnoRangeByte.add(oneLine);
				}

			// 시작이 있을 때 
			}else if(startAnnRag >= 0) {
				if(oneLine.trim().equals(annRange[0])) {
					// skip ... 이상하네 정규 표현식에서 /* 만 있을 때 /*가 표시됨  
				}else {
					oneLine = oneLine.replaceAll(""+annRange[2]+".*([^*]|[\\r\\n])", "");
					removedAnnoRangeByte.add(oneLine);
//					System.out.println("   > line : " + oneLine + " [" + annRange[0] + " , " + annRange[1] + "] =========> START:" + startAnnRag );
				}
				annFlag = true;
			
			// 끝이 있을 때 
			}else if(endAnnRag >= 0) {
				oneLine = oneLine.replaceAll(".*"+annRange[3]+"*([^*]|[\\r\\n])", "");
				removedAnnoRangeByte.add(oneLine);
//				System.out.println("   > line : " + oneLine + " [" + annRange[0] + " , " + annRange[1] + "] =========> START:" + startAnnRag );
				annFlag = false;
			}
			
			// 둘다 없고 시작이 안되었을 때 
			if(startAnnRag < 0 && endAnnRag < 0){
				if(!annFlag) {
					removedAnnoRangeByte.add(oneLine);
				}
			}
		}
//		System.out.println("   > FLT One Line : " + removedAnnoRangeByte);
		
		//for ann
		return removedAnnoRangeByte;
	}

	/**
	 * LIne 주석 제거 
	 * @param filename
	 * @param removedAnnoRangeByte
	 * @param string
	 * @return
	 */
	private List<String> removedAnnoLineByte(String filename, List<String> fileLineArry, String ann) {
		System.out.println("  > Remove Anno Line : " + filename + " [" + ann + "]");
		List<String> removedAnnoLineByte = new ArrayList<String>();
		for (String oneLine : fileLineArry) {
			int startAnnLine = oneLine.indexOf(ann);
			//System.out.println("..........>>>>>" + oneLine + " , " + startAnnLine);
			if( startAnnLine >= 0 ) {
				oneLine = oneLine.substring(0,startAnnLine);
				removedAnnoLineByte.add(oneLine);
				//System.out.println("   > RED One Line : " + oneLine);
			}else {
				removedAnnoLineByte.add(oneLine);
			}
		}
		return removedAnnoLineByte;
	}

}

```

#### 문구 찾기 

파일을 하나의 긴 문자열로 만들고, 카타고리로 split 배열로 나누고 , 각 배열 문자열에 카테고리를 닫는 문구까지 잘라서 문자열을 만든다.

즉 &lt;select로 자르면 다음 &lt;select까지 나누어지기 때문에 &lt;/select&gt;가 나오는 곳까지 잘라낸다.

그리고 검색 문구를 찾는다. 하나이상 나오면 카운트

```java
package com.det;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SearchString {

	public Map<String, Integer> getSearchCnt(List<String> docRemoveAnn) {
		StringBuffer fileToOneLine = new StringBuffer();
		Map<String, Integer> resultMapg = new HashMap<String, Integer>();
		
		for (String onLineNoAnno : docRemoveAnn) {			
			fileToOneLine.append(onLineNoAnno);
		}
//		System.out.println(fileToOneLine);
		
		// searchKeyArry 로 구분하여 배열로 정의 
		for (int i = 0; i < SocParsingWorker.searchKeyCategoryArry.length; i++) {
//			System.out.println("  >> SEARCH STAR ! key=\"" + SocParsingWorker.searchKeyArry[i][0] +"\" ... \"" + SocParsingWorker.searchKeyArry[i][1] + "\"");
			int searchCnt = 0;
			String[] searchArry = fileToOneLine.toString().toUpperCase().split(SocParsingWorker.searchKeyCategoryArry[i][0].toUpperCase());
			for (int j = 0; j < searchArry.length; j++) {
				String s = searchArry[j];
//	        	System.out.println("   > search : " + s);
	            if(s.indexOf(SocParsingWorker.searchKeyCategoryArry[i][1].toUpperCase()) >= 0) {
	            	System.out.println("  >> Find! (" + j + ")" + SocParsingWorker.searchKeyCategoryArry[i][0].toUpperCase() + "-" + SocParsingWorker.searchKeyCategoryArry[i][1].toUpperCase()
	            			+" " + s.indexOf(SocParsingWorker.searchKeyCategoryArry[i][1].toUpperCase()) + " Col");
	            	s = s.substring(0, s.indexOf(SocParsingWorker.searchKeyCategoryArry[i][1].toUpperCase()));
	            	System.out.println("       \\_ TEXT = \"" + s.substring(0,50) + " ... \"");
	            	if(s.indexOf(SocParsingWorker.findkeyString) >= 0) {
//		            	System.out.println("   >> target String : " + s);
	            		searchCnt++;
	            	}
	            }
	        }
			System.out.println("   >> ::::::::: key=\"" + SocParsingWorker.searchKeyCategoryArry[i][0] +"-" + SocParsingWorker.searchKeyCategoryArry[i][1] + "\" , FIND(\""+SocParsingWorker.findkeyString+"\") Total Cnt = " + searchCnt);  
			resultMapg.put(SocParsingWorker.searchKeyCategoryArry[i][0].toUpperCase(), searchCnt);
		}
			
		return resultMapg;
	}

}

```

#### 처리 파일 

개발한 프로그램의 <span style="color:rgb(191,237,210);">metaMapper.xml</span> 파일과 임의 테스트용 파일을 처리함

<details id="bkmrk-mapper.xml-%3C%3Fxml-ver"><summary>metaMapper.xml</summary>

<div>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</div><div>&lt;!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&gt;</div><div>  
</div><div>&lt;mapper namespace="com.joang.filemanager.meta.metaMapper"&gt;</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= COMMON START </div><div>============================================= ########## --&gt;</div><div>&lt;!-- ### For Paging ### --&gt;</div><div>&lt;sql id="pagingHeader"&gt;</div><div>SELECT A.* FROM (</div><div>SELECT row_number() over() AS rownumber, A.* FROM (</div><div>&lt;/sql&gt;</div><div>  
</div><div>&lt;sql id="pagingFooter"&gt;</div><div>) A</div><div>) A WHERE A.rownumber BETWEEN #{start} AND #{last}</div><div>&lt;/sql&gt;</div><div>&lt;!-- ### For Paging ### --&gt;</div><div>&lt;!-- ########## ============================================= COMMON END </div><div>============================================= ########## --&gt;</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= Meta List </div><div>Select ============================================= ########## --&gt;</div><div>  
</div><div>&lt;select id="selectMetaListCnt"</div><div>parameterType="com.joang.filemanager.vo.MetaVO" resultType="int"&gt;</div><div> &lt;![CDATA[</div><div>SELECT COUNT( DISTINCT A.META ) AS total_pages </div><div>FROM TB_FILEMANAGER_META A, TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META_FILE C, TB_USERS_MAPPING D</div><div>WHERE 1=1</div><div> AND A.IDX = B.META_IDX</div><div> AND B.FILE_IDX = C.IDX</div><div> AND C.IDX = D.FILE_IDX</div><div> ]]&gt;</div><div>AND D.USERNAME = #{userId}</div><div>AND A.DEL_GB = 'N'</div><div>AND C.DEL_GB = 'N'</div><div>&lt;!-- 전체 --&gt;</div><div>&lt;if</div><div>test="positiveSearchKey != null and positiveSearchKey.size != 0 "&gt;</div><div>&lt;foreach collection="positiveSearchKey" item="item"</div><div>open="AND (" close=")" separator="AND"&gt;</div><div>A.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="negativeSearchKey != null and negativeSearchKey.size != 0 "&gt;</div><div>AND C.IDX NOT IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="negativeSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="andSearchKey != null and andSearchKey.size != 0 "&gt;</div><div>AND C.IDX IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="andSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;select id="selectMetaList"</div><div>parameterType="com.joang.filemanager.vo.MetaVO"</div><div>resultType="com.joang.filemanager.vo.MetaVO"&gt;</div><div>&lt;include refid="pagingHeader"&gt;&lt;/include&gt;</div><div> &lt;![CDATA[</div><div> /* com.joang.filemanager.meta.metaMapper.selectMetaList */</div><div> SELECT</div><div>A.IDX,</div><div>A.META,</div><div>A.CREA_DTM,</div><div>A.CREA_ID,</div><div>COUNT( A.META ) AS COUNT_META</div><div>FROM</div><div> TB_FILEMANAGER_META A, TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META_FILE C, TB_USERS_MAPPING D</div><div> WHERE</div><div> A.DEL_GB = 'N'</div><div> AND C.DEL_GB = 'N'</div><div> AND A.IDX = B.META_IDX</div><div> AND B.FILE_IDX = C.IDX</div><div> AND C.IDX = D.FILE_IDX</div><div>]]&gt;</div><div>AND D.USERNAME = #{userId}</div><div>  
</div><div>&lt;!-- 전체 --&gt;</div><div>&lt;if</div><div>test="positiveSearchKey != null and positiveSearchKey.size != 0 "&gt;</div><div>&lt;foreach collection="positiveSearchKey" item="item"</div><div>open="AND (" close=")" separator="AND"&gt;</div><div>A.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="negativeSearchKey != null and negativeSearchKey.size != 0 "&gt;</div><div>AND C.IDX NOT IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="negativeSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt; </div><div> &lt;if</div><div>test="andSearchKey != null and andSearchKey.size != 0 "&gt;</div><div>AND C.IDX IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="andSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div> &lt;![CDATA[</div><div> GROUP BY A.IDX,</div><div>A.META,</div><div>A.CREA_DTM,</div><div>A.CREA_ID</div><div> ORDER BY A.IDX DESC</div><div> ]]&gt;</div><div>&lt;include refid="pagingFooter"&gt;&lt;/include&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>  
</div><div>&lt;select id="selectMetaAutocomplete"</div><div>parameterType="com.joang.filemanager.vo.MetaVO" resultType="map"&gt;</div><div> &lt;![CDATA[</div><div> /* com.joang.filemanager.meta.metaMapper.selectMetaAutocomplete */</div><div>SELECT </div><div>A.IDX,</div><div>A.META,</div><div>A.FILE_CNT,</div><div>A.TO_CNT,</div><div>COUNT(E.FROM_IDX) AS FROM_CNT</div><div>FROM(</div><div> SELECT A.IDX,</div><div>A.META,</div><div>A.FILE_CNT,</div><div>COUNT(E.FROM_IDX) AS TO_CNT</div><div> FROM (</div><div> SELECT</div><div>A.IDX,</div><div>A.META,</div><div>COUNT( A.META ) AS FILE_CNT</div><div>FROM</div><div> TB_FILEMANAGER_META A, TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META_FILE C, TB_USERS_MAPPING D</div><div> WHERE</div><div> A.DEL_GB = 'N'</div><div> AND C.DEL_GB = 'N'</div><div> AND A.IDX = B.META_IDX</div><div> AND B.FILE_IDX = C.IDX</div><div> AND C.IDX = D.FILE_IDX</div><div>]]&gt;</div><div>AND D.USERNAME = #{userId}</div><div>AND A.META LIKE '%'|| #{searchKey} || '%'</div><div>  
</div><div> &lt;![CDATA[</div><div> GROUP BY A.IDX, A.META</div><div>) A</div><div>left join TB_FILEMANAGER_META_REF E on A.IDX = E.FROM_IDX</div><div>GROUP BY A.IDX, A.META, A.FILE_CNT, E.FROM_IDX</div><div>) A</div><div>left join TB_FILEMANAGER_META_REF E on A.IDX = E.TO_IDX</div><div>GROUP BY A.IDX, A.META, A.FILE_CNT, A.TO_CNT, E.TO_IDX</div><div>  
</div><div> ORDER BY A.IDX DESC</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>&lt;select id="selectUserAutocomplete"</div><div>parameterType="com.joang.common.vo.UserVO" resultType="map"&gt;</div><div> &lt;![CDATA[</div><div> /* com.joang.filemanager.meta.metaMapper.selectUserAutocomplete */</div><div> SELECT </div><div>tu.username </div><div>, tu.name</div><div>FROM tb_users tu </div><div>WHERE 1=1</div><div>AND ( tu.name LIKE '%'|| #{username} || '%' OR tu.username LIKE '%'|| #{username} || '%' )</div><div>AND tu.del_gb = 'N'</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>  
</div><div>  
</div><div>&lt;select id="selectRefMetaList"</div><div>parameterType="com.joang.filemanager.vo.MetaVO"</div><div>resultType="com.joang.filemanager.vo.RefMetaVO"&gt;</div><div> &lt;![CDATA[</div><div>/* com.joang.filemanager.meta.metaMapper.selectFromRefMetaList */</div><div>SELECT A.IDX, A.META, B.FROM_IDX, B.TO_IDX, B.META_REF</div><div>FROM TB_FILEMANAGER_META A,</div><div>(</div><div>SELECT TO_IDX AS IDX, FROM_IDX, B.TO_IDX, B.META_REF</div><div>FROM TB_FILEMANAGER_META A, TB_FILEMANAGER_META_REF B, TB_FILEMANAGER_META_FILE C</div><div>WHERE</div><div>A.DEL_GB = 'N'</div><div>AND A.IDX = C.IDX</div><div>AND C.DEL_GB = 'N'</div><div>]]&gt;</div><div>  
</div><div>&lt;!-- 전체 --&gt;</div><div>&lt;if</div><div>test="positiveSearchKey != null and positiveSearchKey.size != 0 "&gt;</div><div>&lt;foreach collection="positiveSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>A.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="negativeSearchKey != null and negativeSearchKey.size != 0 "&gt;</div><div>AND C.IDX NOT IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="negativeSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="andSearchKey != null and andSearchKey.size != 0 "&gt;</div><div>AND C.IDX IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="andSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt; </div><div> &lt;![CDATA[</div><div>AND A.IDX = B.FROM_IDX</div><div>UNION</div><div>SELECT FROM_IDX AS IDX, FROM_IDX, B.TO_IDX, B.META_REF</div><div>FROM TB_FILEMANAGER_META A, TB_FILEMANAGER_META_REF B, TB_FILEMANAGER_META_FILE C</div><div>WHERE</div><div>A.DEL_GB = 'N'</div><div>AND A.IDX = C.IDX</div><div>AND C.DEL_GB = 'N'</div><div>  
</div><div>]]&gt;</div><div>  
</div><div>&lt;!-- 전체 --&gt;</div><div>&lt;if</div><div>test="positiveSearchKey != null and positiveSearchKey.size != 0 "&gt;</div><div>&lt;foreach collection="positiveSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>A.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="negativeSearchKey != null and negativeSearchKey.size != 0 "&gt;</div><div>AND C.IDX NOT IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="negativeSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="andSearchKey != null and andSearchKey.size != 0 "&gt;</div><div>AND C.IDX IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="andSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt; </div><div> &lt;![CDATA[</div><div>AND A.IDX = B.TO_IDX</div><div>) B</div><div>WHERE A.IDX = B.IDX</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;select id="selectMetaValueByMetaIdx" parameterType="int"</div><div>resultType="string"&gt;</div><div>SELECT META FROM TB_FILEMANAGER_META</div><div>WHERE IDX = #{meta_idx}</div><div>&lt;/select&gt;</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= Meta List </div><div>Select ============================================= ########## --&gt;</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= File List/Detail </div><div>Select ============================================= ########## --&gt;</div><div>  
</div><div>&lt;select id="selectFileListCnt"</div><div>parameterType="com.joang.filemanager.vo.FileVO" resultType="int"&gt;</div><div> &lt;![CDATA[</div><div>SELECT COUNT( DISTINCT A.IDX ) AS TOTAL_PAGES</div><div>]]&gt;</div><div>  
</div><div>&lt;choose&gt;</div><div>&lt;when test="searchKey != null and searchKey != '' "&gt;</div><div>FROM TB_FILEMANAGER_META_FILE A, TB_FILEMANAGER_META_MAPPING B,</div><div>TB_FILEMANAGER_META C, TB_USERS_MAPPING D</div><div>&lt;/when&gt;</div><div>&lt;otherwise&gt;</div><div>FROM</div><div>TB_FILEMANAGER_META_FILE A, TB_USERS_MAPPING D</div><div>&lt;/otherwise&gt;</div><div>&lt;/choose&gt;</div><div>WHERE</div><div>A.DEL_GB ='N'</div><div>AND A.IDX = D.FILE_IDX</div><div>AND D.USERNAME = #{creaId}</div><div>  
</div><div>&lt;choose&gt;</div><div>&lt;when test="searchKey != null and searchKey != '' "&gt;</div><div>AND B.FILE_IDX = A.IDX</div><div>AND C.IDX = B.META_IDX</div><div>&lt;/when&gt;</div><div>&lt;/choose&gt;</div><div>&lt;!-- 전체 --&gt;</div><div>&lt;if</div><div>test="positiveSearchKey != null and positiveSearchKey.size != 0 "&gt;</div><div>&lt;foreach collection="positiveSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="negativeSearchKey != null and negativeSearchKey.size != 0 "&gt;</div><div>AND A.IDX NOT IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="negativeSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="andSearchKey != null and andSearchKey.size != 0 "&gt;</div><div>AND A.IDX IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="andSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;select id="selectFileList"</div><div>parameterType="com.joang.filemanager.vo.FileVO"</div><div>resultType="com.joang.filemanager.vo.FileVO"&gt;</div><div>&lt;include refid="pagingHeader"&gt;&lt;/include&gt;</div><div> &lt;![CDATA[</div><div> /* com.joang.filemanager.meta.metaMapper.selectFileList */</div><div> SELECT</div><div>A.IDX, </div><div>E.OPN_CNT,</div><div>A.FILE_TITLE, </div><div>A.FILE_TYPE,</div><div>SUBSTRING(A.FILE_DETAIL::varchar,0,100) || '...' AS FILE_DETAIL,</div><div>A.ORIGINAL_FILE_NAME, </div><div>A.STORED_FILE_NAME, </div><div>A.FILE_SIZE,</div><div>A.CREA_DTM, </div><div>A.CREA_ID, </div><div>A.DEL_GB,</div><div>A.DOWN_YN,</div><div>A.STAR_LEVEL</div><div> ]]&gt;</div><div>&lt;choose&gt;</div><div>&lt;when test="searchKey != null and searchKey != '' "&gt;</div><div>, C.META AS SEARCH_KEY</div><div>FROM</div><div>TB_FILEMANAGER_META_FILE A, TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C, TB_USERS_MAPPING D</div><div>&lt;/when&gt;</div><div>&lt;otherwise&gt;</div><div>FROM</div><div>TB_FILEMANAGER_META_FILE A, TB_USERS_MAPPING D</div><div>&lt;/otherwise&gt;</div><div>&lt;/choose&gt;</div><div>, (SELECT COUNT(IDX) AS OPN_CNT, FILE_IDX FROM TB_USERS_MAPPING TUM GROUP BY FILE_IDX ) E</div><div>  
</div><div> &lt;![CDATA[</div><div> WHERE</div><div> A.DEL_GB ='N'</div><div> AND A.IDX = D.FILE_IDX</div><div> AND A.IDX = E.FILE_IDX</div><div> ]]&gt;</div><div>AND D.USERNAME = #{creaId}</div><div>  
</div><div>&lt;choose&gt;</div><div>&lt;when test="searchKey != null and searchKey != '' "&gt;</div><div>AND B.FILE_IDX = A.IDX</div><div>AND C.IDX = B.META_IDX</div><div>&lt;/when&gt;</div><div>&lt;/choose&gt;</div><div>&lt;!-- 전체 --&gt;</div><div>&lt;if</div><div>test="positiveSearchKey != null and positiveSearchKey.size != 0 "&gt;</div><div>&lt;foreach collection="positiveSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="negativeSearchKey != null and negativeSearchKey.size != 0 "&gt;</div><div>AND A.IDX NOT IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="negativeSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div>&lt;if</div><div>test="andSearchKey != null and andSearchKey.size != 0 "&gt;</div><div>AND A.IDX IN (</div><div>SELECT DISTINCT B.FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META C</div><div>WHERE C.IDX = B.META_IDX</div><div>&lt;foreach collection="andSearchKey" item="item"</div><div>open="AND (" close=")" separator="OR"&gt;</div><div>C.META LIKE CONCAT('%',#{item},'%')</div><div>&lt;/foreach&gt;</div><div>)</div><div>&lt;/if&gt;</div><div>&lt;choose&gt;</div><div>&lt;when test="searchKey != null and searchKey != '' "&gt;</div><div>&lt;![CDATA[</div><div>ORDER BY CONCAT(A.STAR_LEVEL, A.IDX)</div><div>]]&gt;</div><div>&lt;/when&gt;</div><div>&lt;otherwise&gt;</div><div> &lt;![CDATA[</div><div>ORDER BY A.IDX</div><div> ]]&gt;</div><div>&lt;/otherwise&gt;</div><div>&lt;/choose&gt;</div><div>&lt;choose&gt;</div><div>&lt;when test="orderBy == 'ASC'"&gt;</div><div> &lt;![CDATA[</div><div>ASC</div><div> ]]&gt;</div><div>&lt;/when&gt;</div><div>&lt;otherwise&gt;</div><div> &lt;![CDATA[</div><div>DESC</div><div> ]]&gt;</div><div>&lt;/otherwise&gt;</div><div>&lt;/choose&gt;</div><div>&lt;include refid="pagingFooter"&gt;&lt;/include&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>  
</div><div>&lt;!-- file detail --&gt;</div><div>&lt;select id="selectFileDetail" parameterType="int"</div><div>resultType="com.joang.filemanager.vo.FileVO"&gt;</div><div> &lt;![CDATA[</div><div> /* com.joang.filemanager.meta.metaMapper.selectFileDetail */</div><div> SELECT </div><div>IDX,</div><div>E.OPN_CNT,</div><div>FILE_TITLE,</div><div>FILE_TYPE,</div><div>FILE_DETAIL,</div><div>ORIGINAL_FILE_NAME,</div><div>STORED_FILE_NAME,</div><div>FILE_SIZE,</div><div>CREA_DTM,</div><div>CREA_ID,</div><div>DEL_GB,</div><div>DOWN_YN,</div><div>ERROR,</div><div>STAR_LEVEL</div><div>FROM TB_FILEMANAGER_META_FILE, (SELECT COUNT(IDX) AS OPN_CNT, FILE_IDX FROM TB_USERS_MAPPING TUM GROUP BY FILE_IDX ) E </div><div>WHERE IDX = #{idx}</div><div>AND E.FILE_IDX = #{idx}</div><div>AND DEL_GB = 'N'</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;select id="selectFileShareUserListByFile" parameterType="int"</div><div>resultType="com.joang.filemanager.vo.FileShareUserVO"&gt;</div><div> &lt;![CDATA[</div><div> SELECT </div><div>B.USERNAME,</div><div>C.NAME,</div><div>B.FILE_IDX,</div><div>B.CREA_DTM,</div><div>B.CREA_ID</div><div>FROM TB_FILEMANAGER_META_FILE A, TB_USERS_MAPPING B, TB_USERS C </div><div>WHERE 1=1 </div><div>AND A.IDX = #{idx}</div><div>AND A.IDX = B.FILE_IDX</div><div>AND C.USERNAME = B.USERNAME</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;select id="getTargetMetaIdx" resultType="string"&gt;</div><div>SELECT COALESCE(MAX(</div><div>IDX ), 0) FROM TB_FILEMANAGER_META_FILE</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;!-- ########## ============================================= File List/Detail </div><div>Select ============================================= ########## --&gt;</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= Meta INSERT/UPDATE </div><div>Select ============================================= ########## --&gt;</div><div>  
</div><div>&lt;select id="checkMeta" parameterType="String"</div><div>resultType="hashmap"&gt;</div><div>&lt;![CDATA[</div><div> SELECT</div><div>idx</div><div>FROM</div><div> TB_FILEMANAGER_META</div><div> WHERE</div><div> DEL_GB ='N'</div><div>AND TRIM(META) = TRIM(#{meta})</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;insert id="insertMeta" parameterType="hashmap"&gt;</div><div> &lt;![CDATA[</div><div> INSERT INTO TB_FILEMANAGER_META</div><div> (</div><div> USER_ID, META, CREA_DTM, CREA_ID, DEL_GB</div><div> )</div><div> VALUES</div><div> (</div><div> #{userId},</div><div> #{meta},</div><div> NOW(),</div><div> #{userId},</div><div> 'N'</div><div> )</div><div> ]]&gt;</div><div>&lt;selectKey keyProperty="meta_idx" resultType="int"</div><div>order="AFTER"&gt;</div><div>SELECT COALESCE(MAX( IDX ), 0) AS META_IDX FROM TB_FILEMANAGER_META</div><div>&lt;/selectKey&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;insert id="insertMetaMapping" parameterType="hashmap"&gt;</div><div>&lt;selectKey keyProperty="idx" resultType="int" order="BEFORE"&gt;</div><div>SELECT COALESCE(MAX( IDX ), 0) FROM TB_FILEMANAGER_META_FILE</div><div>&lt;/selectKey&gt;</div><div> &lt;![CDATA[</div><div> INSERT INTO TB_FILEMANAGER_META_MAPPING</div><div> (</div><div> USER_ID, META_IDX, FILE_IDX, CREA_DTM, CREA_ID, DEL_GB</div><div> )</div><div> VALUES</div><div> (</div><div> #{userId},</div><div> #{meta_idx}::INTEGER,</div><div> ]]&gt;</div><div>&lt;choose&gt;</div><div>&lt;when test="file_idx != null"&gt;</div><div>&lt;!-- 변경되어야할 파일의 file_idx --&gt;</div><div>\#{file_idx}::INTEGER,</div><div>&lt;/when&gt;</div><div>&lt;otherwise&gt;</div><div>&lt;!-- 새 파일 업로드인 경우 idx --&gt;</div><div>\#{idx}::INTEGER,</div><div>&lt;/otherwise&gt;</div><div>&lt;/choose&gt;</div><div> &lt;![CDATA[</div><div> NOW(),</div><div> #{userId},</div><div> 'N'</div><div> )</div><div> ]]&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;insert id="insertMetaExistMapping" parameterType="hashmap"&gt;</div><div> &lt;![CDATA[</div><div> INSERT INTO TB_FILEMANAGER_META_MAPPING</div><div> (</div><div> USER_ID, META_IDX, FILE_IDX, CREA_DTM, CREA_ID, DEL_GB</div><div> )</div><div> VALUES</div><div> (</div><div> #{userId},</div><div> #{meta_idx}::INTEGER,</div><div> #{idx}::INTEGER,</div><div> NOW(),</div><div> #{userId},</div><div> 'N'</div><div> )</div><div> ]]&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>  
</div><div>&lt;insert id="insertShareUser" parameterType="com.joang.filemanager.vo.FileShareUserVO"&gt;</div><div> &lt;![CDATA[</div><div> INSERT INTO TB_USERS_MAPPING</div><div> (</div><div> USERNAME, FILE_IDX, CREA_DTM, CREA_ID</div><div> )</div><div> VALUES</div><div> (</div><div> #{username},</div><div> #{file_idx}::INTEGER,</div><div> NOW(),</div><div> #{crea_id}</div><div> )</div><div> ]]&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;!-- Meta Merge --&gt;</div><div>&lt;insert id="updateMergeMetaMapping" parameterType="hashmap"&gt;</div><div>/*</div><div>updateMergeMetaMapping */</div><div>UPDATE TB_FILEMANAGER_META_MAPPING SET</div><div>META_IDX = #{targetMeta}::INTEGER WHERE META_IDX =</div><div>\#{sourceMeta}::INTEGER;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;insert id="updateMergeMeta" parameterType="hashmap"&gt;</div><div>UPDATE</div><div>TB_FILEMANAGER_META SET</div><div>DEL_GB = 'Y' WHERE IDX = #{sourceMeta}::INTEGER;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;!-- Delete Meta Detail --&gt;</div><div>&lt;insert id="deleteMetaDetail" parameterType="int"&gt;</div><div>DELETE FROM</div><div>TB_FILEMANAGER_META</div><div>WHERE IDX = #{meta_idx};</div><div>&lt;/insert&gt;</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= Meta INSERT/UPDATE </div><div>Select ============================================= ########## --&gt;</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= File INSERT/UPDATE </div><div>Select ============================================= ########## --&gt;</div><div>  
</div><div>&lt;insert id="insertFile" parameterType="hashmap"&gt;</div><div> &lt;![CDATA[</div><div> INSERT INTO TB_FILEMANAGER_META_FILE</div><div> (</div><div> FILE_TITLE, </div><div> FILE_DETAIL,</div><div> ORIGINAL_FILE_NAME,</div><div> STORED_FILE_NAME,</div><div> FILE_SIZE,</div><div> FILE_TYPE,</div><div> CREA_DTM,</div><div> CREA_ID,</div><div> DOWN_YN,</div><div> STAR_LEVEL</div><div> )</div><div> VALUES</div><div> (</div><div> #{file_title},</div><div> #{file_detail},</div><div> #{original_file_name},</div><div> #{stored_file_name},</div><div> #{file_size},</div><div> #{file_type},</div><div> NOW(),</div><div> #{crea_id},</div><div> #{down_yn},</div><div> #{star_level}::INTEGER</div><div> )</div><div> ]]&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;insert id="updateFile" parameterType="hashmap"&gt;</div><div> &lt;![CDATA[</div><div>UPDATE TB_FILEMANAGER_META_FILE SET </div><div> ]]&gt;</div><div>&lt;if test="file_title != null and file_title != ''"&gt;</div><div>FILE_TITLE = #{file_title} ,</div><div>&lt;/if&gt;</div><div>&lt;if test="file_type != null and file_type != ''"&gt;</div><div>FILE_TYPE = #{file_type} ,</div><div>&lt;/if&gt;</div><div>&lt;if test="file_detail != null and file_detail != ''"&gt;</div><div>FILE_DETAIL = #{file_detail} ,</div><div>&lt;/if&gt;</div><div>&lt;if test="crea_id != null and crea_id != ''"&gt;</div><div>CREA_ID = #{crea_id} ,</div><div>&lt;/if&gt;</div><div>&lt;if test="star_level != null and star_level != ''"&gt;</div><div>STAR_LEVEL = #{star_level}::INTEGER ,</div><div>&lt;/if&gt;</div><div> &lt;![CDATA[</div><div> CREA_DTM = NOW()</div><div>WHERE IDX = #{idx}::INTEGER;</div><div> ]]&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;delete id="deleteShareUsers" parameterType="int"&gt;</div><div> &lt;![CDATA[</div><div>DELETE FROM TB_USERS_MAPPING</div><div>WHERE FILE_IDX = #{file_idx}</div><div>]]&gt;</div><div>&lt;/delete&gt;</div><div>  
</div><div>&lt;select id="selectMetaListByFile" parameterType="int"</div><div>resultType="com.joang.filemanager.vo.MetaVO"&gt;</div><div> &lt;![CDATA[</div><div> SELECT </div><div>A.IDX,</div><div>A.USER_ID,</div><div>A.META,</div><div>A.CREA_DTM,</div><div>A.CREA_ID,</div><div>A.DEL_GB</div><div>FROM TB_FILEMANAGER_META A, TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META_FILE C</div><div>WHERE A.IDX = B.META_IDX</div><div>AND B.FILE_IDX = C.IDX</div><div>AND C.DEL_GB = 'N'</div><div>AND C.IDX = #{idx}</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>  
</div><div>&lt;!-- update File Detail --&gt;</div><div>&lt;insert id="updateFileDetail" parameterType="hashmap"&gt;</div><div>UPDATE</div><div>TB_FILEMANAGER_META_FILE SET</div><div>DEL_GB = 'Y' WHERE IDX = #{idx}::INTEGER;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;!-- File Mapping update --&gt;</div><div>&lt;insert id="updateFileMetaMapping" parameterType="hashmap"&gt;</div><div>UPDATE</div><div>TB_FILEMANAGER_META_MAPPING SET</div><div>FILE_IDX = #{targetMeta}::INTEGER WHERE FILE_IDX = #{sourceMeta}::INTEGER;</div><div>&lt;/insert&gt;</div><div>  
</div><div>&lt;!-- Delete File detail --&gt;</div><div>&lt;delete id="deleteFileDetail" parameterType="int"&gt;</div><div>&lt;![CDATA[</div><div> DELETE</div><div>FROM</div><div> TB_FILEMANAGER_META_FILE</div><div> WHERE</div><div> IDX = #{file_idx}::INTEGER;</div><div> ]]&gt;</div><div>&lt;/delete&gt;</div><div>  
</div><div>&lt;update id="updateYouTuBeDownloadYn" parameterType="int"&gt;</div><div>/*</div><div>updateYouTuBeDownloadYn */</div><div>UPDATE TB_FILEMANAGER_META_FILE SET</div><div>DOWN_YN = 'N'</div><div>WHERE</div><div>IDX = #{file_idx};</div><div>&lt;/update&gt;</div><div>  
</div><div>&lt;!-- ########## ============================================= File INSERT/UPDATE </div><div>Select ============================================= ########## --&gt;</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= MApping Management </div><div>============================================= ########## --&gt;</div><div>  
</div><div>&lt;!-- ########## Meta Ref ########## --&gt;</div><div>&lt;select id="selectMetaRefList"</div><div>parameterType="com.joang.filemanager.vo.MetaRefVO"</div><div>resultType="com.joang.filemanager.vo.MetaRefVO"&gt;</div><div> &lt;![CDATA[</div><div> SELECT </div><div>A.FROM_IDX,</div><div>A.TO_IDX,</div><div>A.META_REF,</div><div>A.CREA_DTM,</div><div>A.CREA_ID</div><div>FROM TB_FILEMANAGER_META_REF A, TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META_FILE C, TB_USERS_MAPPING D</div><div>WHERE 1=1</div><div> ]]&gt;</div><div>&lt;if test="fromIdx != null and fromIdx != '' and fromIdx != 0"&gt;</div><div>&lt;![CDATA[</div><div>AND A.FROM_IDX = #{fromIdx}</div><div>]]&gt;</div><div>&lt;/if&gt;</div><div>&lt;if test="toIdx != null and toIdx != '' and toIdx != 0"&gt;</div><div>&lt;![CDATA[</div><div>AND A.TO_IDX = #{toIdx}</div><div>]]&gt;</div><div>&lt;/if&gt;</div><div> &lt;![CDATA[</div><div> AND A.FROM_IDX = B.META_IDX </div><div> AND B.FILE_IDX = C.IDX </div><div>AND A.DEL_GB = 'N'</div><div>AND C.IDX = D.FILE_IDX</div><div>AND D.USERNAME = #{crea_id}</div><div>UNION</div><div> SELECT </div><div>A.FROM_IDX,</div><div>A.TO_IDX,</div><div>A.META_REF,</div><div>A.CREA_DTM,</div><div>A.CREA_ID</div><div>FROM TB_FILEMANAGER_META_REF A, TB_FILEMANAGER_META_MAPPING B, TB_FILEMANAGER_META_FILE C, TB_USERS_MAPPING D</div><div>WHERE 1=1</div><div> ]]&gt;</div><div>&lt;if test="fromIdx != null and fromIdx != '' and fromIdx != 0"&gt;</div><div>&lt;![CDATA[</div><div>AND A.FROM_IDX = #{fromIdx}</div><div>]]&gt;</div><div>&lt;/if&gt;</div><div>&lt;if test="toIdx != null and toIdx != '' and toIdx != 0"&gt;</div><div>&lt;![CDATA[</div><div>AND A.TO_IDX = #{toIdx}</div><div>]]&gt;</div><div>&lt;/if&gt;</div><div> &lt;![CDATA[</div><div> AND A.TO_IDX = B.META_IDX </div><div> AND B.FILE_IDX = C.IDX </div><div>AND A.DEL_GB = 'N'</div><div>AND C.IDX = D.FILE_IDX</div><div>AND D.USERNAME = #{crea_id}</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;!-- Check mapping --&gt;</div><div>&lt;select id="checkMetaMapping" parameterType="hashmap"</div><div>resultType="hashmap"&gt;</div><div>&lt;![CDATA[</div><div> SELECT</div><div>meta_idx</div><div>FROM</div><div> TB_FILEMANAGER_META_MAPPING</div><div> WHERE</div><div> DEL_GB ='N'</div><div> AND META_IDX = #{meta_idx}::INTEGER</div><div>AND FILE_IDX = #{file_idx}::INTEGER</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>  
</div><div>&lt;!-- Delete meta mapping --&gt;</div><div>&lt;delete id="deleteMetaMapping" parameterType="hashmap"&gt;</div><div>&lt;![CDATA[</div><div> DELETE</div><div>FROM</div><div> TB_FILEMANAGER_META_MAPPING</div><div> WHERE</div><div> META_IDX =#{meta_idx}::INTEGER</div><div>AND FILE_IDX = #{file_idx}::INTEGER</div><div> ]]&gt;</div><div>&lt;/delete&gt;</div><div>  
</div><div>&lt;select id="selectMappingListByMetaIdx" parameterType="int"</div><div>resultType="com.joang.filemanager.vo.MetaVO"&gt;</div><div> &lt;![CDATA[</div><div> SELECT </div><div>IDX,</div><div>META_IDX,</div><div>FILE_IDX</div><div>FROM TB_FILEMANAGER_META_MAPPING</div><div>WHERE META_IDX = #{idx}</div><div> ]]&gt;</div><div>&lt;/select&gt;</div><div>  
</div><div>&lt;!-- Delete Mapping --&gt;</div><div>&lt;delete id="deleteMetaMappingByFileIdx" parameterType="int"&gt;</div><div>&lt;![CDATA[</div><div> DELETE</div><div>FROM</div><div> TB_FILEMANAGER_META_MAPPING</div><div> WHERE</div><div> FILE_IDX = #{file_idx}</div><div> ]]&gt;</div><div>&lt;/delete&gt;</div><div>  
</div><div>&lt;insert id="insertMetaRef"</div><div>parameterType="com.joang.filemanager.vo.MetaRefVO"&gt;</div><div>&lt;![CDATA[</div><div>INSERT INTO TB_FILEMANAGER_META_REF (FROM_IDX, TO_IDX, META_REF, CREA_DTM, CREA_ID, UPDT_DTM, DEL_GB) VALUES</div><div>( </div><div>\#{fromIdx}, #{toIdx}, #{metaRef}, NOW(), #{creaId}, NOW(), 'N'</div><div>)</div><div>]]&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>  
</div><div>&lt;insert id="updateMetaRef"</div><div>parameterType="com.joang.filemanager.vo.MetaRefVO"&gt;</div><div>&lt;![CDATA[</div><div>UPDATE TB_FILEMANAGER_META_REF SET </div><div>META_REF = #{metaRef},</div><div>UPDT_DTM = NOW()</div><div>WHERE </div><div>FROM_IDX = #{fromIdx}</div><div>AND TO_IDX = #{toIdx}</div><div>AND CREA_ID = #{crea_id} </div><div>]]&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>  
</div><div>&lt;insert id="deleteMetaRef"</div><div>parameterType="com.joang.filemanager.vo.MetaRefVO"&gt;</div><div>&lt;![CDATA[</div><div>DELETE FROM TB_FILEMANAGER_META_REF </div><div>WHERE </div><div>FROM_IDX = #{fromIdx}</div><div>AND TO_IDX = #{toIdx}</div><div>AND CREA_ID = #{crea_id} </div><div>]]&gt;</div><div>&lt;/insert&gt;</div><div>  
</div><div>  
</div><div>&lt;update id="updateMergeMetaFromRef" parameterType="hashmap"&gt;</div><div>/*</div><div>updateMergeMetaRef */</div><div>UPDATE TB_FILEMANAGER_META_REF SET</div><div>FROM_IDX = #{targetFromMeta}::INTEGER</div><div>WHERE</div><div>FROM_IDX = #{sourceFromMeta}::INTEGER AND TO_IDX = #{sourceToMeta}::INTEGER</div><div>AND CREA_ID = #{crea_id}</div><div>&lt;/update&gt;</div><div>  
</div><div>&lt;update id="updateMergeMetaToRef" parameterType="hashmap"&gt;</div><div>/*</div><div>updateMergeMetaRef */</div><div>UPDATE TB_FILEMANAGER_META_REF SET</div><div>TO_IDX = #{targetToMeta}::INTEGER</div><div>WHERE</div><div>TO_IDX = #{sourceToMeta}::INTEGER AND FROM_IDX = #{sourceFromMeta}::INTEGER</div><div>AND CREA_ID = #{crea_id}</div><div>&lt;/update&gt;</div><div>  
</div><div>&lt;delete id="daleteMergeMetaRef" parameterType="hashmap"&gt;</div><div>/*</div><div>daleteMergeMetaFromRef */</div><div>DELETE</div><div>FROM</div><div>TB_FILEMANAGER_META_REF</div><div>WHERE</div><div>FROM_IDX = #{sourceFromMeta}::INTEGER AND TO_IDX = #{sourceToMeta}::INTEGER</div><div>AND CREA_ID = #{crea_id}</div><div>&lt;/delete&gt;</div><div>  
</div><div>&lt;delete id="deleteMetaMappingFROMRef" parameterType="int"&gt;</div><div>/*</div><div>deleteMetaMappingFROMRef */</div><div>DELETE</div><div>FROM</div><div>TB_FILEMANAGER_META_REF</div><div>WHERE</div><div>FROM_IDX = #{deleteMeta}</div><div>&lt;/delete&gt;</div><div>  
</div><div>&lt;delete id="deleteMetaMappingTORef" parameterType="int"&gt;</div><div>/*</div><div>deleteMetaMappingTORef */</div><div>DELETE</div><div>FROM</div><div>TB_FILEMANAGER_META_REF</div><div>WHERE</div><div>TO_IDX = #{deleteMeta}</div><div>&lt;/delete&gt;</div><div>  
</div><div>  
</div><div>&lt;!-- ########## ============================================= Mapping Management </div><div>============================================= ########## --&gt;</div><div>  
</div><div>  
</div><div>&lt;/mapper&gt;</div></details><details id="bkmrk-test.txt-test1test2-"><summary>test.txt</summary>

test1  
test2 // hyunsu  
hhhh /\* hello 0

hello

mmmm \*/ lllll

/\*  
여기   
\*/

123456 &lt;!-- test   
 hdewhfd  
 wehfiuheri   
\--&gt; dfjrwevniearlivsefh

1234 &lt;!-- hhyubn --&gt; 555555555555  
hhhh -- nfejeewfhlwjka

test /\* hahahah \*/  
&lt;!--   
fwef --&gt;  
우리 대한민구 만세 // 류재환   
FINE

</details>처리 결과

<details id="bkmrk-%EC%B2%98%EB%A6%AC%EA%B2%B0%EA%B3%BC-start-%3A%3A%3A%3A%3A%3A%3A%3A%3A"><summary>처리결과</summary>

<span style="color:rgb(191,237,210);"> START </span>

<span style="color:rgb(191,237,210);">:::::::::::: PROC FILE NAME : metaMapper.xml::::::::::::</span>

<span style="color:rgb(191,237,210);"> &gt; fileName Path : C:\\HYUNSU\\eclipse-showcase-workspace\\SocParsing\\parsing\\metaMapper.xml</span>

<span style="color:rgb(126,140,141);"> &gt; Remove Anno Range : metaMapper.xml \[/\* , \*/\]</span>

<span style="color:rgb(126,140,141);"> &gt; Remove Anno Range : metaMapper.xml \[&lt;!-- , --&gt;\]</span>

<span style="color:rgb(126,140,141);"> &gt; Remove Anno Line : metaMapper.xml \[--\]</span>

<span style="color:rgb(126,140,141);"> &gt; Remove Anno Line : metaMapper.xml \[//\]</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (1)&lt;SELECT-&lt;/SELECT&gt; 1415 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTMETALISTCNT" PARAMETERTYPE="COM.JOANG. ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (2)&lt;SELECT-&lt;/SELECT&gt; 1760 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTMETALIST" PARAMETERTYPE="COM.JOANG.FIL ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (3)&lt;SELECT-&lt;/SELECT&gt; 1199 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTMETAAUTOCOMPLETE" PARAMETERTYPE="COM.J ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (4)&lt;SELECT-&lt;/SELECT&gt; 331 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTUSERAUTOCOMPLETE" PARAMETERTYPE="COM.J ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (5)&lt;SELECT-&lt;/SELECT&gt; 2723 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTREFMETALIST" PARAMETERTYPE="COM.JOANG. ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (6)&lt;SELECT-&lt;/SELECT&gt; 136 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTMETAVALUEBYMETAIDX" PARAMETERTYPE="INT" ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (7)&lt;SELECT-&lt;/SELECT&gt; 1610 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTFILELISTCNT" PARAMETERTYPE="COM.JOANG. ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (8)&lt;SELECT-&lt;/SELECT&gt; 2618 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTFILELIST" PARAMETERTYPE="COM.JOANG.FIL ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (9)&lt;SELECT-&lt;/SELECT&gt; 536 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTFILEDETAIL" PARAMETERTYPE="INT" RESULT ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (10)&lt;SELECT-&lt;/SELECT&gt; 384 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTFILESHAREUSERLISTBYFILE" PARAMETERTYPE= ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (11)&lt;SELECT-&lt;/SELECT&gt; 107 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="GETTARGETMETAIDX" RESULTTYPE="STRING"&gt; SELEC ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (12)&lt;SELECT-&lt;/SELECT&gt; 228 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="CHECKMETA" PARAMETERTYPE="STRING" RESULTTYPE ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (15)&lt;SELECT-&lt;/SELECT&gt; 399 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTMETALISTBYFILE" PARAMETERTYPE="INT" RE ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (16)&lt;SELECT-&lt;/SELECT&gt; 1426 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTMETAREFLIST" PARAMETERTYPE="COM.JOANG. ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (17)&lt;SELECT-&lt;/SELECT&gt; 305 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="CHECKMETAMAPPING" PARAMETERTYPE="HASHMAP" RE ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (18)&lt;SELECT-&lt;/SELECT&gt; 241 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="SELECTMAPPINGLISTBYMETAIDX" PARAMETERTYPE="IN ... "</span>

<span style="color:rgb(191,237,210);"> &gt;&gt; ::::::::: key="&lt;select-&lt;/select&gt;" , FIND("TB\_FILEMANAGER\_META") Total Cnt = 15</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (1)&lt;INSERT-&lt;/INSERT&gt; 453 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="INSERTMETA" PARAMETERTYPE="HASHMAP"&gt; &lt;!\[CD ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (2)&lt;INSERT-&lt;/INSERT&gt; 648 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="INSERTMETAMAPPING" PARAMETERTYPE="HASHMAP"&gt; ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (3)&lt;INSERT-&lt;/INSERT&gt; 375 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="INSERTMETAEXISTMAPPING" PARAMETERTYPE="HASHMA ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (4)&lt;INSERT-&lt;/INSERT&gt; 332 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="INSERTSHAREUSER" PARAMETERTYPE="COM.JOANG.FIL ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (5)&lt;INSERT-&lt;/INSERT&gt; 171 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEMERGEMETAMAPPING" PARAMETERTYPE="HASHMA ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (6)&lt;INSERT-&lt;/INSERT&gt; 130 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEMERGEMETA" PARAMETERTYPE="HASHMAP"&gt; UP ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (7)&lt;INSERT-&lt;/INSERT&gt; 104 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DELETEMETADETAIL" PARAMETERTYPE="INT"&gt; DELET ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (8)&lt;INSERT-&lt;/INSERT&gt; 659 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="INSERTFILE" PARAMETERTYPE="HASHMAP"&gt; &lt;!\[C ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (9)&lt;INSERT-&lt;/INSERT&gt; 635 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEFILE" PARAMETERTYPE="HASHMAP"&gt; &lt;!\[C ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (10)&lt;INSERT-&lt;/INSERT&gt; 129 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEFILEDETAIL" PARAMETERTYPE="HASHMAP"&gt; U ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (11)&lt;INSERT-&lt;/INSERT&gt; 170 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEFILEMETAMAPPING" PARAMETERTYPE="HASHMAP ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (12)&lt;INSERT-&lt;/INSERT&gt; 270 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="INSERTMETAREF" PARAMETERTYPE="COM.JOANG.FILE ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (13)&lt;INSERT-&lt;/INSERT&gt; 256 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEMETAREF" PARAMETERTYPE="COM.JOANG.FILE ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (14)&lt;INSERT-&lt;/INSERT&gt; 210 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DELETEMETAREF" PARAMETERTYPE="COM.JOANG.FILE ... "</span>

<span style="color:rgb(191,237,210);"> &gt;&gt; ::::::::: key="&lt;insert-&lt;/insert&gt;" , FIND("TB\_FILEMANAGER\_META") Total Cnt = 13</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (1)&lt;UPDATE-&lt;/UPDATE&gt; 130 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEYOUTUBEDOWNLOADYN" PARAMETERTYPE="INT"&gt; ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (2)&lt;UPDATE-&lt;/UPDATE&gt; 239 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEMERGEMETAFROMREF" PARAMETERTYPE="HASHMA ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (3)&lt;UPDATE-&lt;/UPDATE&gt; 233 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="UPDATEMERGEMETATOREF" PARAMETERTYPE="HASHMAP" ... "</span>

<span style="color:rgb(191,237,210);"> &gt;&gt; ::::::::: key="&lt;update-&lt;/update&gt;" , FIND("TB\_FILEMANAGER\_META") Total Cnt = 3</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (1)&lt;DELETE-&lt;/DELETE&gt; 122 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DELETESHAREUSERS" PARAMETERTYPE="INT"&gt; &lt;! ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (2)&lt;DELETE-&lt;/DELETE&gt; 190 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DELETEFILEDETAIL" PARAMETERTYPE="INT"&gt; &lt;!\[CDA ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (3)&lt;DELETE-&lt;/DELETE&gt; 240 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DELETEMETAMAPPING" PARAMETERTYPE="HASHMAP"&gt; &lt; ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (4)&lt;DELETE-&lt;/DELETE&gt; 198 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DELETEMETAMAPPINGBYFILEIDX" PARAMETERTYPE="IN ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (5)&lt;DELETE-&lt;/DELETE&gt; 199 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DALETEMERGEMETAREF" PARAMETERTYPE="HASHMAP"&gt; ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (6)&lt;DELETE-&lt;/DELETE&gt; 124 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DELETEMETAMAPPINGFROMREF" PARAMETERTYPE="INT" ... "</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; Find! (7)&lt;DELETE-&lt;/DELETE&gt; 120 Col</span>

<span style="color:rgb(126,140,141);"> \\\_ TEXT = " ID="DELETEMETAMAPPINGTOREF" PARAMETERTYPE="INT"&gt; ... "</span>

<span style="color:rgb(191,237,210);"> &gt;&gt; ::::::::: key="&lt;delete-&lt;/delete&gt;" , FIND("TB\_FILEMANAGER\_META") Total Cnt = 6</span>

<span style="color:rgb(191,237,210);">:::::::::::: File=metaMapper.xml , Result={&lt;SELECT=15, &lt;DELETE=6, &lt;INSERT=13, &lt;UPDATE=3}::::::::::::</span>

<span style="color:rgb(191,237,210);">:::::::::::: PROC FILE NAME : test.txt::::::::::::</span>

<span style="color:rgb(191,237,210);"> &gt; fileName Path : C:\\HYUNSU\\eclipse-showcase-workspace\\SocParsing\\parsing\\test.txt</span>

<span style="color:rgb(126,140,141);"> &gt; Remove Anno Range : test.txt \[/\* , \*/\]</span>

<span style="color:rgb(126,140,141);"> &gt; Remove Anno Range : test.txt \[&lt;!-- , --&gt;\]</span>

<span style="color:rgb(126,140,141);"> &gt; Remove Anno Line : test.txt \[--\]</span>

<span style="color:rgb(126,140,141);"> &gt; Remove Anno Line : test.txt \[//\]</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; ::::::::: key="&lt;select-&lt;/select&gt;" , FIND("TB\_FILEMANAGER\_META") Total Cnt = 0</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; ::::::::: key="&lt;insert-&lt;/insert&gt;" , FIND("TB\_FILEMANAGER\_META") Total Cnt = 0</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; ::::::::: key="&lt;update-&lt;/update&gt;" , FIND("TB\_FILEMANAGER\_META") Total Cnt = 0</span>

<span style="color:rgb(126,140,141);"> &gt;&gt; ::::::::: key="&lt;delete-&lt;/delete&gt;" , FIND("TB\_FILEMANAGER\_META") Total Cnt = 0</span>

<span style="color:rgb(191,237,210);">:::::::::::: File=test.txt , Result={&lt;SELECT=0, &lt;DELETE=0, &lt;INSERT=0, &lt;UPDATE=0}::::::::::::</span>

**<span style="color:rgb(191,237,210);">&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; All File Find \["TB\_FILEMANAGER\_META"\] Result={&lt;SELECT=15, &lt;DELETE=6, &lt;INSERT=13, &lt;UPDATE=3}</span>**

</details>