From 71da97df822749f92d9296a93ad85bce4100eb2b Mon Sep 17 00:00:00 2001 From: daekuk Date: Thu, 6 Nov 2025 14:35:05 +0900 Subject: [PATCH 1/5] =?UTF-8?q?1.=20=EC=9A=94=EC=B2=AD/=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=EA=B0=92=EC=9D=B4=20async=20=EA=B0=80=20=EC=95=84=EB=8B=88?= =?UTF-8?q?=EB=A9=B4=20'S'=20=EB=A1=9C=20=EB=B3=80=EA=B2=BD=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95.=202.=20Trantype?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EC=8B=9C=EB=AC=BC=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EA=B0=92=20=EB=84=A3=EC=96=B4=EC=A3=BC?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95,=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=97=90=EC=84=9C=20simYn=20=ED=99=95=EC=9D=B8=20=ED=9B=84=20?= =?UTF-8?q?=ED=99=9C=EC=84=B1=ED=99=94.=203.=20=EC=97=91=EC=85=80=20?= =?UTF-8?q?=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=ED=9B=84=20=EC=A3=BC=EC=84=9D=EC=B2=98?= =?UTF-8?q?=EB=A6=AC,=20=ED=95=84=EC=9A=94=EC=8B=9C=20=EC=A3=BC=EC=84=9D?= =?UTF-8?q?=ED=95=B4=EC=A0=9C=ED=95=B4=EC=84=9C=20=EC=82=AC=EC=9A=A9.=204.?= =?UTF-8?q?=20=EC=97=91=EC=85=80=20=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EC=8B=9C=20syncType=20=EB=B0=8F=20async=20=EC=96=B4=EB=8C=91?= =?UTF-8?q?=ED=84=B0=20=EA=B0=92=EC=9D=84=20=EC=A0=9C=EB=8C=80=EB=A1=9C=20?= =?UTF-8?q?=EB=84=98=EA=B2=A8=EC=A3=BC=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95.=205.=20=EC=97=91=EC=85=80=20IMPORT=20=EC=8B=9C=20syn?= =?UTF-8?q?cType=20=EB=B0=8F=20async=20=EC=96=B4=EB=8C=91=ED=84=B0=20?= =?UTF-8?q?=EA=B0=92=EC=9D=84=20=EC=A0=9C=EB=8C=80=EB=A1=9C=20=EB=84=98?= =?UTF-8?q?=EA=B2=A8=EC=A3=BC=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apim/apiInterfaceManDetail.jsp | 33 ++++++--- .../transaction/apim/ApiInterfaceService.java | 70 +++++++++++++++++-- .../apim/mapping/ApiInterfaceUIMapper.java | 6 +- 3 files changed, 93 insertions(+), 16 deletions(-) diff --git a/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp b/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp index fa3deb8..09bb0f7 100644 --- a/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp +++ b/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp @@ -427,7 +427,7 @@ if('Y' == data.transformYn){ $('#toggleTransformYn').bootstrapToggle('on'); } - if('Y' == data.sinYn){ + if('Y' == data.simYn){ $('#toggleSimYn').bootstrapToggle('on'); } if('Y' == data.apiEnabledYn){ @@ -1317,6 +1317,7 @@ +<%-- --%>
${rmsMenuName}
-
+
@@ -1368,6 +1369,10 @@
+
+
+ +
@@ -1424,14 +1429,17 @@

-
- - - - + + + + - +
@@ -1702,8 +1710,11 @@ 응답 수신 메소드
diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceService.java b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceService.java index 9629911..c401f87 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceService.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceService.java @@ -709,6 +709,8 @@ public class ApiInterfaceService extends OnlBaseService { sheet.setColumnWidth(ci++, 200 * 30); sheet.setColumnWidth(ci++, 300 * 30); sheet.setColumnWidth(ci++, 200 * 30); + sheet.setColumnWidth(ci++, 200 * 30); + sheet.setColumnWidth(ci++, 300 * 30); sheet.setColumnWidth(ci, 300 * 30); int rowNum = 0; @@ -730,6 +732,8 @@ public class ApiInterfaceService extends OnlBaseService { createCell(row, cellIndex++, textStyle, apiInterfaceUI.getEaiSvcDesc()); createCell(row, cellIndex++, headerStyle, "변환여부(Y/N)"); createCell(row, cellIndex++, textStyle, apiInterfaceUI.getTransformYn()); + createCell(row, cellIndex++, headerStyle, "Sync/Async 타입"); + createCell(row, cellIndex++, textStyle, apiInterfaceUI.getSyncAsyncType()); rowNum = addTitle(sheet, ++rowNum, titleStyle, "어댑터 설정"); row = sheet.createRow(rowNum++); @@ -738,8 +742,23 @@ public class ApiInterfaceService extends OnlBaseService { createCell(row, cellIndex++, headerStyle, "인바운드 어댑터"); createCell(row, cellIndex++, textStyle, apiInterfaceUI.getFromAdapter()); createCell(row, cellIndex++, headerStyle, "아웃바운드 어댑터"); - createCell(row, cellIndex, textStyle, apiInterfaceUI.getToAdapter()); - + createCell(row, cellIndex++, textStyle, apiInterfaceUI.getToAdapter()); + + //SYNC TYPE 에 따라 추가정보 생성 + String syncAsyncType = apiInterfaceUI.getSyncAsyncType(); + + if (syncAsyncType.equals("asyncSync") || syncAsyncType.equals("syncAsync")) { + + if (apiInterfaceUI.getSyncAsyncType().equals("asyncSync")) { + createCell(row, cellIndex++, headerStyle, "INBOUND (ASYNC) 응답 어댑터"); + createCell(row, cellIndex, textStyle, apiInterfaceUI.getFromResponseAdapter()); + } else { + createCell(row, cellIndex++, headerStyle, "OUTBOUND (ASYNC) 응답 어댑터"); + createCell(row, cellIndex, textStyle, apiInterfaceUI.getToResponseAdapter()); + } + + } + rowNum = addTitle(sheet, ++rowNum, titleStyle, "REST 설정"); row = sheet.createRow(rowNum++); row.setHeightInPoints(height); // 행 높이를 20 포인트로 설정 @@ -747,14 +766,30 @@ public class ApiInterfaceService extends OnlBaseService { createCell(row, cellIndex++, headerStyle, "수신 메소드"); createCell(row, cellIndex++, textStyle, apiInterfaceUI.getInboundHttpMethod()); createCell(row, cellIndex++, headerStyle, "수신 PATH(URL)"); - createCell(row, cellIndex, textStyle, apiInterfaceUI.getInboundRestPath()); + createCell(row, cellIndex++, textStyle, apiInterfaceUI.getInboundRestPath()); + + if(apiInterfaceUI.getSyncAsyncType().equals("asyncSync")) { + createCell(row, cellIndex++, headerStyle, "응답 송신 메소드"); + createCell(row, cellIndex++, textStyle, apiInterfaceUI.getInboundResponseHttpMethod()); + createCell(row, cellIndex++, headerStyle, "응답 송신 REST PATH(URL)"); + createCell(row, cellIndex, textStyle, apiInterfaceUI.getInboundResponseRestPath()); + } + row = sheet.createRow(rowNum++); row.setHeightInPoints(height); // 행 높이를 20 포인트로 설정 cellIndex = 0; // 초기 셀 인덱스 createCell(row, cellIndex++, headerStyle, "송신 메소드"); createCell(row, cellIndex++, textStyle, apiInterfaceUI.getOutboundHttpMethod()); createCell(row, cellIndex++, headerStyle, "송신 PATH(URL)"); - createCell(row, cellIndex, textStyle, apiInterfaceUI.getOutboundRestPath()); + createCell(row, cellIndex++, textStyle, apiInterfaceUI.getOutboundRestPath()); + + if(apiInterfaceUI.getSyncAsyncType().equals("syncAsync")) { + createCell(row, cellIndex++, headerStyle, "응답 수신 메소드"); + createCell(row, cellIndex++, textStyle, apiInterfaceUI.getOutboundResponseHttpMethod()); + createCell(row, cellIndex++, headerStyle, "송신 REST PATH(URL)"); + createCell(row, cellIndex, textStyle, apiInterfaceUI.getOutboundResponseRestPath()); + } + if ("Y".equals(apiInterfaceUI.getTransformYn())) { rowNum = addTitle(sheet, ++rowNum, titleStyle, "변환 설정"); @@ -808,9 +843,27 @@ public class ApiInterfaceService extends OnlBaseService { String interfaceDesc = PoiUtils.getCellValue(sheet, 2, 1); String transformYn = PoiUtils.getCellValue(sheet, 2, 3); + String syncAsyncType = PoiUtils.getCellValue(sheet, 2, 5); String inboundAdapterGroupName = PoiUtils.getCellValue(sheet, 5, 1); String outboundAdapterGroupName = PoiUtils.getCellValue(sheet, 5, 3); + String inboundResponseHttpMethod = ""; + String inboundResponseRestPath = ""; + String fromResponseAdapter = ""; + + String outboundResponseHttpMethod = ""; + String outboundResponseRestPath = ""; + String toResponseAdapter = ""; + + if (syncAsyncType.equals("asyncSync")) { + inboundResponseHttpMethod = PoiUtils.getCellValue(sheet, 8, 5); + inboundResponseRestPath = PoiUtils.getCellValue(sheet, 8, 7); + fromResponseAdapter = PoiUtils.getCellValue(sheet, 5, 5); + } else if (syncAsyncType.equals("syncAsync")) { + outboundResponseHttpMethod = PoiUtils.getCellValue(sheet, 9, 5); + outboundResponseRestPath = PoiUtils.getCellValue(sheet, 9, 7); + toResponseAdapter = PoiUtils.getCellValue(sheet, 5, 5); + } String inboundHttpMethod = PoiUtils.getCellValue(sheet, 8, 1); String inboundRestPath = PoiUtils.getCellValue(sheet, 8, 3); @@ -824,6 +877,7 @@ public class ApiInterfaceService extends OnlBaseService { apiInterfaceUI.setEaiSvcName(elinkServiceId); apiInterfaceUI.setEaiSvcDesc(interfaceDesc); apiInterfaceUI.setTransformYn(transformYn); + apiInterfaceUI.setSyncAsyncType(syncAsyncType); apiInterfaceUI.setFromAdapter(inboundAdapterGroupName); apiInterfaceUI.setToAdapter(outboundAdapterGroupName); @@ -832,6 +886,14 @@ public class ApiInterfaceService extends OnlBaseService { apiInterfaceUI.setInboundRestPath(inboundRestPath); apiInterfaceUI.setOutboundHttpMethod(outboundHttpMethod); apiInterfaceUI.setOutboundRestPath(outboundRestPath); + + apiInterfaceUI.setInboundResponseHttpMethod(inboundResponseHttpMethod); + apiInterfaceUI.setInboundResponseRestPath(inboundResponseRestPath); + apiInterfaceUI.setFromResponseAdapter(fromResponseAdapter); + + apiInterfaceUI.setOutboundResponseHttpMethod(outboundResponseHttpMethod); + apiInterfaceUI.setOutboundResponseRestPath(outboundResponseRestPath); + apiInterfaceUI.setToResponseAdapter(toResponseAdapter); apiInterfaceUI.setIsHeaderRouting(false); diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java index fb9e897..6ac8dff 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java @@ -110,6 +110,10 @@ public interface ApiInterfaceUIMapper { syncAsyncType = "asyncSync"; } vo.setSyncAsyncType(syncAsyncType); + + // 가상응답 여부 + String simYn = "T".equals(eaiMessageEntity.getTrantype()) ? "Y" : "N"; + vo.setSimYn(simYn); vo.setToAdapter(requestEntity.getPsvsysadptrbzwkgroupname()); vo.setToutVal(requestEntity.getToutval()); @@ -193,4 +197,4 @@ public interface ApiInterfaceUIMapper { break; } } -} +} \ No newline at end of file From d8f477550461a7dcb5d7bf46fee208320da3edf2 Mon Sep 17 00:00:00 2001 From: daekuk Date: Thu, 6 Nov 2025 15:11:20 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=EC=8B=A0=EA=B7=9C=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=8B=9C=20=EA=B0=80=EC=83=81=EC=9D=91=EB=8B=B5=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=EC=95=88=ED=95=98=EB=8A=94=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onl/transaction/apim/mapping/ApiInterfaceUIMapper.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java index 6ac8dff..c70d363 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java @@ -190,6 +190,11 @@ public interface ApiInterfaceUIMapper { if(vo == null || vo.getSyncAsyncType() == null){ return; } + + // 가상응답 여부 + String tranType = "Y".equals(vo.getSimYn()) ? "T" : "R"; + entity.setTrantype(tranType); + switch(vo.getSyncAsyncType()){ case "async": case "asyncSync": From e830715a2e5e119d5a84472fd0d458d33720b67e Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Fri, 7 Nov 2025 17:24:18 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=EC=98=A4=ED=83=80=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/common/errors/error.jsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebContent/common/errors/error.jsp b/WebContent/common/errors/error.jsp index 26a78a4..7b6e1bc 100644 --- a/WebContent/common/errors/error.jsp +++ b/WebContent/common/errors/error.jsp @@ -35,7 +35,7 @@
From ffdf506e3e02bf9910508c8c044e2ea662c2092b Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Fri, 7 Nov 2025 17:32:00 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=ED=85=8C=EB=A7=88=EB=B3=84=20favicon=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/img/ic_eai_favi_black.png | Bin 0 -> 1832 bytes WebContent/img/ic_eai_favi_pink.png | Bin 0 -> 1318 bytes WebContent/img/ic_eai_favi_yellow.png | Bin 0 -> 1306 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 WebContent/img/ic_eai_favi_black.png create mode 100644 WebContent/img/ic_eai_favi_pink.png create mode 100644 WebContent/img/ic_eai_favi_yellow.png diff --git a/WebContent/img/ic_eai_favi_black.png b/WebContent/img/ic_eai_favi_black.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9e2d7ab36034e204913886794d0d7a82c1bc95 GIT binary patch literal 1832 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 Date: Fri, 7 Nov 2025 17:32:48 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=EC=9A=B4=EC=98=81=ED=8E=B8=EC=9D=98?= =?UTF-8?q?=EC=84=B1=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/color.jsp | 71 +++++++ WebContent/loglevel.jsp | 83 ++++++++ WebContent/runSql.jsp | 409 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 563 insertions(+) create mode 100644 WebContent/color.jsp create mode 100644 WebContent/loglevel.jsp create mode 100644 WebContent/runSql.jsp diff --git a/WebContent/color.jsp b/WebContent/color.jsp new file mode 100644 index 0000000..4664d2e --- /dev/null +++ b/WebContent/color.jsp @@ -0,0 +1,71 @@ +<%@ page language="java" contentType="text/html; charset=utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<% + String systemColor = System.getProperty("theme.color"); + String range = (String)request.getParameter("range"); + String color = (String)request.getParameter("color"); + String change = (String)request.getParameter("change"); + if(color == null || color.length() == 0) color= systemColor; + + if("all".equals(range)) { + System.setProperty("theme.color", color); + } +%> + + + + + + + Change Theme Color + "/> + " /> + + + + + + + +
+ " method="get"> + + + + + + + + + + + + + + +
Theme Color + +
Range + +

+ +
+ +
+ + + diff --git a/WebContent/loglevel.jsp b/WebContent/loglevel.jsp new file mode 100644 index 0000000..bea8feb --- /dev/null +++ b/WebContent/loglevel.jsp @@ -0,0 +1,83 @@ +<%@ page contentType="text/html;charset=utf-8"%> +<%@page import="ch.qos.logback.core.*"%> +<%@page import="ch.qos.logback.classic.*"%> +<%@page import="org.slf4j.*"%> +<%@page import="java.util.*"%> +<% + + String loggerName = request.getParameter("loggerName"); + String slevel = request.getParameter("level"); + LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + if (loggerName != null && !"".equals(loggerName) && slevel != null && !"".equals(slevel)){ + Level level = Level.ERROR; + if ("DEBUG".equals(slevel)){ + level = Level.DEBUG; + }else if ("INFO".equals(slevel)){ + level = Level.INFO; + }else if ("WARN".equals(slevel)){ + level = Level.WARN; + }else if ("ERROR".equals(slevel)){ + level = Level.ERROR; + }else if ("TRACE".equals(slevel)){ + level = Level.TRACE; + } + + lc.getLogger(loggerName).setLevel(level); +%> + <%=loggerName %> 의 로그 level이 <%=slevel %> 로 변경되었습니다. +<% + } + + List logs = lc.getLoggerList();; + +%> + +
+ + + +
+ +<% + ArrayList al = new ArrayList(); + for(ch.qos.logback.classic.Logger log : logs){ + if (log.getLevel() != null){ + al.add(log.getName()); + } + } + al.sort(null); + for(String name : al){ + ch.qos.logback.classic.Logger l = lc.getLogger(name); +%> + + + +<% + } +%> +
<%=l.getName() %> +
diff --git a/WebContent/runSql.jsp b/WebContent/runSql.jsp new file mode 100644 index 0000000..9c44fa6 --- /dev/null +++ b/WebContent/runSql.jsp @@ -0,0 +1,409 @@ +<%@page import="com.eactive.eai.rms.common.datasource.DataSourceTypeManager"%> +<%@ page language="java" contentType="text/html; charset=utf-8"%> +<%@ page import="java.io.*, +java.util.*, +javax.xml.parsers.*, +org.w3c.dom.*, +javax.xml.xpath.*, +java.sql.*, +javax.sql.*, +com.eactive.eai.agent.command.*, +com.eactive.eai.agent.*, +com.eactive.eai.rms.onl.common.util.*, +com.eactive.eai.rms.common.datasource.*, +org.apache.commons.logging.Log, +org.apache.commons.logging.LogFactory, +java.util.Arrays, +com.eactive.eai.rms.common.util.StringUtils, +com.eactive.eai.common.util.* +" %> + + +<%! +private static final Logger logger = Logger.getLogger("runSql.jsp"); + +private String NEW_LINE = "\n"; +private int MAX_FETCH_SIZE = 1000; + +private static Object obj = new Object(); + +public StringBuffer ListToString(List list){ + StringBuffer sb = new StringBuffer(); + //first item is ColName + boolean isHead = true; + for(int row=1;row list,String displayType, String serviceType ) throws Exception { + Connection conn = null; + Statement stmt = null; + String driver = null; + String url = null; + String id =null; + String pwd=null; + ResultSet rs = null; + + HashMap results = new HashMap(); + StringBuffer sb = new StringBuffer(); + + StringBuffer errorBuff = new StringBuffer(); + + int rownum = 0; + try { + DataSourceType dataType = DataSourceTypeManager.getDataSourceType(serviceType); + + String jndiName = dataType.getJndiName(); + ServiceLocator sl = ServiceLocator.getInstance(); + DataSource ds = sl.getDataSource( jndiName); + + conn = ds.getConnection(); + stmt = conn.createStatement(); + + int cnt = 0; + for(String sql : list) { + try{ + + sql = sql.trim(); + if(sql.length() == 0) continue; +// System.out.println(sql); + if(sql.toUpperCase().startsWith("SELECT")){ + + // 메모리 문제로 조회건수를 100건으로 제한하도록 한다. // 요건에 따라 변경 필요 + sql = sql + "\n fetch first "+MAX_FETCH_SIZE+" rows only"; // DB2 + stmt.execute(sql); + rs = stmt.getResultSet(); + + List ret = new ArrayList(); + int maxColumn = rs.getMetaData().getColumnCount(); + ResultSetMetaData rsmd = rs.getMetaData(); + String[] colName = new String[maxColumn]; + int[] colSize = new int[maxColumn]; + //get Col Name + for(int i =1; i<=maxColumn; i++){ + colName[i-1] = rsmd.getColumnName(i); + colSize[i-1] = rsmd.getPrecision(i); + } + ret.add(colSize); + ret.add(colName); + while(rs.next()) { + String[] row = new String[maxColumn]; + for (int i=0;i Execute - ["+sql.trim()+"], affected "+ affected +" rows").append(NEW_LINE); + } + + }catch(Exception e){ + errorBuff.append("==> Error - ["+sql + "] : " +e.getMessage()).append(NEW_LINE); + } + } + }catch(Exception e) { + logger.error(e.getMessage(),e); + throw e; + } + finally { + try { + if(stmt != null) stmt.close(); + if(conn != null) conn.close(); + if(rs != null) rs.close(); + } + catch (SQLException sqle) { + logger.error("SQLException was thrown: " + sqle.getMessage()); + } + } + + HashMap retMap = new HashMap(); + retMap.put("records",results); + retMap.put("result", sb.toString()); + retMap.put("error", errorBuff.toString()); + return retMap; +} + +public HashMap execute(String statements, String displayType,String serviceType,ServletRequest request) throws Exception { + String[] results = new String[2]; + + String[] arr = statements.split(";"); + List list = Arrays.asList(arr); + + return runSql(list, displayType, serviceType); +} +%> + + +<% + response.setHeader("Pragma", "No-cache"); + response.setHeader("Cache-Control", "no-cache"); + response.setHeader("Expires", "0"); +%> + +<% + request.setCharacterEncoding("utf-8"); + String filter = request.getParameter("filter"); + + String displayType = request.getParameter("displayType"); + String serviceType = request.getParameter("serviceType"); + String statement = request.getParameter("statement"); + String userType=request.getParameter("userType"); + String run=request.getParameter("run"); + + if (run == null) run = ""; + if (displayType == null) displayType = "GRID"; + if (serviceType == null) serviceType = ""; + if (statement == null) statement = ""; + + HashMap runResult =new HashMap(); + + String errorMessage = ""; + + if (!"".equals(run) ){ + runResult = execute(statement,displayType, serviceType,request); + //response.sendRedirect("/monitoring/jsp/common/jsonResult.jsp"); + errorMessage = (String)runResult.get("error"); + if(errorMessage == null) errorMessage = ""; + }else{ + ; + } +%> + + + + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> +<%@ include file="/jsp/common/include/localemessage.jsp" %> + + + +<%-- + --%> + + + +
+
+ +
+
+
+ + +<%-- " level="W" style="cursor:hand;"/> --%> +<%-- " level="w" style="cursor:hand;"/> --%> +
+
Data Explorer
+ + + + + + + + + +
+ Database : + +
+ +
+
+ DIsplay : + +
+ +
+
+ + + + + + + + + + + + + + + <% + if("FLAT".equals(displayType)) { + %> + + + + + <% + } + else { + HashMap recordsMap = (HashMap)runResult.get("records"); + if(recordsMap != null) { + %> + + + + <% + } + } + %> +
<%= localeMessage.getString("runSql.excute") %> : max fetch size <%= MAX_FETCH_SIZE %>
+ + +
<%= localeMessage.getString("runSql.result") %>
<%= errorMessage %>
+ <%--
+ + +
--%> + +
<% + for(int sel=0; sel <= 10;sel++) { + ArrayList resultList = (ArrayList)recordsMap.get("SEL"+sel); +// System.out.println("SEL"+sel+" = "+resultList); + if(resultList == null) { + break; + } + %>
+ + + + <% + int[] colSize = (int[])resultList.get(0); + int cellWidth = 40; + for(int index = 1; index + + <% + for(int p = 0; p cellWidth) cellWidth = colSize[p]; + cellWidth = cellWidth * 10; + out.println(String.format("", cellWidth, rows[p] )); + } + else { + out.println(String.format("", rows[p])); + } + + } + %> + + <% + } + %> +
%s%s
+
+ <% } + %> +
+ + + + + + + +