api.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864
  1. /**
  2. * admin/api
  3. */
  4. var mcare_admin_api = function(){
  5. //상속
  6. mcare_admin.call(this);
  7. var self = this;
  8. //변수
  9. var $wrapper = $(".main-wrapper #wrapper"),
  10. $apiType = $("#apiType"),
  11. $httpMethodType = $("#httpMethodType"),
  12. $dataSourceName = $("#dataSourceName"),
  13. $resultType = $("#resultType"),
  14. $addItem = $("#add-item"),
  15. $baseInfo = $("#baseInfo"),
  16. $removeItem = $("#remove-item")
  17. $saveItem = $("#save-item"),
  18. $reloadItem = $('#reload-item'),
  19. $deselectItem = $("#deselect-item"),
  20. $reqParams = $("#reqParams"),
  21. $wsHeaders = $("#wsHeaders"),
  22. $execute_api = $("#execute_api"),
  23. $treeView = $("#tree-view"),
  24. $apiTabStrip = $("#apiTabStrip"),
  25. $apiTypeHelp = $(".apiTypeHelp"),
  26. $helpContents = $("#helpContents"),
  27. $apiDesc = $("#apiDesc"),
  28. $resSampleCl = $("#resSampleCl"),
  29. $crudServiceBaseUrl = contextPath + "/admin/api";
  30. this.treeView = null;
  31. this.reqParamsGrid = null;
  32. this.wsHeadersGrid = null;
  33. /**
  34. * 초기화
  35. */
  36. this.init = function(){
  37. $wrapper.kendoSplitter({
  38. panes : [ {
  39. collapsible : true,
  40. resizable : true,
  41. size : '240px'
  42. }, {
  43. collapsible : false
  44. } ]
  45. });
  46. initTree();
  47. initGrid();
  48. initDropDownList();
  49. //설명 글자수 이벤트 - core에 선언
  50. self.checkDescBytes($apiDesc);
  51. addEvent();
  52. };
  53. /**
  54. * 이벤트 등록
  55. */
  56. var addEvent = function(){
  57. // api type 변경 이벤트
  58. $apiType.on("change",function(e) {
  59. var treeView = self.treeView;
  60. var node = treeView.select(),
  61. item = treeView.dataItem(node),
  62. observer = new kendo.observable( item );
  63. enableApiTypeRow( observer, this.value );
  64. });
  65. // http method 필드 변경 이벤트
  66. $httpMethodType.on("change",function(e) {
  67. httpMethodType( this.value, e );
  68. });
  69. // 아이템 추가
  70. $addItem.on("click", function(e) {
  71. addItem(e);
  72. });
  73. // 아이템 삭제
  74. $removeItem.on("click",function(e) {
  75. removeItem(e);
  76. });
  77. // 아이템 저장
  78. $saveItem.on("click",function(e) {
  79. saveItem(e);
  80. });
  81. // 아이템 갱신 (to 모바일 서버)
  82. $reloadItem.on("click",function(e) {
  83. reloadItem(e);
  84. });
  85. // 실행 테스트 이벤트
  86. // $test.on("click",function(e) {
  87. // testApi(e);
  88. // });
  89. //아이템 선택 해제
  90. $deselectItem.on("click",function(e){
  91. self.treeView.select( null );
  92. });
  93. //도움말 클릭 이벤트
  94. $apiTypeHelp.on("click",function(e){
  95. showHelp(e);
  96. });
  97. };
  98. /**
  99. * http method 필드 변경 이벤트
  100. */
  101. var httpMethodType = function( value, e ){
  102. var treeView = self.treeView;
  103. var node = treeView.select(),
  104. item = treeView.dataItem(node);
  105. var apiType = item.data.apiType;
  106. if( apiType === "SQL" ){
  107. if( value !== "GET" && value !== "" ) {
  108. //POST,PUT,DELETE 라면 INT만
  109. $resultType.html("<option value='INT'>INT</option>").kendoDropDownList().data("kendoDropDownList");
  110. item.data.resultType = "INT";
  111. } else {
  112. //GET 이면 MAP, LIST만
  113. $resultType.html("<option value='MAP'>MAP</option><option value='LIST'>LIST</option>").kendoDropDownList().data("kendoDropDownList");
  114. item.data.resultType = "MAP";
  115. }
  116. } else {
  117. //웹서비스, procedure면 전부다
  118. $resultType.html("<option value='MAP'>MAP</option><option value='LIST'>LIST</option><option value='INT'>INT</option>").kendoDropDownList().data("kendoDropDownList");
  119. item.data.resultType = "MAP";
  120. }
  121. };
  122. /**
  123. * 아이템 추가
  124. */
  125. var addItem = function(e){
  126. var treeView = self.treeView;
  127. addedNodeCheck( e, treeView.dataSource.data().toJSON() );
  128. if( addedNodeArr.length > 0 ) {
  129. alert("저장하지 않은 아이템 [ " + addedNodeArr[0].apiName + " ] (이)가 있습니다");
  130. addedNodeArr = [];
  131. return false;
  132. }
  133. var node = treeView.select(),
  134. item = treeView.dataItem(node);
  135. if( node.length === 0) {
  136. alert( "아이템을 선택하세요" );
  137. return false;
  138. }
  139. if( item.nodeType === "API" ){
  140. alert("카테고리를 선택하여 추가하세요.");
  141. return false;
  142. }
  143. var cat_seq = item.data.catSeq;
  144. var cat_name = item.data.catName;
  145. var arr = new Array();
  146. arr.push( item.data.pathName );
  147. while ( item.parentNode() ) {
  148. item = item.parentNode();
  149. arr.push(item.data.pathName);
  150. }
  151. var cat_path_name = "/";
  152. for( var n = arr.length; n > 0; n-- ) {
  153. cat_path_name += (arr[n-1] + "/");
  154. }
  155. treeView.append({
  156. id: "",
  157. name: "New api",
  158. nodeType: "API",
  159. addedNode: true,
  160. data: {
  161. "apiType": $apiType.val(),
  162. "catSeq": cat_seq,
  163. "catName": cat_name,
  164. "catPathName": cat_path_name,
  165. "dataSourceName": "",
  166. "apiDesc": "",
  167. "httpMethodType": "",
  168. "targetName": "",
  169. "queryMsg": "",
  170. "resultType": "",
  171. "reqUrlAddr": "",
  172. "reqUrlName": "",
  173. "targetUrlAddr":"",
  174. "useYn": 1,
  175. "reqParams": [],
  176. "wsUrl" : "",
  177. "wsHeaders": [],
  178. "resSampleCl":""
  179. }
  180. }, node);
  181. // $apiTabStrip.kendoTabStrip().data("kendoTabStrip").activateTab( $baseInfo );
  182. };
  183. /**
  184. * 아이템 삭제
  185. */
  186. var removeItem = function(e){
  187. var treeView = self.treeView;
  188. kendo.unbind( $wrapper );
  189. var node = treeView.select(),
  190. item = treeView.dataItem(node);
  191. if( node.length === 0 ) {
  192. alert( "선택한 아이템이 없습니다" );
  193. return false;
  194. }
  195. if( item.nodeType === "CATEGORY" ) {
  196. alert( "카테고리는 카테고리 관리에서 삭제가능합니다." );
  197. return false;
  198. }
  199. if( item.addedNode ) {
  200. treeView.remove( node );
  201. return false;
  202. }
  203. if( item.childCount > 0 ) {
  204. alert( "하위 카테고리가 존재하여 삭제할 수 없습니다" );
  205. return false;
  206. }
  207. if( item.apiCount > 0 ) {
  208. alert( "하위 API가 존재하여 삭제할 수 없습니다" );
  209. return false;
  210. }
  211. if( !confirm("삭제 하시겠습니까?") ) {
  212. return false;
  213. }
  214. kendo.ui.progress( $wrapper, true );
  215. // $.ajax({
  216. // url : $crudServiceBaseUrl + "/remove.json",
  217. // data : { apiSeq : item.id },
  218. // type : "POST",
  219. // //dataType : "json",
  220. // //contentType : "application/json;charset=UTF-8;",
  221. // success : function(data){
  222. // if( data.msg !== undefined ){
  223. // alert( "수행 중 에러가 발생하였습니다." );
  224. // console.log( data.msg );
  225. // return false;
  226. // }
  227. // alert( "삭제 되었습니다." );
  228. // location.reload(true);
  229. // },
  230. // error : function(xhr,d,t){
  231. // console.log(xhr);
  232. // alert(xhr.responseText);
  233. // },
  234. // complete : function(){
  235. // kendo.ui.progress( $wrapper, false );
  236. // }
  237. // });
  238. var opt = {
  239. url : $crudServiceBaseUrl + "/remove.json",
  240. data : { apiSeq : item.id },
  241. type : "POST",
  242. complete : function(){
  243. kendo.ui.progress( $wrapper, false );
  244. }
  245. };
  246. var success = function(data){
  247. alert( "삭제 되었습니다." );
  248. location.reload(true);
  249. };
  250. var error = function(xhr,d,t){
  251. console.log(xhr);
  252. alert(xhr.responseText);
  253. };
  254. self.ajaxAdmin( opt, success, error );
  255. };
  256. /**
  257. * 아이템 저장
  258. */
  259. var saveItem = function(e){
  260. var treeView = self.treeView;
  261. var node = treeView.select(),
  262. item = treeView.dataItem(node);
  263. if( node.length === 0 || item.nodeType === "CATEGORY" ) {
  264. alert( "선택한 아이템이 없습니다" );
  265. return false;
  266. }
  267. if( !fieldValidation(item) ) {
  268. return false;
  269. }
  270. if( item.data.dataSourceName !== null && typeof item.data.dataSourceName === "object" && item.data.dataSourceName.value !== undefined ){
  271. item.data.dataSourceName = item.data.dataSourceName.value;
  272. }
  273. var reqParamsArr = $reqParams.data("kendoGrid").dataSource.data();
  274. for( var i = 0; i < reqParamsArr.length; i++ ){
  275. var it = reqParamsArr[i],
  276. paramName = it.paramName;
  277. reqParamsArr[i].paramName = paramName.replace(/\s/gi,'');
  278. };
  279. var param = $.extend(true, {}, item.data.toJSON(), {
  280. apiSeq: item.id,
  281. apiName: item.name,
  282. nodeType: "API",
  283. reqParams: reqParamsArr,
  284. wsHeaders: $wsHeaders.data("kendoGrid").dataSource.data(),
  285. url: item.data.catPathName
  286. }, null);
  287. kendo.ui.progress($wrapper, true);
  288. // $.ajax({
  289. // url : $crudServiceBaseUrl + "/save.json",
  290. // data : self.util.stringifyJson( param ),
  291. // type : "POST",
  292. // dataType : "json",
  293. // contentType : "application/json;charset=UTF-8;",
  294. // success : function(data){
  295. // if( data.msg !== undefined ){
  296. // alert( "수행 중 에러가 발생하였습니다." );
  297. // console.log( data.msg );
  298. // return false;
  299. // }
  300. // alert( "저장 되었습니다." );
  301. // //location.reload();
  302. // },
  303. // error : function(xhr,d,t){
  304. // console.log(xhr);
  305. // alert(xhr.reponseText);
  306. // },
  307. // complete : function(){
  308. // kendo.ui.progress( $wrapper, false );
  309. // }
  310. // });
  311. var opt = {
  312. url : $crudServiceBaseUrl + "/save.json",
  313. data : self.util.stringifyJson( param ),
  314. type : "POST",
  315. dataType : "json",
  316. contentType : "application/json;charset=UTF-8;",
  317. complete : function(e){
  318. kendo.ui.progress( $wrapper, false );
  319. }
  320. };
  321. var success = function(data){
  322. kendo.ui.progress( $wrapper, false );
  323. alert( "저장 되었습니다." );
  324. if (item.addedNode === true) { // 신규 노드만 리로딩
  325. location.reload(true);
  326. }
  327. self.reqParamsGrid.refresh();
  328. self.wsHeadersGrid.refresh();
  329. // var node = self.treeView.select(),
  330. // item = self.treeView.dataItem( node ),
  331. // observer = new kendo.observable( item );
  332. // observer.id = data.apiSeq
  333. // if( observer.addedNode ){
  334. // delete observer.addedNode;
  335. // }
  336. // kendo.bind( $wrapper, observer );
  337. //location.reload(true);
  338. };
  339. var error = function(xhr,d,t){
  340. console.log(xhr);
  341. alert(xhr.responseText);
  342. };
  343. self.ajaxAdmin( opt, success, error );
  344. };
  345. /**
  346. * 트리 아이템 reload 이벤트
  347. * @private
  348. */
  349. var reloadItem = function(e){
  350. kendo.ui.progress( $wrapper, true );
  351. //
  352. // $.ajax({
  353. // url : $crudServiceBaseUrl + "/cacheReload.json",
  354. // type : "POST",
  355. // contentType: "application/json; charset=UTF-8",
  356. // success : function(data){
  357. // if( data === 1 ) {
  358. // alert("갱신 되었습니다");
  359. // } else {
  360. // alert( "수행 중 에러가 발생하였습니다" );
  361. // }
  362. // },
  363. // error : function(xhr,d,t){
  364. // console.log(xhr);
  365. // console.log(t);
  366. // },
  367. // complete : function(){
  368. // kendo.ui.progress( $wrapper, false );
  369. // }
  370. // });
  371. var opt = {
  372. url : $crudServiceBaseUrl + "/cacheReload.json",
  373. type : "POST",
  374. contentType: "application/json; charset=UTF-8",
  375. complete : function(){
  376. kendo.ui.progress( $wrapper, false );
  377. }
  378. };
  379. var success = function(data){
  380. if( data === 1 ) {
  381. alert("갱신 되었습니다");
  382. } else {
  383. alert( "수행 중 에러가 발생하였습니다" );
  384. }
  385. };
  386. var error = function(xhr,d,t){
  387. console.log(xhr);
  388. console.log(t);
  389. };
  390. self.ajaxAdmin( opt, success, error );
  391. };
  392. /**
  393. * 실행 테스트 이벤트
  394. */
  395. var testApi = function(e){
  396. var treeView = self.treeView;
  397. var node = treeView.select(),
  398. item = treeView.dataItem(node);
  399. item.data.reqParams = $reqParams.data("kendoGrid").dataSource.data();
  400. item.data.wsHeaders = $wsHeaders.data("kendoGrid").dataSource.data();
  401. if( item.data.dataSourceName !== null && typeof item.data.dataSourceName === "object" && item.data.dataSourceName.value !== undefined ){
  402. item.data.dataSourceName = item.data.dataSourceName.value;
  403. }
  404. kendo.ui.progress( $wrapper, true );
  405. // $.ajax({
  406. // url : $crudServiceBaseUrl + "/test.json",
  407. // data : self.util.stringifyJson( item.data.toJSON() ),
  408. // type : "POST",
  409. // dataType : "json",
  410. // contentType : "application/json;charset=UTF-8;",
  411. // success : function(data){
  412. // if( data.msg !== undefined ){
  413. // alert( data.msg );
  414. // return false;
  415. // }
  416. // if( $.isEmptyObject(data) ) {
  417. // alert( "테스트에 대한 결과 데이터가 없습니다." );
  418. // return false;
  419. // }
  420. //
  421. // var responseData = self.util.stringifyJson(data, null, 2);
  422. //
  423. // $( "<div></div>" ).append( $("<pre></pre>" ).html(responseData) ).kendoWindow({
  424. // width : 600,
  425. // height : 400,
  426. // title : "응답결과",
  427. // close : function() {
  428. // this.destroy();
  429. // }
  430. // }).data("kendoWindow").open().center();
  431. // },
  432. // error : function(xhr,d,t){
  433. // console.log(xhr);
  434. // alert("[" + xhr.statusText + "] " + xhr.responseText);
  435. // },
  436. // complete: function(){
  437. // kendo.ui.progress( $wrapper, false );
  438. // }
  439. // });
  440. var opt = {
  441. url : $crudServiceBaseUrl + "/test.json",
  442. data : self.util.stringifyJson( item.data.toJSON() ),
  443. type : "POST",
  444. dataType : "json",
  445. contentType : "application/json;charset=UTF-8;",
  446. complete : function(){
  447. kendo.ui.progress( $wrapper, false );
  448. }
  449. };
  450. var success = function(data){
  451. if( $.isEmptyObject(data) ) {
  452. alert( "테스트에 대한 결과 데이터가 없습니다." );
  453. return false;
  454. }
  455. var responseData = self.util.stringifyJson(data, null, 2);
  456. $( "<div></div>" ).append( $("<pre></pre>" ).html(responseData) ).kendoWindow({
  457. width : 600,
  458. height : 400,
  459. title : "응답결과",
  460. close : function() {
  461. this.destroy();
  462. }
  463. }).data("kendoWindow").open().center();
  464. };
  465. var error = function(xhr,d,t){
  466. console.log(xhr);
  467. alert("[" + xhr.statusText + "] " + xhr.responseText);
  468. };
  469. self.ajaxAdmin( opt, success, error );
  470. };
  471. /**
  472. * 트리 초기화
  473. */
  474. var initTree = function(){
  475. // 데이터소스
  476. var treeDataSource = new kendo.data.HierarchicalDataSource({
  477. transport: {
  478. read: {
  479. url: $crudServiceBaseUrl + "/getList.json",
  480. method: "get",
  481. dataType: "json",
  482. contentType: "application/json"
  483. }
  484. },
  485. schema : {
  486. model : {
  487. id : "id",
  488. hasChildren : function() {
  489. if (this.nodeType === "API") {
  490. return false;
  491. } else {
  492. return (this.data.childCount > 0 || this.data.apiCount > 0);
  493. }
  494. }
  495. }
  496. }
  497. });
  498. var option = {
  499. loadOnDemand: false,
  500. dataSource : treeDataSource,
  501. dataTextField : "name",
  502. template : treeTemplate,
  503. select : treeSelect
  504. }
  505. // 트리
  506. self.treeView = self.tree( $treeView, option );
  507. /**
  508. * 트리 template
  509. */
  510. function treeTemplate(o){
  511. var span = $("<span></span>").addClass("k-sprite").attr("data-id", o.item.id );
  512. if (o.item.nodeType == "API") {
  513. span.addClass("html");
  514. return span[0].outerHTML + o.item.name;
  515. } else {
  516. return span[0].outerHTML + o.item.name +' ['+o.item.data.pathName+']';
  517. }
  518. };
  519. /**
  520. * 트리 선택 이벤트
  521. */
  522. function treeSelect(o){
  523. kendo.bind( $wrapper, null );
  524. var item = this.dataItem( o.node ),
  525. observer = new kendo.observable( item );
  526. if( observer.nodeType === "CATEGORY" ) {
  527. $( ".right-pane", $wrapper ).hide();
  528. return;
  529. }
  530. $(".right-pane", $wrapper).show();
  531. enableApiTypeRow( observer,observer.data.apiType );
  532. observer.getCreateDate = function() {
  533. if( this.data.createDt ) return new Date(this.data.createDt).toLocaleString();
  534. return "";
  535. };
  536. observer.getUpdateDate = function() {
  537. if(this.data.updateDt) return new Date(this.data.updateDt).toLocaleString();
  538. return "";
  539. };
  540. self.reqParamsGrid.dataSource.read({"apiSeq": item.id});
  541. self.wsHeadersGrid.dataSource.read({"apiSeq": item.id});
  542. kendo.bind( $wrapper, observer );
  543. if( observer.data.apiType === "SQL" ){
  544. if( observer.data.httpMethodType !== "GET" && observer.data.httpMethodType !== "" ) {
  545. //POST,PUT,DELETE 라면 INT만
  546. $resultType.html("<option value='INT'>INT</option>").kendoDropDownList()
  547. .data("kendoDropDownList").select(function(dataItem) {
  548. return dataItem.text === observer.data.resultType;
  549. });
  550. } else {
  551. //GET 이면 MAP, LIST만
  552. $resultType.html("<option value='MAP'>MAP</option><option value='LIST'>LIST</option>").kendoDropDownList()
  553. .data("kendoDropDownList").select(function(dataItem) {
  554. return dataItem.text === observer.data.resultType;
  555. });
  556. }
  557. } else {
  558. //웹서비스, procedure면 전부다
  559. $resultType.html("<option value='MAP'>MAP</option><option value='LIST'>LIST</option><option value='INT'>INT</option>").kendoDropDownList()
  560. .data("kendoDropDownList").select(function(dataItem) {
  561. return dataItem.text === observer.data.resultType;
  562. });
  563. }
  564. //설명 글자수제한 초기화
  565. $apiDesc.trigger("keyup");
  566. };
  567. };
  568. /**
  569. * 그리드 초기화
  570. */
  571. var initGrid = function(){
  572. // 파라미터 그리드
  573. var paramOption = {
  574. dataSource : {
  575. transport: {
  576. read: {
  577. url: $crudServiceBaseUrl + "/getParamList.json",
  578. method: "get",
  579. dataType: "json",
  580. contentType: "application/json"
  581. }
  582. },
  583. schema : {
  584. model : {
  585. id : "paramSeq",
  586. fields : {
  587. paramName : {type : "string", validation : { required : true }},
  588. dataType : {type : "string", defaultValue : "STRING"},
  589. sampleValue : {type : "string"},
  590. paramDesc : {type : "string"}
  591. }
  592. }
  593. }
  594. },
  595. toolbar : [ {name: "create", text: "추가"},{template : "<button type='button' class='k-button' id='execute_api'>테스트</button>"} ],
  596. editable : { createAt : "bottom" },
  597. resizable : true,
  598. sortable : true,
  599. columns : [
  600. {title:"no",template:"#= getNum()#",width:30,attributes: {style: "text-align: center;"}}
  601. ,{field : "paramName", title : "이름", attributes: {style: "text-align: center;"}}
  602. ,{field : "dataType", title : "타입", editor : reqParamTypeDropDownEditor, template: "#=dataType#", attributes: {style: "text-align: center;"}}
  603. ,{field : "sampleValue", title : "샘플 파라미터", attributes: {style: "text-align: center;"}}
  604. ,{field : "paramDesc", title : "설명", attributes: {style: "text-align: center;"}}
  605. ,{command : "destroy", title : "", attributes: {style: "text-align: center;"}}
  606. ],
  607. dataBound : function(){
  608. resetRowNum();
  609. }
  610. };
  611. self.reqParamsGrid = self.grid ( $reqParams, paramOption );
  612. //테스트 버튼 클릭 이벤트
  613. $("#execute_api").on("click",function(e){
  614. testApi(e);
  615. });
  616. // 헤더정보 그리드
  617. var wsHeaderOption = {
  618. dataSource : {
  619. transport: {
  620. read: {
  621. url: $crudServiceBaseUrl + "/getHeaderList.json",
  622. method: "get",
  623. dataType: "json",
  624. contentType: "application/json"
  625. }
  626. },
  627. schema : {
  628. model : {
  629. id : "headerSeq",
  630. fields : {
  631. headerName : {type : "string", defaultValue : "Accept"},
  632. headerValue : {type : "string", editable : true}
  633. }
  634. }
  635. }
  636. },
  637. toolbar : [ {name: "create", text: "추가"} ],
  638. editable : { createAt : "bottom" },
  639. resizable : true,
  640. sortable : true,
  641. columns : [
  642. {field : "headerName", title : "이름", editor : wsHeaderTypeDropDownEditor, template: "#=headerName#", attributes: {style: "text-align: center;"}}
  643. ,{field : "headerValue", title : "값", attributes: {style: "text-align: center;"}}
  644. ,{command : "destroy", title : "", attributes: {style: "text-align: center;"}}
  645. ]
  646. };
  647. self.wsHeadersGrid = self.grid( $wsHeaders, wsHeaderOption );
  648. /**
  649. * 파라미터 LOV
  650. */
  651. function reqParamTypeDropDownEditor(container, options) {
  652. $("[data-id='reqParamTypeDropDownEditor']:first").clone().attr("data-bind", "value:" + options.field).appendTo(container).kendoDropDownList();
  653. }
  654. // 헤더정보 LOV
  655. /**
  656. *
  657. */
  658. function wsHeaderTypeDropDownEditor(container, options) {
  659. $("[data-id='wsHeaderTypeDropDownEditor']:first").clone().attr("data-bind", "value:" + options.field).appendTo(container).kendoDropDownList();
  660. }
  661. };
  662. /**
  663. * dropdownlist 초기화
  664. */
  665. var initDropDownList = function(){
  666. // 설명 에디터
  667. self.dropDownList( $apiType, {} );
  668. self.dropDownList( $dataSourceName, {} );
  669. self.dropDownList( $httpMethodType, {} );
  670. self.dropDownList( $resultType, {} );
  671. };
  672. // 저장하지 않은 아이템 배열
  673. var addedNodeArr = [];
  674. /**
  675. * 저장하지 않은 아이템 확인
  676. */
  677. var addedNodeCheck = function(e, treeViewData) {
  678. if (treeViewData) {
  679. for (var n = 0; n < treeViewData.length; n++ ) {
  680. var childData = treeViewData[n];
  681. if (childData.addedNode === true) {
  682. addedNodeArr.push(childData);
  683. return;
  684. } else {
  685. var child = childData.items;
  686. if (child) {
  687. if (child.length > 0) {
  688. addedNodeCheck(e, child);
  689. }
  690. }
  691. }
  692. }
  693. }
  694. };
  695. /**
  696. * api type 변경 처리
  697. */
  698. function enableApiTypeRow(o,v) {
  699. if( v === "WEB_SERVICE" ) {
  700. var dropDown = $dataSourceName.data("kendoDropDownList");
  701. dropDown.select(0);
  702. o.data.dataSourceName = null;
  703. dropDown.enable(false);
  704. $("#query-row").hide();
  705. $("#procd-row").hide();
  706. $("#ws-row").show();
  707. } else {
  708. $dataSourceName.data("kendoDropDownList").enable(true);
  709. $("#ws-row").hide();
  710. if( v === "PROCEDURE") {
  711. $("#query-row").hide();
  712. $("#procd-row").show();
  713. } else {
  714. $("#procd-row").hide();
  715. $("#query-row").show();
  716. }
  717. }
  718. }
  719. /**
  720. * 필수값 체크
  721. */
  722. function fieldValidation(item) {
  723. if(item.name === "" ) {
  724. alert( "이름을 입력하세요" );
  725. return false;
  726. }
  727. if( item.data.reqUrlAddr === "" ) {
  728. alert( "API URI를 입력하세요" );
  729. return false;
  730. }
  731. if( item.data.apiType === "" ) {
  732. alert( "API 타입을 선택하세요" );
  733. return false;
  734. }
  735. if( item.data.httpMethodType === "") {
  736. alert( "HttpMethod 타입을 선택하세요" );
  737. return false;
  738. } else {
  739. if( item.data.httpMethodType === "GET" && item.data.resultType === "INT" ) {
  740. alert( "HttpMethod 타입이 GET일 경우 응답결과가 [INT] 일 수 없습니다" );
  741. return false;
  742. }
  743. }
  744. if( item.data.resultType == "" ) {
  745. alert( "응답결과 타입을 선택하세요" );
  746. return false;
  747. } else {
  748. if( item.data.apiType === "WEB_SERVICE" ) {
  749. if( item.data.targetUrlAddr === "" ) {
  750. alert( "URL을 등록하세요" );
  751. return false;
  752. }
  753. if( item.data.resultType === "POST" || item.data.resultType === "DELETE" ) {
  754. alert( "웹서비스는 POST, DELETE 타입을 지원하지 않습니다" );
  755. return false;
  756. }
  757. } else {
  758. if( item.data.dataSourceName === "" ) {
  759. alert( "데이터소스를 선택하세요" );
  760. return false;
  761. }
  762. if( item.data.apiType === "PROCEDURE" ) {
  763. if( item.data.targetName === "" ) {
  764. alert( "Procedure를 등록하세요" );
  765. return false;
  766. }
  767. } else { // SQL, MYBATIS, SQL_GROOVY_TEMPLATE, VELOCITY
  768. if( item.data.queryMsg === "" ) {
  769. alert( "SQL을 등록하세요" );
  770. return false;
  771. }
  772. }
  773. }
  774. }
  775. if( item.data.resultType === "" ) {
  776. alert( "응답결과 타입을 선택하세요" );
  777. return false;
  778. }
  779. return true;
  780. };
  781. /**
  782. * 도움말 보여주기
  783. */
  784. var showHelp = function(e){
  785. var helpContents = $helpContents.html();
  786. $( "<div></div>" ).html( helpContents ).kendoWindow({
  787. width : 800,
  788. height : 600,
  789. title : "api타입 도움말",
  790. close : function() {
  791. this.destroy();
  792. }
  793. }).data("kendoWindow").open().center();
  794. }
  795. };
  796. var rowNum = 0;
  797. function resetRowNum(){
  798. rowNum = 0;
  799. }
  800. function getNum(){
  801. return ++rowNum;
  802. }