Index: arms/html/mapping/content-container.html
===================================================================
diff -u -raf9ae7c5d04bb385f81cf4bf398a0ef8666902e6 -rfebc8a28bfbf8457830dd594d1cd38abf9641854
--- arms/html/mapping/content-container.html (.../content-container.html) (revision af9ae7c5d04bb385f81cf4bf398a0ef8666902e6)
+++ arms/html/mapping/content-container.html (.../content-container.html) (revision febc8a28bfbf8457830dd594d1cd38abf9641854)
@@ -114,6 +114,18 @@
선택되지 않음
+
+
+ 선택된 이슈유형 :
+
+ 선택되지 않음
+
+
@@ -177,7 +189,7 @@
- 클라우드 지라의 경우 "프로젝트" 항목을 선택하시면 해당 이슈유형별 상태를 매핑할 수 있습니다.
+ 클라우드 지라의 경우 "프로젝트" 항목 하위의 이슈 유형을 선택하시면 해당 이슈유형별 상태를 매핑할 수 있습니다.
@@ -329,8 +341,6 @@
Index: arms/js/mapping.js
===================================================================
diff -u -raf9ae7c5d04bb385f81cf4bf398a0ef8666902e6 -rfebc8a28bfbf8457830dd594d1cd38abf9641854
--- arms/js/mapping.js (.../mapping.js) (revision af9ae7c5d04bb385f81cf4bf398a0ef8666902e6)
+++ arms/js/mapping.js (.../mapping.js) (revision febc8a28bfbf8457830dd594d1cd38abf9641854)
@@ -85,14 +85,13 @@
],
[
// 칸반 보드
- "../reference/jquery-plugins/jkanban-1.3.1/dist/jkanban.min.css",
+ /*"../reference/jquery-plugins/jkanban-1.3.1/dist/jkanban.min.css",
"../reference/jquery-plugins/jkanban-1.3.1/dist/jkanban.min.js",
"../arms/js/reqKanban/kanban.js",
- /*"../reference/jquery-plugins/jquery.flowchart-master/jquery.flowchart.css",
+ "../reference/jquery-plugins/jquery.flowchart-master/jquery.flowchart.css",
"../reference/jquery-plugins/jquery.flowchart-master/jquery.flowchart.js",
"https://cdnjs.cloudflare.com/ajax/libs/jquery.panzoom/3.2.2/jquery.panzoom.min.js",
"../reference/jquery-plugins/jquery-mousewheel-main/jquery.mousewheel.js",*/
- "../reference/gojs/go-sample.js",
"../reference/gojs/go-debug.js",
"../reference/gojs/go.css",
"../arms/js/mapping/gojs_setup.js"
@@ -106,7 +105,15 @@
$(".widget").widgster();
setSideMenu("sidebar_menu_jira", "sidebar_menu_product_mapping");
+ //ALM 서버 셀렉트 박스 이니시에이터
+ make_alm_server_select_box();
+ gojs.init();
+
+ save_req_state_btn_click();
+ update_req_state_btn_click();
+ delete_req_state_btn_click();
// --- 에디터 설정 --- //
+
var waitCKEDITOR = setInterval(function () {
try {
if (window.CKEDITOR) {
@@ -123,57 +130,798 @@
// 칸반 보드 초기화
// initKanban();
// setKanban();
+ // $("#kanban_search").on("input", function () {
+ // let searchText = $(this).val().toLowerCase();
+ // // console.log("검색: " + searchText);
+ //
+ // $('.kanban-item').each(function() {
+ // let itemText = $(this).find('.req_item').text().toLowerCase();
+ // if (itemText.indexOf(searchText) !== -1) {
+ // $(this).removeClass('hidden');
+ // } else {
+ // $(this).addClass('hidden');
+ // }
+ // });
+ //
+ // if ($(this).val().length > 0) {
+ // $('.kanban_search_clear').show();
+ // } else {
+ // $('.kanban_search_clear').hide();
+ // }
+ // });
+ //
+ // $('.kanban_search_clear').click(function() {
+ // $('#kanban_search').val('').focus();
+ // $('.kanban-item').removeClass('hidden');
+ // $(this).hide();
+ // });
+ // $(window).resize(function() {
+ // adjustHeight();
+ // });
+ // state_category_tab_group_click_event();
+ // mapping_flow_chart();
+ // flow_chart();
+ // mapping_flow_chart();
+ })
+ .catch(function (e) {
+ console.error("플러그인 로드 중 오류 발생");
+ console.error(e);
+ });
+}
- state_category_tab_group_click_event();
- save_req_state_btn_click();
- update_req_state_btn_click();
- delete_req_state_btn_click();
+///////////////////////
+// ALM 서버 셀렉트 박스
+//////////////////////
+function make_alm_server_select_box() {
+ //제품 서비스 셀렉트 박스 이니시에이터
+ $(".chzn-select").each(function() {
+ $(this).select2($(this).data());
+ });
- $(window).resize(function() {
- adjustHeight();
- });
+ //ALM 서버 셀렉트 박스 데이터 바인딩
+ $.ajax({
+ url: "/auth-user/api/arms/jiraServerPure/getNodesWithoutRoot.do",
+ type: "GET",
+ contentType: "application/json;charset=UTF-8",
+ dataType: "json",
+ progress: true,
+ statusCode: {
+ 200: function(data) {
+ console.log(data.result);
+ //////////////////////////////////////////////////////////
+ for (var k in data.result) {
+ var obj = data.result[k];
+ alm_server_list[obj.c_id] = obj;
+ var newOption = new Option(obj.c_title, obj.c_id, false, false);
+ $("#selected_alm_server").append(newOption).trigger("change");
+ }
+ //////////////////////////////////////////////////////////
+ jSuccess("ALM 서버 조회가 완료 되었습니다.");
+ }
+ },
+ error: function (e) {
+ jError("ALM 서버 조회 중 에러가 발생했습니다. :: " + e);
+ }
+ });
- // 검색
- $("#kanban_search").on("input", function () {
- let searchText = $(this).val().toLowerCase();
- // console.log("검색: " + searchText);
+ $("#selected_alm_server").on("select2:open", function() {
+ //슬림스크롤
+ makeSlimScroll(".select2-results__options");
+ });
- $('.kanban-item').each(function() {
- let itemText = $(this).find('.req_item').text().toLowerCase();
- if (itemText.indexOf(searchText) !== -1) {
- $(this).removeClass('hidden');
- } else {
- $(this).addClass('hidden');
+ // --- select2 ( 제품(서비스) 검색 및 선택 ) 이벤트 --- //
+ $("#selected_alm_server").on("select2:select", function(e) {
+ $("#cloud_project_tree").hide();
+ $("#select-project-div").hide();
+ $("#select-issuetype-div").hide();
+ $("#select-project").text("선택되지 않음");
+ $("#select-issuetype").text("선택되지 않음");
+ selected_alm_server_id = $("#selected_alm_server").val();
+ selected_alm_server_name = $("#selected_alm_server").select2("data")[0].text;
+ $("#select-alm-server").text(selected_alm_server_name);
+
+ let alm_server_data = alm_server_list[selected_alm_server_id];
+ let alm_server_type = alm_server_data.c_jira_server_type;
+ /*var $flowchart = $('#state_flow_chart');
+ $flowchart.flowchart('setData', {});*/
+
+ if (alm_server_type === "클라우드") {
+ $("#cloud_project_tree").show();
+ $("#select-project-div").show();
+ $("#select-issuetype-div").show();
+ build_alm_server_jstree(selected_alm_server_id);
+ let data = {};
+ gojs.load(data);
+ }
+ else {
+ mapping_data_load(selected_alm_server_id, alm_server_type);
+
+ //ALM 서버 이슈상태 조회
+ /*$.ajax({
+ url: "/auth-user/api/arms/jiraServer/getJiraIssueStatus.do?c_id=" + selected_alm_server_id ,
+ type: "GET",
+ contentType: "application/json;charset=UTF-8",
+ dataType: "json",
+ progress: true,
+ statusCode: {
+ 200: function(result) {
+ console.log(result.response);
+ let alm_status_list = result.response;
+
+ var data = {
+ operators: {},
+ links: {}
+ };
+
+ console.log(alm_status_list);
+ console.log(arms_state_list);
+ let inputData = arms_state_list;
+ let outputData = alm_status_list;
+
+ let width = $flowchart.width();
+
+ var topPosition = 20;
+ var leftPositionInput = 20;
+ var leftPositionOutput = width-200;
+
+ console.log(width);
+ inputData.forEach(function(input, index) {
+ var operatorId = 'operator' + (index + 1);
+ data.operators[operatorId] = {
+ top: topPosition + index * 80,
+ left: leftPositionInput,
+ properties: {
+ title: "A-RMS - " +input.c_title,
+ class: 'input-operator',
+ inputs: {},
+ outputs: {
+ output_1: {
+ label: input.c_title,
+ }
+ }
+ }
+ };
+ });
+ outputData.forEach(function(output, index) {
+ var operatorId = 'operator' + (inputData.length + index + 1);
+ data.operators[operatorId] = {
+ top: topPosition + index * 80,
+ left: leftPositionOutput,
+ properties: {
+ title: "ALM - " + output.c_issue_status_name,
+ class: 'output-operator',
+ inputs: {
+ input_1: {
+ label: output.c_issue_status_name,
+ }
+ },
+ outputs: {}
+ }
+ };
+ });
+
+ console.log(data);
+ updateFlowchartData(data);
+ // mapping_flow_chart(alm_status_list, arms_state_list);
+ //////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////
+ jSuccess("ALM 서버 상태 조회가 완료 되었습니다.");
}
- });
+ },
+ error: function (e) {
+ jError("ALM 서버 상태 조회 중 에러가 발생했습니다. :: " + e);
+ }
+ });*/
+ }
+ });
+} // end make_alm_server_select_box()
- if ($(this).val().length > 0) {
- $('.kanban_search_clear').show();
- } else {
- $('.kanban_search_clear').hide();
+function mapping_data_load(alm_server_id, alm_server_type, project_id, issueType_c_id) {
+ if (!alm_server_type) {
+ alm_server_id = alm_server_id || selected_alm_server_id;
+
+ if (!alm_server_id) {
+ alert("선택된 서버가 없습니다.");
+ return;
+ }
+
+ let alm_server_data = alm_server_list[alm_server_id];
+ alm_server_type = alm_server_data.c_jira_server_type;
+ }
+
+ if (alm_server_type === "클라우드") {
+ if (!project_id|| !issueType_c_id) {
+ alert("선택된 프로젝트 이슈유형이 없습니다.");
+ return;
+ }
+
+ alert("선택된 클라우드 유형의 경우 설계가 필요합니다.");
+
+ /*Promise.all([get_arms_state_list(), get_project_status_list(project_id, issueType_c_id)])
+ .then(([arms_state_list, alm_status_list]) => {
+ // 두 API 호출 결과를 함께 사용합니다.
+ console.log('ARMS State List:', arms_state_list);
+ console.log('ALM Status List:', alm_status_list);
+
+ if (alm_status_list.length === 0) {
+ alert("선택된 이슈유형이 없습니다. 서버 관리에서 프로젝트의 이슈유형을 선택해주세요.");
+ let data = {};
+ gojs.load(data);
+ return;
}
- });
- $('.kanban_search_clear').click(function() {
- $('#kanban_search').val('').focus();
- $('.kanban-item').removeClass('hidden');
- $(this).hide();
+ let data = create_gojs_data(req_state_category_list, arms_state_list, alm_status_list);
+ // 여기에 두 결과를 함께 사용하는 로직을 추가합니다.
+ gojs.load(data);
+ })
+ .catch((error) => {
+ console.error('Error fetching data:', error);
+ });*/
+ }
+ else {
+ Promise.all([get_arms_state_list(), get_alm_status_list(alm_server_id)])
+ .then(([arms_state_list, alm_status_list]) => {
+ // 두 API 호출 결과를 함께 사용합니다.
+ console.log('ARMS State List:', arms_state_list);
+ console.log('ALM Status List:', alm_status_list);
+
+ let data = create_gojs_data(req_state_category_list, arms_state_list, alm_status_list);
+ // 여기에 두 결과를 함께 사용하는 로직을 추가합니다.
+ gojs.load(data);
+ })
+ .catch((error) => {
+ console.error('Error fetching data:', error);
});
+ }
+}
- //ALM 서버 셀렉트 박스 이니시에이터
- make_alm_server_select_box();
- // mapping_flow_chart();
- // flow_chart();
- // mapping_flow_chart();
+function create_gojs_data(req_state_category_list, arms_state_list, alm_status_list) {
+/* const node_data_array = generate_node_data(req_state_category_list, arms_state_list, alm_status_list); // 노드 데이터 생성
+ console.log(node_data_array);
+ const link_data_array = generate_link_data(node_data_array); // 링크 데이터 생성
+ console.log(link_data_array);*/
- gojs.init();
+ const diagram_data = generate_node_and_link_data(req_state_category_list, arms_state_list, alm_status_list); // 노드 데이터 생성
+
+/* const diagram_data = {
+ class: 'GraphLinksModel',
+ nodeDataArray: node_data_array,
+ linkDataArray: link_data_array
+ };*/
+
+
+ return diagram_data;
+}
+
+function generate_node_and_link_data(req_state_category_list, arms_state_list, alm_status_list) {
+ const node_data_array = [];
+ const link_data_array = [];
+
+ const categoryX = 0;
+ const armsX = 300;
+ const almX = 600;
+
+ const ySpacing = 40;
+ const categoryySpacing = 100;
+
+ // Keep track of Y positions for each depth
+ let categoryY = 0;
+ let armsY = 0;
+ let almY = 0;
+
+ const categoryNodes = {};
+ const armsNodes = {};
+
+ Object.entries(req_state_category_list).forEach(([key, value]) => {
+ const categoryNodeKey = `카테고리 ${value}`;
+ const node = {
+ key: categoryNodeKey,
+ text: `카테고리 ${value}`,
+ type: 'arms-category',
+ c_id: key,
+ category: 'Loading',
+ loc: `${categoryX} ${categoryY}`
+ };
+ node_data_array.push(node);
+ categoryNodes[key] = node;
+ categoryY += categoryySpacing;
+ });
+
+ arms_state_list.forEach((state) => {
+ const armsNodeKey = `A-RMS ${state.c_title}`;
+ const node = {
+ key: armsNodeKey,
+ text: `A-RMS ${state.c_title}`,
+ type: 'arms-state',
+ c_id: state.c_id,
+ mapping_id: state.c_etc,
+ category: 'NoAdd',
+ loc: `${armsX} ${armsY}`
+ };
+ node_data_array.push(node);
+ armsNodes[state.c_id] = node;
+ armsY += ySpacing;
+ });
+
+ alm_status_list.forEach((status) => {
+ const almNodeKey = `ALM ${status.c_issue_status_name}`;
+ const node = {
+ key: almNodeKey,
+ text: `ALM ${status.c_issue_status_name}`,
+ type: 'alm-status',
+ c_id: status.c_id,
+ mapping_id: status.c_req_state_mapping_link,
+ category: 'End',
+ loc: `${almX} ${almY}`
+ };
+ node_data_array.push(node);
+ almY += ySpacing;
+ });
+
+ // 링크 데이터 생성
+ node_data_array.forEach((node) => {
+ if (node.type === 'arms-state' && node.mapping_id) {
+ const fromNode = categoryNodes[node.mapping_id];
+ if (fromNode) {
+ link_data_array.push({ from: fromNode.key, to: node.key });
+ }
+ } else if (node.type === 'alm-status' && node.mapping_id) {
+ const fromNode = armsNodes[node.mapping_id];
+ if (fromNode) {
+ link_data_array.push({ from: fromNode.key, to: node.key });
+ }
+ }
+ });
+
+ // Depth 2번 노드들이 연결된 데이터 순서대로 나열되도록 정렬
+ // Depth 2번 노드들이 mapping_id 오름차순으로 나열되도록 정렬
+ const sortedArmsNodes = Object.values(armsNodes).sort((a, b) => {
+ // mapping_id를 기준으로 오름차순 정렬
+ return a.mapping_id.localeCompare(b.mapping_id);
+ });
+ // const sortedArmsNodes = Object.values(armsNodes).sort((a, b) => {
+ //
+ // const fromNodeA = categoryNodes[a.mapping_id];
+ // const fromNodeB = categoryNodes[b.mapping_id];
+ // if (fromNodeA && fromNodeB) {
+ // return fromNodeA.loc.localeCompare(fromNodeB.loc);
+ // }
+ // return 0;
+ // });
+
+ console.log(sortedArmsNodes);
+
+ armsY = 0;
+ sortedArmsNodes.forEach(node => {
+ node.loc = `${armsX} ${armsY}`;
+ armsY += ySpacing;
+ });
+
+ return {
+ class: 'GraphLinksModel',
+ nodeDataArray: node_data_array,
+ linkDataArray: link_data_array
+ };
+}
+
+function get_arms_state_list() {
+ return new Promise((resolve, reject) => {
+ $.ajax({
+ url: "/auth-user/api/arms/reqState/getNodesWithoutRoot.do",
+ type: "GET",
+ dataType: "json",
+ progress: true,
+ statusCode: {
+ 200: function (data) {
+ resolve(data.result);
+ }
+ },
+ error: function (e) {
+ jError("요구사항 조회 중 에러가 발생했습니다.");
+ reject(e);
+ }
+ });
+ });
+}
+
+function get_alm_status_list(selected_alm_server_id) {
+ return new Promise((resolve, reject) => {
+ $.ajax({
+ url: "/auth-user/api/arms/jiraServer/getJiraIssueStatus.do?c_id=" + selected_alm_server_id,
+ type: "GET",
+ contentType: "application/json;charset=UTF-8",
+ dataType: "json",
+ progress: true,
+ statusCode: {
+ 200: function(result) {
+ console.log(result);
+ resolve(result.response);
+ jSuccess("ALM 서버 상태 조회가 완료 되었습니다.");
+ }
+ },
+ error: function (e) {
+ jError("ALM 서버 상태 조회 중 에러가 발생했습니다. :: " + e);
+ reject(e);
+ }
+ });
+ });
+}
+
+function get_project_status_list(project_id, issueType_c_id) {
+ return new Promise((resolve, reject) => {
+ $.ajax({
+ url: "/auth-user/api/arms/jiraProject/getIssueStatusListByIssueType.do?c_id=" + project_id
+ + "&issueTypeId=" + issueType_c_id,
+ type: "GET",
+ contentType: "application/json;charset=UTF-8",
+ dataType: "json",
+ progress: true,
+ statusCode: {
+ 200: function(result) {
+ console.log(result);
+ resolve(result.response);
+ jSuccess("ALM 프로젝트 상태 조회가 완료 되었습니다.");
+ }
+ },
+ error: function (e) {
+ jError("ALM 프로젝트 상태 조회 중 에러가 발생했습니다. :: " + e);
+ reject(e);
+ }
+ });
+ });
+}
+
+function build_alm_server_jstree(selected_alm_server_id) {
+ var jQueryElementID = "#alm_server_tree";
+ var serviceNameForURL = "/auth-user/api/arms/jiraServerProjectPure/getJiraProjectPure.do?c_id=" + selected_alm_server_id;
+
+ jstree_build(jQueryElementID, serviceNameForURL);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////
+// -- jstree build 설정 -- //
+////////////////////////////////////////////////////////////////////////////////////////
+function jstree_build(jQueryElementID, serviceNameForURL) {
+ console.log("mapping :: jstree_build : ( jQueryElementID ) → " + jQueryElementID);
+ console.log("mapping :: jstree_build : ( serviceNameForURL ) → " + serviceNameForURL);
+
+ console.log("mapping :: jstree_build : ( href ) → " + $(location).attr("href"));
+ console.log("mapping :: jstree_build : ( protocol ) → " + $(location).attr("protocol"));
+ console.log("mapping :: jstree_build : ( host ) → " + $(location).attr("host"));
+ console.log("mapping :: jstree_build : ( pathname ) → " + $(location).attr("pathname"));
+ console.log("mapping :: jstree_build : ( search ) → " + $(location).attr("search"));
+ console.log("mapping :: jstree_build : ( hostname ) → " + $(location).attr("hostname"));
+ console.log("mapping :: jstree_build : ( port ) → " + $(location).attr("port"));
+
+ $(jQueryElementID)
+ .jstree({
+ plugins: ["themes", "json_data", "ui", "crrm", "dnd", "search", "types"],
+ themes: { theme: ["lightblue4"] },
+ json_data: {
+ ajax: {
+ url: serviceNameForURL,
+ cache: false,
+ data: function (n) {
+ // the result is fed to the AJAX request `data` option
+ console.log("[ common :: jsTreeBuild ] :: json data load = " + JSON.stringify(n));
+ return {
+ c_id: n.attr ? n.attr("id").replace("node_", "").replace("copy_", "") : 1
+ };
+ },
+ success: function (n) {
+ jSuccess("프로젝트 조회 완료");
+ n.forEach(project => {
+ project.attr.rel = "project";
+ project.attr.title = project.c_title;
+ project.children = [];
+ project.jiraIssueTypeEntities.forEach(issueType => {
+ // 하위 작업 이슈유형 제거 처리
+ if (issueType.c_contents !== "-1" || issueType.c_desc !== "true") {
+ project.children.push({
+ attr: { rel: "issueType", id: "issueType_" + issueType.c_id, title: issueType.c_issue_type_name },
+ data: [issueType.c_issue_type_name],
+ text: issueType.c_issue_type_name,
+ });
+ }
+ });
+ });
+
+ $(jQueryElementID).jstree("search", $("#text").val());
+ }
+ }
+ },
+ search: {
+ show_only_matches: true,
+ search_callback: function (str, node) {
+ return node.data().search(str);
+ }
+ },
+ types: {
+ max_depth: -2,
+ max_children: -2,
+ valid_children: ["project"],
+ types: {
+ default: {
+ // I want this type to have no children (so only leaf nodes)
+ // In my case - those are files
+ valid_children: "none",
+ // If we specify an icon for the default type it WILL OVERRIDE the theme icons
+ icon: {
+ image: "../reference/jquery-plugins/jstree-v.pre1.0/themes/attibutes.png"
+ }
+ },
+ project: {
+ valid_children: ["issueType"],
+ icon: {
+ image: "../reference/jquery-plugins/jstree-v.pre1.0/themes/ic_app.png"
+ }
+ },
+ issueType: {
+ valid_children: "none",
+ icon: {
+ image: "../reference/jquery-plugins/jstree-v.pre1.0/themes/toolbar_new.png"
+ }
+ }
+ }
+ },
})
- .catch(function (e) {
- console.error("플러그인 로드 중 오류 발생");
- console.error(e);
+ .bind("select_node.jstree", function (event, data) {
+ if ($.isFunction(jstree_click)) {
+ console.log("[ jstree_build :: select_node ] :: data.rslt.obj.data('id')" + data.rslt.obj.attr("id"));
+ console.log("[ jstree_build :: select_node ] :: data.rslt.obj.data('rel')" + data.rslt.obj.attr("rel"));
+ console.log("[ jstree_build :: select_node ] :: data.rslt.obj.data('class')" + data.rslt.obj.attr("class"));
+ console.log("[ jstree_build :: select_node ] :: data.rslt.obj.children('a')" + data.rslt.obj.children("a"));
+ console.log("[ jstree_build :: select_node ] :: data.rslt.obj.children('ul')" + data.rslt.obj.children("ul"));
+ jstree_click(data.rslt.obj);
+ }
+ })
+ .bind("loaded.jstree", function (event, data) {
+ $(jQueryElementID).slimscroll({
+ height: "200px"
+ });
});
+
+ $("#mmenu input, #mmenu button").click(function () {
+ switch (this.id) {
+ case "add_default":
+ case "add_folder":
+ $(jQueryElementID).jstree("create", null, "last", {
+ attr: {
+ rel: this.id.toString().replace("add_", "")
+ }
+ });
+ break;
+ case "search":
+ $(jQueryElementID).jstree("search", document.getElementById("text").value);
+ break;
+ case "text":
+ break;
+ default:
+ $(jQueryElementID).jstree(this.id);
+ break;
+ }
+ });
+
+ $("#mmenu .form-search").submit(function (event) {
+ event.preventDefault();
+
+ $(jQueryElementID).jstree("search", document.getElementById("text").value);
+ });
}
+function jstree_click(data) {
+
+ let rel = data.attr('rel');
+ let project_c_id;
+ let issueType_c_id;
+ if (rel === "project") {
+ $(".jstree-clicked").removeClass("jstree-clicked");
+ console.log(rel);
+ return;
+ }
+ else {
+ let project_title = data.parent().parent().attr("title");
+ $("#select-project").text(project_title);
+ let issueType_title = data.attr("title");
+ $("#select-issuetype").text(issueType_title);
+
+ let project_c_id = data.parent().parent().attr("id").replace("node_", "").replace("copy_", "");
+ let issueType_c_id = data.attr("id").replace("issueType_", "").replace("copy_", "");
+ mapping_data_load(null, null, project_c_id, issueType_c_id);
+ }
+
+}
+
+$("#text").on("input", function () {
+ var searchString = $(this).val();
+ $("#alm_server_tree").jstree("search", searchString);
+});
+
+///////////////////////////////////
+// 팝업 띄울 때, UI 일부 수정되도록
+///////////////////////////////////
+function popup_modal(popup_type, state_id) {
+ $('#my_modal1').modal('show');
+
+ $("#popup_view_state_category_div label").removeClass("active");
+ $("input[name='popup_view_state_category_options']:checked").prop("checked", false);
+ $("#popup_view_state_name").val("");
+ CKEDITOR.instances.popup_view_state_description_editor.setData("상태 관련 설명 등을 기록합니다.");
+
+ $("#delete_req_state").addClass("hidden");
+ $("#update_req_state").addClass("hidden");
+ $("#save_req_state").addClass("hidden");
+
+ if (popup_type === "save_popup") {
+ $("#my_modal1_title").text("ARMS 상태 등록 팝업");
+ $("#my_modal1_description").text("A-RMS 요구사항의 상태를 등록합니다.");
+
+ // 모달 등록, 수정별 버튼 초기화
+ $("#save_req_state").removeClass("hidden");
+ }
+ else if (popup_type === "update_popup") {
+ $("#my_modal1_title").text("ARMS 상태 수정 팝업");
+ $("#my_modal1_description").text("A-RMS 요구사항의 상태를 수정합니다.");
+
+ $("#update_req_state").removeClass("hidden");
+ $("#delete_req_state").removeClass("hidden");
+
+ $.ajax({
+ url: "/auth-user/api/arms/reqState/getNode.do?c_id=" + state_id,
+ type: "get",
+ statusCode: {
+ 200: function (data) {
+ console.log(data);
+
+ $("#popup_view_state_c_id").val(data.c_id);
+ $("#popup_view_state_name").val(data.c_title);
+ CKEDITOR.instances.popup_view_state_description_editor.setData(data.c_contents);
+ let state_category_value = data.c_etc;
+ update_radio_buttons("#popup_view_state_category_div", state_category_value);
+ // jSuccess('"' + reqTitle + '"' + " 상태 카테고리가 변경되었습니다.");
+ }
+ }
+ });
+ }
+}
+
+function update_radio_buttons(container_selector, value) {
+ $(container_selector + " label").removeClass("active");
+ $(container_selector + " input[type='radio']:checked").prop("checked", false);
+
+ let radio_buttons = $(container_selector + " input[type='radio']");
+ radio_buttons.each(function () {
+ if (value && $(this).val() === value) {
+ $(this).parent().addClass("active");
+ $(this).prop("checked", true);
+ }
+ });
+}
+
+function save_req_state_btn_click() {
+ $("#save_req_state").off().click(function() {
+ let state_name = $("#popup_view_state_name").val().trim();
+ if (!state_name) {
+ alert("상태의 이름이 입력되지 않았습니다.");
+ return;
+ }
+ let state_category_value = $("#popup_view_state_category_div input[name='popup_view_state_category_options']:checked").val();
+ if (!state_category_value) {
+ alert("상태 카테고리가 선택되지 않았습니다.");
+ return;
+ }
+ let state_description = CKEDITOR.instances["popup_view_state_description_editor"].getData();
+
+ let data = {
+ ref : 2,
+ c_type : "default",
+ c_etc : state_category_value,
+ c_title : state_name,
+ c_contents : state_description
+ };
+
+ $.ajax({
+ url: "/auth-user/api/arms/reqState/addNode.do",
+ type: "POST",
+ data: data,
+ statusCode: {
+ 200: function () {
+ jSuccess('"' + state_name + '"' + " 상태가 생성되었습니다.");
+ let active_tab_name = getActiveTab();
+ if (active_tab_name === "#board") {
+ setKanban();
+ }
+ else if (active_tab_name === "#table") {
+ dataTableLoad();
+ }
+
+ $("#close_modal_popup").trigger("click");
+ }
+ }
+ });
+ });
+}
+
+function update_req_state_btn_click() {
+ $("#update_req_state").off().click(function() {
+ let state_name = $("#popup_view_state_name").val().trim();
+ if (!state_name) {
+ alert("상태의 이름이 입력되지 않았습니다.");
+ return;
+ }
+ let state_category_value = $("#popup_view_state_category_div input[name='popup_view_state_category_options']:checked").val();
+ if (!state_category_value) {
+ alert("상태 카테고리가 선택되지 않았습니다.");
+ return;
+ }
+ let state_description = CKEDITOR.instances["popup_view_state_description_editor"].getData();
+
+ let data = {
+ c_id : $("#popup_view_state_c_id").val(),
+ c_etc : state_category_value,
+ c_title : state_name,
+ c_contents : state_description
+ };
+
+ $.ajax({
+ url: "/auth-user/api/arms/reqState/updateNode.do",
+ type: "PUT",
+ data: data,
+ statusCode: {
+ 200: function () {
+ jSuccess('"' + state_name + '"' + " 상태가 수정되었습니다.");
+ let active_tab_name = getActiveTab();
+ if (active_tab_name === "#board") {
+ setKanban();
+ }
+ else if (active_tab_name === "#table") {
+ dataTableLoad();
+ }
+
+ $("#close_modal_popup").trigger("click");
+ }
+ }
+ });
+ });
+}
+
+function delete_req_state_btn_click() {
+ $("#delete_req_state").off().click(function() {
+ let state_name = $("#popup_view_state_name").val().trim();
+
+ let isDelete = confirm(state_name + " 상태를 삭제하시겠습니까?");
+ if (!isDelete) {
+ return;
+ }
+
+
+ let data = {
+ c_id : $("#popup_view_state_c_id").val(),
+ };
+
+ $.ajax({
+ url: "/auth-user/api/arms/reqState/removeNode.do",
+ type: "DELETE",
+ data: data,
+ statusCode: {
+ 200: function () {
+ jSuccess('"' + state_name + '"' + " 상태가 삭제되었습니다.");
+ let active_tab_name = getActiveTab();
+ if (active_tab_name === "#board") {
+ setKanban();
+ }
+ else if (active_tab_name === "#table") {
+ dataTableLoad();
+ }
+
+ $("#close_modal_popup").trigger("click");
+ }
+ }
+ });
+ });
+}
+
+/*
function state_category_tab_group_click_event() {
$('ul[data-group="state_category_tab_group"] a[data-toggle="tab"]').on("shown.bs.tab", function(e) {
var target = $(e.target).attr("href"); // activated tab
@@ -328,8 +1076,8 @@
});
}).mousemove(function(e) {
// 마우스 위치에 따라 툴팁 위치 조정
- /*$('.req_item_tooltip')
- .css({top: e.pageY + 20 + 'px', left: e.pageX - 20 + 'px'});*/
+ // $('.req_item_tooltip')
+ // .css({top: e.pageY + 20 + 'px', left: e.pageX - 20 + 'px'});
});
}
@@ -543,190 +1291,6 @@
console.log(json);
}
-///////////////////////////////////
-// 팝업 띄울 때, UI 일부 수정되도록
-///////////////////////////////////
-function popup_modal(popup_type, state_id) {
- $('#my_modal1').modal('show');
-
- $("#popup_view_state_category_div label").removeClass("active");
- $("input[name='popup_view_state_category_options']:checked").prop("checked", false);
- $("#popup_view_state_name").val("");
- CKEDITOR.instances.popup_view_state_description_editor.setData("상태 관련 설명 등을 기록합니다.");
-
- $("#delete_req_state").addClass("hidden");
- $("#update_req_state").addClass("hidden");
- $("#save_req_state").addClass("hidden");
-
- if (popup_type === "save_popup") {
- $("#my_modal1_title").text("ARMS 상태 등록 팝업");
- $("#my_modal1_description").text("A-RMS 요구사항의 상태를 등록합니다.");
-
- // 모달 등록, 수정별 버튼 초기화
- $("#save_req_state").removeClass("hidden");
- }
- else if (popup_type === "update_popup") {
- $("#my_modal1_title").text("ARMS 상태 수정 팝업");
- $("#my_modal1_description").text("A-RMS 요구사항의 상태를 수정합니다.");
-
- $("#update_req_state").removeClass("hidden");
- $("#delete_req_state").removeClass("hidden");
-
- $.ajax({
- url: "/auth-user/api/arms/reqState/getNode.do?c_id=" + state_id,
- type: "get",
- statusCode: {
- 200: function (data) {
- console.log(data);
-
- $("#popup_view_state_c_id").val(data.c_id);
- $("#popup_view_state_name").val(data.c_title);
- CKEDITOR.instances.popup_view_state_description_editor.setData(data.c_contents);
- let state_category_value = data.c_etc;
- update_radio_buttons("#popup_view_state_category_div", state_category_value);
- // jSuccess('"' + reqTitle + '"' + " 상태 카테고리가 변경되었습니다.");
- }
- }
- });
- }
-}
-
-function update_radio_buttons(container_selector, value) {
- $(container_selector + " label").removeClass("active");
- $(container_selector + " input[type='radio']:checked").prop("checked", false);
-
- let radio_buttons = $(container_selector + " input[type='radio']");
- radio_buttons.each(function () {
- if (value && $(this).val() === value) {
- $(this).parent().addClass("active");
- $(this).prop("checked", true);
- }
- });
-}
-
-function save_req_state_btn_click() {
- $("#save_req_state").off().click(function() {
- let state_name = $("#popup_view_state_name").val().trim();
- if (!state_name) {
- alert("상태의 이름이 입력되지 않았습니다.");
- return;
- }
- let state_category_value = $("#popup_view_state_category_div input[name='popup_view_state_category_options']:checked").val();
- if (!state_category_value) {
- alert("상태 카테고리가 선택되지 않았습니다.");
- return;
- }
- let state_description = CKEDITOR.instances["popup_view_state_description_editor"].getData();
-
- let data = {
- ref : 2,
- c_type : "default",
- c_etc : state_category_value,
- c_title : state_name,
- c_contents : state_description
- };
-
- $.ajax({
- url: "/auth-user/api/arms/reqState/addNode.do",
- type: "POST",
- data: data,
- statusCode: {
- 200: function () {
- jSuccess('"' + state_name + '"' + " 상태가 생성되었습니다.");
- let active_tab_name = getActiveTab();
- if (active_tab_name === "#board") {
- setKanban();
- }
- else if (active_tab_name === "#table") {
- dataTableLoad();
- }
-
- $("#close_modal_popup").trigger("click");
- }
- }
- });
- });
-}
-
-function update_req_state_btn_click() {
- $("#update_req_state").off().click(function() {
- let state_name = $("#popup_view_state_name").val().trim();
- if (!state_name) {
- alert("상태의 이름이 입력되지 않았습니다.");
- return;
- }
- let state_category_value = $("#popup_view_state_category_div input[name='popup_view_state_category_options']:checked").val();
- if (!state_category_value) {
- alert("상태 카테고리가 선택되지 않았습니다.");
- return;
- }
- let state_description = CKEDITOR.instances["popup_view_state_description_editor"].getData();
-
- let data = {
- c_id : $("#popup_view_state_c_id").val(),
- c_etc : state_category_value,
- c_title : state_name,
- c_contents : state_description
- };
-
- $.ajax({
- url: "/auth-user/api/arms/reqState/updateNode.do",
- type: "PUT",
- data: data,
- statusCode: {
- 200: function () {
- jSuccess('"' + state_name + '"' + " 상태가 수정되었습니다.");
- let active_tab_name = getActiveTab();
- if (active_tab_name === "#board") {
- setKanban();
- }
- else if (active_tab_name === "#table") {
- dataTableLoad();
- }
-
- $("#close_modal_popup").trigger("click");
- }
- }
- });
- });
-}
-
-function delete_req_state_btn_click() {
- $("#delete_req_state").off().click(function() {
- let state_name = $("#popup_view_state_name").val().trim();
-
- let isDelete = confirm(state_name + " 상태를 삭제하시겠습니까?");
- if (!isDelete) {
- return;
- }
-
-
- let data = {
- c_id : $("#popup_view_state_c_id").val(),
- };
-
- $.ajax({
- url: "/auth-user/api/arms/reqState/removeNode.do",
- type: "DELETE",
- data: data,
- statusCode: {
- 200: function () {
- jSuccess('"' + state_name + '"' + " 상태가 삭제되었습니다.");
- let active_tab_name = getActiveTab();
- if (active_tab_name === "#board") {
- setKanban();
- }
- else if (active_tab_name === "#table") {
- dataTableLoad();
- }
-
- $("#close_modal_popup").trigger("click");
- }
- }
- });
- });
-}
-
function getActiveTab() {
var activeTab = $('ul[data-group="state_category_tab_group"] li.active a[data-toggle="tab"]')[0].hash;
return activeTab;
@@ -911,9 +1475,6 @@
}
}
});
- //--- end
- //--- draggable operators
- //-----------------------------------------
}
@@ -934,13 +1495,10 @@
var cx = $flowchart.width() / 2;
var cy = $flowchart.height() / 2;
- // Panzoom initialization...
$flowchart.panzoom();
- // Centering panzoom
$flowchart.panzoom('pan', -cx + $container.width() / 2, -cy + $container.height() / 2);
- // Panzoom zoom handling...
var possibleZooms = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.5, 3];
var currentZoom = 2.5;
$flowchart.panzoom('zoom', possibleZooms[currentZoom], {
@@ -964,7 +1522,6 @@
$lastEventContainer.effect( "highlight", {color: '#3366ff'}, 500);
}
- // Apply the plugin on a standard, empty div...
$flowchart.flowchart({
defaultOperatorClass: 'flowchart-operator',
onOperatorSelect: function(operatorId) {
@@ -1019,513 +1576,189 @@
}
-///////////////////////
-// ALM 서버 셀렉트 박스
-//////////////////////
-function make_alm_server_select_box() {
- //제품 서비스 셀렉트 박스 이니시에이터
- $(".chzn-select").each(function() {
- $(this).select2($(this).data());
- });
+// mapping_id를 기준으로 노드의 키를 찾는 함수
+function find_category_mapping_id(node_data_array, mappingId) {
+ const node = node_data_array.find(node => node.type === "arms-category" && node.c_id === mappingId);
+ return node ? node.key : null;
+}
- //ALM 서버 셀렉트 박스 데이터 바인딩
- $.ajax({
- url: "/auth-user/api/arms/jiraServerPure/getNodesWithoutRoot.do",
- type: "GET",
- contentType: "application/json;charset=UTF-8",
- dataType: "json",
- progress: true,
- statusCode: {
- 200: function(data) {
- console.log(data.result);
- //////////////////////////////////////////////////////////
- for (var k in data.result) {
- var obj = data.result[k];
- alm_server_list[obj.c_id] = obj;
- var newOption = new Option(obj.c_title, obj.c_id, false, false);
- $("#selected_alm_server").append(newOption).trigger("change");
- }
- //////////////////////////////////////////////////////////
- jSuccess("ALM 서버 조회가 완료 되었습니다.");
- }
- },
- error: function (e) {
- jError("ALM 서버 조회 중 에러가 발생했습니다. :: " + e);
- }
- });
-
- $("#selected_alm_server").on("select2:open", function() {
- //슬림스크롤
- makeSlimScroll(".select2-results__options");
- });
-
- // --- select2 ( 제품(서비스) 검색 및 선택 ) 이벤트 --- //
- $("#selected_alm_server").on("select2:select", function(e) {
- $("#cloud_project_tree").hide();
- $("#select-project-div").hide();
- $("#select-project").text("선택되지 않음");
- selected_alm_server_id = $("#selected_alm_server").val();
- selected_alm_server_name = $("#selected_alm_server").select2("data")[0].text;
- $("#select-alm-server").text(selected_alm_server_name);
-
- let alm_server_data = alm_server_list[selected_alm_server_id];
- let alm_server_type = alm_server_data.c_jira_server_type;
- /*var $flowchart = $('#state_flow_chart');
- $flowchart.flowchart('setData', {});*/
-
- if (alm_server_type === "클라우드") {
- $("#cloud_project_tree").show();
- $("#select-project-div").show();
- build_alm_server_jstree(selected_alm_server_id);
- let data = {};
- gojs.load(data);
- }
- else {
- mapping_data_load(selected_alm_server_id, alm_server_type);
-
- //ALM 서버 이슈상태 조회
- /*$.ajax({
- url: "/auth-user/api/arms/jiraServer/getJiraIssueStatus.do?c_id=" + selected_alm_server_id ,
- type: "GET",
- contentType: "application/json;charset=UTF-8",
- dataType: "json",
- progress: true,
- statusCode: {
- 200: function(result) {
- console.log(result.response);
- let alm_status_list = result.response;
-
- var data = {
- operators: {},
- links: {}
- };
-
- console.log(alm_status_list);
- console.log(arms_state_list);
- let inputData = arms_state_list;
- let outputData = alm_status_list;
-
- let width = $flowchart.width();
-
- var topPosition = 20;
- var leftPositionInput = 20;
- var leftPositionOutput = width-200;
-
- console.log(width);
- inputData.forEach(function(input, index) {
- var operatorId = 'operator' + (index + 1);
- data.operators[operatorId] = {
- top: topPosition + index * 80,
- left: leftPositionInput,
- properties: {
- title: "A-RMS - " +input.c_title,
- class: 'input-operator',
- inputs: {},
- outputs: {
- output_1: {
- label: input.c_title,
- }
- }
- }
- };
- });
- outputData.forEach(function(output, index) {
- var operatorId = 'operator' + (inputData.length + index + 1);
- data.operators[operatorId] = {
- top: topPosition + index * 80,
- left: leftPositionOutput,
- properties: {
- title: "ALM - " + output.c_issue_status_name,
- class: 'output-operator',
- inputs: {
- input_1: {
- label: output.c_issue_status_name,
- }
- },
- outputs: {}
- }
- };
- });
-
- console.log(data);
- updateFlowchartData(data);
- // mapping_flow_chart(alm_status_list, arms_state_list);
- //////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////
- jSuccess("ALM 서버 상태 조회가 완료 되었습니다.");
- }
- },
- error: function (e) {
- jError("ALM 서버 상태 조회 중 에러가 발생했습니다. :: " + e);
- }
- });*/
- }
- });
-} // end make_alm_server_select_box()
-
-function mapping_data_load(alm_server_id, alm_server_type, project_id) {
- if (!alm_server_type) {
- alm_server_id = alm_server_id || selected_alm_server_id;
-
- if (!alm_server_id) {
- alert("선택된 서버가 없습니다.");
- return;
- }
-
- let alm_server_data = alm_server_list[alm_server_id];
- alm_server_type = alm_server_data.c_jira_server_type;
- }
-
- if (alm_server_type === "클라우드") {
- if (!project_id) {
- alert("선택된 프로젝트가 없습니다.");
- return;
- }
- else {
- alert("클라우드 지라의 경우 이슈유형 등 설계가 더 필요합니다.");
- }
- /* if (!project_id) {
- alert("선택된 프로젝트가 없습니다.");
- return;
- }
-
- Promise.all([get_arms_state_list(), get_project_status_list(project_id)])
- .then(([arms_state_list, alm_status_list]) => {
- // 두 API 호출 결과를 함께 사용합니다.
- console.log('ARMS State List:', arms_state_list);
- console.log('ALM Status List:', alm_status_list);
-
- if (alm_status_list.length === 0) {
- alert("선택된 이슈유형이 없습니다. 서버 관리에서 프로젝트의 이슈유형을 선택해주세요.");
- let data = {};
- gojs.load(data);
- return;
- }
-
- let data = create_gojs_data(req_state_category_list, arms_state_list, alm_status_list);
- // 여기에 두 결과를 함께 사용하는 로직을 추가합니다.
- gojs.load(data);
- })
- .catch((error) => {
- console.error('Error fetching data:', error);
- });*/
- }
- else {
-
- Promise.all([get_arms_state_list(), get_alm_status_list(alm_server_id)])
- .then(([arms_state_list, alm_status_list]) => {
- // 두 API 호출 결과를 함께 사용합니다.
- console.log('ARMS State List:', arms_state_list);
- console.log('ALM Status List:', alm_status_list);
-
- let data = create_gojs_data(req_state_category_list, arms_state_list, alm_status_list);
- // 여기에 두 결과를 함께 사용하는 로직을 추가합니다.
- gojs.load(data);
- })
- .catch((error) => {
- console.error('Error fetching data:', error);
- });
- }
+function find_arms_state_mapping_id(node_data_array, mappingId) {
+ const node = node_data_array.find(node => node.type === "arms-state" && node.c_id === mappingId);
+ return node ? node.key : null;
}
+function generate_node_and_link_data(req_state_category_list, arms_state_list, alm_status_list) {
+ const node_data_array = [];
+ const link_data_array = [];
-function create_gojs_data(req_state_category_list, arms_state_list, alm_status_list) {
- const node_data_array = generate_node_data(req_state_category_list, arms_state_list, alm_status_list); // 노드 데이터 생성
- console.log(node_data_array);
- const link_data_araay = generate_link_data(node_data_array); // 링크 데이터 생성
- console.log(link_data_araay);
+ const categoryX = 0;
+ const armsX = 300;
+ const almX = 600;
- const diagram_data = {
- class: 'GraphLinksModel',
- nodeDataArray: node_data_array,
- linkDataArray: link_data_araay
- };
+ const ySpacing = 40;
- return diagram_data;
-}
+ // Keep track of Y positions for each depth
+ let categoryY = 0;
+ let armsY = 0;
+ let almY = 0;
-function generate_node_data(req_state_category_list, arms_state_list, alm_status_list) {
- const node_data_array = [];
-
// 카테고리 열림, 진행중, 해결됨, 닫힘 노드 생성
- Object.entries(req_state_category_list).forEach(([key, value], index) => {
+ Object.entries(req_state_category_list).forEach(([key, value]) => {
+ const categoryNodeKey = `카테고리 ${value}`;
node_data_array.push({
- key: `카테고리 ${value}`,
+ key: categoryNodeKey,
text: `카테고리 ${value}`,
type: 'arms-category',
c_id: key,
category: 'Loading',
- loc: `0 ${40 + index * 40}`
+ loc: `${categoryX} ${categoryY}`
});
+ categoryY += ySpacing;
});
- // A-RMS OPEN, PROGRESS, RESOLVED, CLOSED 노드 생성 (NoAdd 카테고리)
- arms_state_list.forEach((state, index) => {
+ // A-RMS OPEN, PROGRESS, RESOLVED, CLOSED 노드 생성
+ arms_state_list.forEach((state) => {
+ const armsNodeKey = `A-RMS ${state.c_title}`;
node_data_array.push({
- key: `A-RMS ${state.c_title}`,
+ key: armsNodeKey,
text: `A-RMS ${state.c_title}`,
type: 'arms-state',
c_id: state.c_id,
- mapping_id: status.c_req_state_category_mapping_link,
+ mapping_id: state.c_etc,
category: 'NoAdd',
- loc: `183 ${40 + index * 40}`
+ loc: `${armsX} ${armsY}`
});
+ armsY += ySpacing;
});
- // ALM 열림, 진행중, 해결됨, 닫힘 노드 생성 (End 카테고리)
- alm_status_list.forEach((status, index) => {
+ // ALM 열림, 진행중, 해결됨, 닫힘 노드 생성
+ alm_status_list.forEach((status) => {
+ const almNodeKey = `ALM ${status.c_issue_status_name}`;
node_data_array.push({
- key: `ALM ${status.c_issue_status_name}`,
+ key: almNodeKey,
text: `ALM ${status.c_issue_status_name}`,
type: 'alm-status',
c_id: status.c_id,
mapping_id: status.c_req_state_mapping_link,
category: 'End',
- loc: `366 ${40 + index * 40}`
+ loc: `${almX} ${almY}`
});
+ almY += ySpacing;
});
- // Recycle 노드 추가
- // nodeDataArray.push({
- // key: -2,
- // category: 'Recycle',
- // loc: '600 300'
- // });
-
- return node_data_array;
-}
-
-function generate_link_data(node_data_array) {
- const linkDataArray = [];
-
// 링크 데이터 생성
node_data_array.forEach((node) => {
- switch (node.type) {
- case 'arms-state':
- switch (node.text) {
- case '카테고리 열림':
- linkDataArray.push({ from: node.key, to: findNodeKeyByMappingId(node_data_array, 'A-RMS OPEN') });
- break;
- case '카테고리 진행중':
- linkDataArray.push({ from: node.key, to: findNodeKeyByMappingId(node_data_array, 'A-RMS PROGRESS') });
- break;
- case '카테고리 해결됨':
- linkDataArray.push({ from: node.key, to: findNodeKeyByMappingId(node_data_array, 'A-RMS RESOLVED') });
- break;
- case '카테고리 닫힘':
- linkDataArray.push({ from: node.key, to: findNodeKeyByMappingId(node_data_array, 'A-RMS CLOSED') });
- break;
- }
- break;
- case 'alm-status':
- switch (node.text) {
- case 'A-RMS OPEN':
- linkDataArray.push({ from: node.key, to: findNodeKeyByMappingId(node_data_array, 'ALM 열림') });
- break;
- case 'A-RMS PROGRESS':
- linkDataArray.push({ from: node.key, to: findNodeKeyByMappingId(node_data_array, 'ALM 진행중') });
- break;
- case 'A-RMS RESOLVED':
- linkDataArray.push({ from: node.key, to: findNodeKeyByMappingId(node_data_array, 'ALM 해결됨') });
- break;
- case 'A-RMS CLOSED':
- linkDataArray.push({ from: node.key, to: findNodeKeyByMappingId(node_data_array, 'ALM 닫힘') });
- break;
- }
- break;
+ if (node.type === 'arms-state' && node.mapping_id) {
+ const fromNode = node_data_array.find(n => n.c_id === node.mapping_id);
+ if (fromNode) {
+ link_data_array.push({ from: fromNode.key, to: node.key });
+ }
+ } else if (node.type === 'alm-status' && node.mapping_id) {
+ const fromNode = node_data_array.find(n => n.c_id === node.mapping_id);
+ if (fromNode) {
+ link_data_array.push({ from: fromNode.key, to: node.key });
+ }
}
});
- return linkDataArray;
+ return {
+ class: 'GraphLinksModel',
+ nodeDataArray: node_data_array,
+ linkDataArray: link_data_array
+ };
}
-// mapping_id를 기준으로 노드의 키를 찾는 함수
-function findNodeKeyByMappingId(node_data_array, mappingId) {
- const node = node_data_array.find(node => node.mapping_id === mappingId);
- return node ? node.key : null;
-}
+function generate_node_and_link_data(req_state_category_list, arms_state_list, alm_status_list) {
+ const node_data_array = [];
+ const link_data_array = [];
+ const armsNodeMap = new Map();
-function get_arms_state_list() {
- return new Promise((resolve, reject) => {
- $.ajax({
- url: "/auth-user/api/arms/reqState/getNodesWithoutRoot.do",
- type: "GET",
- dataType: "json",
- progress: true,
- statusCode: {
- 200: function (data) {
- resolve(data.result);
- }
- },
- error: function (e) {
- jError("요구사항 조회 중 에러가 발생했습니다.");
- reject(e);
- }
+ // 카테고리 열림, 진행중, 해결됨, 닫힘 노드 생성
+ Object.entries(req_state_category_list).forEach(([key, value], index) => {
+ const categoryNodeKey = `카테고리 ${value}`;
+ node_data_array.push({
+ key: categoryNodeKey,
+ text: `카테고리 ${value}`,
+ type: 'arms-category',
+ c_id: key,
+ category: 'Loading',
+ loc: `0 ${40 + index * 40}`
});
- });
-}
-function get_alm_status_list(selected_alm_server_id) {
- return new Promise((resolve, reject) => {
- $.ajax({
- url: "/auth-user/api/arms/jiraServer/getJiraIssueStatus.do?c_id=" + selected_alm_server_id,
- type: "GET",
- contentType: "application/json;charset=UTF-8",
- dataType: "json",
- progress: true,
- statusCode: {
- 200: function(result) {
- console.log(result);
- resolve(result.response);
- jSuccess("ALM 서버 상태 조회가 완료 되었습니다.");
- }
- },
- error: function (e) {
- jError("ALM 서버 상태 조회 중 에러가 발생했습니다. :: " + e);
- reject(e);
- }
- });
- });
-}
+ // A-RMS 노드 생성 및 연결
+ arms_state_list.forEach((state, armsIndex) => {
+ if (state.c_etc === key) {
+ const armsNodeKey = `A-RMS ${state.c_title}`;
+ armsNodeMap.set(state.c_id, armsNodeKey);
+ node_data_array.push({
+ key: armsNodeKey,
+ text: `A-RMS ${state.c_title}`,
+ type: 'arms-state',
+ c_id: state.c_id,
+ mapping_id: state.c_etc,
+ category: 'NoAdd',
+ loc: `300 ${40 + armsIndex * 40}`
+ });
-function get_project_status_list(project_id) {
- return new Promise((resolve, reject) => {
- $.ajax({
- url: "/auth-user/api/arms/jiraProject/getProjectIssueStatus.do?c_id=" + project_id,
- type: "GET",
- contentType: "application/json;charset=UTF-8",
- dataType: "json",
- progress: true,
- statusCode: {
- 200: function(result) {
- console.log(result);
- resolve(result.response);
- jSuccess("ALM 프로젝트 상태 조회가 완료 되었습니다.");
- }
- },
- error: function (e) {
- jError("ALM 프로젝트 상태 조회 중 에러가 발생했습니다. :: " + e);
- reject(e);
+ // 링크 생성
+ link_data_array.push({ from: categoryNodeKey, to: armsNodeKey });
}
});
});
-}
-function build_alm_server_jstree(selected_alm_server_id) {
- var jQueryElementID = "#alm_server_tree";
- var serviceNameForURL = "/auth-user/api/arms/jiraServerProjectPure/getJiraProjectPure.do?c_id=" + selected_alm_server_id;
+ // A-RMS 노드 생성 및 연결
+ arms_state_list.forEach((state, armsIndex) => {
+ const armsNodeKey = `A-RMS ${state.c_title}`;
+ if (!armsNodeMap.has(state.c_id)) {
+ node_data_array.push({
+ key: armsNodeKey,
+ text: `A-RMS ${state.c_title}`,
+ type: 'arms-state',
+ c_id: state.c_id,
+ mapping_id: state.c_etc,
+ category: 'NoAdd',
+ loc: `300 ${40 + armsIndex * 40}`
+ });
+ }
- jstree_build(jQueryElementID, serviceNameForURL);
-}
+ // ALM 노드 생성 및 연결
+ alm_status_list.forEach((status, almIndex) => {
+ if (status.c_req_state_mapping_link === state.c_id) {
+ const almNodeKey = `ALM ${status.c_issue_status_name}`;
+ node_data_array.push({
+ key: almNodeKey,
+ text: `ALM ${status.c_issue_status_name}`,
+ type: 'alm-status',
+ c_id: status.c_id,
+ mapping_id: status.c_req_state_mapping_link,
+ category: 'End',
+ loc: `600 ${40 + almIndex * 40}`
+ });
-////////////////////////////////////////////////////////////////////////////////////////
-// -- jstree build 설정 -- //
-////////////////////////////////////////////////////////////////////////////////////////
-function jstree_build(jQueryElementID, serviceNameForURL) {
- console.log("mapping :: jstree_build : ( jQueryElementID ) → " + jQueryElementID);
- console.log("mapping :: jstree_build : ( serviceNameForURL ) → " + serviceNameForURL);
-
- console.log("mapping :: jstree_build : ( href ) → " + $(location).attr("href"));
- console.log("mapping :: jstree_build : ( protocol ) → " + $(location).attr("protocol"));
- console.log("mapping :: jstree_build : ( host ) → " + $(location).attr("host"));
- console.log("mapping :: jstree_build : ( pathname ) → " + $(location).attr("pathname"));
- console.log("mapping :: jstree_build : ( search ) → " + $(location).attr("search"));
- console.log("mapping :: jstree_build : ( hostname ) → " + $(location).attr("hostname"));
- console.log("mapping :: jstree_build : ( port ) → " + $(location).attr("port"));
-
- $(jQueryElementID)
- .jstree({
- plugins: ["themes", "json_data", "ui", "crrm", "dnd", "search", "types"],
- themes: { theme: ["lightblue4"] },
- json_data: {
- ajax: {
- url: serviceNameForURL,
- cache: false,
- data: function (n) {
- // the result is fed to the AJAX request `data` option
- console.log("[ common :: jsTreeBuild ] :: json data load = " + JSON.stringify(n));
- return {
- c_id: n.attr ? n.attr("id").replace("node_", "").replace("copy_", "") : 1
- };
- },
- success: function (n) {
- jSuccess("프로젝트 조회 완료");
- $(jQueryElementID).jstree("search", $("#text").val());
- }
- }
- },
- search: {
- show_only_matches: true,
- search_callback: function (str, node) {
- return node.data().search(str);
- }
- },
- types: {
- max_depth: -2,
- max_children: -2,
- valid_children: ["drive"],
- types: {
- default: {
- valid_children: "none",
- icon: {
- image: "../reference/jquery-plugins/jstree-v.pre1.0/themes/attibutes.png"
- }
- }
- }
- },
- })
- .bind("select_node.jstree", function (event, data) {
- if ($.isFunction(jstree_click)) {
- console.log("[ jsTreeBuild :: select_node ] :: data.rslt.obj.data('id')" + data.rslt.obj.attr("id"));
- console.log("[ jsTreeBuild :: select_node ] :: data.rslt.obj.data('rel')" + data.rslt.obj.attr("rel"));
- console.log("[ jsTreeBuild :: select_node ] :: data.rslt.obj.data('class')" + data.rslt.obj.attr("class"));
- console.log("[ jsTreeBuild :: select_node ] :: data.rslt.obj.children('a')" + data.rslt.obj.children("a"));
- console.log("[ jsTreeBuild :: select_node ] :: data.rslt.obj.children('ul')" + data.rslt.obj.children("ul"));
- jstree_click(data.rslt.obj);
+ // 링크 생성
+ link_data_array.push({ from: armsNodeKey, to: almNodeKey });
}
- })
- .bind("loaded.jstree", function (event, data) {
- $(jQueryElementID).slimscroll({
- height: "200px"
- });
});
+ });
- $("#mmenu input, #mmenu button").click(function () {
- switch (this.id) {
- case "add_default":
- case "add_folder":
- $(jQueryElementID).jstree("create", null, "last", {
- attr: {
- rel: this.id.toString().replace("add_", "")
- }
- });
- break;
- case "search":
- $(jQueryElementID).jstree("search", document.getElementById("text").value);
- break;
- case "text":
- break;
- default:
- $(jQueryElementID).jstree(this.id);
- break;
+ // ALM 노드 생성
+ alm_status_list.forEach((status, almIndex) => {
+ const almNodeKey = `ALM ${status.c_issue_status_name}`;
+ if (!node_data_array.some(node => node.key === almNodeKey)) {
+ node_data_array.push({
+ key: almNodeKey,
+ text: `ALM ${status.c_issue_status_name}`,
+ type: 'alm-status',
+ c_id: status.c_id,
+ mapping_id: status.c_req_state_mapping_link,
+ category: 'End',
+ loc: `600 ${40 + almIndex * 40}`
+ });
}
});
- $("#mmenu .form-search").submit(function (event) {
- event.preventDefault();
-
- $(jQueryElementID).jstree("search", document.getElementById("text").value);
- });
-}
-
-function jstree_click(data) {
- let c_id = data.attr("id").replace("node_", "").replace("copy_", "");
- let c_title = $(".jstree-clicked").text().trim();
- $("#select-project").text(c_title);
-
- mapping_data_load(null, null, c_id);
-}
-
-$("#text").on("input", function () {
- var searchString = $(this).val();
- $("#alm_server_tree").jstree("search", searchString);
-});
\ No newline at end of file
+ return {
+ class: 'GraphLinksModel',
+ nodeDataArray: node_data_array,
+ linkDataArray: link_data_array
+ };
+}*/
\ No newline at end of file
Index: arms/js/mapping/gojs_setup.js
===================================================================
diff -u -raf9ae7c5d04bb385f81cf4bf398a0ef8666902e6 -rfebc8a28bfbf8457830dd594d1cd38abf9641854
--- arms/js/mapping/gojs_setup.js (.../gojs_setup.js) (revision af9ae7c5d04bb385f81cf4bf398a0ef8666902e6)
+++ arms/js/mapping/gojs_setup.js (.../gojs_setup.js) (revision febc8a28bfbf8457830dd594d1cd38abf9641854)
@@ -61,20 +61,14 @@
// output port
$(go.Panel,
'Auto',
- { alignment: go.Spot.Right, portId: 'from', fromLinkable: true, cursor: 'pointer', click: addNodeAndLink },
- $(go.Shape, 'Circle', { width: 22, height: 22, fill: 'white', stroke: 'dodgerblue', strokeWidth: 3 }),
- $(go.Shape, 'PlusLine', { width: 11, height: 11, fill: null, stroke: 'dodgerblue', strokeWidth: 3 })
- ),
-/* $(go.Panel,
- 'Auto',
{ alignment: go.Spot.Right, portId: 'from', fromLinkable: true, cursor: 'pointer', click: (e, obj) => {
if (obj.part.data.category !== 'NoAdd') {
addNodeAndLink(e, obj);
}
}},
$(go.Shape, 'Diamond', { width: 11, height: 11, fill: 'white', stroke: 'dodgerblue', strokeWidth: 3 }),
$(go.Shape, 'PlusLine', new go.Binding('visible', '', (data) => data.category !== 'NoAdd').ofObject(), { width: 11, height: 11, fill: null, stroke: 'dodgerblue', strokeWidth: 3 })
- ),*/
+ ),
// input port
$(go.Panel,
'Auto',
@@ -448,8 +442,6 @@
}
// end DragLinkingTool
-
-
return {
init, save, load, layout
}