Biz.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package com.udapsoft.waf.system;
  2. import java.io.InputStream;
  3. import java.io.PrintWriter;
  4. import java.util.Enumeration;
  5. import java.util.Locale;
  6. import java.util.Properties;
  7. import kr.co.hsnc.common.logger.Logger;
  8. import kr.co.hsnc.common.sql.WAFConnection;
  9. import kr.co.hsnc.common.sql.WAFSQLException;
  10. import kr.co.hsnc.common.util.Translator;
  11. import kr.co.hsnc.common.util.ValueObject;
  12. import kr.co.hsnc.j2ee.waf.controller.web.util.WebKeys;
  13. import com.udapsoft.waf.common.web.paging.PageAnchorInfo;
  14. /**
  15. * Biz-Class의 디폴트의 구현을 제공합니다. Biz-Class는 본 클래스를 상속받아 Biz-Logic을 구현합니다.<br>
  16. * Biz-Class는 생성될때 HandlerStorage를 받아서 생성됩니다.<br>
  17. * IPSBiz는 Handler에 대해 일관한 인터페이스를 제공합니다.<br>
  18. * IPSBiz는 HandlerStorage에 대해 쉬운 접근을 제공합니다.(WAFConnection, PageAnchorInfo,
  19. * params...)<br>
  20. * 그외에 HandlerStorage의 리소스 및 Method는 HandlerStorage를 직접 접근 하여 사용한다.<br>
  21. *
  22. * @author DaeJin Lee
  23. */
  24. public abstract class Biz {
  25. /**
  26. * Handler Storage
  27. */
  28. protected HandlerStorage storage = null;
  29. /**
  30. * JDBC DataBase Connection
  31. */
  32. protected WAFConnection conn = null;
  33. /**
  34. * Paging 처리를 위한 Helper Class
  35. */
  36. protected PageAnchorInfo anchor = null;
  37. /**
  38. * 전송받은 Parameter를 적재한 ValueObject
  39. */
  40. protected ValueObject params = null;
  41. /**
  42. * Biz-Class는 다음 생성자를 구현합니다.
  43. *
  44. * @param storage
  45. */
  46. protected Biz(HandlerStorage storage) {
  47. this.storage = storage;
  48. this.conn = storage.getWAFConnection();
  49. this.anchor = storage.getPageAnchorInfo();
  50. this.params = storage.getParams();
  51. }
  52. /**
  53. * Paging 처리를 위한 Helper Class 생성합니다.
  54. */
  55. protected void createPageAnchorInfo() {
  56. storage.createPageAnchorInfo();
  57. this.anchor = storage.getPageAnchorInfo();
  58. }
  59. /**
  60. * 전송된 Parameter를 리턴한다.
  61. *
  62. * @param key
  63. * @return
  64. */
  65. protected String get(String key) {
  66. return this.params.get(key);
  67. }
  68. /**
  69. * 전송된 Parameter를 리턴한다.(값을 없는 경우에는 넘겨받은 기본값을 리턴한다.)
  70. *
  71. * @param key
  72. * @param defaultValue
  73. * @return
  74. */
  75. protected String get(String key, String defaultValue) {
  76. return this.params.get(key, defaultValue);
  77. }
  78. /**
  79. * Array로 전송된 Parameter를 리턴한다.
  80. *
  81. * @param key
  82. * @return
  83. */
  84. protected String[] gets(String key) {
  85. if (this.params.getObject(key) instanceof String[])
  86. return (String[]) (this.params.getObject(key));
  87. else {
  88. if ("".equals(this.params.get(key))) {
  89. String[] temp = { "" };
  90. return temp;
  91. } else {
  92. String[] temp = { this.params.get(key) };
  93. return temp;
  94. }
  95. }
  96. }
  97. /**
  98. * Exception에 대한 통일된 로그 처리를 한다.
  99. *
  100. * @param Exception
  101. */
  102. protected void doException(Throwable e) {
  103. e.printStackTrace();
  104. StackTraceElement element = e.getStackTrace()[1];
  105. Logger.err.println(element.getClassName() + " --> " + element.getMethodName() + " : " + e.getMessage());
  106. Logger.err.println("URI : " + storage.getCurrentURI());
  107. Logger.err.println("EVENT : " + storage.getEvent());
  108. Logger.err.println("File Name : " + element.getFileName());
  109. Logger.err.println("Line Number : " + element.getLineNumber());
  110. Logger.err.printStackTrace((Exception) e);
  111. }
  112. /**
  113. * Exception에 대한 통일된 로그 처리를 한다.
  114. *
  115. * @param Exception
  116. * @param search
  117. */
  118. protected void doException(WAFSQLException se) {
  119. doException((Throwable) se);
  120. Logger.err.println("SQL : \n" + se.getStatement());
  121. Logger.err.println("PARAM : \n" + se.getParameter());
  122. }
  123. /**
  124. * MultiPart 첨부파일을 리턴
  125. *
  126. * @param key
  127. * @return
  128. */
  129. public java.io.File getFile(String key) {
  130. return this.storage.getFile(key);
  131. }
  132. /**
  133. * File Key Set를 리턴
  134. *
  135. * @return
  136. */
  137. public Enumeration<?> getFileKeys() {
  138. return this.storage.getFileKeys();
  139. }
  140. /**
  141. * MultiPart 첨부파일 원본 파일이름을 리턴
  142. *
  143. * @param key
  144. * @return
  145. */
  146. public String getOriginalFileName(String key) {
  147. return this.storage.getOriginalFileName(key);
  148. }
  149. /**
  150. * MultiPart 첨부파일에 ContentType을 리턴
  151. *
  152. * @param key
  153. * @return
  154. */
  155. public String getContentType(String key) {
  156. return this.storage.getContentType(key);
  157. }
  158. /**
  159. * 사용자 정보를 리턴
  160. *
  161. * @return
  162. */
  163. public ValueObject getUser() {
  164. return this.storage.getUser();
  165. }
  166. /**
  167. * 사용자 정보를 세팅
  168. *
  169. * @param user
  170. * 사용자 정보
  171. */
  172. public void setUser(ValueObject user) {
  173. this.storage.setUser(user);
  174. }
  175. /**
  176. * 리소스 파일을 로드하여 ValueObject로 리턴 Default resourceName : "_message.resource"
  177. *
  178. * @return
  179. */
  180. public ValueObject getMessageResorce() {
  181. return getMessageResorce("_message.resource");
  182. }
  183. /**
  184. * 리소스 파일을 로드하여 ValueObject로 리턴
  185. *
  186. * @param resourceName
  187. * : 읽을 파일 이름(Biz Class와 같은 위치에 있는 파일 이름)
  188. * @return
  189. */
  190. public ValueObject getMessageResorce(String resourceName) {
  191. ValueObject messages = new ValueObject(true);
  192. Locale locale = (Locale) (this.storage.getRequest().getSession().getAttribute(WebKeys.LOCALE));
  193. String localeStr = locale.toString() + ".";
  194. try {
  195. InputStream stream = this.getClass().getResourceAsStream(resourceName);
  196. Properties prop = new Properties();
  197. prop.load(stream);
  198. stream.close();
  199. for (Enumeration<?> e = prop.keys(); e.hasMoreElements();) {
  200. String key = (String) e.nextElement();
  201. String value = prop.getProperty(key);
  202. String t_key = key;
  203. int index = key.indexOf(localeStr);
  204. if (index > -1) {
  205. t_key = key.substring(index + localeStr.length());
  206. }
  207. messages.set(t_key, Translator.toKSC(value));
  208. }
  209. } catch (Exception e) {
  210. Logger.err.printStackTrace(e);
  211. }
  212. return messages;
  213. }
  214. private static int key_seq = 0;
  215. private PrintWriter writer = null;
  216. protected void initInstanceLog(Class<?> cls) {
  217. initInstanceLog(cls, "" + key_seq);
  218. }
  219. protected void initInstanceLog(Class<?> cls, String key) {
  220. try {
  221. String path = "./logs";
  222. // path = WAFConfig.get("biz.instance.log.path");
  223. java.io.FileWriter fw = new java.io.FileWriter(path + key + ".log",
  224. true);
  225. writer = new PrintWriter(new java.io.BufferedWriter(fw), true);
  226. } catch (Exception e) {
  227. }
  228. }
  229. protected void log(String str) {
  230. if (writer != null) {
  231. writer.print(str);
  232. }
  233. }
  234. /**
  235. * Biz-Logic을 구현하는 일관한 메서드 제공<BR>
  236. * 다음 Method에 Biz-Logic을 구현한다.
  237. * @throws Exception
  238. */
  239. public abstract void doBiz() throws Exception;
  240. }