HandlerStorage.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. package com.udapsoft.waf.system;
  2. import java.io.PrintWriter;
  3. import java.io.StringWriter;
  4. import java.util.Enumeration;
  5. import java.util.Hashtable;
  6. import javax.servlet.http.HttpServletRequest;
  7. import kr.co.hsnc.common.base.WAFMessages;
  8. import kr.co.hsnc.common.sql.RowSet;
  9. import kr.co.hsnc.common.sql.WAFConnection;
  10. import kr.co.hsnc.common.sql.WAFConnectionImpl;
  11. import kr.co.hsnc.common.util.StringUtil;
  12. import kr.co.hsnc.common.util.ValueObject;
  13. import kr.co.hsnc.j2ee.components.multipart.MultipartWrapper;
  14. import kr.co.hsnc.j2ee.components.multipart.UploadedFile;
  15. import kr.co.hsnc.j2ee.waf.controller.web.util.WebKeys;
  16. import kr.co.udapsoft.common.menu.MenuManager;
  17. import com.udapsoft.waf.common.web.paging.PageAnchorInfo;
  18. /**
  19. * HandlerStorage는 Handler로부터 BizClass로 다시 JSP-Layer로 일관된 정보의 접근과 데이터의 교환을 지원한다.
  20. *
  21. * @author DaeJin Lee
  22. */
  23. public class HandlerStorage {
  24. /**
  25. * HandlerStorage가 Session에 적대될때 사용된다.
  26. */
  27. public final static String KEY = "WAFHandlerStorage";
  28. /**
  29. * Request
  30. */
  31. public HttpServletRequest request = null;
  32. /**
  33. * multi-part/form 데이터를 처리하기 위해 Wrapping된 HttpServletRequest
  34. */
  35. private MultipartWrapper wrapper2 = null;
  36. /**
  37. * DataBase Connection
  38. */
  39. private WAFConnection conn = null;
  40. /**
  41. * 전송된 Request가 multi-part/form Encoding 여부
  42. */
  43. private boolean isMultiPart = false;
  44. /**
  45. * RowSet의 적재 Hashtable
  46. */
  47. private Hashtable<String, RowSet> rowSets = null;
  48. /**
  49. * ValueObject의 적재 Hashtable
  50. */
  51. private Hashtable<String, ValueObject> valueObjects = null;
  52. /**
  53. * 일반 Object의 적재 Hashtable
  54. */
  55. private Hashtable<String, Object> objects = null;
  56. /**
  57. * Paging 처리를 위한 Helper Class
  58. */
  59. private PageAnchorInfo pageAnchorInfo = null;
  60. /**
  61. * 전송받은 Parameter를 적재한 ValueObject
  62. */
  63. private ValueObject params = null;
  64. /**
  65. * 처리요구를 받는 URI
  66. */
  67. private String currentURI = "";
  68. /**
  69. * 처리요구를 받는 URL
  70. */
  71. private StringBuffer currentURL = new StringBuffer();
  72. /**
  73. * 해당 URI에 기본 Event(Handler에서 Event분기구현을 한다.)
  74. */
  75. private String defaultEvent = "";
  76. /**
  77. * Biz Class의 Biz-Logic 처리 성공 여부 비즈객체들에서 에러가 나면 false 를 set 한다
  78. */
  79. private boolean success = true;
  80. /**
  81. * BizClass에서 JSP-Layer로 전달할 Message
  82. */
  83. private String message = "";
  84. /**
  85. * BizClass에서 JSP-Layer로 전달할 상세 Message
  86. */
  87. private String detailMessage = "";
  88. /**
  89. * HandlerStorage의 생성자<br>
  90. * HttpServeltRequest의 요청의 의해서 초기화 된다.
  91. */
  92. public HandlerStorage(HttpServletRequest request) {
  93. this.rowSets = new Hashtable<String, RowSet>();
  94. this.valueObjects = new Hashtable<String, ValueObject>();
  95. this.objects = new Hashtable<String, Object>();
  96. this.request = request;
  97. this.currentURI = request.getRequestURI();
  98. this.currentURL = request.getRequestURL();
  99. this.conn = new WAFConnectionImpl();
  100. if (request instanceof MultipartWrapper) {
  101. isMultiPart = true;
  102. }
  103. ParameterParser parameterParser = new ParameterParser(request);
  104. params = parameterParser.getParams();
  105. }
  106. /**
  107. * HandlerStorage의 생성자<br>
  108. */
  109. public HandlerStorage() {
  110. this.rowSets = new Hashtable<String, RowSet>();
  111. this.valueObjects = new Hashtable<String, ValueObject>();
  112. this.objects = new Hashtable<String, Object>();
  113. this.conn = new WAFConnectionImpl();
  114. this.params = new ValueObject();
  115. }
  116. /**
  117. * HandlerStorage의 생성자<br>
  118. * ValueObject params만 받는다.
  119. */
  120. public HandlerStorage(ValueObject params) {
  121. this.rowSets = new Hashtable<String, RowSet>();
  122. this.valueObjects = new Hashtable<String, ValueObject>();
  123. this.objects = new Hashtable<String, Object>();
  124. this.conn = new WAFConnectionImpl();
  125. this.params = params.copy();
  126. }
  127. /**
  128. * HandlerStorage의 생성자<br>
  129. * ValueObject params, WAFConnection conn만 받는다.
  130. */
  131. public HandlerStorage(ValueObject params, WAFConnection conn) {
  132. this.rowSets = new Hashtable<String, RowSet>();
  133. this.valueObjects = new Hashtable<String, ValueObject>();
  134. this.objects = new Hashtable<String, Object>();
  135. this.conn = conn;
  136. this.params = params.copy();
  137. }
  138. /**
  139. * JDBC Connection을 리턴한다.
  140. *
  141. * @return
  142. */
  143. public WAFConnection getWAFConnection() {
  144. return this.conn;
  145. }
  146. /**
  147. * Biz Class의 Biz-Logic 처리 성공 여부를 세팅한다.
  148. *
  149. * @param success
  150. */
  151. public void setSuccess(boolean success) {
  152. this.success = success;
  153. }
  154. /**
  155. * Biz Class의 Biz-Logic 처리 성공 여부 리턴한다.
  156. *
  157. * @return
  158. */
  159. public boolean getSuccess() {
  160. return this.success;
  161. }
  162. /**
  163. * Message를 세팅한다.
  164. *
  165. * @param message
  166. */
  167. public void setMessage(String message) {
  168. this.message = message;
  169. }
  170. /**
  171. * Message를 리턴한다.
  172. *
  173. * @return
  174. */
  175. public String getMessage() {
  176. String temp = this.message;
  177. temp = StringUtil.replace(temp, "\n", "\\n");
  178. temp = StringUtil.replace(temp, "\"", "'");
  179. return temp;
  180. }
  181. /**
  182. * 상세 Message를 세팅한다.
  183. *
  184. * @param detailMessage
  185. */
  186. public void setDetailMessage(String detailMessage) {
  187. this.detailMessage = detailMessage;
  188. }
  189. /**
  190. * 상세메세지의 Exception의 StackTrace를 세팅한다.
  191. *
  192. * @param e
  193. */
  194. public void setDetailMessage(Exception exception) {
  195. StringWriter stringWriter = new StringWriter();
  196. exception.printStackTrace(new PrintWriter(stringWriter));
  197. this.detailMessage = stringWriter.toString();
  198. }
  199. /**
  200. * 상세 Message를 리턴한다.
  201. *
  202. * @return
  203. */
  204. public String getDetailMessage() {
  205. String temp = this.detailMessage;
  206. // temp = StringUtil.replace(temp, "\"", "'");
  207. // temp = StringUtil.replace(temp, "\r", "\\r");
  208. // temp = StringUtil.replace(temp, "\n", "\\n");
  209. return temp;
  210. }
  211. /**
  212. * 전송된 Request가 multi-part/form Encoding 여부를 리턴한다.
  213. *
  214. * @return
  215. */
  216. public boolean isMultiPart() {
  217. return this.isMultiPart;
  218. }
  219. /**
  220. * 전송된 Request를 리턴한다.
  221. *
  222. * @return
  223. */
  224. public HttpServletRequest getRequest() {
  225. return this.request;
  226. }
  227. /**
  228. * multi-part/form 데이터를 처리하기 위해 Wrapping된 HttpServletRequest를 리턴한다.
  229. *
  230. * @return
  231. */
  232. public MultipartWrapper getMultipartWrapper() {
  233. return (MultipartWrapper) request;
  234. }
  235. /**
  236. * 첨부파일의 원본 이름을 리턴한다.
  237. *
  238. * @param key
  239. * @return
  240. */
  241. public String getOriginalFileName(String key) {
  242. if (this.isMultiPart)
  243. return ((MultipartWrapper) request).getOriginalFileName(key);
  244. return null;
  245. }
  246. /**
  247. * 첨부파일의 Content Type 을 리턴한다.
  248. *
  249. * @param key
  250. * @return
  251. */
  252. public String getContentType(String key) {
  253. if (this.isMultiPart)
  254. return ((MultipartWrapper) request).getContentType(key);
  255. return null;
  256. }
  257. /**
  258. * 첨부파일의 File 객체를 리턴한다.
  259. *
  260. * @param key
  261. * @return
  262. */
  263. public java.io.File getFile(String key) {
  264. if (this.isMultiPart)
  265. return ((MultipartWrapper) request).getFile(key);
  266. return null;
  267. }
  268. /**
  269. * @return
  270. */
  271. public Enumeration<?> getFileKeys() {
  272. if (this.isMultiPart)
  273. return ((MultipartWrapper) request).getFileNames();
  274. return null;
  275. }
  276. /**
  277. * 첨부파일의 File 객체를 리턴한다.
  278. *
  279. * @param key
  280. * @return
  281. */
  282. public UploadedFile[] getUploadedFiles(String key) {
  283. if (this.isMultiPart)
  284. return ((MultipartWrapper) request).getUploadFiles(key);
  285. return null;
  286. }
  287. /**
  288. * 기본 Event를 세팅한다.
  289. *
  290. * @param defaultEvent
  291. */
  292. public void setDefaultEvent(String defaultEvent) {
  293. this.defaultEvent = defaultEvent;
  294. }
  295. /**
  296. * 현재 처리중인 URI를 리턴한다.
  297. *
  298. * @return
  299. */
  300. public String getCurrentURI() {
  301. return currentURI;
  302. }
  303. public StringBuffer getCurrentURL() {
  304. return currentURL;
  305. }
  306. /**
  307. * 현재 처리중인 서버 URL을 리턴한다.
  308. *
  309. * @return
  310. */
  311. public String getCurrentDoamin() {
  312. return request.getScheme() + "://" + request.getServerName() + ":"
  313. + request.getServerPort() + "/" + request.getContextPath();
  314. }
  315. /**
  316. * SCREEN NAME을 리턴한다.
  317. *
  318. * @return
  319. */
  320. public String getScreenName() {
  321. String screenName = currentURI;
  322. if (screenName.lastIndexOf("/") > 0) {
  323. screenName = screenName.substring(screenName.lastIndexOf("/") + 1, screenName.length());
  324. }
  325. return screenName;
  326. }
  327. /**
  328. * Array로 전송된 Parameter를 리턴한다.
  329. *
  330. * @param key
  331. * @return
  332. */
  333. public String[] gets(String key) {
  334. String[] values = null;
  335. if (!isMultiPart)
  336. values = this.request.getParameterValues(key);
  337. else
  338. values = this.wrapper2.getParameterValues(key);
  339. if (values == null) {
  340. values = new String[0];
  341. }
  342. // return values;
  343. if (this.params.getObject(key) instanceof String[]) {
  344. return (String[]) this.params.getObject(key);
  345. } else {
  346. if (this.params.containsKey(key)) {
  347. String[] value = new String[1];
  348. value[0] = this.params.get(key);
  349. return value;
  350. } else {
  351. String[] value = new String[0];
  352. return value;
  353. }
  354. }
  355. }
  356. /**
  357. * 전송된 Parameter를 리턴한다.(값을 없는 경우에는 넘겨받은 기본값을 리턴한다.)
  358. *
  359. * @param key
  360. * @param defaultValue
  361. * @return
  362. */
  363. public String get(String key, String defaultValue) {
  364. String value = get(key);
  365. if (value.equals("")) {
  366. value = defaultValue;
  367. }
  368. return value;
  369. }
  370. /**
  371. * 전송된 Parameter를 리턴한다.
  372. *
  373. * @param key
  374. * @return
  375. */
  376. public String get(String key) {
  377. String value = null;
  378. if (!isMultiPart)
  379. value = this.request.getParameter(key);
  380. else
  381. value = this.wrapper2.getParameter(key);
  382. if (value == null) {
  383. value = "";
  384. }
  385. return value;
  386. }
  387. /**
  388. * 현재 처리중인 Event와 입력받은 Event와 비교해서 true/false를 리턴한다.(대소문자 구분 없음)
  389. *
  390. * @param event
  391. * @return
  392. */
  393. public boolean compareEvent(String event) {
  394. return getEvent().equalsIgnoreCase(event);
  395. }
  396. /**
  397. * 현재 처리중인 Event를 리턴한다.
  398. *
  399. * @return
  400. */
  401. public String getEvent() {
  402. if (params != null)
  403. return params.get("fevent", this.defaultEvent);
  404. return "";
  405. }
  406. /**
  407. * RowSet의 적재 Hashtable의 길이를 리턴한다.
  408. *
  409. * @return
  410. */
  411. public int getRowSetSize() {
  412. return rowSets.size();
  413. }
  414. /**
  415. * RowSet의 적재 Hashtable에서 Key에 해당하는 RowSet을 리턴한다.
  416. *
  417. * @param key
  418. * @return
  419. */
  420. public RowSet getRowSet(String key) {
  421. return (RowSet) rowSets.get(key);
  422. }
  423. /**
  424. * RowSet을 적재한다.
  425. *
  426. * @param key
  427. * @param rowSet
  428. */
  429. public void addRowSet(String key, RowSet rowSet) {
  430. rowSets.put(key, rowSet);
  431. }
  432. /**
  433. * RowSet의 적재 Hashtable에서 key에 해당하는 RowSet을 제거한다.
  434. *
  435. * @param key
  436. */
  437. public void removeRowSet(String key) {
  438. rowSets.remove(key);
  439. }
  440. /**
  441. * RowSet의 적재 Hashtable을 Clear한다.
  442. *
  443. * @see java.util.Hashtable#clear()
  444. */
  445. public void clearRowSet() {
  446. rowSets.clear();
  447. }
  448. /**
  449. * ValueObject의 적재 Hashtable의 길이를 리턴한다.
  450. *
  451. * @return
  452. */
  453. public int getValueObjectSize() {
  454. return valueObjects.size();
  455. }
  456. /**
  457. * ValueObject의 적재 Hashtable에서 key에 해당하는 ValueObject를 리턴한다.
  458. *
  459. * @param key
  460. * @return
  461. */
  462. public ValueObject getValueObject(String key) {
  463. return (ValueObject) valueObjects.get(key);
  464. }
  465. /**
  466. * ValueObject의 적재 Hashtable에 ValueObject를 적재한다.
  467. *
  468. * @param key
  469. * @param valueObject
  470. */
  471. public void addValueObject(String key, ValueObject valueObject) {
  472. valueObjects.put(key, valueObject);
  473. }
  474. /**
  475. * ValueObject의 적재 Hashtable에서 key에 해당하는 ValueObject를 제거한다.
  476. *
  477. * @param key
  478. */
  479. public void removeValueObject(String key) {
  480. valueObjects.remove(key);
  481. }
  482. /**
  483. * ValueObject의 적재 Hashtable을 Clear한다.
  484. *
  485. * @see java.util.Hashtable#clear()
  486. */
  487. public void clearValueObject() {
  488. valueObjects.clear();
  489. }
  490. /**
  491. * Object의 적재 Hashtable의 길이를 리턴한다.
  492. *
  493. * @return
  494. */
  495. public int getObjectSize() {
  496. return objects.size();
  497. }
  498. /**
  499. * Object의 적재 Hashtable에서 key에 해당하는 Object를 리턴한다.
  500. *
  501. * @see java.util.Hashtable#get()
  502. * @param key
  503. * @return
  504. */
  505. public Object getObject(String key) {
  506. return (Object) objects.get(key);
  507. }
  508. public Hashtable<String, Object> getObjectList() {
  509. return this.objects;
  510. }
  511. /**
  512. * Object의 적재 Hashtable에 Object를 적재한다.
  513. *
  514. * @param key
  515. * @param valueObject
  516. */
  517. public void addObject(String key, Object valueObject) {
  518. objects.put(key, valueObject);
  519. }
  520. /**
  521. * Object의 적재 Hashtable에서 key에 해당하는 ValueObject를 제거한다.
  522. *
  523. * @param key
  524. */
  525. public void removeObject(String key) {
  526. objects.remove(key);
  527. }
  528. /**
  529. * Object의 적재 Hashtable을 Clear한다.
  530. *
  531. * @see java.util.Hashtable#clear()
  532. * @param key
  533. */
  534. public void clearObject() {
  535. objects.clear();
  536. }
  537. /**
  538. * Paging 처리를 위한 Helper Class를 생성한다.
  539. */
  540. public void createPageAnchorInfo() {
  541. this.pageAnchorInfo = new PageAnchorInfo(this.request);
  542. }
  543. /**
  544. * Paging 처리를 위한 Helper Class를 세팅한다.
  545. *
  546. * @param pageAnchorInfo
  547. */
  548. public void setPageAnchorInfo(PageAnchorInfo pageAnchorInfo) {
  549. this.pageAnchorInfo = pageAnchorInfo;
  550. }
  551. /**
  552. * Paging 처리를 위한 Helper Class를 리턴한다.
  553. *
  554. * @return
  555. */
  556. public PageAnchorInfo getPageAnchorInfo() {
  557. return this.pageAnchorInfo;
  558. }
  559. /**
  560. * 전송받은 Parameter를 적재한 ValueObject를 입력한 ValueObject로 대체한다.
  561. *
  562. * @param params
  563. */
  564. public void setParams(ValueObject params) {
  565. this.params = params;
  566. }
  567. /**
  568. * 전송받은 Parameter를 적재한 ValueObject를 리턴한다.
  569. *
  570. * @return
  571. */
  572. public ValueObject getParams() {
  573. return this.params;
  574. }
  575. /**
  576. * 사용자 정보를 리턴
  577. *
  578. * @return
  579. */
  580. public ValueObject getUser() {
  581. return (ValueObject) this.request.getSession().getAttribute(
  582. WebKeys.SIGNED_ON_USER);
  583. }
  584. /**
  585. * @param user
  586. */
  587. public void setUser(ValueObject user) {
  588. this.request.getSession().setAttribute(WebKeys.SIGNED_ON_USER, user);
  589. }
  590. /**
  591. * SignOn된 사용자의 Global 변수에 IN_DEPT_CD SQL 변경
  592. *
  593. * @param sqlStr
  594. */
  595. public void setUserInDeptCD(String sqlStr) {
  596. ValueObject user = null;
  597. user = this.getUser();
  598. user.set("IN_DEPT_CD_SQL", sqlStr);
  599. this.setUser(user);
  600. }
  601. /**
  602. * 프로그램 목록에 등록되어 있는 프로그램명을 리턴한다.
  603. *
  604. * @return
  605. */
  606. public String getPgmName() {
  607. return MenuManager.getPgmName(getCurrentURI());
  608. }
  609. /**
  610. * WAFMessages를 통해 Message를 리턴한다.
  611. *
  612. * @param key
  613. * @return
  614. * @see com.evali.common.base.WAFMessages#getMessage()
  615. */
  616. public String getWAFMessage(String key) {
  617. return WAFMessages.getMessage(key);
  618. }
  619. /**
  620. * HandlerStorage에 message필드를 전달받은 key를 통해 WAFMessage와 bind시킨다.
  621. *
  622. * @param key
  623. * @see com.evali.common.base.WAFMessages#getMessage()
  624. */
  625. public void bindWAFMessage(String key) {
  626. this.message = getWAFMessage(key);
  627. }
  628. public String toString() {
  629. return this.params.toString();
  630. }
  631. }